ArduinoPrX : Arduino und Schieberegister

ArduinoPrX

Developing for the world

Tuesday 27th of June 2017 09:08:42 PM
Wähle eine Sprache


Arduino und Schieberegister

Arduino und Schieberegister

Content
In der Kategorie
1


In den Objekten

Social
Add to Flipboard Magazine.
Beschreibung Ein Schieberegister ist ein logischer Baustein der aus aneinander gereihten Flip Flops besteht.Bei jedem Arbeitstakt wird sozusagen jedes Bit um ein Flip Flop weiter geschoben sehr Gut zu veranschaulichen wenn man sich eine Kette aus Eimern vorstellt, und somit Wasser von Eimer zu Eimer weiter gibt. Die Anzahl der im Register vorhandenen Speicherplätze ist konstant.Schieberegister arbeiten nach dem FIFO-Prinzip. Das zuerst eingespeicherte Bit verlässt den Speicher zuerst. Das Herein- und Herausschieben, das Ein- und das Auslesen geschehen dabei synchron, ein Schieberegister kann nur bedingt als Warteschlange genutzt werden.Oft erweitert man Schieberegister mit zusätzlicher Logik (bestehend aus mehreren Logikgattern). Diese kann dafür sorgen,dass das höchste Bit in das niedrigste Bit geschoben wird (es findet also eine Rotation statt, man spricht auch von einem Rundschiebe-Register),dass man es bidirektional betreiben kann, die Richtung der Verschiebung also variabel ist,festgelegt werden kann, ob das freiwerdende Bit gesetzt oder gelöscht werden soll, und/oder dass man das Register parallel beschreiben oder auslesen kann.Hier in diesem Artikel beschäftige ich mich Hauptsächlich mit dem 8 Bit Schieberegister vom Typ 595 welches auch in unterschiedlichen Bauformen und Varianten zu haben ist.Die Unterschiede der Variation bestehen darin das es Typen gibt bei denen die Ausgänge auf High sind wenn das dazu gehörige Bit auf 0 steht, und umgedreht also Low bei 1. Was kann man also mit so einem Schieberegister machen und für was kann man es z.B. Sinnvoll einsetzen ? Nehmen wir doch z.B. mal die kleinen Arduino Boards Uno / Duemilanove / Diecimila oder sogar einen Tiny45/85 .Alle diese Controller haben nur eine begrenzte Anzahl von I/O Pins doch da man Schieberegister hintereinander Schalten kann , kann man durch 3 Pins vom Arduino ein Fast unbegrenzte Port Erweiterung ansteuern zumindest was Ausgänge angeht.Um das ganze mal zu verdeutlichen , um eine 16x9 Led Matrix einzeln anzusteuern bräuchte man 144 Pins von einen Arduino oder im Reihen und Zeilen System immer noch 25. Aber wenn man jetzt hingeht und verschaltet das ganze mit Schieberegistern dann benötigt man noch 3 Pins vom Arduino,4 Schieberegister und einen viel weniger aufwendigeren Programmcode.
8 Bit Schieberegister 595 Pin belegung 8 Bit Schieberegister vom Typ 595 - Tabelle der Pinbelegung
Beispiel Code
// Do this for MSBFIRST serial
int data = 500;
// shift out highbyte
shiftOut(dataPin, clock, MSBFIRST, (data >> 8));  
// shift out lowbyte
shiftOut(data, clock, MSBFIRST, data);

// Or do this for LSBFIRST serial
data = 500;
// shift out lowbyte
shiftOut(dataPin, clock, LSBFIRST, data);  
// shift out highbyte
shiftOut(dataPin, clock, LSBFIRST, (data >> 8)); 
Verdrahtung 1 oder 2 Schieberegister Auf die Bilder klicken zum vergrößern.
Arduino Schiebregister 1
Schritt 1 :
Spannungsversorgung / Datenleitungen
Arduino Schiebregister 1
Schritt 2 :
Led's anschließen
Arduino Schiebregister 1
Schaltplan
Arduino Schiebregister 2
Schritt 1 :
Spannungsversorgung
Arduino Schiebregister 2
Schritt 2 :
Datenleitungen
Arduino Schiebregister 2
Schritt 3 :
Led's anschließen
Arduino Schiebregister 2
Schaltplan
Bepsiel Code
//**************************************************************//
//  Name    : shiftOutCode, Hello World                         //
//  Author  : Carlyn Maw,Tom Igoe                               //
//  Date    : 25 Oct, 2006                                      //
//  Version : 1.0                                               //
//  Notes   : Code for using a 74HC595 Shift Register           //
//          : to count from 0 to 255                            //
//****************************************************************

//Pin connected to ST_CP of 74HC595
int latchPin = 8;
//Pin connected to SH_CP of 74HC595
int clockPin = 12;
////Pin connected to DS of 74HC595
int dataPin = 11;

void setup() {
  //set pins to output because they are addressed in the main loop
  pinMode(latchPin, OUTPUT);
  pinMode(clockPin, OUTPUT);
  pinMode(dataPin, OUTPUT);
}

void loop() {
  //count up routine
  for (int j = 0; j < 256; j++) {
    //ground latchPin and hold low for as long as you are transmitting
    digitalWrite(latchPin, LOW);
    shiftOut(dataPin, clockPin, LSBFIRST, j);  
    //return the latch pin high to signal chip that it
    //no longer needs to listen for information
    digitalWrite(latchPin, HIGH);
    delay(1000);
  }
} 
Technische Daten

Board
Shields


Videos

Arduino und Schieberegister Vide..
Aufrufe / Views2 K


Arduino und Schieberegister : Arduino und Schieberegister Vide..

Aufrufe / Views2