Krijg display niet werkend

Hardware die niet past in bovenstaande onderwerpen
Berichten: 34
Geregistreerd: 31 Jan 2015, 15:10
Woonplaats: Vierhouten

Krijg display niet werkend

Berichtdoor HansvB » 31 Jan 2015, 17:02

Ik ben nieuw op dit forum en een beginner met de Arduino.
Wel heb ik uit het verleden elektronica en programmeer ervaring met c.

Ik heb een Arduino UNO Rev 3. Tot nu toe ging het maken van eenvoudige schakeling prima. Leds, relais schakelen. Analoge ingangen meten. Seriële communicatie, enz.

De volgende stap was het aansluiten van een display. En dit wil niet lukken.

Ik heb een LCD Display HD44780 - 20x4 wit op blauw met I2C interface gekocht. Op de achterkant van het display staat QC2004A.
Welk merk en versie van de I2C interface ik heb, is mij niet duidelijk.

In eerste instantie het display aangeslotenen via de I2C interface zoals beschreven op de site http://arduino-info.wikispaces.com/LCD-Blue-I2C#v3.
Tijdens de compilatie geen foutmeldingen. Helaas blijft het bij een 'leeg' display. Zie foto in de bijlage.
Zoals op de wiki site aangeven het adres gewijzigd naar 0x27. Ook dit hielp niet.
Op de wiki site staat dat SDA met ANALOG Pin 4 en SCL met ANALOG pin 5 verbonden moet worden. De UNO Rev 3 heeft echter ook een SDA en SCL ingang.
Vervolgens de I2C Interface op deze ingangen aangesloten. Geen resultaat.

Toen het display direct op de Arduino aangesloten. Het resultaat blijft hetzelfde.

Iemand een idee wat ik over het hoofd zie?
Bijlagen
IMG_2202.JPG
Hier blijft het bij
IMG_2202.JPG (16.85 KiB) 11242 keer bekeken
IMG_2201.JPG
I2C Interface
IMG_2201.JPG (36.58 KiB) 11242 keer bekeken
IMG_2200.JPG
LCD Display HD44780 - 20x4 wit op blauw
IMG_2200.JPG (42.67 KiB) 11242 keer bekeken

Advertisement

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: Krijg display niet werkend

Berichtdoor nicoverduin » 31 Jan 2015, 17:24

De oorzaak zit hem in de pin definities. Heb hetzelfde probleem gehad. Ben ff aan 't zoeken :)

@edit: helaas dat was een ander board.

Kan je even je code laten zien? Ik heb een vermoeden maar moet de code ff zien.
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 34
Geregistreerd: 31 Jan 2015, 15:10
Woonplaats: Vierhouten

Re: Krijg display niet werkend

Berichtdoor HansvB » 31 Jan 2015, 18:19

Ik heb een vier regel display. De code hieronder is bedoeld voor twee regels. Dat heb ik ook aangepast. Maar heeft ook geen resultaat gehad.

Dit is de code die ik gebruikt heb voor het display direct op de UNO:

/*
LiquidCrystal Library - Hello World

Demonstrates the use a 16x2 LCD display. The LiquidCrystal
library works with all LCD displays that are compatible with the
Hitachi HD44780 driver. There are many of them out there, and you
can usually tell them by the 16-pin interface.

This sketch prints "Hello World!" to the LCD
and shows the time.

The circuit:
* LCD RS pin to digital pin 12
* LCD Enable pin to digital pin 11
* LCD D4 pin to digital pin 5
* LCD D5 pin to digital pin 4
* LCD D6 pin to digital pin 3
* LCD D7 pin to digital pin 2
* LCD R/W pin to ground
* 10K resistor:
* ends to +5V and ground
* wiper to LCD VO pin (pin 3)

Library originally added 18 Apr 2008
by David A. Mellis
library modified 5 Jul 2009
by Limor Fried (http://www.ladyada.net)
example added 9 Jul 2009
by Tom Igoe
modified 22 Nov 2010
by Tom Igoe

This example code is in the public domain.

http://www.arduino.cc/en/Tutorial/LiquidCrystal
*/

// include the library code:
#include <LiquidCrystal.h>

// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

void setup() {
// set up the LCD's number of columns and rows:
lcd.begin(16, 2);
// Print a message to the LCD.
lcd.print("hello, world!");
}

void loop() {
// set the cursor to column 0, line 1
// (note: line 1 is the second row, since counting begins with 0):
lcd.setCursor(0, 1);
// print the number of seconds since reset:
lcd.print(millis()/1000);
}

=========================================================================

En dit is de code die ik gebuikt heb met de I2C:


/* YourDuino.com Example Software Sketch
20 character 4 line I2C Display
Backpack Interface labelled "LCM1602 IIC A0 A1 A2"
terry@yourduino.com */

/*-----( Import needed libraries )-----*/
#include <Wire.h> // Comes with Arduino IDE
// Get the LCD I2C Library here:
// https://bitbucket.org/fmalpartida/new-l ... /downloads
// Move any other LCD libraries to another folder or delete them
// See Library "Docs" folder for possible commands etc.
#include <LiquidCrystal_I2C.h>

/*-----( Declare Constants )-----*/
//none
/*-----( Declare objects )-----*/
// set the LCD address to 0x20 for a 20 chars 4 line display
// Set the pins on the I2C chip used for LCD connections:
// addr, en,rw,rs,d4,d5,d6,d7,bl,blpol
LiquidCrystal_I2C lcd(0x20, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); // Set the LCD I2C address


/*-----( Declare Variables )-----*/
//none

void setup() /*----( SETUP: RUNS ONCE )----*/
{
Serial.begin(9600); // Used to type in characters

lcd.begin(20,4); // initialize the lcd for 20 chars 4 lines and turn on backlight

// ------- Quick 3 blinks of backlight -------------
for(int i = 0; i< 3; i++)
{
lcd.backlight();
delay(250);
lcd.noBacklight();
delay(250);
}
lcd.backlight(); // finish with backlight on

//-------- Write characters on the display ----------------
// NOTE: Cursor Position: CHAR, LINE) start at 0
lcd.setCursor(3,0); //Start at character 4 on line 0
lcd.print("Hello, world!");
delay(1000);
lcd.setCursor(2,1);
lcd.print("From YourDuino");
delay(1000);
lcd.setCursor(0,2);
lcd.print("20 by 4 Line Display");
lcd.setCursor(0,3);
delay(2000);
lcd.print("http://YourDuino.com");
delay(8000);
// Wait and then tell user they can start the Serial Monitor and type in characters to
// Display. (Set Serial Monitor option to "No Line Ending")
lcd.setCursor(0,0); //Start at character 0 on line 0
lcd.print("Start Serial Monitor");
lcd.setCursor(0,1);
lcd.print("Type chars 2 display");


}/*--(end setup )---*/


void loop() /*----( LOOP: RUNS CONSTANTLY )----*/
{
{
// when characters arrive over the serial port...
if (Serial.available()) {
// wait a bit for the entire message to arrive
delay(100);
// clear the screen
lcd.clear();
// read all the available characters
while (Serial.available() > 0) {
// display each character to the LCD
lcd.write(Serial.read());
}
}
}

}/* --(end main loop )-- */


/* ( THE END ) */

Berichten: 77
Geregistreerd: 06 Okt 2012, 10:57

Re: Krijg display niet werkend

Berichtdoor Beamer » 31 Jan 2015, 18:34

Ik zie in je sketch geen I2C staan. Dat gaat dus niet werken.
Je moet een voorbeeld zoeken met LCD enI2C.

Berichten: 34
Geregistreerd: 31 Jan 2015, 15:10
Woonplaats: Vierhouten

Re: Krijg display niet werkend

Berichtdoor HansvB » 31 Jan 2015, 18:46

@Beamer: Klopt. Ik heb het display met en zonder I2C aangesloten.
De bovenste sketch is voor het aansluiten van het display zonder I2C. Daaronder staat de sketch die ik gebruikt heb met de I2C.
Beide gaven geen resultaat.

Berichten: 97
Geregistreerd: 05 Nov 2014, 22:04

Re: Krijg display niet werkend

Berichtdoor MarcelK » 31 Jan 2015, 20:38

Ik heb ook eens gespeeld met een 2004 display en had de I2C interface met de headerpins rechtsreeks op de 20x4 gesoldeerd.

In eerste instantie had ik een dergelijk blokjesbeeld, nadat ik de soldeerverbindingen had nagelopen werkte het zonder problemen.
Het beeld wat je hebt kan een slechte verbinding zijn lijkt mij.

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: Krijg display niet werkend

Berichtdoor nicoverduin » 31 Jan 2015, 23:16

Wat ik al vermoedde: Je moet bij I2C ook het adres meegeven van dat adaptertje. Die worden gegeven door die 3 soldeerpads onder de potmeter. In de huidige stand is dat adres 0x27.

In mijn code heb ik de volgende regel.
cpp code
LiquidCrystal_I2C myDisplay(0x27, 20, 4);


Verder kun je de code die je hier laat zien het beste tonen met de volgende code tags [ code2=cpp ] en /[ /code2 ] en dan zonder de spaties. dan ziet het er zo uit:
cpp code
/* YourDuino.com Example Software Sketch
20 character 4 line I2C Display
Backpack Interface labelled "LCM1602 IIC A0 A1 A2"
terry@yourduino.com */

/*-----( Import needed libraries )-----*/
#include <Wire.h> // Comes with Arduino IDE
// Get the LCD I2C Library here:
// https://bitbucket.org/fmalpartida/new-l ... /downloads
// Move any other LCD libraries to another folder or delete them
// See Library "Docs" folder for possible commands etc.
#include <LiquidCrystal_I2C.h>

/*-----( Declare Constants )-----*/
//none
/*-----( Declare objects )-----*/
// set the LCD address to 0x20 for a 20 chars 4 line display
// Set the pins on the I2C chip used for LCD connections:
// addr, en,rw,rs,d4,d5,d6,d7,bl,blpol
LiquidCrystal_I2C lcd(0x20, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); // Set the LCD I2C address

/*-----( Declare Variables )-----*/
//none
void setup() /*----( SETUP: RUNS ONCE )----*/
{
Serial.begin(9600); // Used to type in characters

lcd.begin(20, 4); // initialize the lcd for 20 chars 4 lines and turn on backlight

// ------- Quick 3 blinks of backlight -------------
for (int i = 0; i < 3; i++) {
lcd.backlight();
delay(250);
lcd.noBacklight();
delay(250);
}
lcd.backlight(); // finish with backlight on

//-------- Write characters on the display ----------------
// NOTE: Cursor Position: CHAR, LINE) start at 0
lcd.setCursor(3, 0); //Start at character 4 on line 0
lcd.print("Hello, world!");
delay(1000);
lcd.setCursor(2, 1);
lcd.print("From YourDuino");
delay(1000);
lcd.setCursor(0, 2);
lcd.print("20 by 4 Line Display");
lcd.setCursor(0, 3);
delay(2000);
lcd.print("http://YourDuino.com");
delay(8000);
// Wait and then tell user they can start the Serial Monitor and type in characters to
// Display. (Set Serial Monitor option to "No Line Ending")
lcd.setCursor(0, 0); //Start at character 0 on line 0
lcd.print("Start Serial Monitor");
lcd.setCursor(0, 1);
lcd.print("Type chars 2 display");

}/*--(end setup )---*/

void loop() /*----( LOOP: RUNS CONSTANTLY )----*/
{
{
// when characters arrive over the serial port...
if (Serial.available()) {
// wait a bit for the entire message to arrive
delay(100);
// clear the screen
lcd.clear();
// read all the available characters
while (Serial.available() > 0) {
// display each character to the LCD
lcd.write(Serial.read());
}
}
}

}/* --(end main loop )-- */

/* ( THE END ) */


Nu kijkend naar de code heb je kans dat als je het adres 0x20 veranderd in 0x27 dat hij het wel doet. Anders weet ik nog wel een andere library die ik gebruik en prima werkt.
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 34
Geregistreerd: 31 Jan 2015, 15:10
Woonplaats: Vierhouten

Re: Krijg display niet werkend

Berichtdoor HansvB » 01 Feb 2015, 12:55

@nicoverduin, bedankt voor jouw terugkoppeling en tip. Dat leest inderdaad beter.

Ik heb de code aangepast met jouw regel. Het adres had ik ook al eens aangepast, maar ik zie dat jij alleen de argumenten 20, 4 gebruikt. 20 karakters en 4 regels naar ik aanneem.

Voor ik deze code probeerde had ik de Arduino IDE opnieuw geïnstalleerd. Ik had zo veel gerommeld met libraries dat ik twijfelde of het nog wel goed stond. Ik gebruik versie 1.5.8.

Nu krijg ik bij de compilatie de volgende foutmelding:
Code: Alles selecteren
sketch_feb01a.ino:22:40: error: invalid conversion from 'int' to 't_backlighPol' [-fpermissive]
In file included from sketch_feb01a.ino:14:0:
\\psf\Home\Documents\Arduino\libraries\LiquidCrystal/LiquidCrystal_I2C.h:53:4: error:   initializing argument 3 of 'LiquidCrystal_I2C::LiquidCrystal_I2C(uint8_t, uint8_t, t_backlighPol)' [-fpermissive]
    LiquidCrystal_I2C (uint8_t lcd_Addr, uint8_t backlighPin, t_backlighPol pol);
    ^
sketch_feb01a.ino: In function 'void setup()':
sketch_feb01a.ino:31:5: error: 'lcd' was not declared in this scope
sketch_feb01a.ino: In function 'void loop()':
sketch_feb01a.ino:73:13: error: 'lcd' was not declared in this scope
Fout bij compileren.


In de code staat:
Code: Alles selecteren
/*-----( Import needed libraries )-----*/
#include <Wire.h> // Comes with Arduino IDE


In de map waar de libraries staan, staat nu alleen de LiquidCrystal librarie (\Documents\Arduino\libraries\LiquidCrystal). Daar stonden er meer. O.a. Wire.

Mis ik nu wat?

Ps
Nog een algemene vraag over het importeren van een bibliotheek. Hoe kan ik het beste een bibliotheek toevoegen. En hoe weet ik of ik de juiste heb.

Berichten: 34
Geregistreerd: 31 Jan 2015, 15:10
Woonplaats: Vierhouten

Re: Krijg display niet werkend

Berichtdoor HansvB » 01 Feb 2015, 16:42

@MarcelK, bedankt voor jouw reactie.
Ik heb een Headerpin socket op het display gesoldeerd. Hierin is de I2C Interface kaart gestoken.
Heb alle solderingen nog eens onder de loop genomen. Dat ziet er goed uit. Kan het dus volgens mij niet zijn.

Berichten: 34
Geregistreerd: 31 Jan 2015, 15:10
Woonplaats: Vierhouten

Re: Krijg display niet werkend

Berichtdoor HansvB » 02 Feb 2015, 21:56

Opgelost :D
Schaamrood op de kaken :oops:
Een ander zou zeggen RTFM en kijk niet alleen naar de plaatjes.
Met hulp van de leverancier, B&P, die mij een test sketch stuurde kwam ik er achter.
SCL en SDA moet op Analoog pin 4 en 5 en niet op TX en RX

IMG_2225.JPG
IMG_2225.JPG (112.83 KiB) 11001 keer bekeken

Volgende

Terug naar Overige hardware

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 33 gasten