Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Arduino Uno mit LCD16x2 ; step-by-step die ersten Schritte.
#1
Hier mal die ersten Krabbel-Schritte mit einem Arduino Uno, vielleicht interessiert es ja den einen oder anderen.
Microcontroller hört sich ja immer ach so schrecklich schwierig an, deswegen hier mal ein funktionierendes mini howto..

Bei ebay (und auch anderswo) gibt es preiswert die Arduino Microcontroller boards. Kosta quanta für ein einsatzfertiges Arduino Uno Board mit ATmega328 (16MHz Takt) + zweizeiliges LCD 16x2 + USB-Kabel etwa 26,- ; verschiedene Anbieter - einfach mal nach Arduino googlen.

Also mal gekauft so ein Spielzeug, inklusive 16x2 Text-LCD 'LCD shield', welches einfach auf die Controller Platine gesteckt wird. Strom gibts vom USB oder separat von Steckernetzteil je nach Belieben, der Lötkolben darf für die ersten Schritte aus bleiben. Alles ist out-of-the-box einsatzbereit.

Ran damit an den PC, ab in den USB Port. Die Software ist open-source: http://www.arduino.cc/ , ebenso sind Schaltpläne und Layout der Leiterplatte open-source. Kein Installer, einfach ein zip. Also ein neuer Ordner in C:\Programme angelegt und rein damit. Die Software gibts frei für Linux, MAC und Windows, freie Wahl auch hier. Windows meldet neue Hardware gefunden (für jedes OS gibts Tips auf der arduino Seite..), kurz den Hardware Assistenten auf den Ordner 'driver' im Arduino Software Ordner verwiesen und siehe da ein Arduino ist als neuer virtueller COM-Port betriebsbereit.

Ebenso schön, die Software ist denkbar einfach:
- Programmierung in C, kein Assembler etc.
- perfekte Dokumentation
- der compiler ist der gcc, wer den kennt hat es umso leichter die Fehlermeldungen zu lesen, falls etwas nicht auf Anhieb klappt.

Okay soweit, erst mal die grundlegenden Einstellungen vornehmen. Im Menü TOOLS->SERIELLER PORT ein Häkchen beim neuen COM Port machen,
dann bei TOOLS->BOARD den Arduino Uno markieren. Jetzt noch bei TOOLS->PROGRAMMER 'Arduino as ISP' markieren und es kann losgehn.

Zeit für ein 'hello world' oder ähnliches auf dem Display. Falls jemand probieren möchte, hier als kommentierte copy&&paste Vorlage:

Code:
/* die Arduino IDE hat bereits Unterstützung für Text-LCDs dabei.
* Die passende Library wird per '#include <LiquidCrystal.h>' eingebunden,
* das ist alles, was an Arbeit nötig ist.
*/
#include <LiquidCrystal.h>

/* SaintSmart LCD shield mit folgender Belegung. (Für andre LCD's einfach PINs anpassen.)
*
* RESET   = Arduino Uno Board Pin 8
* ENABLE  = Arduino Uno Board Pin 9
* R/W     = GND
* D4      = Arduino Uno Board Pin D4
* D5      = Arduino Uno Board Pin D5
* D6      = Arduino Uno Board Pin D6
* D7      = Arduino Uno Board Pin D7
* Hinweis: alle Pins beziehen sich auf das Arduino Uno Board, nicht auf die Pins des ATmega328;
*          Der auf GND liegende R/W Pin wird bei der Initialisierung des LCD weg gelassen.
*/

LiquidCrystal lcd(8, 9, 4, 5, 6, 7);



/* In der Arduino SW gibt es zwei Standard Routinen, 'setup()' wird einmalig nach dem Laden der FW
* ausgeführt, danach wird periodisch 'loop()' ausgeführt, solange der MC Strom hat.
*/
void setup() {
  /* Initialisiere Display als Display mit 16Spalten und zwei Zeilen. */
  lcd.begin(16, 2);
  /* Schreibe Text an aktuelle Cursor Position; also hier Zeile 0 Spalte 0. */ 
  lcd.print("Moin wirbel!");
}


/* die Arbeitsschleife des controllers. */
void loop() {
  /* Setze den Cursor auf den Beginn (Spalte 0) der zweiten Zeile (Zeile 1).
   * Hinweis: Text wird ab Cursorposition geschrieben.
   */
  lcd.setCursor(0, 1);
 
  /* gibt in zweiter Zeile die Anzahl der Sekunden seit dem Laden der Firmware aus. */
  lcd.print(millis()/1000);
}

Der Button oben unter dem Menü mit dem Häkchen erzeugt ein Hex file aus dem C code, die box unten in der Arduino Software zeigt die Compiler Meldungen. Kein Fehler? Gut.

Der Button rechts daneben mit dem Pfeil nach rechts lädt die Firmware per USB zum Arduino. Draufgeklickt, 4sec gewartet und siehe da, das LCD begrüßt mit einer Textzeile und zählt in der zweiten Zeile die Sekunde hoch.

Klingt doch gar nicht so schwer, oder? ;-)


Angehängte Dateien
.jpg   P1140188.JPG (Größe: 99,63 KB / Downloads: 53)
Zitieren
#2
Hi Wirbel!

Sehr nett aufgebaut und wirklich simpel Wink Für mich nur leider ein zu teures Spielzeug. Hast es aber wirklich Nett aufgebaut.
Zitat:Der Button oben unter dem Menü mit dem Häkchen erzeugt ein Hex file aus dem C code
Wofür ist das Hex-file? Ausführbare Datei? Ist hier dann der COM-Port fest eingebunden oder wird der aktuelle Port des Displays erkannt?

Schöne Grüße

David
vdr1: easyvdr2.0; CPU = I3-4130 Ram= 8GB; 4TB WD RED; 3TB WD RED; 1TB WD GREEN; MB= Gigabyte H81M-HD3; Intel-Ausgabe
Display1=Samsung LE37A615A 1920x1080 HDMI; Display2= Beamer Benq W1070 HDMI;
Sound= DENON AVR-X1100W;
DigitalDevices CT V6.1
vdr2: easyvdr 2.0; Streamdev-Client only; MB= POV ION330-1; 16GB-SSD; PicoPSU
vdr3: Notebook LG E500 15,4"; easyvdr 0.9.x; C2D T7300; 2 GB Ram
Reserve:MB= XFX GeForce® 9300 (MI-9300-7AS9); CPU= intel 5300E;
Mini-Server: CubieTruck mit EPGD und Dateifreigabe (24/7)
Zitieren
#3
Das hexfile ist die aus dem C code kompilierte firmware, welche dann per USB hochgeladen wird und dem controller sagt was er tun soll. Also ja, ausführbar, aber eben nur von einem Microcontroller. Man könnte also diese Datei auch mit einem Programmer in den ATmega programmieren. Hier erleichtert das board selbst das programmieren durch einen speziellen bootloader.

Im Falle der Arduino Software bleiben solche Details vor dem Benutzer etwas versteckt, was den Einstieg dann erleichtert.
Zitieren
#4
Hi Wirbel!

Danke für die Aufklärung, hätte man eigentlich auch selbst drauf kommen sollen  :-[ Nur mal interesse halber, gibts auch ne Firmware, die auf die USB-Schnittstelle horcht? Müsste ja vermutliche nicht wirklich viel mehr können, da die Zeichen ja anscheinend in der Firmware hinterlegt sind, sonst wäre der milis Aufruf ja nicht möglich. Somit müsste im loop ja nur x,y und text aus einem an der Schnittstelle übergebenen String genutzt werden und der rest könnte quasi so bleiben abgesehen von einem "read()".
Stell ich mir das grad zu einfach vor?

Schöne Grüße und Danke!

David
vdr1: easyvdr2.0; CPU = I3-4130 Ram= 8GB; 4TB WD RED; 3TB WD RED; 1TB WD GREEN; MB= Gigabyte H81M-HD3; Intel-Ausgabe
Display1=Samsung LE37A615A 1920x1080 HDMI; Display2= Beamer Benq W1070 HDMI;
Sound= DENON AVR-X1100W;
DigitalDevices CT V6.1
vdr2: easyvdr 2.0; Streamdev-Client only; MB= POV ION330-1; 16GB-SSD; PicoPSU
vdr3: Notebook LG E500 15,4"; easyvdr 0.9.x; C2D T7300; 2 GB Ram
Reserve:MB= XFX GeForce® 9300 (MI-9300-7AS9); CPU= intel 5300E;
Mini-Server: CubieTruck mit EPGD und Dateifreigabe (24/7)
Zitieren
#5
Klar.

Schau mal..
http://www.ladyada.net/learn/arduino/lesson4.html
Zitieren
#6
Danke!

hmm... ist ja bald Weihnachten Wink
vdr1: easyvdr2.0; CPU = I3-4130 Ram= 8GB; 4TB WD RED; 3TB WD RED; 1TB WD GREEN; MB= Gigabyte H81M-HD3; Intel-Ausgabe
Display1=Samsung LE37A615A 1920x1080 HDMI; Display2= Beamer Benq W1070 HDMI;
Sound= DENON AVR-X1100W;
DigitalDevices CT V6.1
vdr2: easyvdr 2.0; Streamdev-Client only; MB= POV ION330-1; 16GB-SSD; PicoPSU
vdr3: Notebook LG E500 15,4"; easyvdr 0.9.x; C2D T7300; 2 GB Ram
Reserve:MB= XFX GeForce® 9300 (MI-9300-7AS9); CPU= intel 5300E;
Mini-Server: CubieTruck mit EPGD und Dateifreigabe (24/7)
Zitieren
#7
<update> Foto hinzugefügt. </update>

Weiter gehts mit Beispiel 2, einem GLCD.
Zitieren


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste