Timer i PIC

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
tusse
Inlägg: 1364
Blev medlem: 19 augusti 2003, 21:56:17
Ort: Järfälla

Timer i PIC

Inlägg av tusse »

Tänkte bygga en timer för en kamera, där ska finnas lite mer funktioner som jag tänkte överlåta till PIC16f628. Programmerar i PIC-Basic och där finns vad jag kan se ingen timerfunktion, PULSOUT skulle nog fungera men om tiden blev 60 min tvivlar jag att det är någon lösning.
Det är ingen tidtagning i tiondels sekunder utan fasta tider från någon minut upp till en timme.

Att ställa tiden ska ske med ett par knappar som man stegar fram tiden med.

Tusse
Pjoms
EF Sponsor
Inlägg: 644
Blev medlem: 24 maj 2004, 12:18:40
Ort: Ö-vik

Inlägg av Pjoms »

Du kan ju använa Pause eller Sleep, ev. tillsammans med en For/Next-loop för att få det lite hanterligare.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Normalt sätter man upp en timer för att ge en "tidbas", säg 1 sek eller 1 minut om den upplösningen räcker.

I interrupt rutinen för timern räknar man sedan upp sek/min/tim räknare, antingen i "riktiga" klockslag, eller bara som en rellativ tid (rellativt när PIC'en startades eller någon annan händelse...)

Om du ska "ställa tiden" (alltså ett intervall, inte ett klockslag ?), så måste du väll ha någon slags LCD eller liknande att visa den på. Naturligsvis inget problem, men du sa inget om det.

Sedan beror ju lösningen även en del på vad "lite mer funktioner" är för något och vilka krav de ställer.

En display med knappar : http://www.tradera.com/auction/aid_17596887
(Ok, ok, det är jag som säljer den... :-) )

När det gäller PIC-Basic är jag helt "lost", assembler är roligare... :-)
Användarvisningsbild
tusse
Inlägg: 1364
Blev medlem: 19 augusti 2003, 21:56:17
Ort: Järfälla

Inlägg av tusse »

OK, den på tradera har jag redan sett men har en del displayer ligger.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

OK, fint.
En av mina på tradera blev såld för 30 min sedan, men det var väll någon annan... :-)
Användarvisningsbild
tusse
Inlägg: 1364
Blev medlem: 19 augusti 2003, 21:56:17
Ort: Järfälla

Inlägg av tusse »

Pjoms skrev:Du kan ju använa Pause eller Sleep, ev. tillsammans med en For/Next-loop för att få det lite hanterligare.
Har provat med både pause och sleep med och utan kristall och det stämmer inte med tiden. sätter jag den på 60 sekunder så "vaknar" kretsen efter 45 sekunder. Någon ide´.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Tja, svårt att ha några idéer med en så "tunn" beskrivning.
Det finns ju i princip ingenting att gå på.

Jag är tveksam om du kommer att få någon precision med pause eller sleep, du måste nog ha en timer som snurrar i bakgrunden hela tiden som en tidbas.

Pause ger väll en viss "delay", men sedan har du ju även kod som körs mellan Pause anropen att ta hänsyn till. A mess...
Användarvisningsbild
tusse
Inlägg: 1364
Blev medlem: 19 augusti 2003, 21:56:17
Ort: Järfälla

Inlägg av tusse »

Har förståelse för att det jag kör mellan pause tar tid men skriver jag pause 60000 så borde det bli en minut men det blir mindre.

Har hittat en assamblerkod på nätet, ska se om den går att göra något av.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

OK, I see... :-)
Jo, det kan ju verka rimligt.
Som sagt, jag vet inte mycket om PIC-Basic så jag lämnar detta här...
mrhedin
Inlägg: 114
Blev medlem: 3 maj 2005, 19:46:24
Ort: Trollhättan/Kiruna
Kontakt:

Inlägg av mrhedin »

tusse.

Hur lång blev pausen när du körde pause 60000?
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

En annan sak...

Hur "vet" PIC-Basic vilken hastighet PICen går med ?
Det måste finnas någon inställning någonstans. Är den korrekt ?

"Pause 60000" ger naturligtsvis bara rätt tid om PIC-Basic har rätt uppfattning om vilken hastighet målsystemet går med. Ändrar man hastighet på PIC'en (utan att kompilera om applikationern), så blir det fel, så klart...
Användarvisningsbild
tusse
Inlägg: 1364
Blev medlem: 19 augusti 2003, 21:56:17
Ort: Järfälla

Inlägg av tusse »

Mrhedin>> som bäst 58 sekunder när inget annat är i gång.


Sodjan>> Man talar om vilken frekvens som gäller med DEFINE OSC 4 = 4 Mhz

Detta såg intressant ut men med min dåliga engelska och ännu sämre kunskaper i assemblerkod så vet jag inte om jag blir klokare. http://www.ezy.net.au/~fastvid/one_sec.htm
frejo
Inlägg: 496
Blev medlem: 21 april 2004, 21:43:01
Ort: Linköping

Inlägg av frejo »

Att aktivera timern i assembler är ju inte direkt svårt och du får då en väldigt exakt upplösning på den, basic känns väldigt otillförlitligt i detta fall.
kod kan du hitta här:
http://www.elektronikforumet.com/forum/ ... php?t=6736
Användarvisningsbild
tusse
Inlägg: 1364
Blev medlem: 19 augusti 2003, 21:56:17
Ort: Järfälla

Inlägg av tusse »

Tack för det men jag blev inte klokare av det för assembler är för mig ett annat språk och jag tror inte att den koden passar 16f628 heller.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

> Detta såg intressant ut men med min dåliga engelska och ännu
> sämre kunskaper i assemblerkod så vet jag inte om jag blir klokare.
> http://www.ezy.net.au/~fastvid/one_sec.htm

Obs att detta är en sida som använder den gamla 16F84, där man har betydligt sämre hårdvarutimers än i de senare modellerna. Därmed blir också lösningen onödigt komplicerad. Kolla gärna sidor som bygger på F84'an, men ta inte för hårt på de faktiska lösningarna.

> assembler är för mig ett annat språk...

Där har du ett annat "problem" att åtgärda... :-)

Spelar ingen roll vad du använder för språk "till vardags", utan en hygglig assemblerkunskap (vilket inte är mycket begärt igentligen !), så kommer du nog att råka på många andra "show stoppers".

Att förstå assembler är till stor det detsamma som att förstå hur processorn fungerar, de ligger så nära varandra.

Ta det problem du har nu t.ex. Det enklaste är att göra ett mini PIC-Basic program med enbart ett "Pause 60000" kommando och titta på vilken assemblerkod som genereras. Det skulle direkt tala om varför tiderna blir fel !
Skriv svar