Aiuto PWM 16F877

Un saluto a tutto il NG! Sto utilizzando un Pic 16F877 e come ambiente di sviluppo il MikroBasic

1.1.6! Il mikrobasic prevede una libreria per il PWM, io vorrei utilizzare questa libreria per "creare" un burst di onde quadre a 36KHz per la creazione di pulsanti IR per simulare un telecomando! Ho seguito alla lettera l'esempio proposto dall'help del mikrobasic (anche per quel che riguarda la parte hw) soltanto che quando capto il segnale con un tsop1736 non mi esce praticamente niente, tranne alcune scosse insignificanti :((( Ho paura che il pic non riesca a generare l'onda a 36KHz perchè probabilmente utilizzo un quarzo a 4Mhz, può essere questo il problema? Infatti nell'help di mickrobasic c'è scritto:

"Parameter PWM_freq is a desired PWM frequency (refer to device data sheet for correct values in respect with Fosc)"

Ho letto il paragrafo del datasheet riguardante il PWM ma non dice nulla a riguardo il Fosc, c'è solo una formula per il calcolo del duty cycle e della risoluzione in bits (pag. 63). Ho provato ad eseguire la simulazione con il programma pic simulator ide ed il programma sembra fungere e nella schermata oscilloscope vedo il burst temporizzato esattamente come dovrebbe essere :-/

Qualcuno potrebbe darmi una mano? Grazie a tutti per l'aiuto :)!

Ciao e buone vacanze!

Reply to
Sandro
Loading thread data ...

che porte utilizzi? l'877 ha a bordo l'hardware necessario per il PWM, ma non è detto che le librerie del MB lo sfruttino, in quanto questa tecnica può essere benissimo implementata via software: guarda questo pseudo-C:

for(;;) { port ON; delay (duty_cycle); port OFF; delay (period - duty_cycle) }

spero dia verti chiarito un po' le idee...

Reply to
dade

"dade" ha scritto

Ciao dade :)

L'unica porta abilitiata dal mikrobasic la PORTC pin RC2

E' simile a quello del mikrobasic cioè (taglio e incollo dall'help di mikrobasic):

program pwm_test dim j as byte main: j = 0 PORTC = $FF PWM_Init(5000) ' initializes PWM module, freq = 5kHz. PWM_Start ' starts PWM while true Delay_ms(100) j = j + 1 PWM_Change_Duty(j) ' changes duty ratio wend end.

Vabbè questo esempio fa vedere come aumenta il duty cycle aumentando di 1 ad ogni ciclo il duty ratio!

Grazie mille per la risposta :)

Reply to
Sandro

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.