Schieberegister mit Bascom zeigt keine Reaktion

Gast #3623968
Lesenswert?

Hallo bin dabei eine Nixie Uhr zu bauen, nun habe ich das Problem mit 
den verbauten Schieberegistern (74HC595), dass eigentlich gar nichts 
passiert die Pins MR, STCP, SHCP und DS hängen am Controller und OE habe 
ich direkt auf Masse gelegt. Der Programmcode sieht folgendermaßen aus:

"If _sec_alt < _sec Or _sec_alt > _sec Then

   _sec_bcd = Makebcd(_sec)
   _min_bcd = Makebcd(_min)
   _hour_bcd = Makebcd(_hour)

   Scl = 0
   Scl = 1

   Shiftout Shift_pin , Clock , _sec_bcd , 3 , 8
   Shiftout Shift_pin , Clock , _min_bcd , 3 , 8
   Shiftout Shift_pin , Clock , _hour_bcd , 3 , 8

   Rck = 1
   Waitms 10
   Rck = 0

_sec_alt = _sec


End If"

Die Pins die am MC hängen sind als Ausgänge konfiguriert an PA.2 bis 
PA5.
Ich verwende einen ATmega32.
Ich habe die Register kaskadiert und immer 4 Ausgänge der Register auf 
die Eingänge von Nixietreibern gelegt.
Wenn OE nun auf Masse liegt leuchtet immer nur eine 9 der Röhre und wenn 
ich OE auf VCC (5V) lege leuten ein paar Nullen eine eins und eine 
zwei!?!
Wo könnte da der Fehler liegen?

Schöne Restostern noch,

Danny
Gast #3624273
Lesenswert?

danny schrieb:
> Wenn OE nun auf Masse liegt leuchtet immer nur eine 9 der Röhre und wenn
> ich OE auf VCC (5V) lege leuten ein paar Nullen eine eins und eine
> zwei!?!

/OE gehört auf 0V damit die Ausgänge eingeschaltet sind. Wenn du die 
Ausgänge in Hi-Z schaltest (/OE = high) dann sieht die nachfolgende 
Stufe irgendeinen Pegel wenn da keine Pullups dran sind.

rgds
Gast #3624292
Lesenswert?

Oft wird aber auch OE, während des Schiebens auf High gezogen, um 
unsinnige bzw. zweideutige Zwischenzustände zu vermeiden.

Also:
-OE=1
"schieben"
-OE=0

Allerdings darf dann die nachfolgende Hardware ihrerseits, aus dem 
Z-Zustand, keinen Blödsinn ableiten.
Gast #3624309
Lesenswert?

Amateur schrieb:
> Oft wird aber auch OE, während des Schiebens auf High gezogen, um
> unsinnige bzw. zweideutige Zwischenzustände zu vermeiden.

Hochohmigen Zustand mit OE nutze ich immer nur, wenn mehrere Ausgänge 
zusammengeschaltet sind. Zum Schieben ohne die Ausgänge zu beeinflussen 
ist SHCP da.
Gast #3624312
Lesenswert?

Hugo schrieb:
> Amateur schrieb:
>> Oft wird aber auch OE, während des Schiebens auf High gezogen, um
>> unsinnige bzw. zweideutige Zwischenzustände zu vermeiden.
>
> Hochohmigen Zustand mit OE nutze ich immer nur, wenn mehrere Ausgänge
> zusammengeschaltet sind. Zum Schieben ohne die Ausgänge zu beeinflussen
> ist SHCP da.
Sorry, nicht SHCP sondern STCP.
Gast #3624314
Lesenswert?

Ich vergaß, ganz Wichtig ist das ausschalten der Ausgänge, wenn Du, was 
ja fast normal ist, byte-weise ausgibst:

Ein Beispiel hierzu:
a. Schieben nach links
b. Ausgangsbyte = 00010001
c. Es soll 00010000 ausgegeben werden

Zustand Bitmuster Bewertung
0       00010001  Soll alt
1       00100010  Unsinn
2       01000100  Unsinn
3       10001000  Unsinn
4       00010001  Zufällig alt
5       00100010  Unsinn
6       01000100  Unsinn
7       10001000  Unsinn
8       00010000  Soll neu
Machen Deiner Hardware die "wandernden" Einsen nichts aus - kein 
Problem.
Irritiert diese die für mehrere Taktzyklen "stehende" 1 - dann schon.
Alle anderen Ausgänge zappeln, je nach Zustand, auch.
Gast #3624471
Lesenswert?

Danke schonmal für die vielen Antworten.

Der Schaltplan ist leider etwas zu groß um ihn als PNG oder GIF 
hochzuladen.

Hab mehrere Platinen, der Controller sitzt zB auf einer anderen als die 
Register und die Nixie Treiber, welche sich eine Platine teilen.

Wenn ich die Controller Platine abziehe von der Register Platine ändert 
sich in der Anzeige gar nix, obwohl wie Pins für die Ansteuerung alle 
Durchgang haben.

Der Programmcode den ich im ersten Post angehangen habe sollte aber 
funktionieren. oder?
Gast #3624657
Lesenswert?

danny schrieb:
> Der Programmcode den ich im ersten Post angehangen habe sollte aber
> funktionieren. oder?

Hallo danny,

ich kann jetzt kein bascom .... aaaber:
> If _sec_alt < _sec Or _sec_alt > _sec Then

Da gehört schon ausreichend gehirnverrenkung dazu um das flüssig zulesen 
wie in der deutschen Sprache sollte auch im programmieren interpunktion 
und satzzeichen guter stil sein besonders wenn das jemand andere 
irgendwann mal lesen soll also ein bischen mehr an klammern und und und

Merkste was?

Nebenbei: Ich kenne die Operatorvorränge von Bascom nicht. Ist das "OR" 
dem Vergleich vorrangig oder nachrangig? Ist das Or binär oder logisch?

Was kommt denn an den Pins raus? Schon mal da nachgeschaut? Wenn nicht 
mit Scope dann mit Logikstift?

rgds
Gast #3624744
Lesenswert?

> If _sec_alt < _sec Or _sec_alt > _sec Then


Was ist aber, wenn sec = sec_alt ist?

Oben steht doch: wenn sec-alt kleiner ist als sec, oder wenn sec_alt 
größer
ist als sec, dann mache los....


MfG Paul
Gast #3625356
Lesenswert?

Hallo,
für die Syntax von Bascom kann ich leider nichts, klar könnte man das 
sicherlich schöner machen aber das passt eigentlich.

Wenn _sec_alt = _sec dann wird nichts neues in die Register geschoben da 
sich da die Uhrzeit nicht verändert.

Die Controller Ausgänge sollten passen hab zu Testzwecken leds 
rangehangen, da ich nichts anders da hab.

Könnte es daran liegen das ich die Kondensatoren auf der Register 
Platine einige cm von den Ics weg gesetzt habe?

Oder kann es Probleme damit geben wenn die Ics eine Versorgungsspannung 
von 6,2V haben und die Pins von Controller nur knappe 5V rausgeben?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren