Forum: Mikrocontroller und Digitale Elektronik 4094 kaskafieren


von Gundelputz (Gast)


Lesenswert?

Hallo erst mal,
habe heute ein problemchen mit dem kaskadieren von zwei 
Schieberegistern.
Meine Zielsetzung ist es vier 4094 mit einnander zu verbinden um eine 
4-stellige BIG 7-Segmentanzeige zu erstellen.
ich habe bereits zwei anzeigen vorbereitet die auch beide für sich 
funktionieren. Pro Segment verwende ich ein 4094 als Schieberegister ein 
ULN2803A als Treiber für die 7cm hohe 7-Segmentanzeige und natürlich die 
7-Segmentanzeige.
sobald ich aber den Takt an den zweiten 4094 anlege bricht mir die erste 
Anzeige zusammen.
Kann mir jemand sagen woran das liegt und wie ich dem entgegen wirken 
kann?

von Ursus P. (unwichtig)


Lesenswert?

Gundelputz schrieb:
> Hallo erst mal,
> habe heute ein problemchen mit dem kaskadieren von zwei
> Schieberegistern.

> sobald ich aber den Takt an den zweiten 4094 anlege bricht mir die erste
> Anzeige zusammen.
ENABLE Eingänge richtig beschaltet und angesteuert?

> Kann mir jemand sagen woran das liegt und wie ich dem entgegen wirken
> kann?

Lad mal den Schaltplan hoch :-)

von Peter D. (peda)


Lesenswert?

Gundelputz schrieb:
> bricht mir die erste
> Anzeige zusammen.

Ist sie dann nur noch 3,5cm hoch oder was?
Drücke Dich bitte verständlich aus.

von H.Joachim S. (crazyhorse)


Angehängte Dateien:

Lesenswert?

so funktionierts.

von Gundelputz (Gast)


Angehängte Dateien:

Lesenswert?

Frank T. schrieb:
> Lad mal den Schaltplan hoch :-)

hat das verückte Pferd schon gemacht nur das dahinter noch der ULN und 
die Anzeige(gem. Katode)

Peter D. schrieb:
> Ist sie dann nur noch 3,5cm hoch oder was?

um es verständlich aus zu drücken: Sie erlischt, geht aus, zeigt nichts 
mehr an oder leuchtet ganz einfach nicht mehr.

Aber mal im ernst: jedes Segment ist wie im Bild gezeigt verbunden. 
Zusätzlich speise ich noch ein 12V Festspannung in die Untere Reihe ein.
Beider Segmente funtionieren seperat ohne Probleme. Schiesse ich beide 
wie gezeigt paralel(beide Datenpins zusammen) an einen UNO an zeigen 
beide den gewünschten wert. Gehe ich aber mit dem QS von IC1 an Data von 
IC2 so zeigtermaximal das f-Segment vom zweiten Display an.
ich sende nacheinnander die zifern 2, 4 und 6. Es sollte also statt 
einem "-"(nicht im Code deklariert) die voorrangegangen Ziffer 
erscheinen.
Hier noch der Code:

int zahl = 83;
byte einer = zahl % 10;
byte zehner = (zahl / 10) % 10;
byte hunderter = (zahl / 100) % 10;
byte tausender = (zahl / 1000) % 10;
int freigabe1 = 11;//CD4094 PIN1 (storePin)
int tackt1 = 12;//CD4094 PIN3 (clockPin)
int bit1 = 13;//CD4094 PIN2(datapin)
int uebergabe = 10;// �bergibt die Zeichen an Anzeige
int spalten_wert = 0;
int display_zeichen = 7;
byte daten_spalte;//datacol(5)
int count1 = 10000;

void setup()
{
  pinMode(freigabe1, OUTPUT);
  pinMode(tackt1, OUTPUT);
  pinMode(bit1, OUTPUT);
  pinMode(uebergabe, OUTPUT);
}
void loop()
{
  for (int z = 1; z < 4; z++)
  {
    zahl = 246;
    einer = zahl % 10;
    zehner = (zahl / 10) % 10;
    hunderter = (zahl / 100) % 10;
    tausender = (zahl / 1000) % 10;
    digitalWrite(uebergabe, LOW);
    if (z == 1)
    {
      display_zeichen = einer;
      zeil_schreib();
    }
    if (z == 2)
    {
      display_zeichen = zehner;
      zeil_schreib();
    }
    if (z == 3)
    {
      display_zeichen = hunderter;
      zeil_schreib();
    }
    for (int i = 1; i < 8; i++)
    {
      digitalWrite(freigabe1, LOW);
      daten_spalte = spalten_wert;
      shiftOut(bit1, tackt1, LSBFIRST, daten_spalte);
      digitalWrite(freigabe1, HIGH);
    }
    digitalWrite(uebergabe, HIGH);
    if (z == 4)
    {
      digitalWrite(uebergabe, HIGH);
    }
    delay(1000);
  }
}
void zeil_schreib()
{
  //hier soll die Auswahl f�r die zeichen hin geschriebe: 
B,a,b,c,d,e,f,g,dp
  switch (display_zeichen)
  {
    case 0:
      spalten_wert = B11111101;
      break;
    case 1:
      spalten_wert = B01100001;
      break;
    case 2:
      spalten_wert = B11011011;
      break;
    case 3:
      spalten_wert = B11110011;
      break;
    case 4:
      spalten_wert = B01100111;
      break;
    case 5:
      spalten_wert = B10110111;
      break;
    case 6:
      spalten_wert = B10111111;
      break;
    case 7:
      spalten_wert = B11100001;
      break;
    case 8:
      spalten_wert = B11111111;
      break;
    case 9:
      spalten_wert = B11110111;
      break;
  }
}

von Karl M. (Gast)


Angehängte Dateien:

Lesenswert?

Wie wäre es mit einem MC14489 ?

von Joe F. (easylife)


Lesenswert?

H.Joachim S. schrieb:
> so funktionierts.

Zum Kaskadieren bei nicht allzu schnellen Clocks würde ich eher Pin 10 
empfehlen (QS* statt QS).

von m.n. (Gast)


Lesenswert?

Gundelputz schrieb:
> habe heute ein problemchen mit dem kaskadieren von zwei
> Schieberegistern.

Da habe ich Dir doch erst gestern gezeigt, wie das geht; sogar 6 x 4094 
und mit Programm.
Entferne einfach die Kurzschlüsse auf dem Steckbrett.

von Mitlesa (Gast)


Lesenswert?

Ich muss bei jedem IC ein Abblock-C von VCC nach GND anschliessen.
Ich muss bei jedem IC ein Abblock-C von VCC nach GND anschliessen.
Ich muss bei jedem IC ein Abblock-C von VCC nach GND anschliessen.
Ich muss bei jedem IC ein Abblock-C von VCC nach GND anschliessen.
Ich muss bei jedem IC ein Abblock-C von VCC nach GND anschliessen.
Ich muss bei jedem IC ein Abblock-C von VCC nach GND anschliessen.
Ich muss bei jedem IC ein Abblock-C von VCC nach GND anschliessen.
Ich muss bei jedem IC ein Abblock-C von VCC nach GND anschliessen.
Ich muss bei jedem IC ein Abblock-C von VCC nach GND anschliessen.
Ich muss bei jedem IC ein Abblock-C von VCC nach GND anschliessen.
Ich muss bei jedem IC ein Abblock-C von VCC nach GND anschliessen.
Ich muss bei jedem IC ein Abblock-C von VCC nach GND anschliessen.
Ich muss bei jedem IC ein Abblock-C von VCC nach GND anschliessen.
Ich muss bei jedem IC ein Abblock-C von VCC nach GND anschliessen.
Ich muss bei jedem IC ein Abblock-C von VCC nach GND anschliessen.
Ich muss bei jedem IC ein Abblock-C von VCC nach GND anschliessen.
Ich muss bei jedem IC ein Abblock-C von VCC nach GND anschliessen.
Ich muss bei jedem IC ein Abblock-C von VCC nach GND anschliessen.
Ich muss bei jedem IC ein Abblock-C von VCC nach GND anschliessen.
Ich muss bei jedem IC ein Abblock-C von VCC nach GND anschliessen.
Ich muss bei jedem IC ein Abblock-C von VCC nach GND anschliessen.
Ich muss bei jedem IC ein Abblock-C von VCC nach GND anschliessen.
Ich muss bei jedem IC ein Abblock-C von VCC nach GND anschliessen.
Ich muss bei jedem IC ein Abblock-C von VCC nach GND anschliessen.
Ich muss bei jedem IC ein Abblock-C von VCC nach GND anschliessen.
Ich muss bei jedem IC ein Abblock-C von VCC nach GND anschliessen.

von Gundelputz (Gast)


Lesenswert?

Mitlesa schrieb:
> Ich muss bei jedem IC ein Abblock-C von VCC nach GND anschliessen.

muss nicht zwingend gemacht werden.
habe das aber auch schon probiert.

m.n. schrieb:
> Entferne einfach die Kurzschlüsse auf dem Steckbrett.

welche Kurzschlüsse??? Bin ich blind?

von Gundelputz (Gast)


Lesenswert?

m.n. schrieb:
> Da habe ich Dir doch erst gestern gezeigt, wie das geht; sogar 6 x 4094

nach deinem Vorbild ist die Schaltung aufgebaut. Der Code wahr mir etwas 
zu kompliziert. Ich möchte immer etwas lernen. deswegen erst mal der 
eigene Code.

von Joe F. (easylife)


Lesenswert?

Gundelputz schrieb:
> muss nicht zwingend gemacht werden.
> habe das aber auch schon probiert.

Man muss auch nicht zwingend Luft in Fahrradreifen pumpen.
Holpert dann zwar ein wenig mehr, fährt aber trotzdem.

von Mitlesa (Gast)


Lesenswert?

Beratungsresistenz ist eine Zier,
doch weiter kommt man ohne ihr.

von Joe F. (easylife)


Lesenswert?

Mitlesa schrieb:
> Beratungsresistenz ist eine Zier,
> doch weiter kommt man ohne ihr.

Liest sich mein Code nicht auf den ersten Blick, liegt es an des Lesers 
Ungeschick.

: Bearbeitet durch User
von Joe F. (easylife)


Angehängte Dateien:

Lesenswert?

Ich habe mir mal die Freiheit genommen, deinen Code etwas aufzuräumen, 
und ein paar Fehler zu entfernen.

Bei der fehlenden Funktion shiftOut() gehe ich mal davon aus, dass sie 
das macht, was sie verspricht...

von Gundelputz (Gast)


Lesenswert?

Joe F. schrieb:
> Liest sich mein Code nicht auf den ersten Blick, liegt es an des Lesers
> Ungeschick.

Leider muss ich dir da zustimmen.
Habe dem neuen Code gelesen und "fast" verstanden. Sehr schön und 
einfach.
einzieg folgende Zeihle wahr mir noch nicht bekannt.
shiftOut(p_data, p_clk, LSBFIRST, pattern);
Leider wird nur das letzte Zeichen richtig angezeigt.
Ich probiere noch ein wenig rum und melde mich heute Abend noch mal.
Vielen Dank schon mal.

von Joe F. (easylife)


Lesenswert?

Gundelputz schrieb:
> Leider wird nur das letzte Zeichen richtig angezeigt.

Und die anderen Displays? Ist da wenigstens irgendetwas zu sehen, oder 
sind die dunkel?

Was ist denn bei dir am Output 10 ("uebergabe") angeschlossen?


Gundelputz schrieb:
> Habe dem neuen Code gelesen und "fast" verstanden. Sehr schön und
> einfach.

Der unterscheidet sich von deinem Code in folgenden Dingen:

- Formatierung: um es anderen leichter zu machen den Code zu lesen,
rückt man alles sinnvoll ein.

- Funktionen: Funktionen kennen "Argumente" und einen "Rückgabewert".
Diese Dinge sollte man auch benutzen. Globale Variablen sind hier 
vollkommen unangebracht.

- Variablendeklaration
Alle Variablen einfach global zu deklarieren verwirrt sehr.
Wenn man in jeder Funktion nur die Variablen deklariert, die auch 
gebraucht werden, kann man die Funktion wesentlich schneller verstehen.

- Variablen und Port-Namen möglichst sinnvoll benennen.
Wenn deine Pins am Schieberegister schon einen Namen haben, kann man 
diesen auch gleich im Programm verwenden. Ein zusätzliches "p_" oder 
"pin_" davor macht jedem sofort klar, was hier gemeint ist.

- Arrays verwenden. Wenn du in einer Schleife immer wieder das gleiche 
machst (4 Zeichen ausgeben), ist "if..." und 4 verschienene Variablen 
("einer", "zehner"...) die falsche Methode.
Durch die Verwendung eines Arrays wird der Code kürzer und einfacher.

- Kommentare helfen zu verstehen, was die kommentierten Zeilen genau 
machen sollen, wenn es sich nicht ohnehin selbst erklärt.

: Bearbeitet durch User
von Karl M. (Gast)


Lesenswert?

Guten morgen,

warum finde ich in dem C-Code so viele Variable von Typ int ?
Ich sehe keinen Grund vorzeichenbehaftet 16Bit Datentypen zu verwenden.

Joe F. schrieb:
> Ich habe mir mal die Freiheit genommen, deinen Code etwas aufzuräumen,
> und ein paar Fehler zu entfernen.

von Gundelputz (Gast)


Lesenswert?

Danke fürs zurechtstutzen.
Denke das habe ich mal wieder gebraucht.
gelobe besserung

von der mechatroniker (Gast)


Lesenswert?

> warum finde ich in dem C-Code so viele Variable von Typ int ?
> Ich sehe keinen Grund vorzeichenbehaftet 16Bit Datentypen zu verwenden.

Normalerweise brauche ich einen Grund, einen anderen Datentyp als int zu 
verwenden (zu kleiner Wertebereich bei int, zuviel Speicher bei größeren 
int-Feldern, ...) und keinen Grund, int zu verwenden. Das ist ja 
sozusagen der Standardtyp für Ganzzahlen.

von Gundelputz (Gast)


Lesenswert?

Joe F. schrieb:
> Und die anderen Displays? Ist da wenigstens irgendetwas zu sehen, oder
> sind die dunkel?

nein.
number = 1234;
erste Segment zeigt (b,c) 1
zweite Segmnent zeigt (a,c,d,f) u mit Strich darüber
dritte und vierte Segment zeigen (a,b,c,d,e,f,g) 8
      _  
  |   |_||_|
  ||_||_||_|

Joe F. schrieb:
> Was ist denn bei dir am Output 10 ("uebergabe") angeschlossen?

Schieberegiste Pin 15 OE (habe ich auch schon an 5V gehabt mit gleichen 
Erfolg).

von Joe F. (easylife)


Lesenswert?

Gundelputz schrieb:
> Danke fürs zurechtstutzen.
> Denke das habe ich mal wieder gebraucht.

Naja, ich wollte dich nicht wirklich "zurechtstutzen". Lediglich anhand 
eines Beispiels aufzeigen, dass mit ein wenig Aufwand (vor allem 
Formatierung) Programmcode viel lesbarer wird. Die Chancen, dass dir 
dann jemand helfen kann/will werden dann besser ;-)

Gundelputz schrieb:
> nein.
> number = 1234;
> erste Segment zeigt (b,c) 1
> zweite Segmnent zeigt (a,c,d,f) u mit Strich darüber
> dritte und vierte Segment zeigen (a,b,c,d,e,f,g) 8

Die Kette ist so aufgebaut, dass die erste Anzeige (die dann die "1" 
korrekt anzeigt) am Ausgang des Arduinos hängt, richtig?

- Hast du mal versucht, die nachfolgenden Schieberegister-Eingänge (Pin 
2) jeweils mit Pin 10 (QS*) des vorherigen Registers zu verbinden?
Momentan geht vermutlich immer Pin 9 auf Pin 2 des nächsten Registers.
Pin 10 hat den Vorteil, dass das Signal um 1/2 CLK verschoben ist, und 
damit das Timing sicherer ist.

- Wie schnell ist deine CLK (KHz, MHz?)
Kannst du mal die Funktion shiftOut() zeigen?

- Sind CLK und STROBE überall korrekt angeschlossen?

- Sind alle Output-Enable Eingänge (Pin 15 der Schieberegister) auf +5V 
bzw. mit dem Arduino-Output 10 verbunden?
Diese Eingänge dürfen nicht unverbunden bleiben.

: Bearbeitet durch User
von Mw E. (Firma: fritzler-avr.de) (fritzler)


Lesenswert?

der mechatroniker schrieb:
> Normalerweise brauche ich einen Grund, einen anderen Datentyp als int zu
> verwenden (zu kleiner Wertebereich bei int, zuviel Speicher bei größeren
> int-Feldern, ...) und keinen Grund, int zu verwenden. Das ist ja
> sozusagen der Standardtyp für Ganzzahlen.

Weist aber schon, dass son AVR nen 8 Bitter ist?
Und wieviel hat son int? Na?

von Gundelputz (Gast)


Lesenswert?

Joe F. schrieb:
> Die Kette ist so aufgebaut, dass die erste Anzeige (die dann die "1"
> korrekt anzeigt) am Ausgang des Arduinos hängt, richtig?

Ja
zeichne gerade noch den kompletten Aufbau.

Joe F. schrieb:
> - Hast du mal versucht, die nachfolgenden Schieberegister-Eingänge (Pin
> 2) jeweils mit Pin 10 (QS*) des vorherigen Registers zu verbinden?

Ja.
Im der Beschreibung steht das ja genau so drinn.

Joe F. schrieb:
> - Wie schnell ist deine CLK (KHz, MHz?)

das kann ich so genau nicht sagen. Habe einen Arduino UNO. Der sollte im 
MHz bereich arbeiten.

Joe F. schrieb:
> Kannst du mal die Funktion shiftOut() zeigen?

Da habe ich momentan deinen Code.
Also:
shiftOut(p_data, p_clk, LSBFIRST, pattern);

Joe F. schrieb:
> - Sind CLK und STROBE überall korrekt angeschlossen?

Sind alle mit dem UNO verbunden. Also alle im gleichen Tackt.

Joe F. schrieb:
> - Sind alle Output-Enable Eingänge (Pin 15 der Schieberegister) auf +5V
> bzw. mit dem Arduino-Output 10 verbunden?
> Diese Eingänge dürfen nicht unverbunden bleiben.

Ja.

von Joe F. (easylife)


Lesenswert?

Martin W. schrieb:
> Weist aber schon, dass son AVR nen 8 Bitter ist?
> Und wieviel hat son int? Na?

Ja, ist vollkommen richtig.
Der richtige Datentyp für alle Dinge dieses Firmwareteils wäre 
"uint8_t".
Ich war schlampig...

von Gundelputz (Gast)


Angehängte Dateien:

Lesenswert?

hier noch eben die fast fertige Grafik vom Aufbau.

von Joe F. (easylife)


Lesenswert?

Gundelputz schrieb:
> Joe F. schrieb:
>> - Hast du mal versucht, die nachfolgenden Schieberegister-Eingänge (Pin
>> 2) jeweils mit Pin 10 (QS*) des vorherigen Registers zu verbinden?
>
> Ja.
> Im der Beschreibung steht das ja genau so drinn.

Auf deinem Breadboard ist aber Pin 9 verwendet.
Nimm mal Pin 10 statt 9 als Data-Out.

Und dann liegt da auch ein zweiter Hase im Pfeffer:
du hast immer Pin 9 (QS) mit Pin 3 des nächsten Registers verbunden.
Pin 3 ist aber CLK und nicht DATA in...

Wie dann das erste Register funktionieren kann, ist mir schleierhaft, 
vermutlich ist DATA auf gelb und CLK auf grün...?

von m.n. (Gast)


Lesenswert?

Joe F. schrieb:
> Momentan geht vermutlich immer Pin 9 auf Pin 2 des nächsten Registers.

Und das ist auch gut so.

> Pin 10 hat den Vorteil, dass das Signal um 1/2 CLK verschoben ist, und
> damit das Timing sicherer ist.

Damit kann lediglich eine zu flache Flanke von CLK etwas kompensiert 
werden. Mit einem ordentlichen CLK-Signal, wie es ein ATmegaxx liefert, 
ist Pin 9 als Ausgang besser und erlaubt höchste Taktraten, da die 
setup-time fast doppelt so lang sein kann. Eine verlängerte hold-time, 
wie sie Qs* liefert, ist garnicht notwendig.

von Frage (Gast)


Lesenswert?

Gundelputz schrieb:
> hier noch eben die fast fertige Grafik vom Aufbau.

Was will und so ein Bild sagen ?
Ich dachte immer in einem technischen Hobby zählt ein Schaltplan, so ein 
Bild ist für mich nichtssagend.

von Joe F. (easylife)


Lesenswert?

m.n. schrieb:
> Mit einem ordentlichen CLK-Signal

Bei so einem Drahtverhau?
Ich würde ja eher mit der CLK Rate runtergehen. Für sowas reichen ja ein 
paar KHz....

Kann nur nicht finden, wie man das beim Arduino konfigurieren kann.
shiftOut() scheint zu irgendeiner nicht näher spezifizierten Library zu 
gehören...

Und wenn es Probleme mit Pin 10 gibt, kann man Pin 9 ja wenigstens mal 
ausprobieren.

Problem liegt aber wohl eher in der Verwechslung von CLK und DATA...

: Bearbeitet durch User
von Frage (Gast)


Lesenswert?

Was soll das sein ?

shiftOut(p_data, p_clk, LSBFIRST, pattern);

Die Frage zielt nicht auf den Protoype ab, sondern auf die 
Implementierung des realen Codes.
Man sieht noch nicht mal die Datentypen der Parameter noch deren 
Bedeutung !

von m.n. (Gast)


Lesenswert?

Joe F. schrieb:
> Problem liegt aber wohl eher in der Verwechslung von CLK und DATA...

Ohne Frage ;-)

Frage schrieb:
> Was will und so ein Bild sagen ?
> Ich dachte immer in einem technischen Hobby zählt ein Schaltplan, so ein
> Bild ist für mich nichtssagend.

Ich finde das Bild richtig gelungen. Da sieht man, daß sogar ein 
Widerstand vorhanden ist. Wer den Kondensator findet, hat gewonnen!

von Joe F. (easylife)


Lesenswert?

Frage schrieb:
> Was soll das sein ?
>
> shiftOut(p_data, p_clk, LSBFIRST, pattern);

Das wird wohl ein bisschen vor den Arduino Programmierern versteckt, um 
sie sich erstmal um das Wesentliche kümmern zu lassen...
Finde ich ja nicht schlecht.

Ich vermute mal es ist diese Implementierung:
http://linux.dd.com.au/wiki/Arduino_ShiftOut
1
// License GNU Lesser General Public License 2.1 original material copyright David A. Mellis, changes copyright Scott Penrose
2
// New shiftOut, but backwards compatible, accepts
3
//  shiftOut( dataPin, clockPin, bitOrder, val);
4
//  shiftOut( dataPin, clockPin, bitOrder, val, bits);
5
//  shiftOut (dataPin, clockPin, bitOrder, val, bits, delayMicroSeconds);
6
void shiftOut(uint8_t dataPin, uint8_t clockPin, uint8_t bitOrder, int val, uint8_t bits = 8, uint8_t del = 0)
7
{
8
  uint8_t i;
9
  for (i = 0; i < bits; i++)  {
10
    if (bitOrder == LSBFIRST)
11
      digitalWrite(dataPin, !!(val & (1 << i)));
12
    else    
13
      digitalWrite(dataPin, !!(val & (1 << ((bits - 1 - i)))));
14
    digitalWrite(clockPin, HIGH);
15
    delayMicroseconds(del);
16
    digitalWrite(clockPin, LOW);            
17
  }
18
}

Und jetzt ist auch klar, wie man eine andere Bitbreite oder 
Geschwindigkeit als die Defaults einstellt...
Die Zeit zwischen low/high der Clock ist halt nicht so richtig 
konfigurierbar...

von Arduinomann (Gast)


Lesenswert?

m.n. schrieb:
> Wer den Kondensator findet, hat gewonnen!

Mitlesa schrieb:
> Ich muss bei jedem IC ein Abblock-C von VCC nach GND anschliessen.
> Ich muss bei jedem IC ein Abblock-C von VCC nach GND anschliessen.
> Ich muss bei jedem IC ein Abblock-C von VCC nach GND anschliessen.
> Ich muss bei jedem IC ein Abblock-C von VCC nach GND anschliessen.
> Ich muss bei jedem IC ein Abblock-C von VCC nach GND anschliessen.
> Ich muss bei jedem IC ein Abblock-C von VCC nach GND anschliessen.
> Ich muss bei jedem IC ein Abblock-C von VCC nach GND anschliessen.
> Ich muss bei jedem IC ein Abblock-C von VCC nach GND anschliessen.
> Ich muss bei jedem IC ein Abblock-C von VCC nach GND anschliessen.
> Ich muss bei jedem IC ein Abblock-C von VCC nach GND anschliessen.
> Ich muss bei jedem IC ein Abblock-C von VCC nach GND anschliessen.
> Ich muss bei jedem IC ein Abblock-C von VCC nach GND anschliessen.

von Joe F. (easylife)


Lesenswert?

Ändere mal den Aufruf
1
shiftOut(p_data, p_clk, LSBFIRST, pattern);

in
1
shiftOut(p_data, p_clk, LSBFIRST, pattern, 8, 10);

von m.n. (Gast)


Lesenswert?

Joe F. schrieb:
> Die Zeit zwischen low/high der Clock ist halt nicht so richtig
> konfigurierbar...

Dafür aber garantiert sehr lang.
Du wolltest kHz, da hast Du kHz ;-)

von Gundelputz (Gast)


Lesenswert?

Joe F. schrieb:
> Und dann liegt da auch ein zweiter Hase im Pfeffer:
> du hast immer Pin 9 (QS) mit Pin 3 des nächsten Registers verbunden.
> Pin 3 ist aber CLK und nicht DATA in...

das ist jetzt für mich aber extrem peinlich. Du hast aber sowas von 
Recht.
Ich schreibe diese Zeilen von 5m unter der Erde. Denn so tief bin ich 
gerade darin versunken.
Wenn mir das an dieser Stelle erlaubt sein darf so möchte ich dich in 
hösten masse Loben. Dies wahr einer der wenigen Beiträge in dennnen man 
mich nicht von oben herrab behandelt hat. Da Gute Litteratur eher selten 
ist sind Anfänger wie ich mehr und mehr auf die hilfe der "neuen Medien" 
angewiesen. Ich habe durh dich in den letzten Tagen mehr gelernt als den 
restlichen Fragen die ich hier gestellt.
Vielen vielen Dank vom ganzen Herzen.

Frage schrieb:
> Was will und so ein Bild sagen ?
> Ich dachte immer in einem technischen Hobby zählt ein Schaltplan, so ein
> Bild ist für mich nichtssagend.

siehe Lösung.



Nochmals vielen Danke für eure Hilfe.

von Gundelputz (Gast)


Lesenswert?

m.n. schrieb:
> Wer den Kondensator findet, hat gewonnen!

die habe ich nicht mit eingezeichnet. Nicht das noch Stimmen laut werden 
man könne durch diese nichts mehr erkennen. Aber sei versichert sie sind 
vorhanden.
Habe jetzt noch mal geprüft ob es auch ohne funktioniert.
Was soll ich sagen?
Ja macht es.
Aber keine Angst sind gleich wieder drann.

von Andreas (Gast)


Lesenswert?

Hallo zasammen ,
bitte um Antwort.
Immer bevor im "Debug (printf) Viewer" eine Zahl korrekt dargestellt 
wird, erscheinen eine ganze Reihe von Ausgaben von nichtgültigen Zahlen 
in schneller Folge. Erklären Sie, warum das so ist.

von Andreas (Gast)


Lesenswert?

Hallo zasammen ,
bitte um eine kurze Erklärung.
1.) Immer bevor im "Debug (printf) Viewer" eine Zahl korrekt dargestellt 
wird, erscheinen eine ganze Reihe von Ausgaben von nichtgültigen Zahlen 
in schneller Folge. Erklären Sie, warum das so ist.

2.) Sie haben  nur simuliert und nicht auf der Hardware am Laufen 
gesehen. Wie wird sich diese Störung (unter Punkt 1) bemerkbar machen?

3.) Was müßte getan werden, um diesen Störeffekt zu beseitigen?

von Joe F. (easylife)


Lesenswert?

Ey, ist das wirklich nötig, uralte Threads mit deinen Hausaufgaben 
vollzuspammen?
Das Thema des Threads hat doch nicht im Geringsten mit "deinen" Fragen 
zu tun!

von Andres (Gast)


Lesenswert?

Miau, ich bin eine Katze.

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.