Sida 1 av 1

Sekundfördröjning med PIC

Postat: 15 februari 2004, 19:03:00
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?

Postat: 15 februari 2004, 19:43:40
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

Postat: 15 februari 2004, 19:43:46
av PaNiC
Vad kör du för språk?

Postat: 15 februari 2004, 20:21:06
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.

Postat: 15 februari 2004, 20:44:34
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.

Postat: 16 februari 2004, 07:46:28
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.

Postat: 16 februari 2004, 10:45:19
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.

Postat: 16 februari 2004, 11:22:02
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

Postat: 18 februari 2004, 07:21:13
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