Seite 1 von 1

RGB-LED ansteuern und/oder ICs programmieren

Verfasst: 04.03.2014 19:52
von Chimorin
Heyho,

Ich habe schon seit Längerem vor, mit PB mal was Hardwaremäßiges anzustellen.
Für den Anfang würde mir schon reichen, eine RGB-LED anzusteuern.
Da ich auf diesem Gebiet keinerlei Erfahrung besitze, wollte ich mich mal an euch wenden. Kennt jemand von euch Tutorials, die dieses Thema behandeln?

Damit das Ganze auch ohne PC lauffähig ist, würde ich gerne ICs programmieren (Falls man die schon im ersten Teil braucht, einfach nicht beachten). Ich habe da noch 2 Atmega bla rumliegen und würde diese gerne benutzen, am Liebsten natürlich mit PB. Kann man IC-Programme mit PB schreiben?
Ich habe mir die Handbücher zu den ICs angeschaut, leider steht da nichts drin, außer dem Programmieren mit Assembler. Irgendwie kann man die auch mit C+ programmieren, wieso den dann auch nicht mit PB (Oder müsste man sich da so einen Wrapper programmieren?!)

Cheers, haut in die Tasten,

Chimorin

Re: RGB-LED ansteuern und/oder ICs programmieren

Verfasst: 04.03.2014 20:15
von NicTheQuick
Mit PB kannst du keine AVRs programmieren. Mit PB kann man nur für Windows, Linux und MacOS programmieren.
Am einfachsten kannst du AVRs mit C, C++ oder Bascom installieren. Dafür lädst du dir das AVR Studio herunter und legst los. Vorher brauchst du natürlich noch einen Programmieradapter und eine entsprechende Schaltung oder gleich ein fertiges Entwicklerboard für deinen Atmega. Ich programmiere die Dinger jetzt schon mehrere Jahre lang und kann dir theoretisch helfen. Aber für die Anfänge reicht es auch, einfach mal bei mikrocontroller.net rein zu klicken und sich die entsprechenden Beiträge im Wiki durchzulesen.
Wenn du eine reine RGB-LED hast, dann brauchst du auch ein passende Strombegrenzer-Schaltung oder einfache Widerstände, wenn du eine feste Spannung hast. Die PWM um die Helligkeit zu steuern kannst du vom Atmega selbst generieren lassen. Möchtest du mehr als eine RGB-LED ansteuern, dann empfiehlt sich ein externer PWM-Controller, der auch gleich noch den Strom steuert. Ich nutze dafür z.B. den WS2803.

Wenn du jetzt den Atmega mit PB steuern willst, gibt es zwei Möglichkeiten. Die einfachste ist über einen COM-Port. Die komplizierte über USB. Und die geht auch nur mit bestimmten Atmegas. Einfacher wird es dann mit der XMEGA-AU-Reihe. Aber bis du dahin kommst, solltest du lieber erst mal die Grundlagen lernen. Da findest du auch ausreichend Material im Netz.

Re: RGB-LED ansteuern und/oder ICs programmieren

Verfasst: 04.03.2014 20:55
von Chimorin
Cool, danke für deine Antwort. Ich werde mir jetzt erst einmal das Wiki zu Gemúte führen und dann weitersehen.

Ein ganzes Entwicklerboard wäre dann sowas wie ein Arduinoboard? Oder gibt es da was, wo man nur noch die ICs reinstecken muss? Einerseits wäre das gut, andererseits... wenn ich nicht mal den Zusammenbau der Programmierschaltung verstehe, sollte ich gar nicht erst anfangen.

Auf dem Gebiet Elektrotechnik bin ich ein bisschen bewandert ( Technisches Gymnasium), das wird wohl für den Anfang reichen.

EDIT: Günstig sieht das ja nicht aus. Naja, mal sehen. Ein Arduino für 16Euro ist da unschlagbar, aber leider kann man die ICs ja nicht rausnehmen.

Re: RGB-LED ansteuern und/oder ICs programmieren

Verfasst: 07.03.2014 02:03
von SBond
Ich weiß jetzt nicht wie fit du allgemein in ICs bist, aber Arduino-Boards sind sehr anfängerfreundlich.
Wenn du Arduino-Boards oder noch besser günstige "kompatible"-Boards suchst, dann kann ich die "Komputer.de" enpfehlen. Die ICs kannst du je nach Arduino-Board auch tauschen. Allerdings benötigen diese ICs einen speziellen Bootloader, den du dann erstmal brennen müsstest. Wenn du dir ein Board kaufst, dann ist es in der Regel überflüssig. ...und bei ca. 18 € pro Board kann man nichts verkehrt machen. (nimm Notfalls ein "Arduino Uno Rev3"; es ist zuverlässig und für Anfänger gut geeignet; ca. 25€)

Der Vorteil von Arduino ist an sich schon die Programmierung. Die Programmiersprache ist C und sehr stark für Anfänger vereinfacht.
z.B.:

Code: Alles auswählen

int led = 13; //LED am digitalen I/O-Port 13

// diese Funktion wird einmalig beim Starten des Arduinos ausgeführt
void setup() {                
  pinMode(led, OUTPUT); // I/O-Port 13 soll ein Ausgang sein
}


// diese Funktion wird nach Ablauf immer erneut ausgeführt (eine Schleife wie 'Repeat: ForEver' in PureBasic)
void loop() {
  digitalWrite(led, HIGH);   // LED anschalten
  delay(1000);               // 1 sek warten
  digitalWrite(led, LOW);    //  LED ausschalten
  delay(1000);               // 1 sek warten
}
Die IDE-Software gibt es bei Arduino.cc kostenlos.

....und mit AVR Studio wäre dieser Code etwas* komplizierter.

Die Programmierung geht bequem über USB-Kabel und ermöglicht auch eine serielle COM-Verbindung.

Ich habe schon oft PureBasic-Programme mit dem Arduino gekoppelt um damit Steuerungen zu realisieren. Ich denke ich könnte dir da weiterhelfen, wenn bedarf besteht. Am einfachsten geht es dann über eine serielle Verbindung (COM).

Ich programmiere zur Zeit eine Oszilloskop-Software mit PureBasic für den Arduino. Damit kann man immerhin Signale bis 20KHz messen :D



* "etwas" in Form von: ...ohne AVR-Handbuch weint man sich in den Schlaf und will nie wieder aufwachen. Da denke ich immer an die Programmiersprache "Brainfuck" ;)

viele Grüße,
SBond

Re: RGB-LED ansteuern und/oder ICs programmieren

Verfasst: 07.03.2014 10:20
von Chimorin
Hey SBond,
danke für die Antwort. Das sieht doch schon mal toll aus.

Was mich eigentlich direkt davon abhält, ICs richtig zu programmieren, ist Assembler. Ich weiß nicht, in wie weit das noch zunimmt, aber

Code: Alles auswählen

.include "m8def.inc"         ; Definitionsdatei für den Prozessortyp einbinden
 
         ldi r16, 0xFF       ; lade Arbeitsregister r16 mit der Konstanten 0xFF
         out DDRB, r16       ; Inhalt von r16 ins IO-Register DDRB ausgeben
 
         ldi r16, 0b11111100 ; 0b11111100 in r16 laden
         out PORTB, r16      ; r16 ins IO-Register PORTB ausgeben
 
ende:    rjmp ende           ; Sprung zur Marke "ende" -> Endlosschleife
geht noch vom Aufwand her. Aber wenn das noch mehr werden sollte Oo
Wie findet man da denn überhaupt einen Fehler in einem Code mit ein paar Hundert ldi, out, in und den ganzen r´s?

Danke an euch Beide für die Hilfe, ich werde mir das dann mal überlegen (Die Preise an sich sind nicht zu hoch, eher ist der Schnupperpreis mit 80€ für so ein STK500 stolz) und eventuell dann in den nächsten Semesterferien (Sommerferien) loslegen.

Re: RGB-LED ansteuern und/oder ICs programmieren

Verfasst: 07.03.2014 12:26
von NicTheQuick
Du musst gar nichts in ASM programmieren. Du kannst dafür z.B. schönen C-Code nehmen.

Für Atmegas sieht der Code dann in etwa so aus:

Code: Alles auswählen

#include <avr/io.h>
#include <util/timer.h>

;Datenrichtungsregister für PORT A
#define LED_DIR  DDRA

;PORT A selbst
#define LED_PORT PORTA

;Pin für die LED an PORT A
#define LED_PIN  3

void main(int argc, char **argv) {
	;Datenrichtung an PORT A und PIN 3 als Ausgang setzen	
	LED_DIR = _BV(LED_PIN)
	
	while (1) {
		;LED anschalten und dabei alle anderen Bits unverändert lassen
		LED_PORT |= _BV(LED_PIN)
		;1000 ms warten
		_delay_ms(1000)
		;LED ausschalten und dabei alle anderen Bits unverändert lassen
		LED_PORT &= ~_BV(LED_PIN)
		;1000 ms warten
		_delay_ms(1000)
	}
}
Für ATXMega wäre der äquivalente Code dann:

Code: Alles auswählen

#include <avr/io.h>
#include <util/timer.h>

;PORT A
#define LED_PORT PORTA

;Pin für die LED an PORT A
#define LED_PIN  3

void main(int argc, char **argv) {
	;Datenrichtung an PORT A und PIN 3 als Ausgang setzen	
	LED_PORT.DIRSET = _BV(LED_PIN)
	
	while (1) {
		;LED anschalten und dabei alle anderen Bits unverändert lassen
		LED_PORT.OUTSET = _BV(LED_PIN)
		;1000 ms warten
		_delay_ms(1000)
		;LED ausschalten und dabei alle anderen Bits unverändert lassen
		LED_PORT.OUTCLR = _BV(LED_PIN)
		;1000 ms warten
		_delay_ms(1000)
	}
}
Dann gibt es noch jede Menge Libraries, die bestimmte Funktionalitäten bieten um leichter damit programmieren zu können.

Re: RGB-LED ansteuern und/oder ICs programmieren

Verfasst: 07.03.2014 13:29
von Chimorin
Ich denke, dass es am Anfang mit Assembler doch einfacher ist (So wie das aussieht, ist der Teil mit LED an, warten und wieder aus so ziemlich identisch).
Geht es aber an Multiplikation, Division und solche Sachen, ist Assembler wohl nicht die richtige Wahl :D

Re: RGB-LED ansteuern und/oder ICs programmieren

Verfasst: 07.03.2014 17:10
von SBond
...also ASM ist ja nun gar nicht anfängerfreundlich :D. Bevor ich damit anfange, spiele ich mit Barbie-Puppen :mrgreen:

nimm C ;)