Forum: Mikrocontroller und Digitale Elektronik RGB LED ATMega8


von Denny (Gast)


Angehängte Dateien:

Lesenswert?

Guten Abend,


Sooo ich brauch eure hilfe :) unzwar will ich mir eine Zimmerbeleuchtung 
bauen. Vorerst mit 25 RGB LED's. (Hab mir ein Kabelkanal gekauft und mit 
einem kleinen Bohrer 6 Löcher gemacht die LED dan durchgesteckt verlötet 
und im Abstand von 5 cm die nächste.) Vorerst soll es nur ein Regenbogen 
Effekt sein.Später wen ich mich ein bisschen in die Microcontroller 
eingelebt habe will ich ein Programm schreiben wo man die Farbe 
auswählen kann.Nun hab ich das Problem das ich keine ahnung habe wie das 
anstellen soll was ich genau machen muss damit ich diesen Regenbogen 
Effekt auf mein Microcontroller übertrage und ihn schreibe :(. kann mir 
villeicht jemand den Grundstein setzen und mir ein bisschen helfen. Als 
Programmer benutze ich das Pollin Evulutions Board. Mir stehen diese 
Micrcontroller zur verfügung: ATMega8 , ATMega48 , ATMega32. Ich hoffe 
jemand kann mir helfen.Ne Schaltung hab ich schon gemacht.(Ist schnell 
gemacht  und die is jetzt nur für 1 RGB LED. Würde er eigentlich gehen 
ich denke schon oder ?)



MFG Denny

von Oliver J. (skriptkiddy)


Lesenswert?

Das Stichwort lautet Software-PWM. Hier mal ein Beispiel wie man es 
machen kann. Damit solltest du eigentlich schon fast fertig ein.

1
#include <avr/io.h>
2
3
#define RED       PC0    // Pin für Rot
4
#define GREEN     PC1    // Pin für Grün
5
#define BLUE      PC2    // Pin für Blau  
6
#define LED_PORT  PORTC  // LED-Port
7
#define LED_DDR   DDRC   // DDR des LED-Ports  
8
9
int main(void){
10
  uint8_t   i = 0,
11
            u_red   = 150,    // Pulslänge rot
12
            u_blue  = 100,    // Pulslänge blau
13
            u_green = 200;    // Pulslänge grün
14
  LED_DDR |= _BV(RED) | _BV(GREEN) | _BV(BLUE);      // Pins auf Ausgang 
15
  while(1){
16
    LED_PORT |= _BV(RED) | _BV(GREEN) | _BV(BLUE);   // Alle Farben an
17
    
18
    /*
19
    Hier die Werte von u_red, u_blue und u_green nach belieben ändern
20
    Die Werte sind proportional zur Intensität der jeweiligen Farbe.
21
    Nich vergessen, dass das menschliche Auge nicht linear ist!
22
    */
23
  
24
    for(i=0;i<255;++i){   // PWM-Schleife
25
      if(i>=u_red)   LED_PORT &= ~_BV(RED);   // Rot  aus
26
      if(i>=u_green) LED_PORT &= ~_BV(GREEN); // Grün aus
27
      if(i>=u_blue)  LED_PORT &= ~_BV(BLUE);  // Blau aus
28
      }
29
    }
30
}


Gruß Skriptkiddy

von Denny (Gast)


Lesenswert?

Cool vielen Dank jetzt hab ich nur noch eine Frage wa muss ich genau mit 
diesem Code mach muss ich ihn in Avr Studio einfügen und dan irrgendwie 
zu ner .hex datei machen und sie dan auf den Controller flashern `? sehe 
ich das richtig so ?

von Thomas M. (thomas1123) Benutzerseite


Lesenswert?

JA
Schau am besten mal ins Tutorial da findest Du alles was Du brauchst.

mfg
Thomas

von Denny (Gast)


Lesenswert?

VIELEN DANK :D

gruß Denny

von Kay R. (kay2718)


Lesenswert?

Eine Sache, die mir gerade noch auffällt:

Du bist Dir hoffentlich im klaren, dass Du in der Regel an den Ports nur 
jeweils 10-20 mA abgreifen kannst (je nach Stromrichtung; wieviel mA es 
genau beim ATMega8 sind, weiss ich jetzt nicht); daher benötigst Du zum 
Anschluss von Verbrauchern z.B. MOSFET Transistoren.

Viel Erfolg!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.