Sehr verehrte Mikrocontroller-Gemeinde,
ich stehe vor einem Problem/Rätsel und weiß nicht mehr weiter. Ich
hoffe, ich bekomme von euch eine Anregung oder Idee, die mich irgendwie
wieder in die Spur führt...
Folgende Situation:
Ich habe vor mir eine von einem Freund vor ca 8 Jahren konstruierte
LED-Matrix liegen, welche von einem IO-Warrior im multiplexbetrieb
kontrolliert wird. Angesteuert wird diese über Shiftregister. Bei den
Shiftregistern handelt es sich um den MIC5891 als den Eingangs treiber
und den MIC5821 als Ausgangs Treiber. Die Matrix wird mit einem externen
12V Netzteil gefüttert. Hat bisher in dieser Konfiguration wunderbar
funktioniert.(Der Schaltplan ist der IO-Warrior Application Note 1
entnommen, passt aber genau auf meine Konfiguration, ich habe ihn nur
minimal angepasst)
Nun wollte ich den IO-Warrior gegen einen Arduino tauschen (warum soll
hier bitte nicht gegenstand der Diskussion sein, gerne in einem anderen
Thread). Ich mach mich also mit meinem Elektrotechnik(halb)wissen an die
Aufgabe, nehme den IO-Warrior aus der Fassung und verdrahte probehalber
die jeweiligen PINs vom Arduino mit der Fassung und shifte 4Byte rüber.
Dann passierte Folgendes:
Die erste LED leuchtete. Schalte ich eine zweite dazu, weden die LEDs
dunkler. Bei einer dritten werden die noch mehr dunkel usw...
Wenn ich ein Muster anschalte und ein hohes delay wähle, leuchten die
LEDs gut sichtbar, auch im richtigen Muster, aber sie flackern
(logischer Weise). Verringere ich das delay, wird das flackern auch
geringer, aber das Leuchten der LEDs auch.
Auf den ersten Blick sieht das ja nach dem klassischen Fehler aus, den
Stom für die LED-Matrix falsch ausgelegt zu haben. ABER ich habe ja an
der Stromversorgung nichts geändert! Und mit dem IO-Warrior als
"Byte-rüber-shifter" funktioniert es bestens. Nur wenn der Arduino die
Bits schickt läuft es nicht....
Wo liegt mein Denkfehler??? Warum kann ich nicht einfach den IO-Warrior
durch den Arduino tauschen? Der Warrior schickt ja auch "nur" über eine
serielle Verbindung Einsen und Nullen an die Micrel Shiftregister. Kann
ein Arduino da überhaupt was anders machen? Ok, der IO-Warrior läuft mit
6MHz und der Arduino mit 16MHz. Aber die Bits scheinen ja richtig an zu
kommen, sonst würde das Muster ja nicht stimmen.
Ich verzweifle hier noch.... Ich hoffe Ihr könnt mir weiter helfen.
Anbei noch der fix gecodete Arduino-code zum Muster testen.