Ich versuche durch ein Programm an meinem Atmega16 einen M74HC595 anzusteuern. Die Verbindung besteht so: PD0=SCK PD1=RCK PD2=G PD3= SI R18 enthält das Byte, welches in das Schieberegister geschoben werden soll. Der Fehlerbericht geht so. OK: erst war alles Tristate. Dann habe ich G auf LOW gezogen. Dann war erst alles auf 0. Dann habe ich SCLR welches vorher frei herumhing auf 5V gelegt. Ich meine, das war der Zeitpunkt wo die Ausgänge verschiedene Werte hatten, die aber nicht mit R18 übereinstimmten. Es war eher so, dass 2 Pins einen anderen Wert hatten und der Rest auf High war. Es war also nicht nur eine Spiegelung oder so. OK dann habe ich Pausen eingefügt, was aber nur dazu führte, dass zwischenzeitlich alles auf High war und bei noch mehr Pausen ist jetzt alles auf Low. Das aktuelle Programm ist dies: http://www.freak5mynew.no-ip.info/Muell/AVR-source-ShiftR.txt Liegt das am Programm?
1. Reset Pin vom 595 auf 1 setzen 2. Output Enable vom 595 auf 1 setzen 3. Datenpin mit Daten belegen (entweder 0 oder 1) 4. ShiftClock 0 ->1 (und wieder 0 meinetwegen) zu Punkt 3, bis Register voll ist 5. LatchClock 0 ->1 (und wieder 0) in diesem Moment sind die Ausgänge aktualisiert Das Ganze funzt auch bei 16Mhz ohne WaitStates!
Naja das sind so um die 14cm Flachbandkabel zwischen dem Atmel und dem Shiftregister. LatchClock ist der StorageRegisterClock, oder? Wenn ja, dann habe ich den. Muss der danach wieder 0 sein? Ich habe es aber auch schon ausprobiert, wenn der öfter hin und herschaltet. Ich mache mir mal gleich ein Testprogramm, welches das Register einfach nur mit 1 oder 0 füllt.
LatchClock ist der StorageRegisterClock, oder? Wenn ja, dann habe ich den. Muss der danach wieder 0 sein? Richtig, wird hin und wieder auch als SRC (storage register clock) bezeichnet. Das mit der 0 ist optional, weil nur die 0->1 Flanke vom 595 ausgewertet wird. Ich mach´s nur aus Gewohnheit so, daß ich nichtinvertierende Eingänge als default immer 0 setze und invertierende als 1. Somit ist die darauf folgende Flanke gleich die richtige. Übrigens, die 14cm Flachband sollten´s nicht sein, habe 16 gestapelte HC595 über 30cm Flachband mit 128 LEDs als Statusboard an ´nem 13Mhz AtMega162 hängen und absolut keinen Horror damit. Alle Ausgaben habe ich über "sbi" und "cbi" Befehle am entsprechenden Port gelöst, direkt aufeinanderfolgend. Wichtig ist halt nur, daß Du den Port, speziell die Clockleitungen, nicht für andere Ausgaben benutzt und das Datenrichtungsregister auch immer schön gesetzt bleibt für diese Pins.
Ach ja, und immer erst den Datenpin aktualisieren, dann clocken!
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.