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.