CARDIOFREQUENZIMETRO CON PIC 16F8XX

Innanzi tutto vi ringrazio per le risposte. Procedendo con ordine vi dico:

- In una scala da 1 a 10 mi sento noob di 3=B0Livello

- Circa un mese fa ho comprato una scheda di sviluppo EasyPic5 quindi ho tutti gli strumenti necessari per testare il funzionamento del programma

- Per quanto riguarda il timer1 che ha un periodo|Max di 2 sec penso proprio che va benissimo perch=E8 il valore di 0,5Hz era proprio una stima per difetto fin troppo bassa per la frequenza diciamo che il periodo piu lungo che posso avere =E8 di 0,66Hz quindi un periodo|Min di

1,5sec.

- I segnali che devo mandare al PIC sono TTL compatibili infatti sono

0-5V. I segnali sono cosi bassi perch=E8 sono dovuti a frequenza cardiaca.

Pensando al programma e leggendo un po il datasheet ho controllato che posso fare due cose:

1)O mandare il segnale al PIC(16F84) sul pin RA4 che =E8 fatto proprio per sentire il fronte di salita 2)Mandarlo sul pin RB0 che funziona da interrupt.

Avevo pensato di procedere cosi:

1)Dichiaro le variabili 2)Setto pin RB0 come input e tutto il resto come OUTPUT 3)Dichiaro una routine di interrupt che viene avviata quando arriva un fronte su RB0 3.1)La Routine provvede ad incrementare un contatore si uno e assegna ad una variabile array (TIMER[CONTA]=3Dtimer_ OVERFLOW) il valore TMR0 o meglio sarebbe il valore dell'overflow. 4)Il ciclo main che con un IF controlla che se CONTA=3D2 allora esegue le seguenti operazioni: 4.1)Periodo=3DTIMER[CONTA]-TIMER[CONTA-1] Conta=3D0 che azzera il registro e quindi mi consente di ricontare i due impulsi 4.2)Sempre all'interno del ciclo metto le istruzioni LCD_CLR ecc per cancellare lo schermo e scrivere il risultato sull'LCD 5)se non entra nel ciclo IF vuol dire che non =E8 ancora arrivato il secondo impulso e quindi continuo l'esecuzione del main.

COME VI SEMBRA??? Sar=E0 una cavolata immagino. Mi sono giunti 3 dubbi. Ho letto che il TMR0 quando va in overflow cio=E8 (se ho un CLK a 4Mhz e uso un prescaler di 4 avr=F2 che TMR0 si incrementa con Freq di 1MHz quindi 1/1MHz=3D1us avendo 8 bit il suo valore max =E8 255 quindi 0-255 =3D 256x1us=3D 256us 1/256us=3D3906,25 ) 3906,25 volte al secondo manda=

un interrupt ecco dovrei contare gli interrupt del registro TMR0 che intercorrono tra un impulso e il sucessivo per avere la stima precisa del tempo .Facendo poi PERIODO(che contiene il numero di overflow letti in ciascun evento)x256us=3DPERIODOsec(es 0,55sec) da qui facendone l'inverso trovo la freq es 1/0,55sec=3D1,81 Hz e moltiplicandola per

60 ottengo le pulsazioni al MINUTO es 1,81x69 =3D 109 Battiti/Min.

QUALCUNO SA DARMI UNA MANO??? Va bene anche in MIKRO C eventualmente!!!

Reply to
vincengineer
Loading thread data ...

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.