- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Seite 2 von 3 ErsteErste 123 LetzteLetzte
Ergebnis 11 bis 20 von 23

Thema: 20x4 Display mit I2C Controller: Setup und Hello World

  1. #11
    Neuer Benutzer Öfters hier
    Registriert seit
    12.07.2016
    Beiträge
    6
    Anzeige

    LiFePo4 Akku selber bauen - Video
    Zitat Zitat von Sisor Beitrag anzeigen
    Heute lag ein neues Display für mich in der Post.

    Da aber im Netz leider nur schlechte Dokumentation für mein neues 20x4 Display zu finden war,
    habe ich mich entschlossen ein kleines 'HelloWorld' Demo zu schreiben:

    Hardware:
    Arduino Uno
    20x4 Zeichen Display QC2004A mit Sainsmart LCD2004 Controller
    4 Verbindungskabel

    Anschlussmethode:
    I2C (Verkabelung ist den angehängten Bildern zu entnehmen)

    Software:
    Arduino IDE
    LiquidCrystal-Library

    Als erstes den Ordner 'LiquidCrystal' aus der .zip-Datei in den Ordner Dokumente/Arduino/libraries ziehen.
    Jetzt sollte die LiquidCrystal-Library bekannt sein.

    Ein Wort zum I2C-Port:

    Mein Display-Controller hat den Port 0x27.
    LiquidCrystal_I2C lcd(0x27,2,1,0,4,5,6,7,3,POSITIVE);

    Sollte dieser Wert nicht bekannt sein, kann dieser I2C-Scanner zum Herausfinden des Ports benutzt werden.


    Code:
    Code:
    #include <Wire.h>
    #include <LiquidCrystal_I2C.h> //https://bitbucket.org/fmalpartida/new-liquidcrystal/downloads
    
    // Belegung für 16x4 LCD-Modul QC2204A
    // mit Sainsmart LCD2004 I2C-Controller
    LiquidCrystal_I2C  lcd(0x27,2,1,0,4,5,6,7,3,POSITIVE);
    
    void setup() {
      lcd.begin(20,4);
      lcd.setCursor(4,1);
      lcd.print("Hallo Welt!");
      delay(5000);
    }
    
    void loop() { 
      //Display löschen und Cursor nach oben links
      lcd.clear();
      lcd.home();
      
      //---Zeilen ansprechen
      lcd.setCursor(4,0);
      lcd.print("Zeile 1");
      lcd.setCursor(5,1);
      lcd.print("Zeile 2");
      lcd.setCursor(6,2);
      lcd.print("Zeile 3");
      lcd.setCursor(7,3);
      lcd.print("Zeile 4");
      delay(2000);
      
      //---Display-Inhalt nach rechts scrollen
      lcd.scrollDisplayRight();
      //lcd.scrollDisplayLeft()
      delay(2000);
      
      //---Cursor ein  
      lcd.clear();
      lcd.home();
      lcd.print("Cursor blinkt:");
      lcd.setCursor(0,1);
      lcd.blink();
      delay(2000);
      
      //---alternativer Cursor
      lcd.clear();
      lcd.home();
      lcd.print("Cursor Unterstrich:");
      lcd.setCursor(0,1);
      lcd.cursor();
      delay(2000);
      
      //---Zurücksetzen
      lcd.clear();
      lcd.home();
      lcd.noCursor();
      lcd.noBlink();
      
      //---Alle Zeichen anzeigen
      lcd.print("Alle Zeichen...");
      delay (2000);
      lcd.clear();
      lcd.setCursor(2,0);
      int i=1;
      for (char c = -128; c < 127; c++,i++){
        lcd.print(c);
        if (!(i%16)) lcd.setCursor(2,(i/16)%4);  
        if (!(i%64)) delay(3000);
      }
      delay(3000);
    
      //---Display aus
      lcd.clear();
      lcd.home();
      lcd.print("Display aus...");
      delay(2000);
      lcd.off();
      delay(2000);
      //---Display wieder an
      lcd.on();
      //lcd.noBacklight();
      //lcd.backlight();
    }
    Das Ergebnis ist eine leicht zu steuernde visuelle Anbindung an den Bediener bei nur 4 Pins belegten Pins. Klasse!

    Anhang 27436Anhang 27435Anhang 27434Anhang 27437

    -----------------------------Aktualisiert:-----------------------------



    Wie baue ich mir eigene Zeichen (Custom Chars)?

    Oben genanntes LCD hat 8 Speicherplätze für selbstdefinierbare Zeichen.
    Pro Zeichen werden 5x8 Pixel benutzt.
    Im folgenden wird eine Glocke als Zahlen-Code berechnet.
    Anmerkung: Die Hex-Code-Umrechnung braucht man eigentlich nicht.


    In eine Tabelle gepackt (1 bedeutet sichtbar, 0 unsichtbar) kann man mit ein bischen Phantasie die Glocke erkennen:

    16 08 04 02 01 Bitwert
    0 0 1 0 0 16*0 + 8*0 + 4*1 + 2*0 + 1*0 = 4 = 0x04
    0 1 1 1 0 16*0 + 8*1 + 4*1 + 2*1 + 1*0 = 14 = 0x0E
    0 1 1 1 0 16*0 + 8*1 + 4*1 + 2*1 + 1*0 = 14 = 0x0E
    0 1 1 1 0 16*0 + 8*1 + 4*1 + 2*1 + 1*0 = 14 = 0x0E
    1 1 1 1 1 16*1 + 8*1 + 4*1 + 2*1 + 1*1 = 31 = 0x1F
    0 0 0 0 0 16*0 + 8*0 + 4*0 + 2*0 + 1*0 = 0 = 0x00
    0 0 1 0 0 16*0 + 8*0 + 4*1 + 2*0 + 1*0 = 4 = 0x04
    0 0 0 0 0 16*0 + 8*0 + 4*0 + 2*0 + 1*0 = 0 = 0x00

    Nun fügen wir die Glocke (und 7 andere Zeichen) im Code als Array ein:

    uint8_t bell[8] = {0x04,0x0E,0x0E,0x0E,0x1F,0x00,0x04,0x00};
    oder alternativ:
    uint8_t bell[8] = {4, 14, 14, 14, 31, 0, 4, 0};

    Dann übergeben wir das Array an das Display (Speicherplatz 0):

    lcd.createChar(0, bell);

    Und lassen es ausgeben:

    lcd.write(byte(0));

    Code:
    #include <Wire.h>
    #include <LiquidCrystal_I2C.h> 
    
    // Belegung für 16x4 LCD-Modul QC2204A
    // mit Sainsmart LCD2004 I2C-Controller
    LiquidCrystal_I2C  lcd(0x27,2,1,0,4,5,6,7,3,POSITIVE);
    
    void setup() {
      lcd.begin(20,4);
      createCustomChars();
      
      lcd.setCursor(2,1);
      lcd.print("Eigene Zeichen!");
      delay(5000);lcd.clear();
    
      lcd.print("Codes 0x00-0x07");
      lcd.setCursor(0, 2);
      for (int i=0; i<8; i++) 
      {
        lcd.write(byte(i));
      }
    }
    void loop() {}
    
    void createCustomChars()
    {
      uint8_t bell[8]     = {0x04,0x0E,0x0E,0x0E,0x1F,0x00,0x04,0x00};
      uint8_t note[8]     = {0x02,0x03,0x02,0x0E,0x1E,0x0C,0x00,0x00};
      uint8_t clock[8]    = {0x00,0x0E,0x15,0x17,0x11,0x0E,0x00,0x00};
      uint8_t heart[8]    = {0x00,0x0A,0x1F,0x1F,0x0E,0x04,0x00,0x00};
      uint8_t duck[8]     = {0x00,0x0C,0x1D,0x0F,0x0F,0x06,0x00,0x00};
      uint8_t check[8]    = {0x00,0x01,0x03,0x16,0x1C,0x08,0x00,0x00};
      uint8_t cross[8]    = {0x00,0x1B,0x0E,0x04,0x0E,0x1B,0x00,0x00};
      uint8_t retarrow[8] = {0x01,0x01,0x05,0x09,0x1F,0x08,0x04,0x00};
      
      lcd.createChar(0, bell);
      lcd.createChar(1, note);
      lcd.createChar(2, clock);
      lcd.createChar(3, heart);
      lcd.createChar(4, duck);
      lcd.createChar(5, check);
      lcd.createChar(6, cross);
      lcd.createChar(7, retarrow);
    }

    Guten Abend,
    tolle sache habe grade bei dir gesehen, mir ict auf gefallen das du dei Display mit Plus und minus versorgt hast aber der SDA ist auf 4 und SCL auf 5
    du dagegen hast die 2 leitungen oben angeschlosse ist das so richtig? ich bin neu darum vielleicht die Dumme Frage.
    danke und Gruß.
    ledblu

  2. #12
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    13.01.2014
    Beiträge
    454
    Blog-Einträge
    3
    Diese Pins sind doppelt rausgeführt. Siehe hier.

  3. #13
    Neuer Benutzer Öfters hier
    Registriert seit
    12.07.2016
    Beiträge
    6

    20x4 Display

    Hi danke für der Hinweis sehr nett von dir und danke für das tolles Bild.

    ich hätte eine andere frage ich habe der selbe Display aber bei mir passiert nichts ob ich deine Programm lade oder sonst eines Programm
    könntest du dir vorstellen warum? oder hast du ein kleines Programm der bei dir läuft zum test ganz klein nur das notwendiges ,
    würde dir sehr dankbar sein, schön Tag noch.
    Gruß.
    ledblu

  4. #14
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    13.01.2014
    Beiträge
    454
    Blog-Einträge
    3
    Da ich deinen Kenntnisstand nicht kenne, ist es schwer das Problem einzuordnen.
    Hast du schon mit Beispielprogrammen aus der Arduino-IDE experimentiert? (Datei->Beispiele)
    Oder ist das dein erster Kontakt mit einem Arduino?

  5. #15
    HaWe
    Gast
    hi,
    "das selbe" hast du sicher nicht - vielleicht ein bau-gleiches, aber vielleicht sieht es auch nur ähnlich aus, ist aber doch ein anderes.
    Welcher I2C Controller Chip ist denn daruf? Es gibt diese 20x4 LCDs mit sehr vielen verschiedenen Controller Chips, die alle anders angesteuert werden müssen (PCF8574 mit HD44780, oder MCP23017, ...)
    welcher IC ist denn bei dir drauf?

    ps,
    es gibt auch verschiedene LCD2004 - I2C Libs von verschiedenen Autoren, hier habe ich z.B. zwei verschiedenen, die je nach LCD mal mit dem einen, mal mit dem anderen LCD besser funktionieren:
    http://www.mindstormsforum.de/viewto...&t=8491#p66177
    Geändert von HaWe (04.09.2016 um 11:34 Uhr)

  6. #16
    Neuer Benutzer Öfters hier
    Registriert seit
    12.07.2016
    Beiträge
    6
    Hi,
    ja ich habe schon Berührung mit Arduino und mit der 16x2 klappt, neuerdings habe so ein Fehlermeldung kann ich gar nicht gebrauchen ich weis nicht
    warum und wo er das kommt bin irgendwie gegen gekommen oder was? das verstehe ich nicht, vielleicht kannst du mie Helfen?

    Danke die sehr.
    Gruß

    java.io.IOException: Zugriff verweigert
    at java.io.WinNTFileSystem.createFileExclusively(Nati ve Method)
    at java.io.File.createTempFile(File.java:2024)
    at processing.app.BaseNoGui.saveFile(BaseNoGui.java:1 096)
    at processing.app.SketchCode.save(SketchCode.java:222 )
    at processing.app.SketchData.save(SketchData.java:165 )
    at processing.app.Sketch.save(Sketch.java:595)
    at processing.app.Editor.handleSave2(Editor.java:2271 )
    at processing.app.Editor.handleSave(Editor.java:2251)
    at processing.app.Editor.handleExport(Editor.java:238 3)

    - - - Aktualisiert - - -

    Hi, na ja du weis was ich meine sicher ist nicht das was sisor hat aber der ist Blau eine hat eine Zusatz Platine damit die ganze Kabelei mir sparen aber irgend wie geht nicht
    hinter der Display steht 2004A bei der andere steht QC2004A und der eine ist solo der andere hat diese Zusatz Platine SDA/SCL diese Bezeichnung habe irgendwo gelesen aber sicher bin ich mich nicht.

    hast di Vielleicht andere tipps? danke für die Mühe nett von dir.

    Gruß

  7. #17
    HaWe
    Gast
    mit den Fehlermeldungen kenne ich mich auch nicht aus, wenn ich sie selber hätte und nicht wegbekäme, würde ich die IDE deinstallieren und neu installieren.
    Was das I2C LCD angeht: der Treiber-IC ist ganz entscheidend, ohne dass man den nicht kennt, kann man es nicht mit Sicherheit richtig ansteuern.
    Frag den Händler im Zweifel, der muss es dir sagen können, oder es gibt ein Datenblatt, wo es drauf steht (muss dir auch der Händler liefern können).
    Wenn du nicht weiter kommst, tritt vom Kaufvertrag zurück, retourniere es, lass dir das Geld zurücküberweisen.

  8. #18
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.12.2007
    Ort
    weit weg von nahe Bonn
    Alter
    39
    Beiträge
    3.416
    java.io.IOException: Zugriff verweigert
    klingt nach fehlenden Zugriffsrechten, eventuell mal als admin starten
    Es gibt 10 Sorten von Menschen: Die einen können binär zählen, die anderen
    nicht.

  9. #19
    Neuer Benutzer Öfters hier
    Registriert seit
    12.07.2016
    Beiträge
    6
    was als Admin starten?
    ich habe durch ein Zufall Windows 1o drauf und so einen Start kenne ich nicht kannst du helfen?

  10. #20
    Hallo

    Wollte mich hier mal ein klein bisschen einmischen... durch diese Seite konnte ich mein Display auch problemlos in Betrieb nehmen.

    Als Hinweis sei noch gesagt (falls hier nicht schon geschehen) das man auch den Kontrast-Poti auf der Platine hinten nicht außer Acht lassen sollte, also wenn nach dem Aufspielen des Codes auf den Arduino nichts im Display zu sehen ist, kann es auch an den Kontrasteinstellungen liegen (war zumindest bei mir so).

    Da man nicht nur nehmen, sondern auch geben sollte, habe ich auf Basis des Scripts auf dieser Seite (https://github.com/tinkering-arduino...font-generator) das Ganze mal für das in diesem Thread besprochene Display umgewurschtelt, da ich auch auf die Schnelle nix passendes im Netz gefunden habe. Also wer sich 'ne Glocke oder ähnliches basteln will... http://help.skyifx.de/dot_matrix.php

Seite 2 von 3 ErsteErste 123 LetzteLetzte

Ähnliche Themen

  1. Verkaufe 2004 Character LCD Module Display 20X4 Zeichen Blau TC2004A-03
    Von bufu im Forum Kaufen, Verkaufen, Tauschen, Suchen
    Antworten: 4
    Letzter Beitrag: 25.01.2014, 12:23
  2. Initialisierung des LCD - Display (20x4)
    Von hemisoft im Forum Allgemeines zum Thema Roboter / Modellbau
    Antworten: 16
    Letzter Beitrag: 28.05.2013, 21:43
  3. neues 20x4 Display an M128
    Von copcom-weber im Forum Robby RP6
    Antworten: 6
    Letzter Beitrag: 18.06.2010, 08:55
  4. Display mit HX8238A Controller
    Von wurm im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 0
    Letzter Beitrag: 25.05.2009, 00:01
  5. Uni-Projekt: 15 Servos, LCD-Display, Schalter und Controller
    Von iNGY! im Forum Vorstellung+Bilder+Ideen zu geplanten eigenen Projekten/Bots
    Antworten: 18
    Letzter Beitrag: 24.10.2007, 01:04

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

12V Akku bauen