Hallo! Ich hab ein Schieberegister an einem ATMega8 angeschlossen an Pin PB0 bis PB2. Ich krieg das ganze aber mit dem Register nicht zum laufen. Kann mir mal jemand mit einem kurzen Assembler - Code - Segment dass dieses Register richtig mit Daten versorgt unter die Arme greifen! Wär euch echt dankbar! LG iwiki
Du glaubst wohl, es gibt nur ein Schieberegister ? Dem ist nicht so. Und bei CMOS gilt, alle Eingänge müssen beschaltet werden ! Schick also erstmal Deine Schaltung. Und melde Dich mal an den Admin, daß er Dich aus der Codesammlung verschiebt (Du bist hier falsch). Peter
:-) Ich weiß das die Vielfalt elektronischer Bauteile unergründlich ist Es is nur so das die Beschaltung schon da ist und auch die Platine bereits fertig! Ich hab lediglich Schwierigkeiten mit der Programmierung da ich was Assembler betrifft nit unbedingt sattelfest bin. Beim Register handelt es sich um ein 4094 wobei die Beschaltung so ist das CLK auf PB2; D auf PB1; und STR auf PB0 liegt; OE liegt auf VCC; QS geht dann weiter auf D des nächsten Registers So habe ich derzeit 2 Regigster auf der Platine! Was ich jetzt brauchen würde und wobei ich euch um Hilfe bitte ist der CODE um das ganze zum laufen zu bringen! LG iwiki
Ist OE nicht invertiert? (hab das Datenblatt leider nicht hier, sonst aber immer..) dave
OE ist high-active. Daten zum Register überträgst du indem du Ausgangsposition: D = LOW CLK = LOW STR = LOW 1. Bit(0) an D anlegen 2. Clock low->high->low 3. Bit(1) an D anlegen 4. Clock low->high->low ... 5. bit(n) an D anlegen 6. Clock low->high->low 7. Strobe low->high->low und genau im Moment, wo du Strobe betätigst, erscheinen die reingeschobenen Daten an den Ausgängen. Wenn du die SR's kaskadierst über den Q-Pin, dann schiebst du einfach an Data 16 Bits rein. 8Bits "fallen dann hintenraus" ins nächste Schieberegister.
Ich verwende ebenfalls MOS4094. Für die Ansteuerung habe ich mir eine eigene Routine gebastelt, die auch eine kaskadierte Ansteuerung der Schieberegister erlaubt. "Ausgang_Port" ist ebenfalls selbst geschrieben und schaltet nur den entsprechenden Portpin ein bzw aus. ANZAHL_MOS4094_SPI definiert die Zahl der verwendeten MOS4094 Schieberegister Hier der code: Ausgang_Port(SPI_STROBE, AUS); /* Strobe = 0 */ Ausgang_Port(SPI_ENABLE, AUS); /* Enable = 0 */ Ausgang_Port(SPI_CLOCK, AUS); /* Clock = 0 */ Ausgang_Port(SPI_OUT, AUS); /* Data = 0 */ for (MOS_Baustein_u8 = 0; MOS_Baustein_u8 < ANZAHL_MOS4094_SPI; MOS_Baustein_u8++) /* Alle MOS-Bausteine ansteuern */ { for (MOS_Bit_u8=0; MOS_Bit_u8<8; MOS_Bit_u8++) /* Schleife, die 8 mal durchlaufen wird */ { if (SPI_Byte[MOS_Baustein_u8] & ( 0x01 << MOS_Bit_u8 )) /* Datenbit anlegen */ { /* Datenbit = 1: Ausgang setzen */ Ausgang_Port(SPI_OUT, EIN); } else { Ausgang_Port(SPI_OUT, AUS); } Ausgang_Port(SPI_CLOCK, EIN);/* Clockpuls erzeugen */ Ausgang_Port(SPI_CLOCK, EIN);/* Impuls etwas verlaengern */ Ausgang_Port(SPI_CLOCK, AUS);/* Clockpuls loeschen */ } } Ausgang_Port(SPI_STROBE, EIN); /* Strobe = 1 */ Ausgang_Port(SPI_ENABLE, EIN); /* Enable = 1 */ Ich hoffe, das konnte helfen Gruß Detlef
Hallo! @Detlef Danke für den Code. Der sieht nach C aus oder? Da bin ich leider nit bewandert damit. Ich wollt das ganze in Assembler machen weil ich den Controller in seiner Funktionsweise verstehen möchte. @Simon Danke für die Infos. Schaut ja garnit so kompliziert aus wie ich mir das zuerst gedacht hab. Werd das am Feiertag mal probieren :-) vielleicht bring ich das Teil ja sogar zum laufen. Also erst mal recht herzlichen Dank für die Hilfe! LG iwiki
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.