Guten Tag,
heute macht meine Schaltung, was ich nicht verstehe. Genau:
AT Mega 324 PA. Über SPI sollten in MAX7219 jeweils 2 Bytes übertragen
werden. Wie auch immer: ~CS, Addr, Data, CS.
Wenn ich schrittweise mit JTAG in AVR Studio 4.19 gehe, wird alles OK.
Wenn ich versuche, Abschnitt schnell durch zu machen, bekommt MAX7219
die Daten nicht.
Ich habe versucht, zwischen ~CS, Addr, Data und CS Verzögerungen
eizubauen - bringt nichts.
Wenn ich in Assembler Schritte gehe, dann funktioniert alles nur, wenn
irgendwo (egal wo genau!) zwischen ~CS und CS ein Halt mit JTAG wird.
Auf einem Stück bekommt MAX7219 nichts.
In der Schaltung stehen zwei MAX7219, mit beiden ist das Gleiche.
Es gibt keine Kurzschließungen. Abblockkondensatoren gint es mehr als
genug.
Relevante Teil der Schaltung ist auf dem Bild. Zwei freie Ventile von
HC132 werden benutzt, um SPI intern und extern sicher zu trennen (falls
SPI extern mal in Slave-Modus läuft).
Was passiert bei dem Austausch mit JTAG, was auf SPI oder ~CS-Leitung
wirken könnte? Weil Verhalten sich nur unterscheidet je nachdem
dazwischen Austausch mit JTAG ist oder nicht.
Auch Testprogrammabschnitt:
SPDR wird nicht gelesen. Dadurch wird SPIF ebenfalls nicht gelöscht
IMHO, der Code rennt durch den SPI Teil ohne Bremse durch.
Abhilfe: Jeweils ein Dummy read auf SPDR nach dem Warten aufs SPIF.
Das Problem habe ich gelöst: es half Oszilloskop.
MOSI ist mit Widerstand 47k an Vcc angeschlossen (um in dem hochohmigen
Zustand Stromverbrauch zu reduzieren).
Mit Programm-SPI ist es gelungen, normale Datenübertragung auf etwa 20
kHz zu schaffen. Oszilloskop zeigt langsame steigende SIgnalflanke. JTAG
zeigt DDR-bit = 1.
Also, defekte Mikrocontroller. P-Transistor sollte kaputt sein.