RGB Moodlight

Aus Attraktor Wiki

Wechseln zu: Navigation, Suche

RGB Moodlight

Platinen für den Lötworkshop

Für unseren ersten Lötworkshop im Attraktor hat Sebastian ein schickes RGB-Moodlight entworfen.

Die Bausätze sind mit einfach verlötbaren Bauteilen bestückt. Die Platine hat eine RGB-LED verbaut, die durch einen bereits programmierten ATtiny-Mikrocontroller (ATtiny44, pinkompatibel zu ATtiny24 und ATtiny84) angesteuert wird. Wer den Programmiercode modifizieren oder einige der nach außen geführten Ports nutzen möchte, kann dies mit der für Anfänger gut geeigneten Arduino-Oberfläche tun.

Beschreibung der Bauteile

Bauteilliste

C1       0.33µF             
C2       0.1µF           
C3       100nF            
C4       22pF              
C5       22pF              
CON1     Stiftleiste 1x5 Pin        
G1       9V Batterie
BCON     9V Batterie Anschlussklemme mit XH2.54-2P Stecker
BATTERIE XH2.54-2P Buchse     
IC1      ATTINY24/44/84A 
Sockel   DIP-14 IC Sockel
IC2      7805 Linearregler (TO-220 Gehäuse)           
ISP      Stiftleiste 2x3 Pin                      
LED1     SuperFlux RGB LED  (Gemeinsame Kathode)  
R1       150 Ohm               
R2       150 Ohm              
R3       150 Ohm              
R4       10k Ohm             
R5       10k Ohm              
SW1      DIP-Switch 1-Pol
X1       Quarz 20Mhz HC49-U
BRD      Moodlight Platine
SCREW    M3-10 Schraube + Mutter

Identifizierung der Bauteile, Eagle Layout und Schaltplan, fertiges Board mit Platinenhalter

Montage der Bauelemente

Bauteile auf der Platine

Programmierung

Der Atmel ATtiny44 Mikrocontroller, der auf dem Board verbaut ist, kann natürlich mit Entwicklungsumgebungen wie ATMEL Studio programmiert und geflasht werden. Allerdings ist auch die einfache Programmierung und das Bespielen mit der Arduino IDE möglich.

Wie das funktioniert, zeigen wir anhand der Arduino IDE in der Version 1.0.5r2, dem Arduino UNO als Programmieradapter und dem bekannten "Blink"-Sketch aus den Beispielprogrammen der IDE.

Zunächst lädt man sich die aktuelle 1.0er-Version der Arduino IDE herunter und installiert sie. Dann lädt man die Datei attiny-master.zip von dieser Seite (ein Projekt des MIT Medi Lab) herunter, entpackt sie und kopiert sie wie dort beschrieben.

Da der ATtiny44 mit externem 8MHz Quarz wie bei uns auf dem Board verbaut dort nicht als Option vorhanden ist, müssen noch folgende Zeilen in der Datei "boards.txt" ergänzt werden:

attiny44-8e.name=ATtiny44 (external 8 MHz clock)
attiny44-8e.bootloader.low_fuses=0xff
attiny44-8e.bootloader.high_fuses=0xdf
attiny44-8e.bootloader.extended_fuses=0xff
attiny44-8e.upload.maximum_size=4096
attiny44-8e.build.mcu=attiny44
attiny44-8e.build.f_cpu=8000000L
attiny44-8e.build.core=arduino:arduino
attiny44-8e.build.variant=tiny14

Als nächstes muss der Arduino als Programmieradapter vorbereitet werden. Eine genaue Anleitung findet sich hier. Um nicht immer wieder die Drahtbrücken stecken zu müssen, kann man sich aus einer 6-poligen Pfostenbuchse wie dieser hier und einem passenden 6-poligen Kabel, bei dem man die Enden auf Stiftleisten lötet, ein Programmierkabel für wenig Geld selber bauen.

Der 9V-Block sollte beim Programmieren nicht angeschlossen sein. Wenn man allerdings einen Programmieradapter wie den AVRISP MkII verwendet, braucht man eine externe Stormversorgung. Bitte also die Anleitungen für die Programmieradapter beachten.

Die Pfostenbuchse kann an die 6-polige Stiftleiste am RGB-Moodlight-Board angesteckt werden (bitte Polung beachten!).

Arduino IDE.png

Danach muss der Arduino UNO wie oben beschrieben als ISP-Adapter vorbereitet werden ("Datei -> Beispiele -> ArduinoISP" aufspielen) und beim Programmieren der Eintrag unter "Tools -> Board -> ATtiny44 (external 8 MHz clock)" ausgewählt werden. Dann testet man das ganze mit dem "Blink"-Sketch und lädt das Programm auf den ATtiny44 hoch. Bitte beachtet, dass ein Pin der angeschlossenen RGB-Led benutzt wird - also z.B. Pin 7 als led-Variable definiert wird (und nicht "13" wie in dem Beispiel-Sketch).

Programmierbeispiel

Nachfolgend ein Beispiel, um die blaue LED der RGB-LED aufblinken zu lassen. Dieser Sketch kann mit der Arduino IDE und den obigen Einstellungen auf den Mikrocontroller übertragen werden.

/*
  Blink
  Schaltet eine LED für eine Sekunde an und für eine Sekunde wieder aus
*/
 
// An Pin 7/ PA6 ATtiny44 - entsprechend Arduino Pin 6 ist die blaue LED
// An Pin 6/ PA7 ATtiny44 - entsprechend Arduino Pin 7 ist die rote LED
// An Pin 5/ PB2 ATtiny44 - entsprechend Arduino Pin 8 ist die grüne LED
// der RGB-LED angeschlossen

// Wir benutzen die blaue LED
int led = 6;

// Im Setup wird die LED als Ausgang definiert
void setup() {                
  pinMode(led, OUTPUT);     
}

// In der Programmschleife lassen wir die blaue LED blinken
void loop() {
  digitalWrite(led, HIGH);   // Anschalten der LED (HIGH = Betriebsspannung 5V)
  delay(1000);               // Eine Sekunde warten
  digitalWrite(led, LOW);    // Ausschalten der LED (LOW = 0V)
  delay(1000);               // Eine Sekunde warten
}

Das ganze kann man natürlich auch in C programmieren und z.B. mit dem kostenlosen Atmel Studio und einem Programmer wie dem AVRISP MkII auf den Mikrocontroller überspielen. Der dem obigen Beispiel entsprechende Code würde dann so aussehen:

/*
 * ATtiny44_blink.c
 * Blink
 * Schaltet eine LED für eine Sekunde an und für eine Sekunde wieder aus
 * Author: Markus
 */ 

#define F_CPU 8000000	// Prozessortakt
#include <avr/io.h>	// Pinzuweisungen
#include <util/delay.h>	// Wartefunktionen
#define LED PA6		// LED wird im Code durch PA6 ersetzt

int main(void)
{
    // Dieser Teil entspricht der setup()-Funktion der Arduino IDE
    // Das Bit PA6 (dort ist die blaue LED der RGB LED angeschlossen) vom DDRA (Data Direction Register Port A) 
    // wird auf 1 und damit als Ausgang gesetzt
    DDRA |= (1 << LED); 
		
	while(1) // Endlosschleife - entspricht der loop()-Funktion der Arduino IDE
        {
        	
		PORTA |= (1 << LED);	// PA6 von PORT A wird auf 1 = HIGH = 
					// Betriebsspannung 5V gesetzt => Anschalten der blauen LED
		_delay_ms(1000);	// Eine Sekunde warten
		PORTA &= ~(1 << LED);   // PA6 von PORT A wird auf 0 = LOW = 0V gesetzt
					// => blaue LED wird ausgeschaltet
		_delay_ms(1000);	// Eine Sekunde warten
	}
	
	return(0);	
}

Ich will das RGB-Moodlight unbedingt haben. Woher bekomme ich es?

Der Bausatz ist ab sofort im Warenautomat im Attraktor zum Preis von 10 Euro erhältlich.

Bausatz Warenautomat.jpg

Bisherige Lötworkshops

Lötworkshop1
Lötworkshop2
Lötworkshop3