Code:
#include <avr/io.h>
#include <avr/interrupt.h>
volatile unsigned char zyklus;
volatile unsigned char helligkeit;
SIGNAL (SIG_OVERFLOW2){
zyklus++;
if (zyklus >= helligkeit) PORTB |= (1<<PB0);
else PORTB &= (0<<PB0);
helligkeit = ADCH;
}
void init(){
DDRB = 0b00001111;
TIMSK = 0b01000000;
TCNT1 = 254;// vorladen von TCNT1, damit T1 und T2 nacher synchron laufen
ICR1 = 255;
//***********************
// Anteile der Farben
OCR1A = 0;
OCR1B = 0;
OCR2 = 0;
//************************
TCCR1A |= (1<<COM1A1)|(1<<COM1A0)|(1<<COM1B1)|(1<<COM1B0)|(1<<WGM11);
TCCR1B |= (1<<WGM13)|(1<<WGM12)|(1<<CS10);
TCCR2 |= (1<<WGM20)|(1<<COM21)|(1<<COM20)|(1<<WGM21)|(1<<CS20);
ADMUX = 0b00100000;
ADCSRA = 0b11110101;
sei();
}
void red_blau_grun_up(unsigned int* addr1, char ans1, unsigned int* addr2, char ans2,unsigned int* addr3){
unsigned char verz;
char f1;
char f3;
char f2;
f1 = *addr1;
f2 = *addr2;
f3 = *addr2;
do{
do{
do{
//nur verzögern^^
}while(zyklus<255);
verz++;
}while (verz<50);
verz=0;
if (f1 < 255) f1++;
if ((f1 > ans1)&&(f2 < 255)) f2++;
if ((f2 > ans2) && (f3 < 255)) f3++;
*addr1 = f1;
*addr2 = f2;
*addr3 = f3;
}while (f3<255);
}
void red_blau_grun_down(unsigned int* addr1, char ans1, unsigned int* addr2, char ans2,unsigned int* addr3){
unsigned char verz;
char f1;
char f3;
char f2;
f1 = *addr1;//farbe 1
f2 = *addr2;
f3 = *addr2;
do{
do{
do{
//nur verzögern^^
}while(zyklus<255);
verz++;
}while (verz<50);
verz=0;
if (f3 > 0) f3--;
if ((f3 < ans1)&&(f2 > 0)) f2--;
if ((f2 < ans2) && (f1 > 0)) f1--;
*addr1 = f1;
*addr2 = f2;
*addr3 = f3;
}while (f1 > 0);
}
void up(unsigned int* addr1)
{
char f1;
char verz = 0;
f1 = *addr1;
do{
do{
do{
//nur verzögern^^
}while(zyklus<255);
verz++;
}while (verz<50);
verz = 0;
if (f1 < 255) f1++;
*addr1 = f1;
}while (f1 < 255);
}
void down(unsigned int* addr1)
{
char verz = 0;
char f1;
f1 = *addr1;
do{
do{
do{
//nur verzögern^^
}while(zyklus<255);
verz++;
}while (verz<50);
verz = 0;
if (f1 > 0) f1--;
*addr1 = f1;
}while (f1 > 0);
}
int main(void)
{
unsigned int* rot;
rot = &OCR2;
init();
main2:
up ((unsigned int*)&OCR2);
down ((unsigned int*)&OCR2);
up ((unsigned int*)&OCR1A);
down ((unsigned int*)&OCR1A);
up ((unsigned int*)&OCR1B);
down ((unsigned int*)&OCR1B);
up ((unsigned int*)&OCR2);//rot h
up ((unsigned int*)&OCR1A);//blau h
down ((unsigned int*)&OCR2);//rot d
up ((unsigned int*)&OCR1B);//grun h
down ((unsigned int*)&OCR1A);//blau d
up ((unsigned int*)&OCR2);//rot h
down ((unsigned int*)&OCR1B);//grun d
up ((unsigned int*)&OCR1A);//blau h
down ((unsigned int*)&OCR2);//rot d
down ((unsigned int*)&OCR1A);//blau d
red_blau_grun_up((unsigned int*)&OCR2,0,(unsigned int*)&OCR1A,0,(unsigned int*)&OCR1B);
red_blau_grun_down((unsigned int*)&OCR2,255,(unsigned int*)&OCR1A,255,(unsigned int*)&OCR1B);
//*********************************************************
red_blau_grun_up((unsigned int*)&OCR2,85,(unsigned int*)&OCR1A,85,(unsigned int*)&OCR1B);
red_blau_grun_down((unsigned int*)&OCR2,171,(unsigned int*)&OCR1A,171,(unsigned int*)&OCR1B);
red_blau_grun_up((unsigned int*)&OCR1B,85,(unsigned int*)&OCR2,85,(unsigned int*)&OCR1A);
red_blau_grun_down((unsigned int*)&OCR1B,171,(unsigned int*)&OCR2,171,(unsigned int*)&OCR1A);
red_blau_grun_up((unsigned int*)&OCR1A,85,(unsigned int*)&OCR1B,85,(unsigned int*)&OCR2);
red_blau_grun_down((unsigned int*)&OCR1A,171,(unsigned int*)&OCR1B,171,(unsigned int*)&OCR2);
//*********************************************************
//*********************************************************
red_blau_grun_up((unsigned int*)&OCR2,85,(unsigned int*)&OCR1B,85,(unsigned int*)&OCR1A);
red_blau_grun_down((unsigned int*)&OCR2,171,(unsigned int*)&OCR1B,171,(unsigned int*)&OCR1A);
red_blau_grun_up((unsigned int*)&OCR1B,85,(unsigned int*)&OCR1A,85,(unsigned int*)&OCR2);
red_blau_grun_down((unsigned int*)&OCR1B,171,(unsigned int*)&OCR1A,171,(unsigned int*)&OCR2);
red_blau_grun_up((unsigned int*)&OCR1A,85,(unsigned int*)&OCR2,85,(unsigned int*)&OCR1B);
red_blau_grun_down((unsigned int*)&OCR1A,171,(unsigned int*)&OCR2,171,(unsigned int*)&OCR1B);
//*********************************************************
//*********************************************************
goto main2;
return 0;
}
Lesezeichen