24 Kanal PWM in c

OP #1155606
Lesenswert?

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];
  }

}

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren