Forum: Mikrocontroller und Digitale Elektronik Schieberegister steuern


von iwiki (Gast)


Lesenswert?

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

von Peter D. (peda)


Lesenswert?

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

von iwiki (Gast)


Lesenswert?

:-)

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

von dave (Gast)


Lesenswert?

Ist OE nicht invertiert? (hab das Datenblatt leider nicht hier, sonst
aber immer..)

dave

von Simon Küppers (Gast)


Lesenswert?

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.

von Detlef Wilken (Gast)


Lesenswert?

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

von iwiki (Gast)


Lesenswert?

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