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

[11] Re: problema con lcd 1602 blu

Messaggioda Foto Utentelcua31989 » 12 gen 2015, 12:22

Ciao,

Il trimmer su v0 è quello per la regolazione del contrasto :) io l'ho messo da 10k

È per questo motivo che vorrei cambiare compilatore passando a quello dela microchip, ma purtroppo è troppo complesso.

Onestamente regolando il contrasto non cambia nulla. Le tue librerie sono a 4 o 8 bit? Se vuoi passamela per me non ci sono problemi.

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

0
voti

[12] Re: problema con lcd 1602 blu

Messaggioda Foto UtentePietroBaima » 12 gen 2015, 12:50

ok, io però lo avevo fatte per un AVR della Atmel.
Poco male, dovrai cambiare l'HAL, non è per nulla difficile, leggi il codice che ho scritto e scrivi il corrispondente codice per il PIC.

Come compilatore C uso il GCC.

Appena ho un attimo te le cerco, magari stasera.

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

0
voti

[13] Re: problema con lcd 1602 blu

Messaggioda Foto UtenteTardoFreak » 12 gen 2015, 19:35

Foto Utentelcua31989 prendi il datasheet, leggi la sigla del controller e postala, ti dico io con cosa è compatibile.
"La follia sta nel fare sempre la stessa cosa aspettandosi risultati diversi".
"Parla soltanto quando sei sicuro che quello che dirai è più bello del silenzio".
Rispondere è cortesia, ma lasciare l'ultima parola ai cretini è arte.
Avatar utente
Foto UtenteTardoFreak
73,9k 8 12 13
-EY Legend-
-EY Legend-
 
Messaggi: 15754
Iscritto il: 16 dic 2009, 11:10
Località: Torino - 3° pianeta del Sistema Solare

0
voti

[14] Re: problema con lcd 1602 blu

Messaggioda Foto Utentelcua31989 » 12 gen 2015, 22:41

TardoFreak ha scritto:Foto Utentelcua31989 prendi il datasheet, leggi la sigla del controller e postala, ti dico io con cosa è compatibile.


Ciao TardoFreak il controller è ST7066U-0A, che credo che non sia compatibile però se tu potessi darmi una conferma è meglio.

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

1
voti

[15] Re: problema con lcd 1602 blu

Messaggioda Foto UtenteTardoFreak » 12 gen 2015, 23:19

E' compatibile con HD44780.
Però tu qui hai fatto una serie di errori che è bene che tu tenga in mente per non farli più.

Prima di comprare una qualsiasi componente o modulo bisogna conoscerlo bene ed a fondo. Il fatto che tu non sappia che il controllore è compatibile e fino a che punto lo è (può esserlo solo in parte, le specifiche potrebbero variare), è indice di un acquisto avventato fatto alla "spera in Dio". La prossima volta per prima cosa ti studi, non leggi, ti studi bene il datasheet, e poi compri.

Se il datasheet dice che ci devi mettere un trimmer tu ci metti il trimmer. L' errore che hai fatto è quello di "pensare", di supporre. Hai sbagliato in pieno. Non devi pensare, devi fare quello che c'è scritto nel datasheet. A maggior ragione se è la prima volta che usi un componente.

Prima si ottiene qualcosa di funzionante poi, eventualmente, si apportano modifiche.

Se si usano delle librerie bisogna assicurarsi di avere un oggetto provato con quelle librerie. Per essere sicuri, visto che usi le librerie MikroC, avresti dovuto fare uno sforzo e comprare un display da loro, collegarlo come dicono loro e fare quello che fanno loro (gli esempi servono per questo).

A meno che tu non sia in grado di scriverti qualsiasi driver per qualsiasi dispositivo, a quel punto (anche se non è mai consigliabile) potresti acquistare "al buio". Però bisogna essere davvero capaci e, con tutto il rispetto, mi sembra che tu non rientri in questa categoria di persone.

Perdona la franchezza ma la situazione è questa in qualunque modo la giri. Siamo tecnici ed andiamo al punto senza giri di parole.

Con spirito costruttivo
TF
"La follia sta nel fare sempre la stessa cosa aspettandosi risultati diversi".
"Parla soltanto quando sei sicuro che quello che dirai è più bello del silenzio".
Rispondere è cortesia, ma lasciare l'ultima parola ai cretini è arte.
Avatar utente
Foto UtenteTardoFreak
73,9k 8 12 13
-EY Legend-
-EY Legend-
 
Messaggi: 15754
Iscritto il: 16 dic 2009, 11:10
Località: Torino - 3° pianeta del Sistema Solare

1
voti

[16] Re: problema con lcd 1602 blu

Messaggioda Foto Utentelcua31989 » 12 gen 2015, 23:23

Ciao,

nono c'hai perfettamente azzeccato, visto che non funziona l'lcd in alcun modo... Credo che sia andato non so più come fare a provare di farlo andare... non c'è verso e il programma è corretto. Che questo mi faccia da lezione :D

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

0
voti

[17] Re: problema con lcd 1602 blu

Messaggioda Foto Utentelcua31989 » 12 gen 2015, 23:31

Ciao,

ma visto che mi hai dato il consiglio di prenderlo su mikreolettronica... Riesci a capire che razza di modello sia?
https://www.mikroe.com/carts/share/NRNzHHe9me0ovgv3/
Avatar utente
Foto Utentelcua31989
58 1 1 7
Frequentatore
Frequentatore
 
Messaggi: 194
Iscritto il: 28 nov 2012, 23:37

1
voti

[18] Re: problema con lcd 1602 blu

Messaggioda Foto UtenteTardoFreak » 12 gen 2015, 23:55

'scolta, fai una cosa: compra quello e segui alla lettera sia i collegamenti che il software.
Poi potrai individuarne uno compatibile, che magari costa meno, e provare ad utilizzarlo.

Per carità, il mio è un approccio molto conservativo. A volte ho speso centinaia di euro solo per essere sicuro di avere una base di sicuro funzionamento.
Magari è un sistema da manovale ma ha sempre funzionato. :ok:
"La follia sta nel fare sempre la stessa cosa aspettandosi risultati diversi".
"Parla soltanto quando sei sicuro che quello che dirai è più bello del silenzio".
Rispondere è cortesia, ma lasciare l'ultima parola ai cretini è arte.
Avatar utente
Foto UtenteTardoFreak
73,9k 8 12 13
-EY Legend-
-EY Legend-
 
Messaggi: 15754
Iscritto il: 16 dic 2009, 11:10
Località: Torino - 3° pianeta del Sistema Solare

1
voti

[19] Re: problema con lcd 1602 blu

Messaggioda Foto UtentePietroBaima » 13 gen 2015, 0:33

TardoFreak ha scritto:Prima si ottiene qualcosa di funzionante poi, eventualmente, si apportano modifiche.

Questo consiglio è ORO PURO.
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

1
voti

[20] Re: problema con lcd 1602 blu

Messaggioda Foto UtentePietroBaima » 13 gen 2015, 1:28

Foto UtenteTardoFreak, perdona il mio C barbaro!

E' uno dei moduli più semplici che ho scritto, però contiene già diverse funzioni.


Codice: Seleziona tutto
// AlfanDisp.c



/* These lines are here to allow display customization */

   //PORT BIT (E.G.-> DISPLAYPORT A , DISPLAYDATA4 0 means D4=PA0)
   #define DISPLAYOUT          PORTA

   #define DISPLAYDATA4        0
   #define DISPLAYDATA5        1
   #define DISPLAYDATA6        2
   #define DISPLAYDATA7        3
   #define DISPLAYRS           4
   #define DISPLAYENABLE       5
   #define DISPLAYBACKLIGHT    6

/* end of customization */


#include <avr/io.h>

#define ClrBit(x,y) x&=~(1<<y) //clear the bit y to the port x
#define SetBit(x,y) x|=(1<<y)  //set the bit y to the port x

#define ON  1
#define OFF 0
#define UpperMask 0xf0   //strip off lower bits
#define LowerMask 0x0f   //strip off upper bits
#define DELPI 169 //delay K to achieve 1ms per loop. 169=4MHz.

//prototypes //
static void strobe(void);
static void LCDCmd(unsigned char cmd);
static void SetDisplayPort(unsigned char w);


//core //

/* * * * * * * * * * * * * * * * * * * * * * * * */
/* backl(ON/-OFF) configures LCD  backlight      */
/* * * * * * * * * * * * * * * * * * * * * * * * */
void backl (char c)
{
   if (c)
      DISPLAYOUT|=(1<<DISPLAYBACKLIGHT);
   else
      DISPLAYOUT&=(~(1<<DISPLAYBACKLIGHT));

} //end backl(c)

/* * * * * * * * * * * * * * * * * * * * * * * * */
/* delay(milliseconds)        delay routine      */
/* * * * * * * * * * * * * * * * * * * * * * * * */
static void delay(int ms)
{
   unsigned int ritardo;
   for (ritardo=0;ritardo<DELPI*ms;ritardo++);
}//end delay(ms)

/* * * * * * * * * * * * * * * * * * * * * * * * */
/* cls() clear display screen                    */
/* * * * * * * * * * * * * * * * * * * * * * * * */
void cls(void)
{
    LCDCmd(1);
}//end cls()

/* * * * * * * * * * * * * * * * * * * * * * * * */
/* cur(ON/-OFF) configures LCD  cursor           */
/* * * * * * * * * * * * * * * * * * * * * * * * */
void cur(char c)
{
   (c==ON)?LCDCmd(0xE):LCDCmd(0xC);
}//end cur()

/* * * * * * * * * * * * * * * * * * * * * * * * */
/* LCDCmd(command) send commands to LCD port     */
/* * * * * * * * * * * * * * * * * * * * * * * * */
static void LCDCmd(unsigned char cmd)
{
    ClrBit(DISPLAYOUT,DISPLAYRS);     //High to select display data
    delay(1);

    SetDisplayPort ((cmd&UpperMask)>>4);
    delay(2);
    strobe();
    SetDisplayPort (cmd&LowerMask);
    delay(0);
    strobe();
}//end LCDCmd(cmd)


/* * * * * * * * * * * * * * * * * * * * * * * * */
/* init_LCD() configures LCD for 4 bit mode and  */
/* multi line display                            */
/* * * * * * * * * * * * * * * * * * * * * * * * */
void init_LCD(void)
{
    unsigned char loop;
    ClrBit(DISPLAYOUT,DISPLAYRS);   //enable Instruction/Command registers
     delay(4);
    for(loop=0;loop<3;loop++)
    {
        DISPLAYOUT=0x03;   //place data in D4-D7 PORTD bits
        delay(4);
        strobe();
    }
    DISPLAYOUT=0x02;   //send 0x02 only one time!
    delay(1);               //don't use LCDCmd() for this write 
    strobe();               //it handles a byte in two operations
    LCDCmd(0x28);
    LCDCmd(0x08);
    LCDCmd(0x01);
    LCDCmd(0x0e);
}//end init_LCD()


/* * * * * * * * * * * * * * * * * * * * * * * * */
/* strobe() pulses the ENABLE bit                */
/* * * * * * * * * * * * * * * * * * * * * * * * */
static void strobe(void)
{
    SetBit(DISPLAYOUT,DISPLAYENABLE);  //E goes high
    delay(1);
    ClrBit(DISPLAYOUT,DISPLAYENABLE);
    delay(1);
}//end strobe()


/* * * * * * * * * * * * * * * * * * * * * * * * */
/* SetDisplayPort(w) low level display port write */
/* * * * * * * * * * * * * * * * * * * * * * * * */
static void SetDisplayPort(unsigned char w)
{
   char inport;

   const char zeropos=~((1<<DISPLAYDATA4)|(1<<DISPLAYDATA5)|(1<<DISPLAYDATA6)|(1<<DISPLAYDATA7));

   inport=DISPLAYOUT; //reading portout

   inport&=zeropos; //nulling zeropos bits

   //setting bits
   inport|=((w&1)<<DISPLAYDATA4);
   inport|=(((w&2)>>1)<<DISPLAYDATA5);
   inport|=(((w&4)>>2)<<DISPLAYDATA6);
   inport|=(((w&8)>>3)<<DISPLAYDATA7);

   DISPLAYOUT=inport; //write
} //end SetDisplayPort(w)

/* * * * * * * * * * * * * * * * * * * * * * * * */
/*LCDdataWrite(unsigned char dta)                */
/* Writes data to display                        */
/* * * * * * * * * * * * * * * * * * * * * * * * */
static void LCDdataWrite(unsigned char dta)
{
    DISPLAYOUT&=0xF0;
    SetBit(DISPLAYOUT,DISPLAYRS);     //High to select display data
    delay(1);

    SetDisplayPort ((dta&UpperMask)>>4);
    delay(1);
    strobe();
    SetDisplayPort (dta&LowerMask);
    delay(1);
    strobe();
}//end LCDdataWrite()


/* * * * * * * * * * * * * * * * * * * * * * * * */
/*PosCur(line,pos) : move the cursor to line,pos */
/* * * * * * * * * * * * * * * * * * * * * * * * */
void PosCur(int line, int pos)
{
int offset;
switch (line)
   {
   case 2:
      offset=0x40;
      break;
   case 3:
      offset=0x14;
      break;
   case 4:
      offset=0x54;
      break;
   default:
      offset=0;
   }
  LCDCmd(offset + pos + 0x80);
}//end PosCur(line, pos);

/* * * * * * * * * * * * * * * * * * * * * * * * */
/*LCDPrint(char *s) write a string to the screen */
/* * * * * * * * * * * * * * * * * * * * * * * * */
void LCDPrint(char *s)
{
   while (*s)
       LCDdataWrite (*s++);
}//end LCDPrint(*s)


/* * * * * * * * * * * * * * * * * * * * * * * * * */
/*BarInit(char choice) Initialize the bar generator*/
/*Choice=0 dot bar Choice=1 solid bar              */
/* * * * * * * * * * * * * * * * * * * * * * * * * */
void BarInit(char choice)
{
   char n,m,number;
   

   for (m=0;m<6;m++)
      {
      LCDCmd(0x80+m); //set DDRAM address 0
      LCDCmd(0x40+(m<<3)); //set CGRAM address 0

      LCDdataWrite(0b00000001);

      (m==0)?(number=0):(number+=1<<(5-m));

      for (n=0;n<7;n++)
         LCDdataWrite(((m!=5)&&(n&0x1)&&choice)?(number|1):number);
   
      }
   LCDCmd(0x80); //set DDRAM address 0
}//end BarInit(char choice)

/* * * * * * * * * * * * * * * * * * * * * * * * * */
/*LCDBar(char line,char a) bar gauge               */
/*line=line to show the bar, a= value from 0 to 100*/
/* * * * * * * * * * * * * * * * * * * * * * * * * */
void LCDBar(char line,char a)
{

   char n;
   char b;
   
   PosCur(line,0);
   
   for (n=0;n<(a/5);n++)
      LCDdataWrite(5);
   

   if (a<100)
      {
      LCDdataWrite(a%5);

      b=19-(a/5);
      for (n=0;n<b;n++)
         LCDdataWrite(0);
      }
}//end LCDBar(char line,char a)
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

PrecedenteProssimo

Torna a Realizzazioni, interfacciamento e nozioni generali.

Chi c’è in linea

Visitano il forum: Nessuno e 5 ospiti