Digital klocka/termometer...

Planering och tankar kring eventuella framtida projekt.
Användarvisningsbild
rickeboy
Inlägg: 678
Blev medlem: 13 augusti 2003, 09:12:17
Ort: Göteborg / Karlskrona
Kontakt:

Digital klocka/termometer...

Inlägg av rickeboy »

Hoj... har börjat fundera på vad man skulle kunna använda LCDerna man har liggandes till... efter att ha konstaterat att ngt jag saknar är en riktigt bra klocka (ska bara visa timmar och minuter) som samtidigt visar datum/månad/dag på ett snyggt och smidigt sätt... efter lite funderingar kom jag fram till att man också kunde slänga ditt en smidig 1-wire temperatur sensor också... alltid kul att se tiden och konstatera att det faktiskt är kallt/varmt... :)

Hade tänkt mig att ta en av LCDerna jag har då och ta en plått... kanske rostfritt har inte bestämt mig ännu och i mitten eller en bit nedför "toppen" skära ut för LCD fönstret enbart... (hela grejen ska hänga på vägen)... funderar på om man kanske skulle trycka ditt en IR mottagare som man kan styra back lighten med... sen har man ju frågan hur man ska ställa in tid/datum/år etc...

I vilket fall som helst hade jag tänkt använda PIC 16F84 då jag har erfarenhet av den och har massvis hemma... samt att jag vet hur den funkar tillvis del... men den håller ju knappast tiden på ett bra sätt så igår gick jag in på www.maxim-ic.com och beställde några olika RTC:s som har år dag etc... frågan är bara hur man använder dem... slänger med artikelnumrena så om det är ngn som är intresserad av att hjälpa mig så är det fritt fram :)

DS1339
DS1337
DS1306
DS2417

Hmm... är rädd att det är ngn här som inte stämmer (att jag inte beställde den utan att det va ngn annan men är inte människa nog att komma på vilken... har nämligen inte fått ngt mail som säger vad jag har beställt ännu heller...)

Denna verkar intressant -->>
http://www.hut.fi/~jalapaav/Electronics/Pic/Clock/

//Rille
Användarvisningsbild
mrmike
Inlägg: 301
Blev medlem: 29 oktober 2003, 20:40:12

Inlägg av mrmike »

Ska du ha ir-mottagare till backlighten/snooze (ska det va väckarklocka?) så kan du ju använda en tv-fjärr att ställa in tiden med. Diskuterades det inte huruvida det blir bättre med RTC än m uK i en annan tråd, kommer inte ihåg vad folk kom fram till.
Användarvisningsbild
rickeboy
Inlägg: 678
Blev medlem: 13 augusti 2003, 09:12:17
Ort: Göteborg / Karlskrona
Kontakt:

Inlägg av rickeboy »

Jo jag har också funderat på om man inte kan ställa in tiden på det sättet med... jag har en stereo med fjärr som har en knapp för backlight och det är rätt smidigt att kunna stänga av backlightet då det faktiskt lyser MKT när man kör med sleep funktionen... och NEJ det ska inte vara ngn väckarklocka... har en som gör den funktionen bra... :)
Jo det disukterades i en annan tråd och dem verkade komma fram till att RTC va bättre men det kom inte fram ngt mer om hur man använder dem dessvärre...

//Rille
Användarvisningsbild
rickeboy
Inlägg: 678
Blev medlem: 13 augusti 2003, 09:12:17
Ort: Göteborg / Karlskrona
Kontakt:

Inlägg av rickeboy »

Hmm... ingen som vet ngt om RTCs eller hur man använder dem? Skulle i princip bara behöva hjälpa med hur man ska lyckas kommunicera med 2-wire grejorna... (kolla på www.maxim-ic.com med art.nr i mitt första inlägg)

Hade verkligen uppskattat hjälp så att man inte sitter fast i detta projektet...

//Rille
matseng
Inlägg: 2360
Blev medlem: 16 september 2003, 17:18:13
Ort: Dubai, United Arab Emirates
Kontakt:

Inlägg av matseng »

Du säger att 16F84'an "den håller ju knappast tiden på ett bra sätt". Hur menar du då? Att den tappar tiden vid strömavbrott eller att den drar sig?
Användarvisningsbild
rickeboy
Inlägg: 678
Blev medlem: 13 augusti 2003, 09:12:17
Ort: Göteborg / Karlskrona
Kontakt:

Inlägg av rickeboy »

Främst att den drar sig... och att det kan vara roligare att koppla till en till komponent... samt att man slipper ganska mkt kodande och tänkande för att den ska hålla tiden...

Sen att den tappar tiden vid strömavbrott är ju också en faktor...

//Rille
Användarvisningsbild
mrmike
Inlägg: 301
Blev medlem: 29 oktober 2003, 20:40:12

Inlägg av mrmike »

Det finns PIC:ar m hårdvaru-I2C, -SPI etc. kika i databladen. Du kan också kolla om det finns några "app notes" hos microchip eller maxim.
matseng
Inlägg: 2360
Blev medlem: 16 september 2003, 17:18:13
Ort: Dubai, United Arab Emirates
Kontakt:

Inlägg av matseng »

Att den drar sig stämmer nog inte överrens med verkligheten. Varför skulle kristallen till 16F84'an vara sämre än den kristall som du kopplar till DS1339?

Tänkandet och kodandet är det nog tvärt om med. Den handfull med rader kod som går åt för att hålla en H:M:S-klocka gående internt i PIC'en kommer att vara som en fjärt i rymden i jämförelse med den bunt med kod som går åt för att prata "2-wire DSL/SCL"-protokoller och ta hand om datan från RTC-chippet.

Använder man PIC'ens interna timer och sätter ett interrupt på den så sköter sig timingen helt självt. Man behöver inte ligga in nån loopoch räkna antalet varv eller så.

Fast det kan ju vara en kul utmaning det förståss om man vill lära sig lite mer lågnivåprogrammering.

DS1339-chippet som du har beställt finns bara i 8pin uSOP (micro ytmonterat) kapsel. 1337 finns i DIP, men den har samma 2-wire protokoll den.

1306 däremot har 3-wire och finns som DIP-kapsel. Du har en application note här http://pdfserv.maxim-ic.com/en/an/app2361.pdf som visar hur den kan använas med en PIC.
Användarvisningsbild
rickeboy
Inlägg: 678
Blev medlem: 13 augusti 2003, 09:12:17
Ort: Göteborg / Karlskrona
Kontakt:

Inlägg av rickeboy »

mrmike>> Jag tänker köra med PIC16F84A då jag har många att tillgå...

matseng>> Det är inte kristallen som drar sig utan snarare kodningen som gör att den "drar sig"... medtanke på att jag kommer koda PICBasic och assembler parallellt skulle det inte bli så mkt kodning då jag tror PICBasic har kommandon för att underlätta det hela... vilket medför att det antagligen skulle bli mindre kod... (åtminstone av vad jag ser... sen i slutändan blir det ju nog mer kod då PICBasic lär slänga in ganska mkt mer än vad man skulle gjort själv om man gjorde allt i ASM...)

Sen är det H:M - YY:MM:DD jag hade tänkt göra vilket även det medför rätt mkt mer kod, eftersom man då måste hålla reda på betydligt mkt mer grejor... men jag hör dig... kanske inte är helt omöjligt att få det att funka utan en RTC... om än att det inte hade varit helt fel...

Vad ska man ha då? Kristall självklart antar att det bara är å ta ngn "lagom" och sen köpa bra kondingar också... T ex 74-515-29 (kristall 4Mhz) eller 74-517-19 (kristall 20Mhz)... och 2 kondingar på mellan 15pF till 33pF (kollade i databladet för PIC16F84A vilket är den jag kommer använda) t ex denna 65-848-58 (22pF)

Hmm... ngt som jag har läst lite om men inte riktigt greppat är hur jag i såfall skulle göra för att få den interna timern att ge ett interupt varje sekund/minut? Tips och hjälp matseng...

//Rille
matseng
Inlägg: 2360
Blev medlem: 16 september 2003, 17:18:13
Ort: Dubai, United Arab Emirates
Kontakt:

Inlägg av matseng »

Ja, det är bara att hugga en trevlig kristall. Kondingarna är inte särskilt kritiska.

Att få timern att generera ett interrupt varje sekund är det lite värre med. Man får låte den interrupta tex var 10'e millisekund istället och räkna upp en "tick"-variabel upp till 100. När den kommit upp till 100 så nollställer man den variabeln och ökar på sekund-variabeln. Och när sekund-variabeln kommit till 60 så nollställer man den och ökar på minut-variabeln osv....

Att hålla reda på dag/månad och år är inte svårt det heller. Det enda trixiga är att man måste kolla vilken månad det är för att avgörqa när man ska sluta öka på dag-variabeln och sätta den till 1 och öka på månads-variabeln istället. Men det är inte värre än några if-satser.

Här är ett exempel i picbasic. http://www.melabs.com/resources/samples ... clockx.bas. Detta exempel drar sig 94 sekunder om dagen eftersom timern står inställd på att generera ett interrupt var 16.384 ms och tickräknaren räknar upp 61 sådana för att få ihop (nästan) en sekund.

Eftersom jag aldrig använt picbasic själv så vet jag inte om man kan programmera om timern utan att picbasicen skiter ner sig i övriga rutiner eller inte. Men jag misstänker att sålänge med inte använder typ serin/out så borde det inte spela någon roll.

Fast å andra sidan är detta ett utmärkt lagom enkelt projekt för att ha som sitt första "enbart i assembler"-projekt. Särskilt om du har programmerat åtminstone lite i assembler tidigare och har en viss pejl på hur det fungerar. Vi är säkert flera här som kan ge råd & dåd om du skulle fastna.
Användarvisningsbild
rickeboy
Inlägg: 678
Blev medlem: 13 augusti 2003, 09:12:17
Ort: Göteborg / Karlskrona
Kontakt:

Inlägg av rickeboy »

Hmmm... enbart i assembler... nja... känns inte riktigt lockande... det är därför jag hade tänkt göra de grejorna som är relativt "simpla" i assembler och det jag känner mig helt borta på i PICBasic... en blandning liksom... och det ska inte vara några problem med att timern skiter sig...

Exemplet verkar mindre kul dock... 94 sekunder om dagen... hmmm... tar en titt!
Hmm... så du tror inte man skulle slippa problem om man körde med en RTC... visst man hade fått lite mer hantering av variabler etc men inte mkt mer eftersom man hade sluppit hela grejen med räkning etc... man får ju datum tid etc i handen i princip... bara att man ska kunna ställa det på ngt smidigt sätt... hmm... jaja... man måste börja ngnstans och jag börjar med bara en PIC... fårse hur det går... jag har iaf blivit mer motiverad nu :)
Tack matseng...

//Rille
matseng
Inlägg: 2360
Blev medlem: 16 september 2003, 17:18:13
Ort: Dubai, United Arab Emirates
Kontakt:

Inlägg av matseng »

Ja, om du i PicBasic'en kan ställa om timern från 16.384 mS till 20 mS eller 10 mS så kan du få 0 sekunders drift per dag.

Tja, exakt 0 i diff lär det inte bli eftersom en kristall inte är perfekt, men som sagt var så är ju inte kristallen till RTC'n något exaktare än den till PIC'en - så det jämnar ju ut sig :-)

Vilka värden som du ska skicka till timer-registrena (om man nu kan göra det ifrån Picbasic) beror på vilken kristall du väljer.
Användarvisningsbild
rickeboy
Inlägg: 678
Blev medlem: 13 augusti 2003, 09:12:17
Ort: Göteborg / Karlskrona
Kontakt:

Inlägg av rickeboy »

Hmm... jag funderar på att köra den på 20Mhz kristall... frågan är om man ska köra den på en kristall som är exakt på 20Mhz... man skulle ju kunna köra den på 4Mhz men det jag inte riktigt förstår är varför man inte håller kristallerna på 4Mhz jämt... det finns ju kristaller med 4,0960, 4,194304, 4,433619 som frekvens men... varför? Vad fyller dem för funktion...

Hmm... om man kan ställa om timern från 16.384mS till ngt annat i PICBasic... hmm... jag ser inte varför det inte skulle gå... i vilket fall som helst så går det i assembler... ska läsa mig in på om det gör ngn skillnad för PICBasic delen... och samma sak med timer-registrena det går ju också att skriva i assembler och ha med i PICBasic koden... men ska kolla om det gör ngn skillnad...

Kanske du har lust att utveckla hela grejen med timer registrena? Dvs t ex vilka värden man ska försöka slänga in vid 20Mhz resp 4Mhz...

//Rille
matseng
Inlägg: 2360
Blev medlem: 16 september 2003, 17:18:13
Ort: Dubai, United Arab Emirates
Kontakt:

Inlägg av matseng »

Hum, det verkar som om det var för länge sedan jag arbetade med 16F84'or. 84'an har bara en timer och den man man inte ställa in på något smidigt sätt. Det finns ett timerregister som man kan ändra på, men det måste återställas direkt vid varje interrupt för att det ska fungera. Annars så delar den alltid med 256. Gör man det i assembler så fungerar det bra, men ifrån picbasic så kommer man att få lite väl varierande timing skulle jag tro.

Vad man får göra är att köra med timern i freerunning mode och sedan hantera avrundningsfelen via en enkelt algoritm.

Jag återkommer med exempel. Tror jag ska ladda ner picbasic och labba lite jag åxå. Det kanske är praktiskt - särskilt med en processor som är såpass jobbig att arbeta med som PIC'arna. Det är inte kul att ha ett enda abetsregister (W). Jämför man med AVR's 16 (fullständiga) + 16 (begränsade) arbetsregister så suxxar PIC stock fullständigt. Men PIC'arna är ju billigare :-)

Jag har blivit bortskämd med AVR aldeles för mycket den senaste tiden verkar det som.
Användarvisningsbild
mrmike
Inlägg: 301
Blev medlem: 29 oktober 2003, 20:40:12

Inlägg av mrmike »

Med timern kan du dela kristallfrekvensen med 4*256*1, 4*256*2, 4*256*4, 4*256*8 (4*256(TMR0 slår runt)*prescaler) osv och få ett interrupt då timern slår runt. Vill du ha ett interrupt varje 1/1000 sekund kan du ta en kristall på 4069000Hz och sätta prescaler till 4. Hoppas jag har räknat rätt.
Skriv svar