Hi ich versuche mich grade an einem c Programm für PWM mit 24 Kanälen da es mein erster Versuch ist wolte ich mal auf diesem Weg fragen ob das Grundgerüst so in Ordnung ist oder es irgendwo grobe Schnitzer hat die man noch ändern könnte. #include <avr/io.h> #include <avr/interrupt.h> #ifndef F_CPU #define F_CPU 16000000UL #endif #define RELOAD_H 0xd8 #define RELOAD_L 0xf4 #define PWMKanaele 24 volatile unsigned char PWMKanal[PWMKanaele]={1,2,3,4,5,6,7,8,16,32,64,127,227,127,127,127,255,2 55,255,255,255,255,255,255}; volatile unsigned char counter=0; volatile unsigned char PWMBYTE[(PWMKanaele/8)+1]; ISR (TIMER1_OVF_vect) { unsigned char counterA=0,counterB=0,counterC=0; TCNT1H = RELOAD_H; TCNT1L = RELOAD_L; counter++; if (counter==0) counter++; while(counterA != (PWMKanaele/8)+1) { while(counterB !=8) { PWMBYTE[counterA]<<=1; if (PWMKanal[counterC]>=counter) ++PWMBYTE[counterA]; ++counterB; ++counterC; } counterB=0; ++counterA; } } void timer1_init (void) { TCCR1A = 0; TCCR1B |= (1<<CS11); // prescaler f_cpu/8 TCNT1H = RELOAD_H; TCNT1L = RELOAD_L; TIMSK |= (1<<TOIE1); } void main(void) { DDRB=0xff; DDRC=0xff; DDRD=0xff; timer1_init(); sei(); while(1!=0) { PORTB=PWMBYTE[0]; PORTC=PWMBYTE[1]; PORTD=PWMBYTE[2]; } }
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.