www.mikrocontroller.net

Forum: Compiler & IDEs 24 Kanal PWM in c


Autor: Michael F. (jiro)
Datum:

Bewertung
0 lesenswert
nicht 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];
  }

}

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Geht so, für Verbesserungen siehe Soft-PWM.

MFG
Falk

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.