pic basic pro temporizzazione

Dec 03, 2006 8 Replies

Ciao!



Ragazzi scusate ma sto cercando di imparare facendo cose semplicissime, ho creato un ritardo ma i tempi non vengono rispettati nel esempio creo un ciclo fore next per 20 voote cosi' da creare un ritardo che dovrebbe essere di 20 secondi in realta' ne ottengo 10 di secondi sapete spiegarmi dove sbaglio? ecco il listato:



@ device pic12F508, XT_OSC, MCLR_OFF,WDT_OFF,PROTECT_OFF



TRISIO = %11111101 ' Configurazione porta gpio1 uscita option_reg.6 = 0 ' pull-up sugli ingressi Define osc 4 ' dichiaro di usare un quarzo a 4 Mhz


Symbol LED0 = GPIO.1 'uscita rele symbol ing0 = GPIO.0 ' ingresso usato



tempo var byte 'variabile per avere il ritardo voluto


Main led0 = 1 if ing0 = 0 then ' il rele' e' eccitato gosub conta ' fino a quando l'ingresso gpi non va a



0 in questo caso salta alla subroutine conta endif goto main


conta tempo = 0 'metto la variabile conta a 0 led0 = 0 ' spengo il rele' for tempo = 0 to 20 ' creo un ciclo pari a 21 cioe' da 0 a 20 tempo = tempo + 1 ' incremento di una unita' fino ad arrivare a



20 pause 1000 'ritardo di 1 secondo next tempo return 'ritorno dalla chiamata di subroutine

end ' fine del programma


"enzo" ha scritto nel messaggio news:45733e60$0$7748$ snipped-for-privacy@news.tiscali.it...

che ci fa questa istruzione nel mezzo del ciclo ?!?

simone.bern Mr. Heisemberg is not the only one who can affect a measurement by looking at it (Robert A. Pease) zsimonez.zbernz@zliberoz.it (Rimuovere i caratteri di zorro per rispondere via mail)

Ciao!

hai perfettamente ragione questa istruzione mi dimezzava il tempo impostato, grazie della pronta risposta, qualche volta posso disturbarti in privato?

"enzo" ha scritto nel messaggio news:4573415b$0$7756$ snipped-for-privacy@news.tiscali.it...

Son qua. Ma non uso il Pic Basic. Per i Pic sto usando ormai quasi esclusivamente il CCS.

Saluti,

simone.bern Mr. Heisemberg is not the only one who can affect a measurement by looking at it (Robert A. Pease) zsimonez.zbernz@zliberoz.it (Rimuovere i caratteri di zorro per rispondere via mail)

"enzo" ha scritto nel messaggio news:45733e60$0$7748$ snipped-for-privacy@news.tiscali.it...

Ripensando ai bei tempi del commodore 64, direi che il ciclo for-next, senza parametri step, che non so se esistono nel tuo linguaggio, incrementa automaticamente di 1 il valore tempo (inutile) ad ogni ciclo. Avendo aggiunto l'istruzione tempo=tempo +1, ottieni il risultato che ad ogni passaggio il valore di tempo viene incremetato di 2 (1 dall'istruzione next, e di 1 dalla tua tempo=tempo+1). Ecco perchè non ti tornano i conti. Una routine corretta sarebbe

for t = 0 to 19 pause 1000 next t

Semplicemente. Ciao

Secondo voi se volessi che durante il ciclo di for next al verificarsi che ing0 fosse a 0 il programma deve ripartire da main come posso fare? tenendo conto che se scrivo:

if ing0 = 0 then goto main

entrerei in un giro senza uscita perche' il programma andrebbe a main ma nel main c'e' il controllo di ing0 = 0 deve saltare alla subroutine di ritardo, ci vuole una routine che mi faccia andare a main quando dopo che ing0 = 0 aspettasse che ing0 = 1

"enzo" ha scritto nel messaggio news:45734ad2$0$20813$ snipped-for-privacy@news.tiscali.it...

No, devi intercettarlo all'interno della routine. Dove avevi messo tempo=tempo+1, vai a leggere ing, dai come condizione "" (diverso) da 0, nel qual caso setti t=19 e si azzera il contatore del for-next e rientra dalla subroutine. Tieni presente che mi baso sempre sul basic, non so se nel tuo linguaggio si possa fare...

In verita' avevo fatto in altro modo comunque mi sa che la tua idea sia piu' efficiente, si vede che hai piu' esperienza

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required