[Erledigt] LCD 16x2 blau/weiß von Conrad an Arduino

vor 30 Wochen 3 Tage von RSHeinz

Hallo!
Hat jemand von euch schon mal ein LCD von Anag Vision von Conrad (Artikel-Nr 181651 - 62) verbaut?
Ich hab das 16x2 blau/weiß AV1624BNBW-WJ angeschlossen aber ich bekomme keine Anzeige. Habe vorher ein LCD von Pollin dran gehabt mit der gleichen Pinbelegung und das hat einwandfrei funktioniert. Brauche ich für dieses vll eine andere lib oder ist es völlig unbrauchbar für den Arduino??

MFG Heinz

Ähnliche Posts

20 Antworten auf “LCD 16x2 blau/weiß von Conrad an Arduino”


Darstellungsoptionen

Wähle hier deine bevorzugte Anzeigeart für Kommentare und klicke auf „Einstellungen speichern“ um die Änderungen zu übernehmen.
  1. uwe sagt:

    Hallo Heinz
    Wie ist Vo eingestellt? Achtung, der Wert den das Datenblatt bei Conrad angibt ist von +5V aus gemessen nicht von Masse!!!
    Vieleicht hilft Dir das weiter; http://www.freeduino.de/forum/hardware/lcd-arduino
    Welches ist das "alte " Display?
    Grüße Uwe

    Antworten quote

  1. RSHeinz sagt:

    Alles klar, es war meine Pinbelegung. Es wird bei dem display anders herum gezählt als bei dem
    DATAVISION DV-20208 von Pollin. Nur auf dem Display war keine Nummerierung, habs einfach mal probiert und es funktioniert. Danke!!!!

    Ein kleines Problem hab ich aber immernoch. Ich lasse mir auf dem LCD eine Temperatur anzeigen. Das klappt auch soweit, aber wenn die Temperatur über 100 C° steigt wird die Anzeige natürlich 3-stellig. Aber wenn die Temperatur danach wieder unter 100 C° sinkt, dann bleibt die 3. Ziffer einfach stehen. Das heißt nach 100 C° kommt nicht 99 sondern 990,980,...
    Wie kann ich die Anzeige zurücksetzten damit die Zahl wieder stimmt??

    MFG Heinz

    Antworten quote

  1. uwe sagt:

    Hallo Heinz
    Du überschreibst einfach die Zahl und wenn Du von 3 Stellen (100) auf 2 Stellen (99) kommst schreibst Du nur 2 Zeichen. Das dritte Zeichen (die Einerstelle von 100) bleibt.
    Scheibe einfach wenn die Zahl kleiner als 100 ist eine Leerzeichen davor. So bleibt auch die Position der Zahl gleich.
    Grüße Uwe

    Antworten quote

  1. RSHeinz sagt:

    Hallo Uwe
    Das mit dem Überschreiben hat super funktioniert, danke! Hätte man eigentlicht selbst drauf kommen müssen. ;-)
    Wie kann ich denn das Celsius Zeichen anzeigen? C° Bekomme hinter dem C immer ein anderes Sonderzeichen aber hab bei anderen gesehen das es irgendwie funktionieren muss.

    MFG Heinz

    Antworten quote

  1. uwe sagt:

    Hallo Heinz

    Da mußt Du den Zeichensatz des Displays bzw des Controller kontrollieren. Da findest Du alle darstellbaren Zeichen. Je nach Controller-Version gibt es verschiedene Zeichensätze.
    Oder der Controller müßte auch die Möglichkeit haben selbst einige Zeichen zu definieren. (Character Generator RAM).

    Grüße Uwe

    Antworten quote

  1. RSHeinz sagt:

    Hab den Zeichensatz gefunden und das Zeichen ist auch dabei. Aber wie man diese abrufen kann hab ich nicht verstanden, ist vll noch ein bisschen viel für nen Anfänger wie mich ;-)

    Antworten quote

  1. uwe sagt:

    Hallo Heinz
    Soweit ich verstanden habe hängt der Zeichensatz vom Model des Displaycontrolers ab.
    http://www.datasheetarchive.com/pdf-datasheets/Datasheets-110/DSAP002411...

    Die letzten beiden Zahlen am Ende der IC kennung ( die nach dem "F") bedeuten: KS0066FXX wobei XX:

    F00 Englisch Zahlen Japanisch
    F03 Englisch Zahlen Französisch
    F04 Englisch Zahlen Japanisch
    F05 Englisch Zahlen Europäisch
    F06 Englisch Zahlen
    F59 Englisch Zahlen

    Dann einfach wie bei allen Buchstaben einfach Zahl des Zeichens ins Display schreiben.

    Das Caracter Generator Ram zu benutzen: hier eine Beschreibung: http://www.geocities.com/dinceraydin/lcd/custom.htm auch wenn es für den Equivalente Baustein von Hitachi ist.

    Generelle Erklährung: http://de.wikipedia.org/wiki/HD44780

    Ich hoffe ich war verständlich.
    Grüße Uwe

    Antworten quote

  1. RSHeinz sagt:

    Ja ich habs verstanden :-) , nur wenn ich die Zahl eingebe zeigt er mir nicht das Zeichen an sondern wandelt die Dualzahl in eine Dezimalzahl und zeigt mir diese an.

    Antworten quote

  1. uwe sagt:

    Hallo Heinz
    Äh, jetzt stehe ich auf der Leitung;
    Ich verstehe nicht "wandelt die Dualzahl in eine Dezimalzahl und zeigt mir diese an".
    Grüße Uwe

    Antworten quote

  1. RSHeinz sagt:

    Hab noch ein bisschen rumprobiert. Also wenn ich den Code eines Zeichens eingebe und dieser fängt mit einer 1 an, dann zeigt er mir einfach meinen Code auf dem LCD wieder an. Und wenn der Code mit einer 0 anfängt schreibt er mir eine 6 stellige Dezimalzahl ins LCD. Vielleicht fehlt mir noch irgendeine Angabe, muss ich doch nur mit Hilfe von lcd.print eingeben, oder?

    Gruß Heinz

    Antworten quote

  1. uwe sagt:

    Hallo Heinz
    Da bin ich sprachlos.
    Also wenn Du 65 hineinschreibst dann wird ein "A" angezeigt?
    Bei welcher Zahl (bitte ein Beispiel) kommt es zu dieser komischen 6 stelligen zahl?

    Bitte schike den sketch den du verwendest und die genaue Zahlen (Zeichencode den Du reinschreibst und Zahl die angezeigt wird)
    Grüße Uwe

    Antworten quote

  1. RSHeinz sagt:

    Mach dich nicht verrückt, zur Not verzichte ich da erstmal darauf. Hab noch genug andere Baustellen und Wissenslücken was das ganze Projekt angeht ;-)) Aber Danke nochmal das du dir mit mir so viel Mühe gibst!

    Antworten quote

  1. RSHeinz sagt:

    #include

    int sensorPin = 1;
    int letPin = 13;
    int sensorValue = 0;
    int temp = 0;

    LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

    void setup() {

    pinMode(letPin, OUTPUT);
    lcd.begin(16, 2);
    lcd.print("Oiltemp:");

    }

    void loop() {

    sensorValue = analogRead(sensorPin);

    temp = (100000/ sensorValue) *0.675;

    if (temp <= 99)
    lcd.setCursor(9, 0);

    else
    lcd.setCursor(8, 0);
    lcd.print(" ");

    lcd.print(temp);

    if (temp >= 125)
    lcd.noDisplay();
    delay(500);

    lcd.display();
    delay(500);

    lcd.setCursor(13, 0);
    lcd.print("C");

    lcd.setCursor(5, 1);
    lcd.print(01111010);

    }

    Angezeigt wird mir die Zahl 299528. Eigentlich müsste das doch das Zeichen (z) sein. Wenn ich 65 eingebe, dann zeigt er mir auch die 65 an.
    Gruß

    Antworten quote

  1. uwe sagt:

    Hallo Heinz

    Was ich auf die schnelle sehe ist, daß du nach den IF bzw ELSE Anweisungen keine geschwungene Klammer verwendest. Dies ist möglich, aber dann ist nur die erste Anweisung nach dem IF / ELSE bedingt ausgeführt.

    temp = (100000/ sensorValue) *0.675;
    ist besser temp = (67500 / sensorValue);
    das spart Dir einen Rechenschritt und du mußt nicht mit Float Typ für die Variable rechenen sondern kannst long Typ verwenden.

    Mühe: Ich hoffe, wenn ich Probleme habe, dann hilft mir auch jemand weiter :-))

    Mehr heute Abend
    Grüße Uwe

    Antworten quote

  1. RSHeinz sagt:

    Danke, hab die Tipps schon umgesetzt! Ist auf jeden Fall besser.
    Gruß

    Antworten quote

  1. uwe sagt:

    Hallo Heinz
    Du hast den sketch verändert? schickst Du es nochmal?
    Tschüß Uwe

    Antworten quote

  1. RSHeinz sagt:

    Ja gern, hab aber nur die 2 Tipps von dir umgesetzt, sonst nix:

    #include

    int sensorPin = 1;
    int letPin = 13;
    int sensorValue = 0;
    int temp = 0;

    LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

    void setup() {

    pinMode(letPin, OUTPUT);
    lcd.begin(16, 2);
    lcd.print("Oiltemp:");

    }

    void loop() {

    sensorValue = analogRead(sensorPin);

    temp = (67500 / sensorValue);

    if (temp <= 99) {
    lcd.setCursor(9, 0);
    }

    else {
    lcd.setCursor(8, 0);
    lcd.print(" ");
    }

    lcd.print(temp);

    if (temp >= 125) {
    lcd.noDisplay();
    delay(500);

    lcd.display();
    delay(500);
    }

    lcd.setCursor(13, 0);
    lcd.print("C");

    lcd.setCursor(5, 1);
    lcd.print(01111010);

    }

    Antworten quote

  1. uwe sagt:

    Hallo Heinz
    Das mit der Großen Zahl: ich tippe mal auf einen Überlauf.
    Du definierst Temp als INT Integer d.h 2 Byte, Werte von ca -32,768 bis 32,767 .
    Dann bei der Berechnung der Temperatur startst Du von der Zahl 67500.
    Versuch mal: Definiere temp als long :
    long temp=0;

    Schicke über die Serielle Schnittstelle die Werte von sensorValue und Temp.
    So kannst du erkennen ob das Display Blödsinn zeigt oder dem Display Blödsinn übermittelt wird und es den Blödsinn richtig anzeigt. http://arduino.cc/en/Reference/Serial

    Zu den selbst definierten Zeichen: die Bibliothek LiquidCristal enthält die Funktion createChar() http://arduino.cc/en/Reference/LiquidCrystalCreateChar da kannst Du Zeichen definieren ohne tief in die Programmierung des Controllers des Displays einzugreifen.
    Tschüß
    Uwe

    Antworten quote

  1. RSHeinz sagt:

    Hallo Uwe!
    Hab alles umgesetzt und es funktioniert einwandfrei, vielen Dank! Hab mein Zeichen selbst erstellt, meine Werte über die serielle Schnittstelle geschickt und meine Anzeige stimmt auch!! :-))))

    MFG Heinz

    Antworten quote

  1. uwe sagt:

    Bitte ; Gratulation
    Grüße Uwe

    Antworten quote

Kommentar hinzufügen

Der Inhalt dieses Feldes wird nicht öffentlich zugänglich angezeigt.
Array
CAPTCHA
Diese Frage hat den Zweck zu testen, ob man ein menschlicher Benutzer ist und um automatisierten Spam vorzubeugen.
Uhrze_t:
Inhalt abgleichen