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
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
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.
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.
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.
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.
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.
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
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?
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
> 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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.