Hallo,
habe eine 5x7 DOT Matrix TC07 von Kingbright verwendet, nutze den
PIC18F452, habe die 5 Spalten über Vorwiderstände an den Ausgängen des
74HC595 angeschlossen, die 7 Zeilen sind direkt an Port D angeschlossen,
siehe include.
Die drei Steuerleitungen SHCP, STCP und DS habe ich an dem Port C
angeschlossen.
Soweit so gut, das angehängte Programm müßte normalerweise einen DOT in
Zeile 1 von rechts nach links wandern lassen, jedoch ist die Zeile 1
dauerhaft an. Habe vermutet, es handelt sich hierbei um ein Zeitproblem,
habe jedoch schon den Datentyp der Zählvariable auf double umgeändert
und es ändert sich rein garnichts.
Zum Programmablauf
1) Ich lege die Zeile 1 mit dem zugehörigen Portpin auf 5v+ Potential
2) Ich lasse eine for Schleife von 7 an rückwärts zählen
3) Ich hole mir das letzte Element aus dem Feld per zählvariable 7
4) rufe die Fkt Schiebregister auf, Übergabe letztes Feldelement
5) Schiebe den Wert seriell in den HC595
6) Schalte den Wert auf die Ausgänge des HC595
7) Warteroutine
8) Schritt 1 usw usw
Die seriell to parallel Wandlung sollte richtig sein, ich habe keine
idee, woran es liegen könnte, dass die Zeile 1 dauerhaft leuchtet
Ich hoffe, das jemand meinen bzw meine Fehler im Quellcode oder evtl in
der Hardwarebeschreibung findet. Ich habe mich an dem Beispiel
http://home.wanadoo.nl/electro1/avr/dotmatrix.htm
orientiert.
habe die for Schleife umgeändert in for (i=7;i>=0;i--) danke dir, muß
natürlich größer gleich Null sein.....
das hat allerdings zur Folge, dass nun die Zeile 1 dauerhaft aus ist
habe das abgeänderte Prog angehängt .... es scheint ein größerer Fehler
zu sein
Ich habe gerade gesehen: Du zählst deine globale Variable 'i' in Deiner
Main (while(1)) UND in der Unterroutine 'Schieberegister'... Das
solltest Du mal überdenken ;-)
hab es abgeändert mit der Globalvariable j, hat aber leider nichts
geändert ... einzelne Zeichen darzustellen ist kein Problem. Das
74HC595 funktioniert einwandfrei, sobald es ums Verschieben des
Zeichens, sprich um die Änderung der Spaltenadresse geht, klappt nichts
mehr. Momentaner Stand Zeile 1 dauerhaft aus.
ziemliche Ratlosigkeit
Hi,
ich hab zwar nicht die Riesenahnung aber mal gelesen, dass solche
Zähldelayschleifen rausoptimiert werden, wenn in ihnen nichts gemacht
wird.
Mit "volatile" war da auch was ;-))
Könnte es daran liegen?
AxelR.
Nachtrag:
muss mul_1 und mul_2 unbedingt vom Wertetyp "double" sein?
was heißt rausoptimiert?
double hab ich nur für testzwecke gewählt, falls integer nicht reicht
wie gesagt, es geht einfach nur darum, einen punkt in der oberen zeile
wandern zu lassen, deshalb die warteschleife nach einer Ausgabe
irgendwo is da noch der hund begraben
Fehler behoben, jetzt wandert der DOT von rechts nach links, allerdings
wird der DOT in Spalte 5 zweimal ausgeführt.... aber immerhin schon mal
etwas
Lösung des Problems war: Zählvariable mul_1 und mul_2 auf Datentyp int
abgeändert
habe den funktionstüchtigen Quelltext angehangen
bis dann und danke für die Fehlerbehebungen
Schmolli