#include <avr/io.h>
#define F_CPU 16000000UL
#include <util/delay.h>
int main(void)
{
DDRA = 0xFF;//Output
DDRD = 0xFF;
ICR1 = 256;
TCCR2 = (1<<WGM20) | (1<<COM21) | (1<<CS20); // PWM, phase correct, 8 bit.
TCCR1A = (1<<WGM10) | (1<<COM1A1) | (1<<COM1B1); // PWM, phase correct, 8 bit.
TCCR1B = (1<<CS10);// | (1<<CS10); // Prescaler 64 = Enable counter, sets the frequency
double rCounter = 255;
double rMax=255;
double bCounter = 255;
double bMax = 180;
double gCounter = 0;
double gMax = 70;
int stages = 0;
while(1)
{
switch (stages)
{
case 0:
bCounter --;
if (bCounter <= 0)
{
stages = 1;
}
break;
case 1:
gCounter ++;
if (gCounter >= 255)
{
stages = 2;
}
break;
case 2:
rCounter --;
if (rCounter <= 0)
{
stages = 3;
}
break;
case 3:
bCounter ++;
if (bCounter >= 255)
{
stages = 4;
}
break;
case 4:
gCounter --;
if (gCounter <= 0)
{
stages = 5;
}
break;
case 5:
rCounter ++;
if (rCounter >= 255)
{
stages = 0;
}
break;
}
OCR1B = (int)(bCounter*bMax*bCounter/255/255);
OCR1A = (int)(gCounter*gMax*gCounter/255/255);
OCR2 = (int)(rCounter*rMax*rCounter/255/255);
_delay_ms(5);
}
}
Eine Sammlung von meinen Projekten aus den Bereichen Physik, Elektronik, Informatik und sogar ein bisschen Botanik. Dieser Blog soll einerseits Hilfestellung bei Problemen geben aber andererseits auch als Anregung für weitere Projekte dienen. Falls es zu einem Thema Fragen oder Anregungen gibt: Einfach schnell einen Kommentar schreiben oder das Kontaktformular rechts unten benutzen, ich beantworte das normalerweise innerhalb von einem Tag.
AdSense
Donnerstag, 24. Oktober 2013
RGB-LED mit ATmega16A ansteuern
(English version) RGB-LEDs sind ziemlich interessant (z.B. in LED-Streifen oder
ähnlichem). Daher möchte ich heute erklären, wie man mit einem ATmega16A
eine RGB-LED ansteuert. Zuerst einmal zur RGB-LED. Ich benutze diese LED von Tayda Electronics. Diese
LED besteht praktisch aus drei verschiedenen LEDs welche alle in einem
Gehäuse sind. Daher gibt es 3 Pins für die verschiedenen LEDs und eine
gemeinsame Kathode (-). Legt man nun PWM-Signale an diese 3 Pins, so kann man die Farbe der LED einstellen. Den ATmega16A benutze ich, da der ATmega8 nur 2 PWM-Kanäle hat, das reicht leider nicht für 3 Pins. Damit ist eigentlich auch alles geklärt, hier mal der Code von mir, welcher durch den kompletten Farbkreis läuft:
Kategorien:
ATmega,
Beleuchtung
Abonnieren
Kommentare zum Post (Atom)
Keine Kommentare:
Kommentar veröffentlichen