Pages: [1] 2 3   Go Down
Author Topic: Display LCD 20x4 seriale + arduino?  (Read 2393 times)
0 Members and 1 Guest are viewing this topic.
Deep south of Italy
Offline Offline
Faraday Member
**
Karma: 7
Posts: 2961
The quieter you become, the more you can hear
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Salve a tutti, ho acquistato su ebay questo bellissimo display lcd http://www.sureelectronics.net/goods.php?id=964 che connesso via usb direttamente al pc funziona a meraviglia, ma se mi accontentassi di così poco non sarei quì....
Vorrei interfacciarlo (via seriale ) all'arduino duemilanove, e nonostante non sia proprio fessissimo sull'argomento, ad oggi non ci sono ancora riuscito..
RX e TX incrociati; quando invio dei caratteri , vedo il led dei "dati" lampeggiare ma il display non batte ciglio :-/
Ho anche provato la sequenza di inizializzazione suggerita nel manuale del display che è stata inviata in tutti i modi possibili (ascii, hex , dec, un carattere per volta, in una stringa) ma niente...
Chiedo a chiunque abbia esperienza un piccolo aiuto per venirne a capo.

Link al manuale del display:  http://www.sure-electronics.net/download/down.php?name=DE-LD022_Ver1.0_EN.pdf
Grazie
« Last Edit: May 26, 2010, 09:23:58 am by brainbooster » Logged

kokiua
Guest
 Bigger Bigger  Smaller Smaller  Reset Reset

Se il collegamento lo fai attraverso la porta USB non può funzionare perchè l'USB di Arduino è solo slave (e anche il tuo LCD è slave...)
Se hai la possibilità di collegarti come se fosse una normale seriale dovresti riuscire, altrimenti senza "aggiunte" è un problema.
Logged

Deep south of Italy
Offline Offline
Faraday Member
**
Karma: 7
Posts: 2961
The quieter you become, the more you can hear
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

nooo, via seriale ttl dall'apposito connettore, via usb non l'avrei mai neanche postato sul forum.
ho a disposizione 2 connettori (stessi piedini) vcc tx rx gnd, sia sul connettore denominato ttl, sia su quello denominato rs232.
(chiaramente li ho provati entrambi anche sapendo che l'rs232 non avrebbe funzionato).
Logged

kokiua
Guest
 Bigger Bigger  Smaller Smaller  Reset Reset

se non ricordo male, l'rs232 con segnali ttl lavora da -5V a +5V mentre con Arduino lavori da 0V a +5V.. credo sia questo il tuo problema.. se puoi bypassare i segnali ttl dell'LCD dovrebbe funzionarti... se i livelli sono giusti e non ti funziona devi controllare meglio i parametri della seriale!
« Last Edit: May 26, 2010, 09:37:49 am by kokiua » Logged

Deep south of Italy
Offline Offline
Faraday Member
**
Karma: 7
Posts: 2961
The quieter you become, the more you can hear
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Giusto, infatti ho provato a connettere il pin tx dell'arduino con l'rx (ttl della seriale) ma anche con un solo canale di comunicazione (anche se 0-5v) ma nulla....
a me in questo momento non importa "parlare" con l'lcd ma solo mandargli roba in comunicazione univoca.
speravo che con 3 fili sarei riuscito a mostrare qualcosa, ma anche no  :'(
provato da 9600bps in sù ma senza risultati....
« Last Edit: May 26, 2010, 09:52:57 am by brainbooster » Logged

kokiua
Guest
 Bigger Bigger  Smaller Smaller  Reset Reset

Non puoi comunicare con un protocollo rs232 (anche con i segnali 0-5V) senza un minimo di handshake... Altrimenti come fanno i due dispositivi a prevenire gli errori di trasmissione/ricezione (non a caso devi impostare il bit di parità oltre alla velocità).
Una comunicazione seriale (rs232) non può funzionare con un solo filo!
Guarda qui: http://it.wikipedia.org/wiki/EIA_RS-232
Logged

Deep south of Italy
Offline Offline
Faraday Member
**
Karma: 7
Posts: 2961
The quieter you become, the more you can hear
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ma io nel post precedente ho scritto ttl, seriale era riferito al tipo di trasferimento, non al proto (avrei detto rs232) scusami.
Purtroppo sul manuale dell'lcd non specifica il tipo di connessione nella parte che descrive i comandi da inviare e quindi vado al buio...
semplicemente invio tramite i pin rx tx di arduino via ttl i comandi descritti nel manuale, altro non mi viene... smiley
altre info utili:
L'lcd (dal connettore a 16 pin interno) dovrebbe essere un HD44780 rimarchiato, potrei anche smontarlo e pilotarlo con le apposite librerie a 4 bit, però così facendo vado ad utilizzare altri pin sull'arduino che mi servono per fare altro.. :'(
L'idea era di usare al massimo 2 pin dell'arduino per l'lcd e nessun level shifter.
La cosa paradossale è che, integrato nella doughterboard c'è pure un convertitore usb-seriale  (CP2102)!
« Last Edit: May 26, 2010, 10:38:24 am by brainbooster » Logged

Deep south of Italy
Offline Offline
Faraday Member
**
Karma: 7
Posts: 2961
The quieter you become, the more you can hear
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

sto impazzendo... adesso sò anche che qualcuno c'è riuscito >smiley-sad
riesco solo a comandarlo connesso via usb al pc (vb6 +mscomm).
sto provando con questo codice dalla porta ttl:

void setup()
{
  Serial.begin(9600);
  on();
}

void loop()
{  
  Serial.print("Ciao Arduino");
  delay(2000);
}

void on(){  //dovrebbe inizializzare la comunicazione
  Serial.print(0xFE, BYTE);
  Serial.print(0x53, BYTE);
  Serial.print(0x75, BYTE);
  Serial.print(0x72, BYTE);
  Serial.print(0x65, BYTE);
}

« Last Edit: June 02, 2010, 04:04:51 am by brainbooster » Logged

0
Offline Offline
Jr. Member
**
Karma: 0
Posts: 68
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

forse sto dicendo una cavolata(anzi sicuramente) ma visto che questi giorni ho a che fare con un lcd (parecchio rognoso) e un arduino, posso dirti che non devi collegare l'rx dell'arduino(il tx dello schermo) mentre invii il codice l'arduino perchè se no da errori...


scusa se magari non ho capito il tuo problema e ho dato una risposta a caso smiley-wink
Logged

Deep south of Italy
Offline Offline
Faraday Member
**
Karma: 7
Posts: 2961
The quieter you become, the more you can hear
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

grazie, ma è una cosa che già faccio, mi pareva logico  :smiley
« Last Edit: June 02, 2010, 01:32:39 pm by brainbooster » Logged

kokiua
Guest
 Bigger Bigger  Smaller Smaller  Reset Reset

Mi ripeto: secondo me hai solo un problema nella gestione del protocollo..
Controlla i Receiver Error Flags (sez 19.7.4 - pagina 138 del datasheet di ATmega168).
Probabilmente Arduino stesso ti può "dire" dove avviene l'errore  smiley-wink
Logged

Deep south of Italy
Offline Offline
Faraday Member
**
Karma: 7
Posts: 2961
The quieter you become, the more you can hear
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ho capito cosa vuoi dirmi, però io pensavo che tutta quella roba a quel livello fosse gestita dalle relative interfacce uart.
P.S.
Non sò come "portare a vista" gli error flags per fare un po di debugging :-[
Logged

kokiua
Guest
 Bigger Bigger  Smaller Smaller  Reset Reset

Non mi risulta che il sistema di ctrl del flusso seriale sia trattato dal sistema Arduino...
Ti ci do un'occhiata poi vedo di postare qui un poco di code  smiley
Logged

Deep south of Italy
Offline Offline
Faraday Member
**
Karma: 7
Posts: 2961
The quieter you become, the more you can hear
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

pensavo all'ftdi...
ho provato anche così, ma niente.. :'(
#include <SoftwareSerial.h>
#define rxPin 6 // software Rx pin (connetto  Tx sull' LCD)
#define txPin 7 // software Tx pin (connetto Rx sull' LCD)

// setta la nuova seriale
SoftwareSerial swSerial =  SoftwareSerial(rxPin, txPin);

void setup()  {
 pinMode(rxPin, INPUT);
 pinMode(txPin, OUTPUT);
 // setta la SoftwareSerial
 swSerial.begin(9600);
 //setta la seriale
 Serial.begin(9600);
 delay(100); // (un pò di ritardo)
 startLCD();
 swSerial.print("Ciao Arduino!");
}

void loop() {
  // ritrasmette da pc a lcd
  if (Serial.available() > 0) {
     byte inchar = Serial.read();
     swSerial.print(inchar);
  }
}


void startLCD(){
 
 swSerial.print(0xFE, BYTE);
swSerial.print(0x53, BYTE);
swSerial.print(0x75, BYTE);
swSerial.print(0x72, BYTE);
swSerial.print(0x65, BYTE);
}
« Last Edit: June 03, 2010, 02:31:52 am by brainbooster » Logged

kokiua
Guest
 Bigger Bigger  Smaller Smaller  Reset Reset

ho "buttato giù" in fretta questa roba, provala e fammi sapere:
Code:
/* serial test by kokiua */

// definizione funzioni utili
#define setBit(var, bitnum)   (var)|=(1<<(bitnum))
#define resBit(var, bitnum)   (var)&=~(1<<(bitnum))
#define testBit(var, bitnum)  (var)&(1<<(bitnum))

//definizione led di stato
#define PIN_err1    9  //acceso se Frame Error
#define PIN_err2   10  //acceso se Data OverRun
#define PIN_err3   11  //acceso se Parity Error
#define PIN_err4   12  //acceso se tutto ok

//variabili globali

int errore = false;

void setup()
{
  pinMode(PIN_err1, OUTPUT);
  pinMode(PIN_err2, OUTPUT);
  pinMode(PIN_err3, OUTPUT);
  pinMode(PIN_err4, OUTPUT);
  Serial.begin(9600);

  // da modificare se la seriale è usata per altri scopi
  Serial.println("Test protocollo della seriale");
}

void loop()
{
  if(testBit(UCSR0A, FE0)){ // Frame Error
       digitalWrite(PIN_err1, 1);
       errore = true;
  } else {
      digitalWrite(PIN_err1, 0);
  }
  
  if(testBit(UCSR0A, DOR0)){ // Data OverRun
       digitalWrite(PIN_err2, 1);
       errore = true;
  } else {
      digitalWrite(PIN_err2, 0);
  }
  
  if(testBit(UCSR0A, UPE0)){ // Parity Error
       digitalWrite(PIN_err3, 1);
       errore = true;
  } else {
      digitalWrite(PIN_err3, 0);
  }

  if(errore){
       digitalWrite(PIN_err4, 0);  //spegne led di tutto ok
       errore = true;
  } else {
      digitalWrite(PIN_err4, 1);  //accende led di tutto ok
      errore = false;
  }
}

P.S. la stringa emessa in fase di setup la devi modificare per renderla compatibile con il dispositivo che hai collegato (in questo caso il Display) e vedi di non usare Serial.println() ma solo Serial.print()  smiley-wink
Logged

Pages: [1] 2 3   Go Up
Jump to: