problema display liquid crystal

Ciao a tutti è da un paio di giorni che cerco di collegare il display ad arduino ma senza successo. Mi appaiono tutti i caratteri della prima riga illuminati. I collegamenti sono fatti bene e cercando in rete non ho trovato nulla che le guide riportassero negli errori. Mi aiutate? Grazie

Ricontrolla le saldature sul display

Saldature?..no l'ho comprato già montato e tra i pin non ci sono sbavature

"IL" display non esiste. Ne esistono molti. Posta foto del display, magari linka dove l'hai comprato. Anche foto di come lo hai collegato. E quale Sketch/libreria usi. SENZA info non possiamo aiutarti. :confused:

Si scusami, eccolo. i collegamenti sono fatti bene. Il codice è quello tra gli esempi del programma aarduino.il display l'ho preso in un kit.

Puoi postare per favore il link del kit che hai preso, lo sketch usato e una foto (o meglio lo schema dei collegamenti) fatti? Altrimenti dubito che qualcuno ti possa dare una mano ;)

Questo è il codice

/*
  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
 * LCD VSS pin to ground
 * LCD VCC pin to 5V
 * 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);
}

Questo è lo schema dei collegamenti. Li ho controllati e ricontrollati più volte.
Questo è il display: http://www.buydisplay.com/media/catalog/product/cache/1/image/c577d1203d4a53d9f98182eb6081b1d6/c/h/character_2x16_modules_lcd_display_hd44780_controller_black_on_yg.jpg
potrei pubblicare anche il link del kit ma credo sia inutile e potrei (forse) violare qualche regola del forum

mrpasquale970: Questo è lo schema dei collegamenti. Li ho controllati e ricontrollati più volte.

Non è per sfiducia, ma ... una foto nitida dei collegamenti puoi aiutare ad individuare eventuali problemi ...

mrpasquale970: potrei pubblicare anche il link del kit ma credo sia inutile e potrei (forse) violare qualche regola del forum

tranquillo, non stai cercando di "vendere" nulla, quindi ... pubblica pure ;)

Guglielmo

il kit è questo:http://www.ebay.it/itm/Arduino-UNO-R3-starter-KIT-Led-RGB-Rele-Display-USB-jumper-LCD-Resistenze-buzzer-/121182645540?ssPageName=ADME:L:COSI:IT:1123
lo schema dei collegamenti: https://123d.circuits.io/circuits/998603-display-lcd-arduino
le foto in allegato credo siano utili a poco a causa della loro imprecisione dovuta alla difficoltà di fotografare pin di arduino e del display :confused:

nessuna soluzione? mi servirebbe per presentare un progetto domani

Ovviamente per prima cosa controlla di aver collegato i pin esattamente come indicato nello sketch. Poi hai verificato il trimmer del contrasto (ossia non solo il collegamento tra +5 e GND, ma anche non lo avrai magari lasciato al massimo/minimo)? Hai provato a muoverlo e vedere se cambia qualcosa? Il backlight si accende? Intanto che aspetto la tua risposta due consigli per il futuro: 1) prendi display con interfaccia I2C (puoi anche acquistarla separatamente e saldarla tu, se sai saldare), oltre a occupare solo 2 pin di Arduino è più semplice da cablare e gestire (e puoi anche mettere più display in cascata) 2) per 123d circuits ricorda che millis() non dà millisecondi ma centesimi 8non chiedermi perché), quindi nella simulazione dividi per 100 e non per 1000.

docdoc: 123d circuits ricorda che millis() non dà millisecondi ma centesimi (non chiedermi perché), quindi nella simulazione dividi per 100 e non per 1000.

... e questa dove l'hai letta ? ? ? :o :o :o

Sarà il caso che ti guardi come è fatto il "core" ... :smiling_imp:

// the prescaler is set so that timer0 ticks every 64 clock cycles, and the
// the overflow handler is called every 256 ticks.
#define MICROSECONDS_PER_TIMER0_OVERFLOW (clockCyclesToMicroseconds(64 * 256))

// the whole number of milliseconds per timer0 overflow
#define MILLIS_INC (MICROSECONDS_PER_TIMER0_OVERFLOW / 1000)

// the fractional number of milliseconds per timer0 overflow. we shift right
// by three to fit these numbers into a byte. (for the clock speeds we care
// about - 8 and 16 MHz - this doesn't lose precision.)
#define FRACT_INC ((MICROSECONDS_PER_TIMER0_OVERFLOW % 1000) >> 3)
#define FRACT_MAX (1000 >> 3)

volatile unsigned long timer0_overflow_count = 0;
volatile unsigned long timer0_millis = 0;
static unsigned char timer0_fract = 0;

ISR(TIMER0_OVF_vect)
{
    // copy these to local variables so they can be stored in registers
    // (volatile variables must be read from memory on every access)
    unsigned long m = timer0_millis;
    unsigned char f = timer0_fract;

    m += MILLIS_INC;
    f += FRACT_INC;
    if (f >= FRACT_MAX) {
        f -= FRACT_MAX;
        m += 1;
    }

    timer0_fract = f;
    timer0_millis = m;
    timer0_overflow_count++;
}

unsigned long millis()
{
    unsigned long m;
    uint8_t oldSREG = SREG;

    // disable interrupts while we read timer0_millis or we might get an
    // inconsistent value (e.g. in the middle of a write to timer0_millis)
    cli();
    m = timer0_millis;
    SREG = oldSREG;

    return m;
}

Guglielmo

... per inciso, anche il reference riporta correttamente per millis() :

Returns the number of milliseconds since the Arduino board began running the current program.

... il numero di millisecondi non di centesimi di secondo. :)

Guglielmo

gpb01:
e questa dove l’hai letta ? ? ? :o :o :o

Ehm… Guglielmo, leggi bene, io parlavo della “simulazione di 123d.circuits”, è QUELLA che ha millis() che restituisce centesimi, non di Arduino…

si chiaramente il trimmer del contrasto l'ho abbassato per verificare ma non cambia nulla.in effetti è come se non arrivasse alcun comando al display. per la questione dei millisecondi, questo è lo sketch originale presente nelle librerie di arduino, copiato da il sito sopracitato senza chiaramente apportare nessuna modifica

docdoc: Ehm... Guglielmo, leggi bene, io parlavo della "simulazione di 123d.circuits", è QUELLA che ha millis() che restituisce centesimi, non di Arduino...

... m'era sfuggito il riferimento ... e come a me, immagino possa sfuggire a chiunque NON conosce 123d.circuits ... quindi magari, la prossima volta, metti ben in evidenza la cosa perché altrimenti, come vedi, si rischiano delle confusioni pericolose !!!

E comunque ... è una cosa da pazzi ... ... al limite potevano avere si la granularità ai centesimi, ma comunque ritornarli espressi in millesimi !!! La gente ci si impegna per creare confusione ... ::)

Guglielmo

Grande Guglielmo, mi hai aiutato varie volte (anche indirettamente, leggendo i tuoi suggerimenti ad altri) quindi non potremi mai polemizzare con te... :) però scusa, io avevo scritto testualmente:

2) per 123d circuits ricorda che millis() non dà millisecondi ma centesimi

forse avrei dovuto scrivere più esplicitamente:

2) per il simulatore del sito 123d.circuits.io ricorda che millis() non dà millisecondi ma centesimi

quindi hai ragione, però insomma, non cazziarmi per questo... ;)

Fermo restando che anche per me è un mistero, direi ai gestori del sito ritornami il valore *10 per cui non ho la precisione dei millisecondi, ma almeno i programmi funzionano più o meno tutti bene, "checevò"? :D Un amico ci ha sbattuto la testa per giorni prima di capire perché su 123d.circuits lo sketch non funzionava e su Arduino "fisico" si... Con simpatia, ciao! :D

se modifico la stringa

lcd.print(millis() / 1000)

aggiungendo il valore 1000 tra le parentesi mi da l'errore:

HelloWorld:58: error: too many arguments to function 'long unsigned int millis()'

Se ti riferisci alla simulazione che sbaglia i millis() non devi aggiungere 1000, devi dividere per 100: lcd.print(millis() / 100)altrimenti ti conta uno ogni 10 secondi. Ma tanto non è questo il problema...

docdoc: Se ti riferisci alla simulazione che sbaglia i millis() non devi aggiungere 1000, devi dividere per 100: lcd.print(millis() / 100)altrimenti ti conta uno ogni 10 secondi. Ma tanto non è questo il problema...

se in questa stringa non devo aggiungere nessun valore non vedo quale possa essere il problema....i pin sono collegati nel modo giusto