Hoihoi
Michel
Ja daar gaan we weer, weer iemand die een klok wilt maken (7 segment of nixie klok) met de arduino 
Maar ik ben klein begonnen, arduino startset gekocht. lekker mee gespeeld, vervolgens een lading nixies gekocht. Daar heb ik al mee lopen testen met nixiedriver ic. vervolgens een 4x segement gebouwd om mee te spelen, zie foto.
Deze wordt aangestuurd met een 4543 7 segment driver en een 4028 voor display selectie. Ik heb dus 6 uitgangen gebruikt van de Arduino.
Ik haal inspiratie van CO en newtechandme.com.
OK, dat multiplex principe snap ik. maar het volgende.
ik krijg het niet voor elkaar in de code om een array voor de 4028 (2bit) te maken en dat ik dan ook vlak voordat ik naar de volgende display wil springen het display wil blanken (anti ghosting). Dat kan door een 1,1,1,1 naar de 4543 te sturen.
// Connection
// Arduino pin
// 2 a 5443ic
// 3 b 5443ic
// 4 c 5443ic
// 5 d 4543ic
// 6 A 4028IC
// 7 B 4028IC
//
int A = 6;
int B = 7;
int count= 0; //initialize count variable
//array for seven segment pins
byte sevenSegmentPins[] = {2,3,4,5};
//2D array for numbers
byte sevenSegment[11][4] =
{
//a b c d
{ 0,0,0,0 }, // = 0
{ 1,0,0,0 }, // = 1
{ 0,1,0,0 }, // = 2
{ 1,1,0,0 }, // = 3
{ 0,0,1,0 }, // = 4
{ 1,0,1,0 }, // = 5
{ 0,1,1,0 }, // = 6
{ 1,1,1,0 }, // = 7
{ 0,0,0,1 }, // = 8
{ 1,0,0,1 }, // = 9
{ 1,1,1,1 } //blank display
};
void setup()
{
pinMode(A, OUTPUT); //pin 6
pinMode(B, OUTPUT); //pin 7
for(int i=0; i<4; i++)
{
pinMode(sevenSegmentPins[i], OUTPUT);
}
digitalWrite(A, LOW); // 1e digit aan
digitalWrite(B, LOW); // 1e digit aan
}
//function that reads the 2D array for numbers
void segmentWrite(byte digit)
{
byte pin = 2;
for (byte i=0; i<4; ++i)
{
digitalWrite(pin, sevenSegment[digit][i]);
++pin;
}
}
void loop()
{
digitalWrite(A, LOW);
digitalWrite(B, LOW);
segmentWrite(1);
delay(5);
digitalWrite(A, HIGH);
digitalWrite(B, LOW);
segmentWrite(2);
delay(5);
digitalWrite(A, LOW);
digitalWrite(B, HIGH);
segmentWrite(3);
delay(5);
digitalWrite(A, HIGH);
digitalWrite(B, HIGH);
segmentWrite(4);
delay(5);
}
Ook als ik hiermee een klok wil maken dan loopt hij de array voor de 4543 door en plaatst hij een blank na de 9.
Hoe kan ik nu een klok maken van dit geheel? Hopelijk kunnen jullie me een duwtje in de juiste code geven.
Het doel is inderdaad om een nixie klok te bouwen met 4 in-18's en 2 kleintjes voor de seconden (op de kopse kant) en een dekatron in het midden die 1x per seconde ronddraait. Dekatron heb ik ook al getest aan het lichtnet (echter dan 4x per seconde rond).
Alle onderdelen heb ik dus nu alleen nog stoeien met de code.
Genoeg voorbeelden te vinden op google zeker voor arduino.
En wat je nog nodig hebt is een klok is zoals de DS1307. Anders gaat de tijd zowizo verkeerd lopen.
Google dan eens "Arduino DS1307" en je zult er denk ik genoeg hebben.
Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
DS1307 is hooguit om het programma iets simpeler te maken, heeft zeker niets met nauwkeurigheid te maken. (Ze lopen tenslotte beiden op een kristal...)
hadv
Just find out what you like and let it kill you
Precies, gewoon een 32.768 KHz kristal, een 10 pF en een variabele C en en timer interrupt. Eventueel een 4060 en een halve 4013 als je per se een 1 Hz puls wilt.
Daar krijg je de boel behoorlijk nauwkeurig mee.
Het enige voordeel van een DS1307 is dat die met een backup celletje de tijd niet verliest.
Echt nauwkeurig is natuurlijk het inlezen van de $GPRMC van een GPS ontvanger 
Hoihoi
Michel
Er is idd een berg info te vinden voor klokken, dat gaat wel goed komen (denk ik)
@hadv; dat is idd een mogelijkheid echter heb ik geen scope om hem af te stellen
Ik heb een ds1307 rtc besteld voor de arduino; weten jullie of die ook stand alone kan werken voor een 1hz puls?
Ik wil mijn eerste nixie klok met shift registers maken zonder microcontroller.
Ik hou er niet van om de nixie's te multiplexien vanwege de verkorte levensduur of is een 2x3 multiplexing wel ok? 1x 6 vind ik voor de k155id1 en de buizen te veel..... (Wat is eigenlijk het verschil tussen een 44141 en een k155id1?)
Met 2x3 multiplexing zou ik nog uitkomen met de arduino UNO. Zonder multiplexing moet ik al aan de arduino maxi denken......
Op 28 augustus 2013 08:52:31 schreef Hoihoi:
Ik heb een ds1307 rtc besteld voor de arduino; weten jullie of die ook stand alone kan werken voor een 1hz puls?
De datasheet is je vriend. *
Ik hou er niet van om de nixie's te multiplexien [...]
Met 2x3 multiplexing zou ik nog uitkomen met de arduino UNO. Zonder multiplexing moet ik al aan de arduino maxi denken......
Als je niet wil multiplexen dan kan je IO expanders gebruiken. Die geven je, zoals de naam zegt, meer IO-pinnen. Een andere mogelijkheid voor dit doel zijn schuifregisters.
* Enkele relevante fragmenten uit de datasheet:
FEATURES
- Programmable Square-Wave Output SignalPin 7: Square Wave/Output Driver. When enabled, the SQWE bit set to 1, the SQW/OUT pin outputs one of four square-wave frequencies (1Hz, 4kHz, 8kHz, 32kHz).
CONTROL REGISTER
Bit 4: Square-Wave Enable (SQWE). This bit, when set to logic 1, enables the oscillator output. The frequency of the square-wave output depends upon the value of the RS0 and RS1 bits. With the square-wave output set to 1Hz,
the clock registers update on the falling edge of the square wave. On initial application of power to the device, this bit is typically set to a 0.
Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Levensduur van gemultiplexte nixies is niet veel korter als van niet gemultiplexte, als je de stroom maar niet te hoog maakt.
Voor de ZM1030 geeft Philips zelfs een minimum life expectancy van 50.000 uur, en de ZM1030 is intern gemultiplexed 'by nature' (heeft maar 9 pinnen)
Hoihoi
Michel
Nou, sorry jongens maar ik kom er met de code toch niet uit. Helaas kan ik nu even niet de code posten.
Whats happening ?
Heb een ds1307 module gekocht voor de arduino. Beetje mee zitten spelen op een lcd, no problem.
Probleem zit hem in het hoe ik bijvoorbeeld het minuten getal die uit de ds1307 komt kan splitsen naar 2 cijfers (/10). Hoe doe je dat in de code?
Nog een problem. Ik heb een 4 bit lijn voor de 0-9 cijfers (7 segment driver) en een 2 bit lijn voor de blok selectie (ik heb 4 blokken). Dit om eerst te testen met m'n 7 segment proef bordje. Hoe doorloop je die 2 arrays om je getal te laten zien. (Snap er niets meer van.....)
Heb zo veel sites bezocht en bekeken daar wordt je eng van maar niet de code die ik zoek. Kan iemand mij helpen alstublieft?
Op 23 augustus 2013 16:34:04 schreef Arco:
DS1307 is hooguit om het programma iets simpeler te maken, heeft zeker niets met nauwkeurigheid te maken. (Ze lopen tenslotte beiden op een kristal...)
Neen.
Je programma wordt veel ingewikkelder, maar het is nauwkeuriger.
Als je gebruik maakt van het kristal van de Arduino zelf heb je al na enkele minuten een verschil van seconden. Als je hiermee een klok gaat maken moet je je uur alle dagen bijstellen of hij loopt ferm fout.
Bij de DS1302 daarentegen zit er zo goed als geen afwijking op (Ik heb dit een keer getest door hem 3 dagen te laten draaien, en er was geen seconde verschoven t.o.v. de klok van de PC)
Met de arduino time library (en wire, en ds1307 library) is het een fluitje van een cent. Ik had mijn klok lopen in 5 minuten.
http://www.pjrc.com/teensy/td_libs_Time.html
Let op: time lib zelf gebruikt de interne klok van de arduino, maar zodra je een reference clock toevoegt werkt ie wel degelijk extern. En dan in 2 regels code (1 setSyncProvider en 1 getTime). Ik kan dat niet korter.
Edit: voor het opsplitsen van de nummers kun je in C de modulo operator gebruiken
int getal = ....(0..99)
int digit1 = getal / 10;
Int digit2 = getal % 10;
[Bericht gewijzigd door RobvdVeer op (17%)]
Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Als je een van de kristal c'tjes van die arduino vervangt door een trimmertje, kun je net zo exact afregelen.
Ik doe het meestal door per minuut een aantal cycles bij te tellen of af te trekken. Houdt je iets van 1 minuut afwijking per jaar over.
Waatrschijnlijk heb je met die DS1307 net geluk gehad en een precies lopend kristal getroffen. Anders is het niet te verklaren.
Op 4 september 2013 21:15:37 schreef Hoihoi:
Probleem zit hem in het hoe ik bijvoorbeeld het minuten getal die uit de ds1307 komt kan splitsen naar 2 cijfers (/10). Hoe doe je dat in de code?
...
Met de functie modulo kun je de rest van een breuk bereken.
610 minuten / 60 ≈ 6 uur (wel even opletten of je afrondingen goed gaan)
nu de functie modulo:
610 minuten % 60 = 10
Dus 6:10
Nog een problem. Ik heb een 4 bit lijn voor de 0-9 cijfers (7 segment driver) en een 2 bit lijn voor de blok selectie (ik heb 4 blokken). Dit om eerst te testen met m'n 7 segment proef bordje. Hoe doorloop je die 2 arrays om je getal te laten zien
Weet niet of dit het meest efficient is, maar dit kan ook met modulo (rest). Wat je moet proberen is om vier losse getallen te krijgen. Men neme 12:15 als voorbeeld. Het eerste array bevat nu 12.
12/10 ≈ 1 --> eerste getal wordt 'n 1 (let weer op of de afrondingen goed gaan)
12%10 = 2 --> tweede getal wordt een twee
Ik hoop dat mijn verhaal duidelijk is.
Hoihoi
Michel
Nou ik zit even met mn ds1307 module te stoeien. Ik had de tijd ingesteld op dat ding en aan de praat gekregen op een lcd scherm.
Elke dag heb ik wel even mee gespeeld en hij hield de tijd gewoon bij zodra de spanning eraf was.
Vervolgens op vakantie voor een week. Ik doe de stekker in het stopcontact en de tijd en de dag is 3 dagen + een aantal uur verlopen.
Zo is hij aangesloten (behalve de ds-pin naar digital pin 2, is toch voor optionele temperatuur uitlezing).
Er zit een batterij op.
snap er niets van...
3 dagen verschil in een week is wel èrg veel. Maar de bedrading is zo moeilijk te zien op het plaatje...
Hoihoi
Michel
Het plaatje is idd te klein zie ik nu maar zo lastig aangesloten is hij niet.
2 pinnen op de i2c bus en de 2 analoge poorten ernaast heb ik laag en hoog gemaakt zodat die de ds1307 voeden (<20mA).
Ik heb dezelfde ds1307 vorige week weer hergeprogrammeerd met de juiste tijd maar nu niet aangesloten op het arduino bord (los op mn bureau). Ik zal morgen even kijken of hij de tijd nog weet.
Zou het kunnen dat de batterij leegloopt over de analoge poorten van de arduino en dat ik hem toch maar direct moet voeden?
En er zit toch een laadcircuit op die ds1307 bordjes?
Op 23 september 2013 10:55:41 schreef Hoihoi:
En er zit toch een laadcircuit op die ds1307 bordjes?
Eehm nee. Bovendien is de batterij in de ds1307 geen oplaadbare. Maar los daarvan zou het niet zo mogen zijn dat de batterij de arduino gaat voeden, als dat zo is, is er iets goed mis.
Op 23 september 2013 10:59:35 schreef RobvdVeer:
[...]
Eehm nee. Bovendien is de batterij in de ds1307 geen oplaadbare. Maar los daarvan zou het niet zo mogen zijn dat de batterij de arduino gaat voeden, als dat zo is, is er iets goed mis.
Ehm, zeker weten? In dit specifieke geval zit er een laadcircuit op. Heb laatst er een gekocht voor exact hetzelfde doel (een arduino klok).
Er zit een LIR2032 cel op, was zelf ook verrast.
Die had ik niet verwacht... En is een laadcircuit werkelijk zo eenvoudig? Want dan ga ik dat meteen inbouwen in mijn eigen ontwerp.
Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Oplaadbaar maken heeft weinig zin. Een standaard 2032 gaat al minimaal 10 jaar mee. (Dan is de oplaadbare ook wel gaar)
Daarbij ook nog dat een 'gewone' zo'n 250mA is, en een oplaadbare maar 40mA...
Op 23 september 2013 23:28:25 schreef Arco:
Oplaadbaar maken heeft weinig zin. Een standaard 2032 gaat al minimaal 10 jaar mee. (Dan is de oplaadbare ook wel gaar)
Da's ook weer waar.. Bedankt dat je me weer met beide benen op de grond zet. Ik zou eerst moeten focussen op het afkrijgen, voordat ik het ga verbeteren. 
Het lijkt erop dat overladen een mogelijkheid is.
Uitgaande van de 1N4148 spanningsval van 0,6V heb je met een 5V voeding een maximale laadspanning van 4,4V. Dat is meer dan 4.2V.
Wellicht door R5, R4+R6 en het verbruik van de DS1307 valt het mee?
R4+R6 geven een verbruik van 2,1uA (bij 4.2V). De DS1307 heeft een verbruik van max 50nA als de voeding erop staat, dus die negeren we even. Stroom door R5 zou 1mA kunnen zijn (bij 0,2V).
Bij elkaar opgeteld word er dus altijd overladen als de schakeling altijd aan staat.
Nu ik er zo over nadenk, wellicht verstandig om de LIR2032 te vervangen voor een CR2032 en het laadcircuit er af te slopen. (maar dat hebben jij en Arco ook al bedacht tijdens het typen van deze post)
rew
four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/
Op 23 september 2013 23:49:52 schreef dino7:
Uitgaande van de 1N4148 spanningsval van 0,6V heb je met een 5V voeding een maximale laadspanning van 4,4V. Dat is meer dan 4.2V.
De 0.6V gaat uit van een "normale stroom". Zodra je nauwelijks stroom trekt neemt de spanningsval over een diode ook weer af. Voor een onbelaste gelijkrichter/condensator-afvlakking zal je ook iets van 0V spanningsval over de diodes meten.
Ga je de boel uit een 5V lader-ding voeden staat er ook wel eens 5.5V op. Zeker als je nauwelijks stroom trekt. Kortom, lithium ion laden vanaf de 5V met een diode als spanningsval vind ik een dom plan.
Hoihoi
Michel
hmnn, heb even een foto gemaakt van mijn module.
Volgens mij heb ik dan de batterij laad module....

Ik heb net de module weer uitgelezen en hij is weer behoorlijk verlopen..... welke componenten uit het schema van dino7 moet ik dan even kapot knippen/lossolderen en/of overbruggen? Kan ik even kijken of het daar aan schort. dan zet ik daarna er wel een CR2032 op.
Hopelijk los ik daarmee een probleem op en kunnen er meerdere mensen hiermee geholpen zijn.
[Bericht gewijzigd door Hoihoi op (12%)]