Forum: Mikrocontroller und Digitale Elektronik Multiplexprogrammierung von 6 NIXIEs


von entropie (Gast)


Lesenswert?

Hallo zusammen,

ich stehe ein wenig auf dem Schlauch, da ich nicht so der 
Programmiercrack bin. Vielleicht könnt ihr mir einen kleinen Denkanstoß 
geben.

Ich habe 6 Nixies, angesteuert über 2 BCD-Treiber (7414) und 3 Anoden 
(MPSA42+92 Combo). Ich nutze PORTB an einem Attiny4313 um die Treiber zu 
setzen. Nun versuche ich die Röhren zu multiplexen. Bisher habe ich nur 
mit einem Treiberbaustein gearbeitet in einem Testaufbau. Damit leuchten 
nur 3 Röhren.
Der HV-Teil wird bisher noch über die allseits unbeliebte 555-Schaltung 
realisiert. Am tiny hängt ein C-MOS für den Sekundentakt und ein 
DCF-Modul.

Ich multiplexe nach dem Muster Pause - H10 & S1 - Pause - H1 & S10 - 
Pause - M10 & M1, dazu nutze ich einen Timer-Interrupt, alle 100 µs 
(OCR1A = 1 MHz  1 Prescaler  10 kHz - 1). Während der Pausen sind die 
Anoden ausgeschaltet. Während den Anzeigezeiten schicke ich an PORTB 
einfach die Dezimalzahlen: PORTB = H10 | (S1 << 4). Während der 
Anzeigezeiten sind die Anoden für 1 ms durchgeschaltet.
Realisiert habe ich das Ganze über ein Switch-Statement, dass die 
Timer-Interrupts zählt und entsprechend auslöst (erster Interrupt bei 
case 0 (Pause), H10 & S1 - Interrupt bei case 1, nächste Pause bei case 
10, usw.).
Ich nutze IN-2 Röhren, die ich vermutlich mit zu kleinem 
Anodenwiderstand betreibe (die Ziffer 1 wird nicht richtig angezeigt, 
stattdessen leuchtet der ganze Röhrenboden); der Widerstand ist 22k. 
Noch habe ich nur 3 Röhren ausprobiert.

Ergebnis dieser Programmierung ist: ich habe die richtigen Zahlen aber 
auf allen 3 Röhren gleichzeitig. Versuche die Pausenzeiten zu erhöhen 
oder die Anodeneinschaltzeiten zu erhöhen, waren bisher nicht von Erfolg 
gekrönt. Ab 20 ms Gesamtzykluszeit fangen die Ziffern auch an zu 
Flackern.

Was könnte ich falsch machen ? Habe so etwas noch nie programmiert.
Ich danke Euch schon mal im Vorraus für hilfreiche Tipps.
Gruß ent

von Georg G. (df2au)


Lesenswert?

Wie wäre es mit einem Schaltbild? Mir ist nämlich unklar, wie man mit 
einem 7414 Nixie Röhrensteuern kann. Die Spannungsfestigkeit dieses ICs 
ist doch recht niedrig.

von Paul B. (paul_baumann)


Lesenswert?

entropie schrieb:
> Was könnte ich falsch machen ?

Du betreibst die Röhern multiplex. Das ist es, was Du falsch machen 
willst.
Im Ernst: Die Röhren waren sicher nicht billig. Wenn Du sie lange leben 
lassen willst, betreibe sie statisch und ändere die Schaltung 
dahingehend.

mfG Paul

von Peter2 (Gast)


Lesenswert?

Georg G. schrieb:
> Mir ist nämlich unklar, wie man mit
> einem 7414 Nixie Röhrensteuern kann.

Sicher meint er 74141

von entropie (Gast)


Angehängte Dateien:

Lesenswert?

Genau ich meine den 74141, den russischen Treiberbaustein. Die 
Hardwarekonfiguration funktioniert, die Uhr ist ein Nachbau. Natürlich 
kann ich im Aufbau etwas verdreht haben aber ich möchte erstmal die 
Multiplexansteuerung besser verstehen. Ich habe momentan kein Schaltbild 
hier aber die Anodenansteuerung erfolgt wie im obigen Bild.

Als Basiswiderstand für den MPSA 42 habe ich 10 k genommen.

von Michael U. (amiga)


Lesenswert?

Hallo,

das man Nixies besser nicht im Multiplex betreibt, wenn sie nciht 
speziell
dafür vorgesehen sind, ist eine Frage der Lebensdauer und ausreichend im 
Netz diskutiert.

Mein Bekannter hat auch eine Röhre in seinem Sammelsurium, der fehlt die 
'0', einfach defekt...

Zum Multiplex in Deiner Scahltung:
alle Anoden aus. Wert für die erste Stelle an den Decoder.
Anode der ersten Stelle für x ms einschalten.
Alle Anoden aus. Wert für die zweite Stelle an den Decoder
Anode der ersten Stelle für x ms einschalten.
usw. usw. über alle Stellen und dann wieder von vorn.

Gruß aus Berlin
Michael

von entropie (Gast)


Lesenswert?

Ok danke, das probiere ich heute nochmal aus. Bisher habe ich Die 
respektive Kathode immer parallel mit der respektiven Anode 
durchgeschaltet und nach Abschalten der Anode, die Cathode noch 
unverändert gelassen. Vielleicht liegt es daran.

Danke schon mal.

von Uwe N. (ulegan)


Lesenswert?

Ich tippe hier auf einen Programmierfehler, kannst du dein Programm 
nicht mal zeigen?
Was heisst 'die richtigen Zahlen aber auf allen 3 Röhren gleichzeitig' ?
Sieht man mehrere Ziffern gleichzeitig in einer Röhre? Dann stimmt was 
mit der Anodenansteuerung nicht.
Grundsätzlich solltes du es so machen:
- alle Anoden aus
- Kathoden für erstes Röhrenpaar ausgeben
- erste Anode an
- auf nächsten Interrupt warten
- alle Anoden aus
- Kathoden für zweites Röhrenpaar ausgeben
- zweite Anode an
- auf nächsten Interrupt warten
- alle Anoden aus
- Kathoden für drittes Röhrenpaar ausgeben
- dritte Anode an
- auf nächsten Interrupt warten
und dann wieder von vorne.
Nach dem Ausschalten der Anoden evtl. kurz warten, etwa 10µs, damit die 
Röhren wiklich aus sind, wenn die nächsten Kathoden angelegt werden. 
Gibt sonst leicht Geisterbilder.
Grudsätzlich ist es besser Nixies nicht zu multiplexen, ich habe jedoch 
selbst drei 4-stellige Uhren mit ZM1042-Röhren seit mehreren Jahren 
problemlos am laufen. Multiplexfrequenz ist 1kHz, machst du das wirklich 
mit 10kHz (100µs Interrupt) ?
Eine einstellige Uhr mit einer IN1 hat jedoch nicht lange funktioniert, 
da war die Röhre tot. Hier vermute ich jedoch eine zu hohe 
Anodenspannung als Ursache. Die lief hoch, wenn die Röhre dunkel war. 
Beim ersten Einschalten danach fliesst dann kurz ein zu hoher 
Anodenstrom. Ich denke, dass war der Grund für den Ausfall.

Gruß Uwe

von entropie (Gast)


Lesenswert?

Hallo Uwe,

ok danke, ich werde es mal Ausprobieren. Die Uhr läuft quasi bei 
00:00:00 los und bei z.B. 00:02:13 sieht man in den rechten drei Röhren 
(habe die ersten drei nicht angeschlossen) die Zahlen 1,2,3 gleichzeitig 
dreimal in jeder Röhre. Also 1,2,3 wird in den letzten 3 Röhren 
gleichzeitig angezeigt. Bei 00:01:02 sieht man dann analog in den 
letzten 3 Röhren die Zahlen 0,1,2. Das man von den ersten drei Röhren, 
die nicht angeschlossen sind, nichts sieht, ist auch logisch, denn die 
laufen über den anderen Kathodentreiber, der nicht angeschlossen ist. 
Also denke ich auch es ist ein Programmfehler, die Zahlen werden nicht 
pro Röhre gemuxed, sondern in allen 3 gleichzeitig.

Ich habe mein Programm gerade nicht hier aber es ist recht simpel. Im 
Interruptvektor steht:

anode_cnt++;

switch(anode_cnt){
 case 0: PORTB = H10 | (S1 << 4); anode_cnt++; break;
 case 1: PORTD |= (1 << ANODE1); anode_cnt++; break;
 case 10: PORTD &= ~(1 << ANODE1); anode_cnt++; break;
 case 11: PORTD |= (1 << ANODE2); PORTB = H1 | (S10 << 4); anode_cnt++; 
break;
 case 21: Anode 2 aus
 case 22: Anode 3 an, PORTB = M10 | (M1 << 4); anode_cnt = 0; break;
}

Der Timer läuft mit 100 µs, nen Grund dafür gibt es nicht, ich habe wie 
gesagt keine Ahnung vom muxen. Der Timer läuft aber richtig, habe ihn 
per Serial Output mal gegen den externen 1Hz C-MOS laufen lassen, um die 
Sekundengenauigkeit des AVR zu testen. Das paßte alles.

Vermute mal in meiner bisherigen Logik werden die Ziffern der Kathode 
durchgeschaltet, 100 µs warten, dann die Anode, 1ms warten, dann wird 
die Anode ausgeschaltet, 100µs warten und die nächsten Ziffern der 
Kathode sowie die nächste Anode wird eingeschaltet 1ms warten. Da könnte 
ich mir vorstellen, die 100µs switching time bringt der 74141 nicht 
sauber. Ich probier heute mal deinen Vorschlag aus Uwe, bei 1 kHz.

Eine Frage habe ich noch, du nutzt keine blanking Intervalle in denen du 
bewußt für mehrere µs alle Röhren abschaltest. Davon las ich häufiger 
als Notwendigkeit um das "Ghosten" der Röhren zu vermeiden. Aber es 
funktioniert bei dir trotzdem ?

Danke und Gruß ent

von Uwe N. (ulegan)


Lesenswert?

Ein Blanking-Intervall nutze ich, schrieb ich auch.
Ich schalte dabei alle Anoden für ca 10µs aus,
dann neue Werte an die Kathoden und die nächste Anode an. Danach bleiben 
Anoden und Kathoden unverändert bis zum nächsten Interrupt.
Alle Kathoden ausschalten geht ja beim 74141 nicht wirklich.
Wird bei dir anode_cnt++ zweimal im Interrupt aufgerufen, vor und in dem 
switch()? Dann überspringst du einige Fälle, wohl die, die die Anoden 
ausschalten...

Vorschlag:
1
anode_cnt++;
2
3
switch(anode_cnt){
4
 case 0: PORTB = H10 | (S1 << 4); PORTD |= (1 << ANODE1); break;
5
 case 9: PORTD &= ~(1 << ANODE1); break;
6
 case 10: PORTB = H1 | (S10 << 4); PORTD |= (1 << ANODE2); break;
7
 case 19: PORTD &= ~(1 << ANODE2); break;
8
 case 20: PORTB = M10 | (M1 << 4);  PORTD |= (1 << ANODE3); break;
9
 case 29: PORTD &= ~(1 << ANODE3); anode_cnt=-1; break;
10
}

Gruß Uwe

von Entropie (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Uwe,

Danke für deine Rückmeldung. Stimmt zum blanking Intervall hast du was 
geschrieben. Habe gerade in meinen Code geschaut und da ist anode_cnt++ 
nicht doppelt, also habe ihn vorhin falsch abgetippt.

Habe jetzt deinen Vorschlag getestet, jeweils im 10 und 1 kHz Bereich 
und es klappt nicht. Habe im Netz noch für 6 Röhren die Empfehlung 600 
us Einschaltzeit und 2500 us Ausschaltzeit gefunden, geht auch nicht. 
Dauert der ganze Zyklus länger als 20 ms geht auch das Flackern los.

Ich vermute mal es liegt dann an meinem experimentieraufbau, die 
Software müsste ja so stimmen. Hab euch das Chaos mal abfotografiert :). 
Ich werde am Wochenende nochmal die Verkabelung prüfen. Vielleicht liegt 
es auch am Anodenwiderstand und dass er zu klein ist mit 22k. Die Ziffer 
1 geht ja auch nicht richtig.

Gruß ent

von H.Joachim S. (crazyhorse)


Lesenswert?

Kann mal irgendeiner Steckbretter verbieten?

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

H.Joachim S. schrieb:
> Kann mal irgendeiner Steckbretter verbieten?

Da müsstest du den unbeschäftigtsten EU-Parlamentarier deiner Wahl
dazu bringen, einen entsprechende EU-Verordnung in die Wege zu leiten.
;-)

von Hp M. (nachtmix)


Lesenswert?

Michael U. schrieb:
> das man Nixies besser nicht im Multiplex betreibt,

Vollkommen richtig.
Mit zweien kann man das noch machen, aber bei zu viel Strom fangen auch 
die internen Verbindungsdrähte an zu leuchten und werden durch 
Kathodenzerstäubung abgetragen.  Auch können dann durch den hohen 
Spannungsabfall nicht angesteuerte Kathoden als Anoden wirken und 
mitleuchten.

Michael U. schrieb:
> Mein Bekannter hat auch eine Röhre in seinem Sammelsurium, der fehlt die
> '0', einfach defekt...

Solche Röhren kenne ich auch. Sie steckten in einem Meßgerät, dass über 
Jahrzehnte zu 999,9% der Zeit 24h am Tag und 365 Tage im Jahr "000" oder 
"001" anzeigte. Vielleicht ein Dutzend Mal pro Woche wurde dann 
Messungen mit einer Dauer von jeweils 10s gemacht, bei denen die Nixies 
auch etwas anderes anzeigen durften.
Durch den kontinuierlichen Ionenbeschuss wurde die 0 soweit abgetragen, 
bis diese Elektrode nur noch ein hauchdünnes Drähtchen war.

: Bearbeitet durch User
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.