Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

problema con lcd 1602 blu

Tipologie, strumenti di sviluppo, hardware e progetti

Moderatore: Foto UtentePaolino

0
voti

[1] problema con lcd 1602 blu

Messaggioda Foto Utentelcua31989 » 11 gen 2015, 19:28

Ciao a tutti,

innanzi tutto buon anno a tutti :)

Vi scrivo perché ho un problema con un lcd alfanumerico 16x2. Quando lo collego come da datasheet
(http://www.openhacks.com/uploadsproductos/eone-1602a1.pdf vedi pagina 4) mettendo però V0 a gnd l'lcd si accende ma mostra i dots della riga 2 mentre quelli della riga 1 restano tutti spenti.
Secondo voi l'lcd è danneggiato?

Per quale motivo ottengo questo strano comportamento?
Suggerimenti?

Saluti
Lcua 31989
Avatar utente
Foto Utentelcua31989
58 1 1 7
Frequentatore
Frequentatore
 
Messaggi: 194
Iscritto il: 28 nov 2012, 23:37

0
voti

[2] Re: problema con lcd 1602 blu

Messaggioda Foto Utentesimo85 » 11 gen 2015, 19:54

Il piedino di V0 è solo per contrasto.

L' LCD lo devo programmare, altrimenti visualizza solo porcherie. Mi era successo qualcosa di simile anche a me tempo fa, vedi questo thread: viewtopic.php?f=1&t=53382
Quello che ha visto quel display LCD prima che lo accendessi, me lo tengo per me. :mrgreen:

Quindi, prova a programmarlo correttamente.

O_/
Avatar utente
Foto Utentesimo85
30,9k 7 12 13
Disattivato su sua richiesta
 
Messaggi: 9927
Iscritto il: 30 ago 2010, 4:59

0
voti

[3] Re: problema con lcd 1602 blu

Messaggioda Foto UtenteWALTERmwp » 11 gen 2015, 20:42

Ciao Foto Utentelcua31989, ...
lcua31989 ha scritto:Suggerimenti?
... si, forse.
Prima però sarebbe meglio se tu riportassi lo schema, in FidoCadJ, di quello e di come hai collegato.
In alternativa, o contestualmente, cerca tra gli articoli di Foto UtentePaolino; troverai utilissime informazioni in merito.
Probabilmente anche tra quelli di Foto UtenteTardoFreak.

Saluti
W - U.H.F.
Avatar utente
Foto UtenteWALTERmwp
30,2k 4 8 13
G.Master EY
G.Master EY
 
Messaggi: 8986
Iscritto il: 17 lug 2010, 18:42
Località: le 4 del mattino

0
voti

[4] Re: problema con lcd 1602 blu

Messaggioda Foto Utentelcua31989 » 11 gen 2015, 23:52

Ciao a tutti,


simo85 ha scritto:Il piedino di V0 è solo per contrasto.

L' LCD lo devo programmare, altrimenti visualizza solo porcherie. Mi era successo qualcosa di simile anche a me tempo fa, vedi questo thread: viewtopic.php?f=1&t=53382
Quello che ha visto quel display LCD prima che lo accendessi, me lo tengo per me. :mrgreen:

Quindi, prova a programmarlo correttamente.

O_/


Si ho visto il thread ma non mi è servito ad un granchè purtoppo...

WALTERmwp ha scritto:Ciao Foto Utentelcua31989, ...
lcua31989 ha scritto:Suggerimenti?
... si, forse.
Prima però sarebbe meglio se tu riportassi lo schema, in FidoCadJ, di quello e di come hai collegato.
In alternativa, o contestualmente, cerca tra gli articoli di Foto UtentePaolino; troverai utilissime informazioni in merito.
Probabilmente anche tra quelli di Foto UtenteTardoFreak.

Saluti


Ecco lo schema, che è solo una minima parte. Ho tolto il potenziometro/trimmer perché voglio sempre la luminosità alta e, quindi, l'ho collegato a massa.

Ho provato a fare il programma ma nada, non funziona nulla... In allegato la foto di ciò che appare :D



Allego anche il codice:

Codice: Seleziona tutto
#include        "__T6963C.h"
// T6963C module connections
char T6963C_dataPort at PORTH;
sbit T6963C_ctrlwr at LATJ2_bit;
sbit T6963C_ctrlrd at LATJ1_bit;
sbit T6963C_ctrlcd at LATJ0_bit;
sbit T6963C_ctrlrst at LATJ4_bit;
sbit T6963C_ctrlwr_Direction at TRISJ2_bit;
sbit T6963C_ctrlrd_Direction at TRISJ1_bit;
sbit T6963C_ctrlcd_Direction at TRISJ0_bit;
sbit T6963C_ctrlrst_Direction at TRISJ4_bit;
sbit T6963C_ctrlce at LATJ3_bit;
sbit T6963C_ctrlfs at LATJ6_bit;
sbit T6963C_ctrlmd at LATJ5_bit;
sbit T6963C_ctrlce_Direction at TRISJ3_bit;
sbit T6963C_ctrlfs_Direction at TRISJ6_bit;
sbit T6963C_ctrlmd_Direction at TRISJ5_bit;

sbit BacklightRed_Direction  at TRISC2_bit;
sbit BacklightGreen_Direction at TRISC1_bit;
sbit BacklightBlue_Direction  at TRISG0_bit;
sbit BacklightRed   at LATC2_bit;
sbit BacklightGreen at LATC1_bit;
sbit BacklightBlue  at LATG0_bit;
// End T6963C module connections

// Touch Panel module connections
sbit DriveA at LATG3_bit;
sbit DriveB at LATG4_bit;
sbit DriveA_Direction at TRISG3_bit;
sbit DriveB_Direction at TRISG4_bit;
// End Touch Panel module connections

// MMC module connections
sbit Mmc_Chip_Select           at LATC0_bit;  // for writing to output pin always use latch (PIC18 family)
sbit Mmc_Chip_Select_Direction at TRISC0_bit;
// eof MMC module connections

// MMC module connections
sbit Mmc_Card_Detect           at PORTB.B5;  // for writing to output pin always use latch (PIC18 family)
sbit Mmc_Card_Detect_Direction at TRISB5_bit;
// eof MMC module connections


sbit LCD_RS at RE7_bit;
sbit LCD_EN at RF1_bit;
sbit LCD_D4 at RF2_bit;
sbit LCD_D5 at RF3_bit;
sbit LCD_D6 at RF4_bit;
sbit LCD_D7 at RF5_bit;

sbit LCD_RS_Direction at TRISE7_bit;
sbit LCD_EN_Direction at TRISF1_bit;
sbit LCD_D4_Direction at TRISF2_bit;
sbit LCD_D5_Direction at TRISF3_bit;
sbit LCD_D6_Direction at TRISF4_bit;
sbit LCD_D7_Direction at TRISF5_bit;



char txt1[] = "mikroElektronika";
char txt2[] = "EasyPIC6";
char txt3[] = "Lcd4bit";
char txt4[] = "example";

char i;                              // Loop variable

void Move_Delay() {                  // Function used for text moving
  Delay_ms(500);                     // You can change the moving speed here
}

// Main. Uncomment the function(s) to test the desired operation(s)
void main() {
  int i = 0;
  char mmcError = 1;
 
   TRISA = 0B00101111;
   PORTA = 0B00000000;
   LATA = 0B00000000;

   TRISB = 0B11100011;
   PORTB = 0B00000000;
   LATB = 0B00000000;

   TRISC = 0B01011000;
   PORTC = 0B00000000;
   LATC = 0B00000000;

   TRISD = 0B00000000;
   PORTD = 0B00000000;
   LATD = 0B00000000;

   TRISE = 0B10000000;
   PORTE = 0B00000000;
   LATE = 0B00000000;

   TRISF = 0B00000000;
   PORTF = 0B00000000;
   LATF = 0B00000000;

   TRISG = 0B00000100;
   PORTG = 0B00000000;
   LATG = 0B00000000;

   TRISH = 0B00000000;
   PORTH = 0B00000000;
   LATH = 0B00000000;

   TRISJ = 0B00000000;
   PORTJ = 0B00000000;
   LATJ = 0B00000000;

   ANCON0 = 0b00010011;
   ANCON1 = 0;
   ANCON2 = 0;

   RCON.IPEN = 0; //prority interrupt disable
   INTCON.GIE = 1; //Interrupts enable as high priority
   INTCON.PEIE = 1; //Interrupts on the peripheral as low priority
   INTCON2.RBPU =1; //Disable pull-up resistor on the PORTB
   PIE3.RC2IE = 1; //Receive buffer interrupt enable

  Mmc_Chip_Select = 0;
  Mmc_Chip_Select_Direction = 0;
  Mmc_Card_Detect_Direction = 1;

  T6963C_ctrlce_Direction = 0;
  T6963C_ctrlce = 0;            // Enable T6963C
  T6963C_ctrlmd_Direction = 0;
  T6963C_ctrlmd = 0;            // Column number select
  T6963C_ctrlfs_Direction = 0;
  T6963C_ctrlfs = 0;            // Wide Font

  BacklightRed_Direction   = 0; // Set backlight signals as outputs
  BacklightGreen_Direction = 0;
  BacklightBlue_Direction  = 0;
  BacklightRed   = 0;           // Turn on Red component of back light
  BacklightGreen = 0;           // Turn on Green component of back light
  BacklightBlue  = 0;           // Turn on Blue component of back light

  // Initialize T6963C
  T6963C_init(240, 128, 8);
  T6963C_graphics(1);
  T6963C_text(1);
  T6963C_cursor(0);

  T6963C_panelFill(0);
  T6963C_write_text("MMC Example", 8, 6, 1);

  Lcd_Init();                        // Initialize LCD

  Lcd_Cmd(_LCD_CLEAR);               // Clear display
  Lcd_Cmd(_LCD_CURSOR_OFF);          // Cursor off
  Lcd_Out(1,6,txt3);                 // Write text in first row

  Lcd_Out(2,6,txt4);                 // Write text in second row
  Delay_ms(2000);
  Lcd_Cmd(_LCD_CLEAR);               // Clear display

  Lcd_Out(1,1,txt1);                 // Write text in first row
  Lcd_Out(2,5,txt2);                 // Write text in second row

  Delay_ms(2000);

  // Moving text
  for(i=0; i<4; i++) {               // Move text to the right 4 times
    Lcd_Cmd(_LCD_SHIFT_RIGHT);
    Move_Delay();
  }

  while(1) {                         // Endless loop
    for(i=0; i<8; i++) {             // Move text to the left 7 times
      Lcd_Cmd(_LCD_SHIFT_LEFT);
      Move_Delay();
    }

    for(i=0; i<8; i++) {             // Move text to the right 7 times
      Lcd_Cmd(_LCD_SHIFT_RIGHT);
      Move_Delay();
    }
  }
}
Allegati
Immagine.jpeg
Avatar utente
Foto Utentelcua31989
58 1 1 7
Frequentatore
Frequentatore
 
Messaggi: 194
Iscritto il: 28 nov 2012, 23:37

0
voti

[5] Re: problema con lcd 1602 blu

Messaggioda Foto UtenteWALTERmwp » 12 gen 2015, 0:14

Il display credo funzioni correttamente, in difetto di una inizializzazione; quello che si vede nella foto è infatti quanto ci si può aspettare.
Lo schema è corretto.
Il codice è sicuramente da verificare e lì, probabilmente, per quanto presupposto, ci deve essere l'errore.

Intanto ti suggerirei di ricontrollare i collegamenti tra il microcontrollore e il display affinché corrispondano a quanto hai disegnato.
Poi, hai cercato tra gli articoli dei blog(s) degli utenti che ti ho indicato ?

Saluti
W - U.H.F.
Avatar utente
Foto UtenteWALTERmwp
30,2k 4 8 13
G.Master EY
G.Master EY
 
Messaggi: 8986
Iscritto il: 17 lug 2010, 18:42
Località: le 4 del mattino

1
voti

[6] Re: problema con lcd 1602 blu

Messaggioda Foto UtentePietroBaima » 12 gen 2015, 0:21

lcua31989 ha scritto:Ho tolto il potenziometro/trimmer perché voglio sempre la luminosità alta e, quindi, l'ho collegato a massa.


URG! :? Povero display! Rimetti il trimmer o almeno una resistenza a quei poveri LED...

Inoltre non è una grande idea non avere nemmeno il trimmer per il contrasto.
Leggi qui

saluti brasati.

Pietro
Generatore codice per articoli:
nomi
Sul forum:
[pigreco]=π
[ohm]=Ω
[quadrato]=²
[cubo]=³
Avatar utente
Foto UtentePietroBaima
90,7k 7 12 13
G.Master EY
G.Master EY
 
Messaggi: 12206
Iscritto il: 12 ago 2012, 1:20
Località: Londra

0
voti

[7] Re: problema con lcd 1602 blu

Messaggioda Foto UtenteWALTERmwp » 12 gen 2015, 1:13

PietroBaima ha scritto:saluti brasati.
... ma se vuoi un blu caldo caldo ...
Battute a parte, Foto Utentelcua31989, mettere un trimmer per la limitazione è di buon senso.

Saluti
W - U.H.F.
Avatar utente
Foto UtenteWALTERmwp
30,2k 4 8 13
G.Master EY
G.Master EY
 
Messaggi: 8986
Iscritto il: 17 lug 2010, 18:42
Località: le 4 del mattino

0
voti

[8] Re: problema con lcd 1602 blu

Messaggioda Foto UtenteWALTERmwp » 12 gen 2015, 2:44

Ho dato un'occhiata al codice e mi pare che la parte più importante, col proposito di verificare tra l'altro i passaggi della inizializzazione, manchi.
Richiami le funzioni ...
Codice: Seleziona tutto
  Lcd_Init();

  Lcd_Cmd( ... );       

  Lcd_Out( ..., ..., ...);

  Delay_ms(2000);
ma come sono scritte non si sa.

Saluti
W - U.H.F.
Avatar utente
Foto UtenteWALTERmwp
30,2k 4 8 13
G.Master EY
G.Master EY
 
Messaggi: 8986
Iscritto il: 17 lug 2010, 18:42
Località: le 4 del mattino

0
voti

[9] Re: problema con lcd 1602 blu

Messaggioda Foto Utentelcua31989 » 12 gen 2015, 2:57

Ciao,

purtroppo sono librerie chiuse sono di proprietà mikroc... quello che è strano è che se simulo il programma con proteus funziona correttamente riesco a vedere le scritte che compaiono sull'lcd. Se invece lo testo in hw, l'lcd resta come in fotografia postata nel thread precedente. L'unica che mi viene a pensare è che l'lcd non è compatibile con la libreria e che non abbia come decoder l'hitachi HD44780.

- come posso verificarlo?
- nel frattempo ho messo il trimmer in v0 e una resistenza da 380 ohm sull'anodo della retroilluminazione. Non è che omettendola ho danneggiato il display?

-Hai altre idee?

Ciao e grazie lcua31989
Avatar utente
Foto Utentelcua31989
58 1 1 7
Frequentatore
Frequentatore
 
Messaggi: 194
Iscritto il: 28 nov 2012, 23:37

1
voti

[10] Re: problema con lcd 1602 blu

Messaggioda Foto UtentePietroBaima » 12 gen 2015, 3:31

metti anche il trimmer per il contrasto, poi prova a regolarlo.
Potresti essere in saturazione di contrasto, avendo messo il pin giù a massa di brutto.
E' possibile che tu abbia danneggiato il display, ma solo per la retroilluminazione, però prima prova a fare quel che ti ho detto.

Per la storia delle librerie chiuse, è davvero improponibile che per quattro righe di codice che servono per fare l'inizializzazione di un display e le poche altre funzioni di controllo ci facciano già un qualcosa di chiuso.
Mah, prova così, altrimenti ti passo quelle che ho scritto io, a patto che tu chiuda un occhio su come programmo in C :D

proteus è abbastanza affidabile come simulatore (previo che per usare un simulatore bisogna sapere più elettronica di lui, mi ha detto un gatto)

l'HD44780 è il controller universale per quel tipo di display. Non li fa solo la HITACHI, ma tutti devono essere compatibili. C'è qualche paranoia sulla lettura di registri che normalmente non potrebbero essere letti, sull'HITACHI funziona e su altri no, ma non è certamente il tuo caso. Tu vuoi farlo funzionare, non usare funzioni avanzate quali definire il tuo set di caratteri, per esempio.




Ciao,
Pietro.
Generatore codice per articoli:
nomi
Sul forum:
[pigreco]=π
[ohm]=Ω
[quadrato]=²
[cubo]=³
Avatar utente
Foto UtentePietroBaima
90,7k 7 12 13
G.Master EY
G.Master EY
 
Messaggi: 12206
Iscritto il: 12 ago 2012, 1:20
Località: Londra

Prossimo

Torna a Realizzazioni, interfacciamento e nozioni generali.

Chi c’è in linea

Visitano il forum: Nessuno e 6 ospiti