PWM på PIC...

Jan 19, 2004 7 Replies

Hej!



Jeg sidder lige og fusker lidt med en lysstyring styret ved hjælp af en PIC16F84...



Egentligt er jeg godt tilfreds med den nuværende lysstyring, men det kunne da være sjovt at kunne få lyset den styrer til at fade op/ned, dertil havde jeg tænkt mig at anvende PWM, men jeg synes ikke rigtigt jeg kan få det til at spille nogenlunde uden det fylder en farlig masse. Nogle der har nogle gode idéer uden at jeg skal have fat i en anden PIC med allerede implementeret PWM?


MVH Troels

"Troels Pedersen" skrev i en meddelelse news:400c4652$0$143$ snipped-for-privacy@dread11.news.tele.dk...

at spille nogenlunde uden det fylder en farlig masse. Nogle der har nogle

Hi troels Hvis den skal være 18 pins i 16F er denne nok den billigste

formatting link

Ellers er der også kommet en 18 pins i 18F serien den har også PWM

MVH Henrik

Prøv at kigge på

formatting link
. Det er næsten alle tænkelige applikationer, eller i hvert tilfælde noget pseudo-kode, der kan bruges.

Mvh. René Kirstein

havde

til

Hej Troels Jeg har leget lidt med det i C, det var vist blot to løkker inden i hinanden. Jeg kan nok godt finde det frem, hvis det har interesse.

Mvh Lars Sch-M

Hvis ikke det er alt for langt væk har det interesse... Men brug nu ikke hele natten på at finde det ;o)

MVH Troels

Hej Troels ...

Her er noget kode til P/F korrekt PWM jeg har fusket med ...

Ideen er at lave en tæller som tæller i savtand ... og skifte niveau når tælleren er nulstillet på denne måde fjerner man glitches osv...

M.v.h. Lasse Madsen

// Timer 2 overflow interrupt service routine interrupt [TIM2_OVF] void timer2_ovf_isr(void) { static unsigned char pwm_temp=0,direction=1,channel_1=1,phase=0; static unsigned char channel_2=0,channel_3=0,channel_4=0,channel_5=0,channel_6=0; if ( pwm_temp == channel_1 ) OUT_AA = ~OUT_AA; if ( pwm_temp == channel_2 ) OUT_BA = ~OUT_BA; if ( pwm_temp == channel_3 ) OUT_CA = ~OUT_CA; if ( pwm_temp == channel_4 ) OUT_AB = ~OUT_AB; if ( pwm_temp == channel_5 ) OUT_BB = ~OUT_BB; if ( pwm_temp == channel_6 ) OUT_CB = ~OUT_CB;

// Sørg for at PWM tælleren kører i Savtands modus if ( pwm_temp == 100 ) { direction = 0; }

// Find Bund Positionen if ( pwm_temp == 0 ) { direction = 1;

if ( phase == 3 ) { channel_1 = pwm0; channel_2 = pwm1; channel_3 = pwm2; channel_4 = pwm3; channel_5 = pwm4; channel_6 = pwm5; phase = 0; } else phase++; }

// Skift Retning på tæller if ( direction == 0 ) pwm_temp--; else pwm_temp++;

TCNT2=0x9E; }

Her er en application note.... hvis den fylder for meget kan du sikkert barbere noget overflødigt af.

formatting link

Håber du finder en løsning

Med venlig hilsen Rene Nielsen

Kanskje kan denne modifiseres? :

formatting link

Mvh Leon

"Troels Pedersen" skrev i melding news:400c4652$0$143$ snipped-for-privacy@dread11.news.tele.dk...

havde

til

Join the Discussion

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

Didn't find your answer?

Ask the community — no account required