mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Ansteuerung eines CD4094-Shiftregisters


Autor: Nils ‫‪ (n-regen)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!
Ich möchte mehrere CD4094-Shiftregister kaskadieren und mit einem ATmega 
8 ansteuern.
Dazu möchte ich diese Schaltung hernehmen (natürlich ohne COM-Port und 
Zener-Dioden, dafür mit ATmega): 
http://www.skilltronics.de/versuch/elektronik_pc/4094.html
Dann müsste ich doch mit der folgenden Schleife (werde ich dann noch in 
(effektiveren) C-Quellcode übersetzen, wenn das Prizip stimmt) die 
Shiftregister ansteuern können, oder?
1. Anzahl der Ausgänge in Variable n speichern
2. Bit für Ausgang n an Data anlegen
3. Clock auf 1 setzen
4. Clock auf 0 setzen
5. n dekrementieren
6. Wenn n ungleich 0: Zu 2. springen; Sonst: Zu 7. springen
7. Strobe auf 1 setzen
8. Strobe auf 0 setzen

Autor: Michael Buesch (mb_)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Beispielcode

Edit: Warum kann ich die .h Datei nicht anhaengen??

Autor: Michael Buesch (mb_)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hier ist der header

Autor: Nils ‫‪ (n-regen)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
mb_: Vielen Dank für deinen Code, aber ich neige normalerweise dazu, das 
Rad für jede veränderte Speiche neu zu erfinden und werde das wohl auch 
hier tun (z.B. zwecks Lerneffekt und besserer Eingliederung in mein 
Programm).
Würde meine Methode im ersten Post also funktionieren?

Autor: Michael Buesch (mb_)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nils S. schrieb:
> Würde meine Methode im ersten Post also funktionieren?

Naja, ich wuerde den Strobe puls anders machen (so wie in meinem code). 
Mit deinem Code aendern sich die Ausgaenge des Schieberegisters waehrend 
des Schiebens. Wenn du es stattdessen wie in meinem Beispiel machst, 
werden die Ausgaenge atomisch am Ende auf den Registerinhalt 
aufgefrischt. Ausserdem ist die Strobe Logik umgekehrt. Schau einfach 
ins Beispiel.

Autor: Bernd (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Warum einfach wenns umständlich geht :-) ohne Strobe sieht es so aus.
void SendByte (uint8_t myByte)
{
    uint8_t n = 8;                        // Sende 8 BIT

    do  {
        DATA = LOW;
        if (myByte & 0x80) DATA = HIGH;   // Daten an 4094 ausgeben
        DisplayCharOut <<=1;              // MSB first
        CLOCK = LOW;                      // Ausgabe Schiebetakt, CLOCK = 0

        // CLOCK = 1, positive Taktflanke an 4094
        CLOCK = HIGH;
                     
    } while (--n);
}

Autor: Bernd (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Cut & Paste Teufel
DisplayCharOut = myByte

Ich verwende es fürs Display.

Autor: Nils ‫‪ (n-regen)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Michael Buesch schrieb:
> Naja, ich wuerde den Strobe puls anders machen (so wie in meinem code).

Du meinst also folgendermaßen, oder?
(Im Ausgangszustand ist Strobe 1 und Clock 0;
Output Enable ist wie im Schaltplan mit + verbunden)
1. Anzahl der Ausgänge in Variable n speichern
2. Bit für Ausgang n an Data anlegen
3. Clock auf 1 setzen
4. Clock auf 0 setzen
5. n dekrementieren
6. Wenn n ungleich 0: Zu 2. springen; Sonst: Zu 7. springen
7. Strobe auf 0 setzen
8. Strobe auf 1 setzen

Ach ja: Wann sollte man zum Kaskadieren Pin 9 und wann Pin 10 nehmen?

Autor: Ollz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich würde mir mal die SPI-Funktion des Atmega 8 ansehen.

Autor: Nils ‫‪ (n-regen)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mit SPI wird das wahrscheinlich nicht funktionieren, weil das Signal am 
Ausgang durch einen Transistor invertiert wird und ich eigentlich nicht 
noch einen Transistor dazuschalten möchte, um das Signal nochmal zu 
invertieren.
Außerdem möchte ich das wie gesagt selber implementieren - aber dazu 
müsste ich halt wissen, ob mein letzter Pseudocode funktionieren würde 
und welchen Pin (9 oder 10) ich als "Uplink" hernehmen soll.

Autor: Ollz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ach je, immer diese Weigerungen sich erst mal anzusehen, was der 
Mikrocontroller kann, aber Schlussfolgerungen ziehen.

Autor: Nils ‫‪ (n-regen)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich weiß auch ohne nachzuschauen, dass der ATmega8 SPI kann (auch wenn 
ich gerade erst gesehen habe, dass man die Polarität der Clock-Leitung 
einstellen kann).
Das alles ändert nichts daran, dass ich die Datenübertragung selber 
programmieren möchte und dazu wissen muss, ob ich noch irgendeinen 
Fehler in meinem Pseudocode habe und über welchen Anschluss man die 
Shiftregister unter welchen Umständen kaskadieren sollte.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nils S. schrieb:
> Das alles ändert nichts daran, dass ich die Datenübertragung selber
> programmieren möchte und dazu wissen muss, ob ich noch irgendeinen
> Fehler in meinem Pseudocode habe

Finds selber heraus.
Das Interesse, sich den 1000-en Versuch eines SW-SPI anzuschauen, dürfte 
gegen 0 gehen. Man ist ja nicht Dein Lehrer, der Deine Klausur 
korrigieren muß.
Es gibt schon reichlich fertigen HW/SW-SPI Code.


> und über welchen Anschluss man die
> Shiftregister unter welchen Umständen kaskadieren sollte.

Steht doch im Datenblatt, ist frequenzabhängig.
Die CD4xxx sind Hochvolt-CMOS, d.h. bei 5V recht gemächlich (1MHz) und 
auch treiberschwach (1mA). Deshalb nimmt man üblicher Weise den 74HC595.


Peter

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.