Sekundfördröjning med PIC

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
tops
Inlägg: 93
Blev medlem: 13 januari 2004, 08:46:51
Ort: Sollentuna

Sekundfördröjning med PIC

Inlägg av tops »

Är ny på det här med PIC programering, men jag undrar hur jag gör en fördröjning på 1 sekund? tex får en lysdiod att blinka en gån i sekunden eller ett värde att räknas up varje sekund. Har för mig att det finns nåt inbyggt för detta eller måste man se hur fort pic:en räknar vid en viss klockfrrekvens och sätta en räknare till detta värdet?
Användarvisningsbild
mrmike
Inlägg: 301
Blev medlem: 29 oktober 2003, 20:40:12

Inlägg av mrmike »

Tyvärr måste veta vad du har för klockfrekvens.
Här har jag lekt pedagog: http://www.geekjoan.com/forum/viewtopic ... c&start=15 kanske kan hjälpa lite iaf.

Edit: Kanske ska säga att det handlar om interrupt, kanske är lite onödigt att använda om du bara ska blinka en lysdiod men inte fel att lära sig. Här kan du se lite olika varianter på hur man gör fördröjningar i mjukvara: http://www.piclist.com/techref/microchi ... eneral.htm
Senast redigerad av mrmike 15 februari 2004, 19:51:13, redigerad totalt 1 gång.
Användarvisningsbild
PaNiC
Inlägg: 2610
Blev medlem: 15 augusti 2003, 22:16:15
Ort: Skånelandet

Inlägg av PaNiC »

Vad kör du för språk?
Användarvisningsbild
tops
Inlägg: 93
Blev medlem: 13 januari 2004, 08:46:51
Ort: Sollentuna

Inlägg av tops »

Jag kör 4Mhz klockfrekvens och tänkte skriva i assemblekod.
Tanken var att få exakt 1s, inte för att det har nån betydelse, utan mer för att förstå hur principen fungerar.
Användarvisningsbild
mrmike
Inlägg: 301
Blev medlem: 29 oktober 2003, 20:40:12

Inlägg av mrmike »

Har du en klockfrekvens på 4MHz så tar varje instruktion (förutom hopp som tar dubbelt så lång tid på sig) 1ns att utföra. Eller: Tiden det tar att utföra en instruktion är 1/(klockfrekvens/4). Så då är det bara att vänta i en miljon instruktioner så har ganska exakt en sekund passerat.
Fast i just detta fallet kan du vänta 1/2s, tända lysdioden, vänta 1/2s till, släcka lysdioden, börja om.
Hur ny är du på PIC? Så man inte försöker förklara nåt du redan vet, tänkte jag.
Användarvisningsbild
tops
Inlägg: 93
Blev medlem: 13 januari 2004, 08:46:51
Ort: Sollentuna

Inlägg av tops »

Kan säga jag är hyfsat ny, har precis börjat labba med det. Jag har bra grundkunskaper, skall bara omsätta det för PIC. Mycket att hålla reda på nu i början. Jag misstänkte just den förklaringen jag fick, men hur utför jag den enklast rent praktiskt? Finns det nån form av delay ett visst antal instruktioner? Jag vill ju inte skriva 1M NOP instruktioner.....
Annars tänkte jag lösa det med räkna ner en variabel, som när den är noll räknar ner en ny, fast det känns lite omständigt och jag vill ha enklast möjliga lösning.
danei
EF Sponsor
Inlägg: 27416
Blev medlem: 2 juni 2003, 14:21:34
Ort: Östergötland
Kontakt:

Inlägg av danei »

det låter som en bra lösning en lop som man kör lämpligt antal varv. Och så en lop runt den för att få tillräkligt mång varv. Det är det lättaste sättet.
Kent
Inlägg: 156
Blev medlem: 19 januari 2004, 10:48:05
Ort: Södra Dalarna
Kontakt:

Inlägg av Kent »

Hej

Kika in på detta pdf dokument där får de en Led att blinka. Finns lite nyttingt att läsa om du inte redan har gjort det.

http://www.mdh.se/iel/kurser/le1380/jmn ... uide14.pdf
leh
Inlägg: 20
Blev medlem: 13 februari 2004, 08:36:51

Inlägg av leh »

Jag har ingen tidsloop på 1sek men en på 1ms (1,0008ms), med en krestalls klockfrekvens på 20MHz.
Anroppa bara _Tid med CALL


;-------1ms------- 1,0008ms
_Tid
movlw H'0B'
movwf Tid1
goto _Tid2
_Tid1
nop
decfsz Tid1
goto _Tid2
return
_Tid2
movlw H'95'
movwf Tid2
_Tid3
decfsz Tid2
goto _Tid3
goto _Tid1
;-----------------

END
Skriv svar