Forum: Mikrocontroller und Digitale Elektronik 74HC595 verschiebt sich


von Bernhard _. (Firma: dl1bg) (bernhard_)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

die Schaltung im Anhang zeigt zwei 74HC595 in Reihe geschaltet, der Code 
unten steuert die beiden an.

Das erste Schieberegister verhält sich wie erwartet, beim zweiten sind 
alle bits um eins nach "hinten" verschoben, d. h. QB hat das bit, 
welches in QA sein sollte.

"SER" im Schaltbild: DataPin, DataPort im Code
"SCK" im Schaltbild: ClockPin, ClockPort im Code
"RCK" im Schaltbild: LatchPin, LatchPort im Code

Einen einfachen Hardwarefehler á la Übersprechen oder Vertauschung halte 
ich für unwahrscheinlich, der obere Baustein läuft wie geschrieben 
perfekt und eine geringere Geschwindigkeit verändert nichts.

Findet jemand von euch den Fehler?

Vielen Dank
Bernhard
DL1BG
1
bool CTuner::WriteBitMasktoDevice(void)
2
{
3
  uint32_t loc_ui32_BitCount;
4
  uint32_t loc_ui32_BitStream = prv_ui32_NominalBitMask;
5
6
  diag_printf("write tuner %lX\n", prv_ui32_NominalBitMask);
7
8
  for(loc_ui32_BitCount = 0; loc_ui32_BitCount < 16; loc_ui32_BitCount++)
9
  {
10
    WriteBitToDevice(loc_ui32_BitStream & 0x8000);
11
    loc_ui32_BitStream <<= 1;
12
  }
13
14
  PulseLatch();
15
16
  GPIO_ResetBits(prv_pui32_DataPort, prv_ui32_DataPin);
17
  
18
  return true;
19
}
20
21
void CTuner::WriteBitToDevice(bool par_ui01_Bit)
22
{
23
  if(true == par_ui01_Bit)
24
  {
25
    GPIO_SetBits(prv_pui32_DataPort, prv_ui32_DataPin);
26
  }
27
  else
28
  {
29
    GPIO_ResetBits(prv_pui32_DataPort, prv_ui32_DataPin);
30
  }
31
  HAL_DELAY_US(5);
32
  GPIO_SetBits(prv_pui32_ClockPort, prv_ui32_ClockPin);
33
  HAL_DELAY_US(5);
34
  GPIO_ResetBits(prv_pui32_ClockPort, prv_ui32_ClockPin);
35
}
36
37
void CTuner::PulseLatch(void)
38
{
39
  GPIO_SetBits(prv_pui32_LatchPort, prv_ui32_LatchPin);
40
  HAL_DELAY_US(5);
41
  GPIO_ResetBits(prv_pui32_LatchPort, prv_ui32_LatchPin);
42
}

: Bearbeitet durch User
von Stefan (Gast)


Lesenswert?

Ich sehe weder im Schaltplan noch im Programm einen Fehler. Deswegen 
vermute ich, dass entweder die üblichen Abblock-Kondensatoren in der 
Spannungsversorgung fehlen, oder die Takt-Signale nicht sauber (eckig) 
genug sind. Optokoppler sind ziemlich träge.

Versuch es mal mit einem Schmitt-Trigger in der Taktleitung.

von Thomas E. (thomase)


Lesenswert?

> 74HC595 verschiebt sich
Das Fehlen der 100nF-Kondensatoren mögen die 595er gar nicht.

mfg.

von Bernhard _. (Firma: dl1bg) (bernhard_)


Lesenswert?

Die Signale an den Schieberegistern sind in der Tat mehr sinusförmig als 
rechteckig. Aber so lange die Pegel passen (3,5 V und 0 V) und der 
Phasenversatz nicht zu groß wird, sollte das doch kein Problem sein?

Abblockkonensatoren sind natürlich drin, aber die Teile arbeiten mit 65 
mA Gesamtstrom auch nahe an ihrer Lastgrenze.

von Thomas E. (thomase)


Lesenswert?

Bernhard __ schrieb:
> Die Signale an den Schieberegistern sind in der Tat mehr sinusförmig als
> rechteckig. Aber so lange die Pegel passen (3,5 V und 0 V) und der
> Phasenversatz nicht zu groß wird, sollte das doch kein Problem sein?

Die Spannung nicht. Aber die Anstiegszeit. Guck dir im Datenblatt die 
"input rise and fall time" an. Mit deinem Sinus hast du zwischen High 
und Low undefinierte Zustände. Und zwar für elektronische Ewigkeiten, in 
denen der Eingang nicht weiss, was er sein soll und sich folglich etwas 
ausdenkt. Denn irgendeinen Zustand muss er ja annehmen.

> Abblockkonensatoren sind natürlich drin, aber die Teile arbeiten mit 65
> mA Gesamtstrom auch nahe an ihrer Lastgrenze.
Das ist nicht das Problem.

mfg.

von Stefan (Gast)


Lesenswert?

Wenn die Flanken vom Taktsignal nicht steil genug sind, kann es 
passieren, dass das Schieberegister merhmals taktet, wo es nur einmal 
takten soll. Ich denke, genau das passiert bei Dir.

Gleiche kann auch passieren, wenn die Spannungsversorgung einbricht, 
während ein Takt verarbeitet wird. Dann wechselt die Stromaufnahme 
mehrfach sehr stark (ist bei CMOS Technologie ganz normal). Die 
Schwankungen der Versorgungsspannung wiederum kann verursachen, dass aus 
einem gewollten Takt mehrere ungewollte werden.

Der Effekt tritt auch ganz ohne Laststrom auf. Diese 
Abblock-Kondenstoren (möglichst direkt am Chip) sind einfach Pflicht. 
Und zwar immer und für jeden einzelnen Chip. Gewöhn Dir das an, und Du 
erlebst keine Wunder mehr.

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


Lesenswert?

Nimm für Takt und Daten nen 6N137.
Für RCK reicht nen normaler lahmer Opamp aus.

von Bernhard _. (Firma: dl1bg) (bernhard_)


Lesenswert?

Bitte entschuldigt, dass ich mich erst jetzt wieder melde.

Das Problem lies sich lösen, in dem ich wie vorgeschlagen schnellere 
Optokoppler verwendet habe. Aber auch die langsamere Ansteuerung 
funktioniete, als ich die vorhandene Abblockung durch einen 47 µF Tantal 
ergänzt habe. Auf der Vorsorgungsspannung waren vorher Einbrüche von ~80 
mV beim Schalten.

In der nächsten Version kommen dann beide Maßnahmen und eine potentere 
Ansteuerung drauf.

Vielen Dank euch allen!
Bernhard

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.