Hallo,

mit der Version von sternst geht es.

Bei mir repräsentieren die OCR Register jew. eine Farbe aus rgb.
Im Mom muss immer schreiben

funktion ((unsigned int*)&OCR1A,(unsigned int*)&OCR2,
(unsigned int*)&OCR1B);

was nicht sonderlich intuitiv ist.

Deshalb wollte ich dieses Problem mit

unsigned int* rot;
rot = &OCRn;

lösen. Allerdings ist der Compiler damit nicht einverstanden und sagt:
../rgb_in_C_c.c:129: warning: assignment from incompatible pointer type

Weiß jemand wie das richtig läuft?

The Man


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