Forum: Mikrocontroller und Digitale Elektronik M74HC595 und ATmega16 - Die Ansteuerung funzt nicht ganz.


von Freak5 (Gast)


Lesenswert?

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?

von TravelRec. (Gast)


Lesenswert?

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!

von Freak5 (Gast)


Lesenswert?

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.

von TravelRec. (Gast)


Lesenswert?

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.

von TravelRec. (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.