Author Topic: Shift Register TPIC6B595 Shift Out, läuft einfach nicht  (Read 12924 times)

dinoi

  • freakyfriday
  • Sr. Member
  • *
  • Posts: 441
  • Karma: +7/-0
    • Dinoi
Shift Register TPIC6B595 Shift Out, läuft einfach nicht
« on: April 09, 2013, 09:59:29 AM »
Hallo Zusammen,

ich bin neu hier im Forum, habe aber schon einige Arduino Projekte realisiert: (Temperatur/Feuchtigkeit SD-Card Logger, DrumBoard, Simon Game, Oszilloskop). Jetzt wollte ich das erste mal ein Shift Register einsetzten, kriege es aber einfach nicht zum laufen. Es geht um dieses hier:  http://shop.boxtec.ch/shift-register-high-power-tpic6b595-p-40678.html

Im Coding verwende ich den ShiftOut() Befehl um die 8 Bits zu übertragen. Die Verkabelung habe ich schon 20x geprüft.
Jetzt messe ich jeden Input Pin und vergleiche Ihn mit dieser Grafik und dem Oszilloskop. Dabei ist mir aufgefallen das bei mir
der SER IN immer bei 5V steht und dann die Impulse als 0V sendet. Eigentlich genau umgekehrt zu der Grafik.

Wie sind die Pins mit dem Strich drüber zu interpretieren? Ist das gemessene Signal nochmal zu invertieren oder stimmt es mit der Grafik überein?

Danke für Eure Hilfe.
Grüessli Dinoi

pylon

  • freakyfriday
  • Full Member
  • *
  • Posts: 158
  • Karma: +16/-0
Re: Shift Register TPIC6B595 Shift Out, läuft einfach nicht
« Reply #1 on: April 09, 2013, 05:49:30 PM »
Quote
Jetzt messe ich jeden Input Pin und vergleiche Ihn mit dieser Grafik und dem Oszilloskop.

Welche Input-Pins meinst Du? Die des Shift-Registers? Mit welcher Grafik vergleichst Du? Jener des Datenblatts? Falls ja, welche (Seite, Bezeichnung)?

Quote
Dabei ist mir aufgefallen das bei mir der SER IN immer bei 5V steht und dann die Impulse als 0V sendet.

Ein gesetztes Bit ist bei shiftOut() gleich 5V, ein nicht gesetztes gleich 0V. Poste Deinen Code und einen Oszilloskop-Screenshot, damit wir verstehen, wie Du auf die Invertierung kommst.

Quote
Wie sind die Pins mit dem Strich drüber zu interpretieren?

Das heisst normalerweise, dass dieser Pin active-LOW ist, also 0V führt, wenn eine logische 1 übertragen werden soll, 5V bei einer logischen 0.

Quote
Ist das gemessene Signal nochmal zu invertieren oder stimmt es mit der Grafik überein

Grafiken in Datenblättern sind normalerweise elektrische Zustände, d.h. Du musst dort nichts mehr invertieren, es sollte mit der Ausgabe des Oszilloskops übereinstimmen.


microtherion

  • freakyfriday
  • Full Member
  • *
  • Posts: 163
  • Karma: +13/-0
Re: Shift Register TPIC6B595 Shift Out, läuft einfach nicht
« Reply #2 on: April 09, 2013, 06:21:09 PM »
Hallo Zusammen,

ich bin neu hier im Forum, habe aber schon einige Arduino Projekte realisiert: (Temperatur/Feuchtigkeit SD-Card Logger, DrumBoard, Simon Game, Oszilloskop). Jetzt wollte ich das erste mal ein Shift Register einsetzten, kriege es aber einfach nicht zum laufen. Es geht um dieses hier:  http://shop.boxtec.ch/shift-register-high-power-tpic6b595-p-40678.html


Habe noch nie damit gearbeitet, aber sieht einfach nach einer muskulöseren Version eines 74HC595 aus.

Quote
Im Coding verwende ich den ShiftOut() Befehl um die 8 Bits zu übertragen.


Das sollte schon gehen, aber bei dem typ shift register muss man dran denken, dass sich nichts an den Outputs ändert, bevor man der RCLK eine positive flanke gegeben hat. Des Weiteren muss ~G (ein Pin, der oft auch als ~OE bekannt ist), auf 0V gehalten werden (man kann das auch fest verbinden, wenn man den Output nie unterdrücken will).

Ein kleines Beispiel ist auf http://www.oomlout.com/oom.php/products/ardx/circ-05 zu finden. Verwendet zwar ein 74HC595, aber bis auf die Pin-Namen und -Nummern sollte alles gleich laufen.

dinoi

  • freakyfriday
  • Sr. Member
  • *
  • Posts: 441
  • Karma: +7/-0
    • Dinoi
Re: Shift Register TPIC6B595 Shift Out, läuft einfach nicht
« Reply #3 on: April 09, 2013, 10:17:32 PM »
Quote
Jetzt messe ich jeden Input Pin und vergleiche Ihn mit dieser Grafik und dem Oszilloskop.

Welche Input-Pins meinst Du? Die des Shift-Registers? Mit welcher Grafik vergleichst Du? Jener des Datenblatts? Falls ja, welche (Seite, Bezeichnung)?

Ja sorry, ich meine die folgenden Pins des Shift-Registers: SER IN (3), SRCK (13), SRCLR (8) und RCK (12). Ich vergleiche dies mit der Grafik welche ich im Post mitgeschickt habe, das ist im Datenblatt Seite 5 unten Rechts "VOLTAGE WAVEFORMS".

Quote
Dabei ist mir aufgefallen das bei mir der SER IN immer bei 5V steht und dann die Impulse als 0V sendet.

Ein gesetztes Bit ist bei shiftOut() gleich 5V, ein nicht gesetztes gleich 0V. Poste Deinen Code und einen Oszilloskop-Screenshot, damit wir verstehen, wie Du auf die Invertierung kommst.

Hier der Screenshot vom Oszi, er zeigt die Messung von SER IN. Hier sieht man wie er im Plus steht und dann jeweils alle 100ms ins Minus geht. Im Coding habe ich alle 100ms das senden vorgegeben.

Hier das Coding:
Code: [Select]
const int clearPin = 7;
const int latchPin = 53;
const int clockPin = 50;
const int dataPin = 52;

const int ledPin = 13;

long previousMillis = 0;
long interval = 100;

int ledflag = 1;

void setup() {
  pinMode(clearPin, OUTPUT);
  pinMode(latchPin, OUTPUT);
  pinMode(dataPin, OUTPUT); 
  pinMode(clockPin, OUTPUT);
  pinMode(ledPin, OUTPUT);
  digitalWrite(clearPin, HIGH);
  digitalWrite(latchPin, LOW);
  delay(100);
}

void loop() {

  unsigned long currentMillis = millis();
 
  if(currentMillis - previousMillis > interval) {
    previousMillis = currentMillis;   
 
if (ledflag == 1){
digitalWrite( ledPin, HIGH);
  digitalWrite(latchPin, LOW);
  shiftOut(dataPin, clockPin, MSBFIRST, B00000001);
  digitalWrite(latchPin, HIGH);
ledflag = 0;
} else {
digitalWrite( ledPin, LOW);
  digitalWrite(latchPin, LOW);
  shiftOut(dataPin, clockPin, MSBFIRST, B11000001);
  digitalWrite(latchPin, HIGH);
ledflag = 1;

}
}

}




Quote
Wie sind die Pins mit dem Strich drüber zu interpretieren?

Das heisst normalerweise, dass dieser Pin active-LOW ist, also 0V führt, wenn eine logische 1 übertragen werden soll, 5V bei einer logischen 0.

Quote
Ist das gemessene Signal nochmal zu invertieren oder stimmt es mit der Grafik überein

Grafiken in Datenblättern sind normalerweise elektrische Zustände, d.h. Du musst dort nichts mehr invertieren, es sollte mit der Ausgabe des Oszilloskops übereinstimmen.

Ok dann verstehe ich nicht wieso es bei mir nicht passt.

Danke und Gruss Dinoi
« Last Edit: April 09, 2013, 10:22:57 PM by dinoi »

dinoi

  • freakyfriday
  • Sr. Member
  • *
  • Posts: 441
  • Karma: +7/-0
    • Dinoi
Re: Shift Register TPIC6B595 Shift Out, läuft einfach nicht
« Reply #4 on: April 09, 2013, 10:20:37 PM »
Hallo Zusammen,

ich bin neu hier im Forum, habe aber schon einige Arduino Projekte realisiert: (Temperatur/Feuchtigkeit SD-Card Logger, DrumBoard, Simon Game, Oszilloskop). Jetzt wollte ich das erste mal ein Shift Register einsetzten, kriege es aber einfach nicht zum laufen. Es geht um dieses hier:  http://shop.boxtec.ch/shift-register-high-power-tpic6b595-p-40678.html


Habe noch nie damit gearbeitet, aber sieht einfach nach einer muskulöseren Version eines 74HC595 aus.


Ja genau der verträgt 150mA pro Pin.


Quote
Im Coding verwende ich den ShiftOut() Befehl um die 8 Bits zu übertragen.


Das sollte schon gehen, aber bei dem typ shift register muss man dran denken, dass sich nichts an den Outputs ändert, bevor man der RCLK eine positive flanke gegeben hat. Des Weiteren muss ~G (ein Pin, der oft auch als ~OE bekannt ist), auf 0V gehalten werden (man kann das auch fest verbinden, wenn man den Output nie unterdrücken will).

Ein kleines Beispiel ist auf http://www.oomlout.com/oom.php/products/ardx/circ-05 zu finden. Verwendet zwar ein 74HC595, aber bis auf die Pin-Namen und -Nummern sollte alles gleich laufen.


Ok ja das habe ich geprüft, das passt soweit.

pylon

  • freakyfriday
  • Full Member
  • *
  • Posts: 158
  • Karma: +16/-0
Re: Shift Register TPIC6B595 Shift Out, läuft einfach nicht
« Reply #5 on: April 10, 2013, 11:32:16 AM »
Du verwendest kein Oszilloskop, sondern einen anderen Arduino, der für diesen Zweck natürlich viel zu langsam ist. Der shiftOut()-Aufruf dauert vielleicht 10µs, auch wenn's 50µs wären, würdest Du nur den Spike nach unten sehen, den Du in den Bildern bemerkt hast.

Den G-Pin (Pin 9 am Chip, wenn der an die 53 am Arduino angeschlossen ist) steuerst Du übrigens falsch an, der ist active-LOW, während dem Schreiben sollte der also HIGH sein, danach wieder auf LOW gezogen werden. Hast Du den RCK-Pin auch angeschlossen? Kannst Du den Verdrahtungsplan posten?

dinoi

  • freakyfriday
  • Sr. Member
  • *
  • Posts: 441
  • Karma: +7/-0
    • Dinoi
Re: Shift Register TPIC6B595 Shift Out, läuft einfach nicht
« Reply #6 on: April 11, 2013, 10:19:32 PM »
Hallo pylon, ja das sehe ich mittlerweile ein, mein Arduino Oszilloskop ist hier zu langsam.
Beim Zeichnen vom Verdrahtungsplan ist mir ein grober Fehler aufgefallen, ich hatte auch schon Beispiele mit dem 74HC595 angesehen und da werden die Ausgänge auf 5V+ gesetzt. Hier beim TPIC6B595 ist es ja umgekehrt, bei logisch 1 wird nur der Port auf Ground geführt. Somit musste ich nur meine LED's anders ansteuern und schon funktioniert es. Peinlich.

Danke für Deine Hilfe
Gruss Dinoi

 

anything