So, da melde ich mich wieder.
Das mit dem Bitshifting mache ich später, erstmal muss der Rest richtig gehen
Also ich habe nun nochmal die T0L- und T0H-Zeiten um je +-3 NOPs und auch mit +-2 und so, aber die blinken noch. Dann habe ich probiert zwischen den Bits Pausen zu machen, auch nix, nichtmal mit 6x NOP, was eigentlich lang genug sein müsste (411ns).
Wir haben heute auf Arbeit noch ein altes Oszi (C1-94, von '85 aus der UdSSR xD), aber leider bringt das kein Bild mehr.. Die Glühkathode glüht aber noch und die Power-On-LED (musst mit die erste LED gewesen sein....) leuchtet auch noch. Nun ist nur die Frage, ob die Beschleunigungsspannung (laut Internet bei dem bei dem Oszi 2 kV) oder die Ablenkung fehlt; aber das ist ein anderes Thema.
Und wie meinst du das mit dem "längeren aber kürzeren Reset-Puls"? Widerspricht sich das nicht ein wenig?
Zu deiner Vermutung: Es scheint einzig die Länge von T0H entscheidend sein. Das hier geht auch, nur flackert ein Pixel dann mal nach 2 Sekunden oder so.
void HighBit()
{
sbi(PORTD, pin);
__asm__("cli\n\t" "nop\n\t" "nop\n\t" "nop\n\t" "nop\n\t" "nop\n\t" "nop\n\t" "nop\n\t" "nop\n\t" "nop\n\t" "nop\n\t" "nop\n\t" "nop\n\t" "nop\n\t" "nop\n\t" "nop\n\t" "nop\n\t" "nop\n\t" "nop\n\t" "nop\n\t" "nop\n\t" "nop\n\t");
cbi(PORTD,pin);
__asm__("nop\n\t" "nop\n\t" "nop\n\t" "nop\n\t" "nop\n\t" "nop\n\t" "nop\n\t" "nop\n\t" "nop\n\t" "nop\n\t" "nop\n\t" "nop\n\t" "nop\n\t" "nop\n\t" "nop\n\t" "nop\n\t" "nop\n\t" "nop\n\t" "nop\n\t" "nop\n\t" "nop\n\t" "sei\n\t");
}
void LowBit()
{
sbi(PORTD, pin);
__asm__("cli\n\t" "nop\n\t" "nop\n\t" "nop\n\t" "nop\n\t" "nop\n\t"); ///// TßH - laenger darf das nicht sein, kann aber fehlen?!?!
cbi(PORTD, pin);
__asm__("nop\n\t" "nop\n\t" "nop\n\t" "nop\n\t" "nop\n\t" "nop\n\t" "nop\n\t" "nop\n\t" "nop\n\t" "nop\n\t" "nop\n\t" "nop\n\t" "nop\n\t" "nop\n\t" "nop\n\t" "nop\n\t" "nop\n\t" "nop\n\t" "nop\n\t" "nop\n\t" "nop\n\t" "nop\n\t" "sei\n\t");
}
Alles anzeigen
Selbst das geht, obwohl das High-Bit KOMPLETT falsche Timings besitzt, theoretisch:
void HighBit()
{
sbi(PORTD, pin);
__asm__("cli\n\t" "nop\n\t" "nop\n\t" "nop\n\t" "nop\n\t" "nop\n\t" "nop\n\t");
cbi(PORTD,pin);
__asm__("nop\n\t" "nop\n\t" "nop\n\t" "nop\n\t" "nop\n\t" "nop\n\t" "nop\n\t" "nop\n\t" "nop\n\t" "nop\n\t" "nop\n\t" "nop\n\t" "nop\n\t" "nop\n\t" "nop\n\t" "nop\n\t" "nop\n\t" "nop\n\t" "nop\n\t" "nop\n\t" "nop\n\t" "sei\n\t");
}
Ich verstehe die Welt nich mehr... vorher kam nix zu stande wegen falscher Zeiten und nun stelle ich fest, dass die eigentlich völlig anders als im Datenblatt sein können?!
Und die Farben werden auch ohne Reset-Puls übernehmen, muss ja, der ja bei seinem Auftreten die Bits eigentlich wieder aus dem Chip gelöscht werden sollten; eben restettet.
PS: Wie meinst du das eigentlich mit einem ganzen Port? Willst du 8 Streifen parallel nutzen oder wie? Der TM1804 erwartet ja eben serielle Daten, wie auch sonst durch eine Leitung?
PPS: Wenn es ganz schnell gehen soll: Bei mir gehts auch mit diesen Zeiten noch, bei kürzeren gehts dann aber nicht mehr:
void HighBit()
{
sbi(PORTD, pin);
__asm__("nop\n\t" "nop\n\t" "nop\n\t" "nop\n\t" "nop\n\t" "nop\n\t" "nop\n\t");
cbi(PORTD,pin);
}
void LowBit()
{
sbi(PORTD, pin);
cbi(PORTD, pin);
__asm__("nop\n\t" "nop\n\t" "nop\n\t");
}
Alles anzeigen