Bonjour, je suis un étudiant informatique j'essaye à communiquer avec pic18f2550 via USB pour saisir un temps , mon probléme c'est que la fonction delay_ms ne supporte pas un temps assez long, comment faire SVp
Merci
-----
Bonjour, je suis un étudiant informatique j'essaye à communiquer avec pic18f2550 via USB pour saisir un temps , mon probléme c'est que la fonction delay_ms ne supporte pas un temps assez long, comment faire SVp
Merci
Salut et bienvenu,
Une solution toute simple tu recodes toi même cette fonction avec des timers y'en à pas pour 15 ans... A moins que tu ai accès aux sources de ta fonction delay là tu peux modifier et faire des "boucles" dans ta fonction. En tout cas, je sais que quand je code ce genre de chose, je préfère le coder moi même pour avoir la main mise dessus.
Bon courage!
Bonjour,
Delay_ms est justement prévu pour des délais très court.
Pendant ce temps d'attente, tu ne fais rien d'autre ... (à part les interruptions).
Donc si tu veux un temps plus long, il faut utiliser les timers.
Personnellement, je me débrouille pour faire une interruption timer à 1ms.
Il n'y a plus qu'a compter jusqu'à 100 pour avoir 100ms, jusqu'à 1000 pour avoir 1 seconde, etc ...
Si ce n'est pas assez clair, dis moi avec quel compilateur tu bosses et je vois si je peux te faire un exemple.
Mickael
@ MiKL.66, merci pour votre aide
j'utilise mikroc .
Ce n'est pas mon compilateur préféré, mais pour ne pas bosser pour rien, peux tu poster ou m'envoyer par mail ce que tu as déjà fait.
Sinon, faut m'en dire un peu plus :
- Utilises tu un quartz ou l'oscillateur interne et m'indiquer la fréquence
- utilises tu déjà un timer (lequel)
j'utilise la bibliotheque HID_USB pour lire et écrire via le port USB et je vais utiliser ce temps dans la fonction delay_ms. est ce que je dois écrire une fonction intermédiaire qui va faire le calcul de temps puis je fais appel à la fonction delay_ms ???
j'utilise un quartz 48mhz
Avec si peu d'élément, je ne peux pas trop t'aider ...
Sinon, essais d'appeler la fonction delay plusieurs fois !
ok, voilà une partie du code dans laquelle je dois stockér ce qui est lu par USB puis le convertir en seconde et après appeler la fonction delay_ms
unsigned char readbuff[64] absolute 0x500;
unsigned char writebuff[64] absolute 0x540;
char cnt;
char kk;
void interrupt()
{
USB_Interrupt_Proc();
}
void main(void)
{
ADCON1 |=0x0F;
CMCON |=7;
HID_Enable(&readbuff,&writebuf f);
while(1)
{
while(!HID_Read());
for(cnt=0;cnt<64;cnt++);
writebuff[cnt]=readbuff[cnt];
while(!HID_write(&writebuff,64 ));
}
}
Ce site génère un code delay en assembleur pour PIC
http://www.piclist.com/techref/picli...egen/delay.htm
Exemple 1000000 de secondes ... c'est assez ?
; Delay = 1e+006 seconds
; Clock frequency = 20 MHz
; Actual delay = 1000000 seconds = 5000000000000 cycles
; Error = 0 %
cblock
d1
d2
d3
d4
d1_4
endc
;4999999999993 cycles
movlw 0xD0
movwf d1
movlw 0x36
movwf d2
movlw 0x06
movwf d3
movlw 0xD6
movwf d4
movlw 0x6A
movwf d1_4
Delay_xx_0
decfsz d1, f
goto $+2
decfsz d2, f
goto $+2
decfsz d3, f
goto $+2
decfsz d4, f
goto $+2
decfsz d1_4, f
goto Delay_xx_0
;7 cycles
goto $+1
goto $+1
goto $+1
nop
; Generated by http://www.piclist.com/cgi-bin/delay.exe (December 7, 2005 version)
; Fri Jul 12 17:24:46 2013 GMT