mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Schieberegister steuern


Autor: iwiki (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: iwiki (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: dave (Gast)
Datum:

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

dave

Autor: Simon Küppers (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Detlef Wilken (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: iwiki (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.