Ha koll på tiden i en PIC18F452

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
Maze
Inlägg: 435
Blev medlem: 8 juni 2004, 18:49:29
Ort: Göteborg

Ha koll på tiden i en PIC18F452

Inlägg av Maze »

Håller på med ett projekt där jag behöver ha ett "kopplingur" för att starta och stoppa olika aktiviter. Därför vill jag att processorn ska ha koll på dygnets tid. Vid start av systemet matas aktuell tid in. Sen vill jag att processorn håller tiden i ett par månader med en rimlig felmarginal.

Har kommit fram till två lösningar men vet inte vilken som är att föredra. Alternativ ett är att koppla in en extern klockkristall till TIMER1 på picen och det andra är att koppla in en extern RTC krets. Är bara i behov av att ha koll på tiden så en RTC kanske är överdrivet ? Eller finns det andra och bättre lösningar ?

MVH Magnus
Användarvisningsbild
Chribbe76
EF Sponsor
Inlägg: 1167
Blev medlem: 17 januari 2004, 22:43:17
Ort: Stockholm

Inlägg av Chribbe76 »

Jag tycker det är lätt att programmera en klockbas som använder kristallen som driver picen.
Här är ett exempel på en interrupt-rutin(Pic16) som ska köras med 65536 cyclers intervall med valfri kristall.

Kod: Markera allt

		movlw	1	;Subtrahera 1 till Count3
		subwf	Count3
		btfsc	STATUS,0
		goto	InteMinus	;Skippa om Count3 inte blev negativ


		movf	Add1,w	;Addera hela Count med KlockBasen(konstanter)
		addwf	Count1
		movf	Add2,w
		btfsc	STATUS,0
		incfsz	Add2,w
		addwf	Count2
		movf	Add3,w
		btfsc	STATUS,0
		incfsz	Add3,w
		addwf	Count3

		incf	Sekund	;+ en sekund

		movf	Sekund,w	;Nollställ om den är 60
		xorlw	.60
		btfsc	STATUS,2
		clrf	Sekund
InteMinus:
Jag har inte fått någon respons när jag beskrivit metoden tidigare så om du undrar hur den funkar så fråga.
sodjan
EF Sponsor
Inlägg: 43247
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

> med en rimlig felmarginal.

Eftersom ingen annan kan veta vad du anser är "en rimlig felmarginal"
under "ett par månader", så är det ingen större mening att svara på
de andra frågorna...

En eventuell (beroende på din definition av "rimlig felmarginal")
lösning 3: Använd huvudoscillatorn som tidbas.
cyr
Inlägg: 2712
Blev medlem: 27 maj 2003, 16:02:39
Ort: linköping
Kontakt:

Inlägg av cyr »

Jag har använt huvudoscillatorn på en PIC som tidbas, pillade lite med lastkapacitansen för att få det tillräckligt bra. Tyvärr minns jag inte hur exakt jag fick det, och jag har ju förstås ingen aning om vad rimlig felmarginal är i det här fallet.

Kan du översätta till ppm?
Användarvisningsbild
bengt-re
EF Sponsor
Inlägg: 4829
Blev medlem: 4 april 2005, 16:18:59
Skype: bengt-re
Ort: Söder om söder
Kontakt:

Inlägg av bengt-re »

Har annars för mig att det finns en del RTC till riktigt bra priser som går att batteribackuppa med en knappcell. Lite onödigt, men det är smidigt och skönt att ha en RTC om man behöver tid i sin krets. NOggranheten beror ju sedan bara på hur dyr kristall man sätter i RTC´n ( om den nu inte har inbyggd)
Användarvisningsbild
anlamotte
Inlägg: 859
Blev medlem: 5 augusti 2003, 15:54:34
Ort: Stockholm
Kontakt:

Inlägg av anlamotte »

Jag har använt DS17885 RTC till några projekt.
Den är smidig med batteribackup osv.....
Användarvisningsbild
Maze
Inlägg: 435
Blev medlem: 8 juni 2004, 18:49:29
Ort: Göteborg

Inlägg av Maze »

Tackar för tipsen. Säg en felmarginal på max 5 minuter per månad. Saken är att processorn ska gå konstant under ett par månader och då kanske det är bra med en RTC med batteribackup. Låter jag picen räkna tiden finns ju risken att den låser sig och vill man då använda en watchdog förlorar man tiden man ställt in.
Användarvisningsbild
Chribbe76
EF Sponsor
Inlägg: 1167
Blev medlem: 17 januari 2004, 22:43:17
Ort: Stockholm

Inlägg av Chribbe76 »

5 minuter per månad blir c:a 100 ppm.

Ram-minnet raderas inte av en WDT-reset så man kan låta programmet behålla tidräknarens värde om det skulle inträffa.
Användarvisningsbild
Icecap
Inlägg: 26629
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Inlägg av Icecap »

Du behöver en RTC! "Strömsvigt" är riklig anledning till att välja det.

Det finns dock en lösning som kan användas:
Koppla dit en FRAM EEPROM som medger en jäkla massa skrivningar. Då kan du spara hur långt den har kommit för t.ex. varje minut.

Om den återstarter återkallas senaste värdet och den kör vidare.
Användarvisningsbild
Maze
Inlägg: 435
Blev medlem: 8 juni 2004, 18:49:29
Ort: Göteborg

Inlägg av Maze »

Får bli en RTC med batteribackup. Då kan jag även spara lite andra variabler i dess RAM som jag vill att processorn ska komma ihåg vid en eventuell omstart. Tackar för hjälpen
Skriv svar