Sida 1 av 3

Nixie-klocka

Postat: 4 december 2005, 19:32:25
av Virr3
Julen börjar närma sig och jag tänkte försöka att hinna göra en nixie-klocka innan julen har kommit... vet inte än men kanske som en julklapp...

jag har sett att några har gjort sådanna klockor här på forumet:) och de ä verkligen superfina :)

jag har kollat lite på priser på sånna här nixierör, och de är inte så farligt dyra...

Själva logiken i dessa rör vad jag fattat är inte så jätte svår(iallafall inte de rör jag sett), en gemensam anod och sen tänds olika siffror beroende på vilken av de andra pinsen som du jordar...

eller?

aja, nu till frågan...
jag vill ha det ganska snabbt gjort för att det ska bli färdigt innan jul som sagt, men vad är då smartast? jag har en atmega32:a liggandes här, men jag är inte speciellt bra på att programera dessa kretsar :(

frågan är då ifall man ska satsa på att bygga den med bara logik-kretsar eller ska man ta tjuren vid hornen och programera den stackars avr:en?

för, det blir väl inte så jätte mycket olika kringkomponenter ändå? en jäkla massa trissor blir det ju i vilket fall som helst.

vad tycker ni att man ska göra? det ska inte vara saker som alarm å saker, det får jag vänta med, utan bara en liten fin klocka med timmar minuter och sekunder...

Postat: 4 december 2005, 19:51:49
av Jeppsson
Jag har oxå blivit sugen på en Nixie-klocka...
Själv så kommer bygget att bli runt någon typ av PIC-krets så man kan bygga in fler funktioner om man vill senare...

Var har du tittat på Nixierör??? Vilka priser har du hittat???

Mvh

Jepppsson

Postat: 4 december 2005, 19:52:23
av Tekko
Jag har några liggande, det är modellen som man direktmonterar på kretskort.

Postat: 4 december 2005, 20:01:22
av Jeppsson
Hur ser dom ut? Ser man siffrorna från sidan för hållande till monteringen eller ser man siffrorna uppifrån???

Vad kostar de och var har du köpt dom?

Postat: 4 december 2005, 20:06:08
av Virr3
tekko >> du har inga bilder på dem? pris kanske vi skulle kunna diskutera genom pm?

jeppsson >> eBay
35$=279 ungefär iallfall

detta tycker inte jag är så jättedyrt för 12 stycken... det blir 23,25 per rör...

det finns billigare, kanske inte på buy now men... det kommer upp fler helatided :)

Postat: 4 december 2005, 22:38:13
av Virr3
blir nog ändå µCn... för att få det hela lite mer kompakt...

börjat på koden lite, skulle vara snällt ifall någon kunde säja ifall det skulle funka att göra på detta sättet...

Kod: Markera allt

uint8_t tim
uint8_t min
uint8_t sek
delay();
for(i;i>5;I++)
	{
		if (tim==24) tim=1;
		if (min==60) min=1; tim++;
		if (sek==60) sek=1; min++;
	delay();
	sek++;
	}
delay()
{
	for(d=0;d<250000;d++)
		{
		delay_loop_us(40);
		}
}
det är grunden för klockan, sen gör jag funktioner för alla siffror...

men hur löser man det smidigast att överföra siffror i avr:en till utgånger? ifsatser?

alltså if(tim==1)
port X hög;
Port X2 hög;
osv, det blir endel ifaatser isåfall men, det kanske är det bästa sättet? eller vet någon hur man löser det på ett "finare" sätt

Postat: 5 december 2005, 00:11:07
av BER
Kodförslag

Jag skulle skapa arrayer. Viktigt är att arryerna hamnar i programminnet och inte i ramminnet. Använd sedan bitvis oppeartioner för att överföra rätt data till portarnas register.

Exempel på om några bitar är reserverad för något.

portb = ( portb & 0b11110000 ) | ( timmar1[tim/10] & 0b00001111);
portc = ( portc & 0b00110011 ) | ( timmar2[tim%10] & 0b11001100);
o.s.v

Syntaxen kanske inte är 100 men du förstår säkert idén.

Jo...
if (min==60) min=1; tim++;

skall nog vara
if (min==60){
min=1;
tim++;
}

I den kompilatorn jag använder kommer annars bara koden fram till först ";" köras när min==60.

/ Daniel

Postat: 5 december 2005, 07:35:00
av Virr3
tack :)

Förstår inte riktigt hur du menar med arrayen... skulle du kunna förklara lite mer om det? :oops:

Postat: 5 december 2005, 07:45:20
av speakman
Vad det gäller koden så kommer "tim" att vara "24" under en sekund, sedan blir den "1". :)
Varför inte lägga koden i ett timerinterrupt ställd på sekunden?
Och börja koden med "sek++;" så blir det enklare att tänka sedan:

Kod: Markera allt

sek++;
if(sek > 60) {
   sek = 1;
   min++;
}

if(min > 60) {
   min = 1;
   tim++;
}

if(tim > 24) {
   tim = 1;
}
För att veta hur man enklast får ut siffrorna på pinnarna så vill jag gärna se ett schema först. :)

Mvh
speakman

Postat: 5 december 2005, 14:52:26
av Virr3
grejat med interuppt innan och tyckte att det var väldigt knöligt och jobbigt... mycket "joxigare" än att bara köra en forloop som jag har en delay i...

jag har inte riktigt funderat ut shemat, men man kanske skulle kunna använda en lysdiod drivare och skicka en seriell signal till den och den överför de då till parallella signaler?

för varje rör har 9 pins, en för varje siffra... om man då ska ha en atmega32:a med 32 i/o portar blir det lite trångt om jag ska ha sex rör...

någon som har ett förslag på hur man ska lösa det? eller ska man skita i att försöka utöka io-portarna och gå på en till µC?

Postat: 5 december 2005, 15:34:29
av speakman
Jag vet inte om man brukar multiplexa rör, men då är det ju definitivt ett alternativ.
Annars kan du ju använda dig av latchar + hex -> dec-räknare (för du behöver väl knappast visa flera siffror samtidigt i samma rör?) så blir det ju optimalt. :)

Mvh
speakman

Postat: 5 december 2005, 18:42:48
av Virr3
speakman>> tack :)
jag vet hur en räknare funkar... dock latchar har jag inga tidigare egenskaper av...

skulle någon vilja förklara lite smått för mig hur de funkar tillsammans med räknaren?

Postat: 5 december 2005, 19:22:59
av speakman
Dom funkar enkelt förklarat så att dom låser "positionen" för t.ex. 8 pinnar när man strobar en särskilld pinne. Alltså, man parallellkopplar flera latchar över en 8-pinnars buss, och drar en separat strobe-pinne till varje en. Sedan lägger man ut det läge man vill ha på första latchen på bussen, och skickar en strobe till första latchen.
Nu har första latchen låst sig, och du kan nu lägga ut nytt läge på bussen utan att latchen ändrar "utsidan".
När du lagt ut läget för latch nr.2, så stroba den. Så fastnar det nya "värdet" på latch nr.2:s utpinnar. Osv. osv...

Läs datablad om t.ex. 74373.

Sedan sätter du räknarna *efter* latcharna för att spara in ytterligare pinnar. :D

Mvh
speakman

Postat: 5 december 2005, 19:37:43
av Illuwatar
Multiplex är inget vidare för nixies - ger dålig ljusstyrka och hemska störningar om man inte ser upp. Bättre är som sagt mellanlagring i latchar - det är så jag gjorde min klocka som baseras på en AT90S8515. Jag gjorde det enkelt för mig - 8 pinnar på MCU'n matar ut ett BCD-värde för den siffra jag vill lägga ut (tog två rör åt gången) och ytterligare två pinnar väljer vilket latchpar som skall skrivas till. En BCD till binäravkodare per rör ser till att rätt siffra i röret tänds. Själva högspänningen (omkring 180V) tar speciella transistorer hand om. Med denna metod kan man styra alla individuella siffror i rören med enbart 10 pinnar. Man kan säkert trixa ner det till 7 pinnar genom att mata ut BCD-värdet rör för rör istället för parvis. Fast ibland är man lat av sig...

Edit: jag använder en kombination at 4028 och 74HC273 för att få till logiken. Transistorerna är av typen MPSA42.

Postat: 5 december 2005, 19:46:14
av Virr3
okej... ska kika igenom de databladen till de kretsarna så kanske jag förstår lite bättre hur de funkar :D

Stort tack:D

Edit: Illuwatar, vad använde du för att få klocksignalen till 237:an?