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:
Meine Beschaltung. ATMEGA Minimalverkabelung mit Quarz.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; }
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.







Zitieren

Lesezeichen