Sida 1 av 4
Timer i PIC
Postat: 5 september 2005, 14:36:59
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
Postat: 5 september 2005, 14:44:29
av Pjoms
Du kan ju använa Pause eller Sleep, ev. tillsammans med en For/Next-loop för att få det lite hanterligare.
Postat: 5 september 2005, 16:02:31
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...

Postat: 6 september 2005, 19:31:55
av tusse
OK, den på tradera har jag redan sett men har en del displayer ligger.
Postat: 6 september 2005, 19:36:27
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...

Postat: 26 september 2005, 20:27:56
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´.
Postat: 26 september 2005, 22:05:15
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...
Postat: 26 september 2005, 22:25:18
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.
Postat: 26 september 2005, 22:31:24
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...
Postat: 27 september 2005, 01:31:51
av mrhedin
tusse.
Hur lång blev pausen när du körde pause 60000?
Postat: 27 september 2005, 01:43:41
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...
Postat: 27 september 2005, 07:46:01
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
Postat: 27 september 2005, 07:52:08
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
Postat: 27 september 2005, 08:44:15
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.
Postat: 27 september 2005, 09:15:22
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 !