Forum: Mikrocontroller und Digitale Elektronik Geht nur mit den Fingern im Spiel?


von Raphael (Gast)


Lesenswert?

Hallo!

ich habe eine schaltung mit einem mega88 und einen 74HC595 (NXP), die 3 
7-segment anzeigen steuern. Die einzelnen 7-segment-anzeigen werden per 
transistor einzeln der reihe nach geschaltet (f=125 Hz).

Das merkwürdige ist, dass der 74HC595 die daten nur annimmt, wenn meine 
Finger sich in der nähe der 3 Leitungen (SH_CP, ST_CP, DS) zwischen AVR 
und 74HC959 aufhalten. Die Übertragung habe ich in software gemacht 
(also kein SPI oder so).

Ich habe als probe die datenleitung (DS) immer auf 1 gelassen, und nur 
die takte für SH_CP und ST_CP generiert. Der storage register wird alle 
8 bits angesteuert und !OE ist auf VCC. Auf dem oszi sieht alles so aus 
wie es soll.

Hat jemand eine idee, woran das liegen mag?

Gruß
Raphael.

von egberto (Gast)


Lesenswert?

Masseproblem?

von Benedikt K. (benedikt)


Lesenswert?

Vermutlich irgendwas in dieser Richtung:
- offener Eingang
- Timingprobleme
- Übersprechen
- unsaubere Spannungen

von flätz (Gast)


Lesenswert?

!OE am besten mal fest auf Gnd legen.

von Jens G. (jensig)


Lesenswert?

fehlende Masse zw. beiden Teilen (AVR und 74HC959), oder offener Eingang 
irgendwo ...

von MagIO (Gast)


Lesenswert?

Und was ist mit !MR? Der Master Reset sollte doch wohl über Pull-Up auf 
Vcc liegen, oder auch mit dem Atmel verbunden sein, der da während der 
Arbeit ein High-Level ausgibt.

Tschau

von Raphael (Gast)


Lesenswert?

Also erstmal vielen Dank für die vielen tips! Ich kann sie leider erst 
heute abend ausprobieren.

Um die fragen zu beantworten:
 - !MR ist mit pull-up (10k) auf VCC.
 - !OE ist direkt mit GND festgebunden.
 - nur Q7' ist nicht verbunden.
 - spannungsversorgung hat 10mV ripple.

Ich werde also wohl die massen überprüfen und mich wieder melden, wenn 
das getan ist.

Danke!

Raphael.

von LTC3813 (Gast)


Lesenswert?

Ich tippe du schiebst die Daten auf der flaschen Clockflanke raus. Mit 
deinem Finger (Kapazität) veerschiebst du den Clock minimal und dadurch 
werden die Setup-Hold Zeiten knapp eingehalten.

von Raphael (Gast)


Lesenswert?

Was meinst du genau? Der 74HC595 kann immerhin 100MHz. Und mein mega88 
läuft auf dem internen oszillator (8 MHz).

Falls es hilft, hier ist der code:
1
void send_byte(uint8_t b)
2
{
3
    uint8_t i;
4
    
5
    for(i=0;i<8;i++){
6
  
7
  if(b & 1)
8
      SIPO_PORT |= 1<<DS_PIN; // set
9
  else
10
      SIPO_PORT &= ~(1<<DS_PIN); // clear
11
12
  b >>= 1;
13
14
  SIPO_PORT |= 1<<SH_CP_PIN; // set SH_CP
15
  SIPO_PORT &= ~(1<<SH_CP_PIN); // clear SH_CP
16
    }
17
18
    SIPO_PORT |= 1<<ST_CP_PIN; // set ST_CP
19
    SIPO_PORT &= ~(1<<ST_CP_PIN); // clear ST_CP
20
}

-Raphael.

von Raphael (Gast)


Lesenswert?

Also, die Lösung meines problems war noch viel einfacher als erwartet: 
ein paar copy-paste fehler hatten sich im code eingeschlichen!

Der port für den schieberegister war als eingang initialisiert! 
Manchmal, aber manchmal...

Vielen Dank an alle!

Raphael.

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.