Forum: Mikrocontroller und Digitale Elektronik Schieberegister mit Bascom zeigt keine Reaktion


von danny (Gast)


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

von 6A66 (Gast)


Lesenswert?

danny schrieb:
> Wo könnte da der Fehler liegen?

Schaltplan????

rgds

von 6A66 (Gast)


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

von Amateur (Gast)


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.

von Hugo (Gast)


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.

von Hugo (Gast)


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.

von Amateur (Gast)


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.

von Peter D. (peda)


Lesenswert?

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

Nö, der 595 hat ein Latch, das Schieben ist also unsichtbar.
Wenn alle 595 geladen sind, den RCLK 0->1 takten und fertig.

von Paul B. (paul_baumann)


Lesenswert?

In die 595 wird normalerweise erst alles seriell reingeschoben und dann
auf einen Schlag "nach der Seite abgekippt". So sieht man das 
Durchtakten
nach außen hin nicht.

MfG Paul

Edith sagt: Peter kann schneller schreiben als ich.
;-)

: Bearbeitet durch User
von danny (Gast)


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?

von 6A66 (Gast)


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

von Paul Baumann (Gast)


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

von Danny (Gast)


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?

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.