Hallo,

im Moment versuche ich gerade mit einer RGB Led und meinem ATMEGA32 ein Fading der Farben zu bekommen. Erste Gehversuche werden euch wohl sehr kompliziert vorkommen. Deshalb, meine Frage, wie könnte ich so etwas einfach Realisieren.

Mein Code sieht im Moment so aus und macht auch noch nicht ganz was er soll. Das ich bisher nur eine Farbe je heller und dunkler bringe.

Leider habe ich bisher ach noch keine Erfahrung mit den Timern im ATMEGA. Ich brauche wohl dazu noch sowas wie Threads, falls es die im ATMEGA gibt.

Mein Code:
Code:
#include <avr/io.h>
#include <avr/interrupt.h>
#include <stdio.h>
#include <inttypes.h>
#include <string.h>
#include <util/delay.h> 

#define MCU = AVR_ATmega32 
#define F_CPU  16000000       

#include <inttypes.h>
#include <avr/io.h>
#include <util/delay.h>
#include <avr/pgmspace.h>

#define DEF_MAX 3000

int main(void){

 
    DDRC |= (1<<PC0);           
	DDRC |= (1<<PC1);           
	DDRC |= (1<<PC2);           
 
	PORTC &= ~(1<<PC0);	  //AUS
	PORTC &= ~(1<<PC1);	  //AUS
	PORTC &= ~(1<<PC2);	  //AUS
	 
	 _delay_ms(5000);
	 
    while(1) {
 
		//Fade in Red
		for (int i=DEF_MAX; i > 0; i--){		
			PORTC &= ~(1<<PC0);	  //AUS
			_delay_us(i);
			PORTC |= (1<<PC0);   //AN
			_delay_us(1600);
			
    	}
		_delay_ms(3000);
	
		//Fade out Red
		PORTC |= (1<<PC0);   //AN
		_delay_ms(3000);
		for (int i=0; i < DEF_MAX +800; i++){  //Rot geht aus, evtl. Ist es heller (+800)
			PORTC &= ~(1<<PC0);	  //AUS
			_delay_us(i);
			PORTC |= (1<<PC0);   //AN
			_delay_us(1600);
			
    	}
		PORTC &= ~(1<<PC0);	  //AUS

		
		
		//Fade in Blue
		for (int i=DEF_MAX; i > 0; i--){
			PORTC &= ~(1<<PC1);	  //AUS
			_delay_us(i);
			PORTC |= (1<<PC1);   //AN
			_delay_us(1600);
			
    	}
		_delay_ms(3000);
	
		//Fade out Blue
		PORTC |= (1<<PC1);   //AN
		_delay_ms(3000);
		for (int i=0; i < DEF_MAX; i++){
			PORTC &= ~(1<<PC1);	  //AUS
			_delay_us(i);
			PORTC |= (1<<PC1);   //AN
			_delay_us(1600);
			
    	}
		PORTC &= ~(1<<PC0);	  //AUS


		
		//Fade in green
		for (int i=DEF_MAX; i > 0; i--){
			PORTC &= ~(1<<PC2);	  //AUS
			_delay_us(i);
			PORTC |= (1<<PC2);   //AN
			_delay_us(1600);
			
    	}
		_delay_ms(3000);
	
		//Fade out green
		PORTC |= (1<<PC2);   //AN
		_delay_ms(3000);
		for (int i=0; i < DEF_MAX; i++){
			PORTC &= ~(1<<PC2);	  //AUS
			_delay_us(i);
			PORTC |= (1<<PC2);   //AN
			_delay_us(1600);
			
    	}
		PORTC &= ~(1<<PC2);	  //AUS


		
	}
 
    return 0;
}
Meine Beschaltung. ATMEGA Minimalverkabelung mit Quarz.
An PDC0 - 3 hängt die RGB Led und an Minus über einen Widerstand.
An jedem + - Pärchen der Led hängt ein 220µF Elko

PCD0 = rot
PDC1 = blau
PDC2 = grün

PDC0 -------------- Elko+ ---------- LED+
MINUS ------------- Elko- ----------- LED -

Ich hoffe ich konnte meinen bisherigen Aufbau ein wenig rüber bringen.

Danke schon im Voraus für eure Hilfe.