Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

Display problema configurazione

Tipologie, strumenti di sviluppo, hardware e progetti

Moderatore: Foto UtentePaolino

0
voti

[1] Display problema configurazione

Messaggioda Foto Utentefantamed » 27 apr 2019, 17:24

Buongiorno a tutti, vorrei provare a capire e far funzionare un display 16x2 da implementare successivamente ai miei progetti autodidattici.
Cercando spiegazioni ed esempi sulla rete, ho scaricato questi file che ho riadattato allo scopo di utilizzare il PIC 16f84A.
Non ho ancora scritto un programma per gestire il Display,per ora ho voluto provare a compilare quanto modificato finora.
Quando provo a compilare con mplab mi restituisce questo errore: #-o

Error [1098] C:\Users\Med\Desktop\med\esercizi PIC\Lcd & Display\display modif\delay.c; 11.1 conflicting declarations for variable "DelayMs" (C:\Users\Med\Desktop\med\esercizi PIC\Lcd & Display\display modif\delay.c:11)

Con la speranza che io stia seguendo la giusta direzione per il progetto, e che quindi non dovrò rifare tutto da capo, vi chiedo un'aiuto a capire e risolvere.

Delay.c :
Codice: Seleziona tutto
/*
*   Delay functions
*   See delay.h for details
*
*   Make sure this code is compiled with full optimization!!!
*/

#include   "delay.h"

void DelayMs(unsigned char cnt)
{
#if   XTAL_FREQ <= 2MHZ
   do {
      DelayUs(996);
   } while(--cnt);
#endif

#if    XTAL_FREQ > 2MHZ   
   unsigned char   i;
   do {
      i = 4;
      do {
         DelayUs(250);
      } while(--i);
   } while(--cnt);
#endif
}



Delay.h :
Codice: Seleziona tutto
/*
*   Delay functions for HI-TECH C on the PIC
*
*   Functions available:
*      DelayUs(x)   Delay specified number of microseconds
*      DelayMs(x)   Delay specified number of milliseconds
*
*   Note that there are range limits: x must not exceed 255 - for xtal
*   frequencies > 12MHz the range for DelayUs is even smaller.
*   To use DelayUs it is only necessary to include this file; to use
*   DelayMs you must include delay.c in your project.
*
*/

/*   Set the crystal frequency in the CPP predefined symbols list in
   HPDPIC, or on the PICC commmand line, e.g.
   picc -DXTAL_FREQ=4MHZ
   
   or
   picc -DXTAL_FREQ=100KHZ
   
   Note that this is the crystal frequency, the CPU clock is
   divided by 4.

*   MAKE SURE this code is compiled with full optimization!!!
   
*/

#ifndef   XTAL_FREQ
#define   XTAL_FREQ   4MHZ      /* Crystal frequency in MHz */
#endif

#define   MHz   *1000L         /* number of kHz in a MHz */
#define   kHz   *1         /* number of kHz in a kHz */

#if   XTAL_FREQ >= 12MHZ

#define   DelayUs(x)   { unsigned char _dcnt; \
           _dcnt = (x)*((XTAL_FREQ)/(12MHZ)); \
           while(--_dcnt != 0) \
              continue; }
#else

#define   DelayUs(x)   { unsigned char _dcnt; \
           _dcnt = (x)/((12MHZ)/(XTAL_FREQ))|1; \
           while(--_dcnt != 0) \
              continue; }
#endif


extern void DelayMs(unsigned char);




lcd.c :
Codice: Seleziona tutto
************************************************************************/


/************************************************************************
Use this includes if these files are not included in your main code
************************************************************************/
//#include "PIC.h"
#include "htc.h"
#include "delay.c"

/************************************************************************
Use the following defines to set the lines as your hardware requires
You can use ANY output line of the MCU, even on several ports :)
************************************************************************/
#define   LCD_RS   RB5   // Register select
#define   LCD_EN   RB4   // Enable
#define   LCD_D4   RB0   // LCD data 4
#define   LCD_D5   RB1   // LCD data 5
#define   LCD_D6   RB2   // LCD data 6
#define   LCD_D7   RB3   // LCD data 7

/************************************************************************
Now you have only to write LCD Rows and Columns number
and the cursor behaviour
/************************************************************************
!!! NOTE !!!
Some 1x16 LCD works as 2x8!!! ...be sure how to configure
yours, see its datasheet!!!
************************************************************************/

#define LCD_ROWS 2 // valid numbers are: 1,2 (set to 2 for 2 or more rows)
#define LCD_COLS 16 // valid numbers are: 8,16,20
#define LCD_CURSOR_VISIBLE 0 // 1:cursor on 0:cursor off
#define LCD_CURSOR_BLINK 0 // 1:cursor blinks 0:cursor doesn't blinks
#define LCD_TYPEWRITE 0 // 1:delay between characters
#define LCD_TW_DELAY 50 // milliseconds between characters

/************************************************************************
YOUR LCD IS NOW READY TO WORK!!! :)
YOU CAN IGNORE THE FOLLOWING CODE
ENJOY !!!
************************************************************************/

// define the right control value to set the cursor behavior
#if LCD_CURSOR_VISIBLE==1
   #if LCD_CURSOR_BLINK==1
   #define LCD_CONTROL 0b00001111
   #else
   #define LCD_CONTROL 0b00001110
   #endif
#else
   #define LCD_CONTROL 0b00001100
#endif

/************************************************************************
Use the following defines to send fast command to the LCD
Ex.: LCD_CMD(LCD_line2); will set the cursor on line 2
You can add fast command of your own!!!
*************************************************************************
!!! NOTE !!!
DON'T CHANGE THE DEFINES WITHIN #if-#endif
*************************************************************************/

#define LCD_CLR  0x01 // Clears Display
#define LCD_HOME 0x02 // Cursor to Home position

#define LCD_line1 0x80 // Cursor to Line 1 position 1
#define LCD_line2 0xC0 // Cursor to Line 2 position 1

#if (LCD_COLS==20)
   #define LCD_line3 0x94 // Cursror to Line 3 position 1 (20 char LCD)
   #define LCD_line4 0xD4 // Cursor to Line 4 position 1 (20 char LCD)
#else
   #define LCD_line3 0x90 // Cursor to Line 3 position 1 (16 char LCD)
   #define LCD_line4 0xD0 // Cursor to Line 4 position 1 (16 char LCD)
#endif

/************************************************************************/

/****************************************
Enable LCD to read data
*****************************************/
void LCD_STROBE (void)
   {
   LCD_EN = 1;
   DelayUs(1);
   LCD_EN=0;
   }   

/****************************************
Write a nibble to the LCD
****************************************/
void LCD_NIBBLE_OUT (unsigned char c)
   {
   if (c & 0b10000000)
      LCD_D7=1;
   else LCD_D7=0;
   
   if (c & 0b01000000)
      LCD_D6=1;
   else LCD_D6=0;

   if (c & 0b00100000)
      LCD_D5=1;
   else LCD_D5=0;

   if (c & 0b00010000)
      LCD_D4=1;
   else LCD_D4=0;

   LCD_STROBE();
   }

/****************************************
Write a byte to the LCD (4 bit mode)
****************************************/
void LCD_WRITE (unsigned char c)
   {
   LCD_NIBBLE_OUT(c);
   c <<= 4;
   LCD_NIBBLE_OUT(c);
   DelayUs(50);
   #if LCD_TYPEWRITE==1
   if (LCD_RS)
      {
      DelayMs(LCD_TW_DELAY); // Delay between characters
      }
   #endif
   }

/****************************************
Sends a command to the LCD
****************************************/
void LCD_CMD (char c)
   {
   LCD_RS = 0; // writes command
   LCD_WRITE(c);
   }

/****************************************
GoTo specified line and position
****************************************/
void LCD_GOTO (char line,char pos)
   {
   switch(line)
      {
      case 1: LCD_CMD((LCD_line1-1)+pos);
      break;
      
      case 2: LCD_CMD((LCD_line2-1)+pos);
      break;
      
      case 3: LCD_CMD((LCD_line3-1)+pos);
      break;
      
      case 4: LCD_CMD((LCD_line4-1)+pos);
      }
   }

/****************************************
Clears and Home LCD
*****************************************/
void LCD_CLEAR (void)
   {
   LCD_CMD(LCD_CLR);
   DelayMs(3);
   }

/****************************************
Writes one character (ASCII) to LCD
****************************************/
void LCD_PUTCH (char c)
   {
   LCD_RS = 1; // write characters
   LCD_WRITE(c);
   }

/****************************************
  Writes unsigned numbers to the LCD
*****************************************/
void LCD_PUTUN (unsigned int c)
   {
   unsigned char t1,i,wrote;
   unsigned int k;
   wrote=0;
   for (i=4;i>=1;i--)
      {
      switch(i)
         {
         case 4: k=10000;
         break;
   
         case 3: k=1000;
         break;
         
         case 2: k=100;
         break;
   
         case 1: k=10;
         }
      
      t1=c/k;
      
      if((wrote)||(t1!=0))
         {
         LCD_PUTCH(t1+'0');
         wrote=1;
         }
   
      c-=(t1*k);
      }

   LCD_PUTCH(c+'0');
   }

/****************************************
  Writes signed numbers to the LCD
*****************************************/
void LCD_PUTSN (signed int c)
   {
   if(c<0)
      {
      LCD_PUTCH('-');
      c*=(-1);
      }
   
   LCD_PUTUN(c);
   }

/****************************************
Writes a string to the LCD
****************************************/
void LCD_PUTS (const char * s)
   {
   LCD_RS = 1; // write characters
   while(*s)
      LCD_WRITE(*s++);
   }

/****************************************
Customizes the CGRAM characters (0-7)
****************************************/
void LCD_CUSTOMCHAR(unsigned char pos,unsigned char byte0,unsigned char byte1,unsigned char byte2,unsigned char byte3,unsigned char byte4,unsigned char byte5,unsigned char byte6,unsigned char byte7)
   {
   LCD_CMD(0b00001000); // display off
   LCD_CLEAR();
   LCD_CMD(64+(pos*8)); // goto the right CGRAM location
   LCD_PUTCH(byte0);
   LCD_PUTCH(byte1);
   LCD_PUTCH(byte2);
   LCD_PUTCH(byte3);
   LCD_PUTCH(byte4);
   LCD_PUTCH(byte5);
   LCD_PUTCH(byte6);
   LCD_PUTCH(byte7);
   LCD_CMD(LCD_CONTROL); // display on with preferred settings
   }

/****************************************
Initializes LCD
****************************************/   
void LCD_INIT (void)
   {
   
   LCD_RS = 0; // write control bytes
   DelayMs(50); // power on delay

   LCD_D4=1;
   LCD_D5=1;
   LCD_D6=0;
   LCD_D7=0;

   LCD_STROBE();
   DelayMs(6);

   LCD_STROBE();
   DelayUs(150);

   LCD_STROBE();
   DelayMs(6);

   LCD_D4=0; // set 4 bit mode
   LCD_STROBE();
   
   DelayUs(100);
   
   #if (LCD_ROWS==1)
      LCD_WRITE(0b00100000);   // 4 bit mode, 1 line, 5x8 font
   #else
      LCD_WRITE(0b00101000);   // 4 bit mode, 2 or more lines, 5x8 font
   #endif
   
   LCD_WRITE(0b00001000); // display off
   LCD_WRITE(0b00000000); // clear display
   LCD_WRITE(LCD_CONTROL); // display on, set the cursor behavior as specified
   LCD_WRITE(0b00000110); // entry mode, display not shifted, cursor increments
   }

/************************************************************************/
#undef LCD_ROWS
#undef LCD_COLS
#undef LCD_CURSOR_BLINK
#undef LCD_CURSOR_VISIBLE
/************************************************************************
!!! END !!!
THANKS FOR EXAMINING MY CODE ;)
/************************************************************************
Please report any bug or suggestion at zypkin@inwind.it

main.c :
Codice: Seleziona tutto
#define  XTAL_FREQ 20MHZ // questo è utilizzato dalle routine di ritardo contenute in Delay.C

//__CONFIG (XT & WDTDIS & PWRTEN & UNPROTECT);
#include <PIC.h>
#include "lcd.c"
#include   "delay.h"
#include "delay.c"

#include "settaggio.h"

void main (void)
{
  settaggio();
   while(1)
   {
    }
}



settaggio.h :
Codice: Seleziona tutto
#define   LCD_RS   RB5   // Register select
#define   LCD_EN   RB4   // Enable
#define   LCD_D4   RB0   // LCD data 4
#define   LCD_D5   RB1   // LCD data 5
#define   LCD_D6   RB2   // LCD data 6
#define   LCD_D7   RB3   // LCD data 7

unsigned char i;
void settaggio(void)
{

   OPTION=0b10000000;
   TRISA=0;
   TRISB=0;
   PORTB=0;
   
   
   TMR0=100;
   
}   


Lieto di accettare consigli

Anticipatamente grazie
Marco
Avatar utente
Foto Utentefantamed
30 5
Frequentatore
Frequentatore
 
Messaggi: 110
Iscritto il: 8 nov 2013, 13:44

0
voti

[2] Re: Display problema configurazione

Messaggioda Foto UtenteIlGuru » 7 mag 2019, 16:40

Da quando si includono i .c ?

Il problema sta in lcd.c e precisamente qui
Codice: Seleziona tutto
#include "delay.c"

perché delay.c a sua volta include ( giustamente ) delay.h

Includendo due dichiarazioni provenienti da delay.h e da delay.c è ovvio che il compilatore segnali il conflitto.

Includi solo i .h nei sorgenti ( evitando ridondanze ) e linka gli oggetti quando compili il main.c
\Gamma\nu\tilde{\omega}\theta\i\ \sigma\epsilon\alpha\upsilon\tau\acute{o}\nu
Avatar utente
Foto UtenteIlGuru
4.164 1 10 13
Master
Master
 
Messaggi: 1394
Iscritto il: 31 lug 2015, 23:32

0
voti

[3] Re: Display problema configurazione

Messaggioda Foto Utentefantamed » 8 mag 2019, 12:58

Ciao Guru,grazie per la risposta.
Hai detto che il problema sta nell'inclusione di delay.c nel file lcd.c ,sarebbe questo il conflitto?
delay.h :
Codice: Seleziona tutto
extern void DelayMs(unsigned char);

con questo di delay.c :
Codice: Seleziona tutto
void DelayMs(unsigned char cnt)

Perdona la mia cocciutaggine nella comprensione, :oops: Potresti spiegarmi in parole povere cosa significa questo:
Includi solo i .h nei sorgenti ( evitando ridondanze ) e linka gli oggetti quando compili il main.c


Tolgo le inclusioni.c dai codici.c?
Linkare gli oggetti cosa significa? :oops:

Grazie ancora,buona giornata
Avatar utente
Foto Utentefantamed
30 5
Frequentatore
Frequentatore
 
Messaggi: 110
Iscritto il: 8 nov 2013, 13:44

0
voti

[4] Re: Display problema configurazione

Messaggioda Foto UtenteIlGuru » 8 mag 2019, 14:12

Esatto, con la direttiva include in genere si inseriscono nel sorgente che viene compilato solo i file .h Gli header devono contenere solo i prototipi delle funzioni perché per i fini della compilazione interessa solo sapere come sono fatte "esternamente". Nulla vieta di inserire codice anche in questi file, ma non è una buona abitudine, quindi dovresti rimuovere anche la funzione settaggio da settaggio.h ed inserirla in un settaggio.c

La compilazione di ogni sorgente .c deve creare un file .o (opzione -c di gcc) e tutti questi file .o vanno passati in coda alla compilazione di main.c in modo che il linker crei un eseguibile collegando tra loro tutti questi oggetti.

In alternativa si possono compilare tutti i .c insieme al main rispettandone le dipendenze.

Prima di editare sorgenti, se fossi in te seguirei qualche tutorial su C e su make, bastano giusto poche ore ed alla fine si possono fare cose senza bisogno di andare per tentativi.
\Gamma\nu\tilde{\omega}\theta\i\ \sigma\epsilon\alpha\upsilon\tau\acute{o}\nu
Avatar utente
Foto UtenteIlGuru
4.164 1 10 13
Master
Master
 
Messaggi: 1394
Iscritto il: 31 lug 2015, 23:32

0
voti

[5] Re: Display problema configurazione

Messaggioda Foto Utentefantamed » 18 mag 2019, 17:57

Ciao Guru,finalmente un po di tempo :-)
Il codice lo ho preso da questo sito:https://www.settorezero.com/wordpress/corso-programmazione-picmicro-in-c-lezione-7-parte-1-interfacciarsi-con-un-display-lcd-intelligente-introduzione/
Avendo a disposizione una decina di PIC 16f84A ho pensato di provare ad adattare il programma a questo PIC.
Ho provato a risolvere il problema con la seconda opzione che mi hai dato (la piu semplice ) sistemato altre due cosine e adesso codice viene compilato senza errori con MPLAB.
Purtroppo pero nel display non appare nulla,o meglio sembrerebbe che funzioni tutto,il display si accende,blinka le due righe facendo la pulizia,sembra che provi a scrivere ma non appare nulla sul display.
Utilizzo una scheda Easypic6 la quale ha a bordo i led relativi alle porte del PIC ,i quali durante l'esecuzione si accendono regolarmente in base all'inizializzazione del display.
Ho provato a fare il debugger riga per riga con MPLAB e sembrerebbe anche qui che tutto funziona bene dall'inizio alla fine del programma-
Visto il comportamento del display su scheda,e leggendo l'articolo del sito in particolare la parte riguardante"l'inizializzazione del display" e i relativi ritardi,mi pare di capire che non coincidano con quelli del codice copiato.
Nell'articolo mi pare di capire che utilizzino un quarzo da 20mhz,ma con 20mhz sembrerebbe che sia l'esecuzione dei ritardi sia troppo veloce, tanto e che il diplay non fa nulla e non si accendono nemmeno i led relativi,invece se metto un quarzo da 4mhz si comporta come ti ho detto prima (qualcosa fa e vedo anche i led relativi)ma nulla sul display,idem se ne metto uno a 8mhz
questo e il nuovo codice :
Codice: Seleziona tutto
#define  XTAL_FREQ 20MHZ // questo è utilizzato dalle routine di ritardo

//__CONFIG (XT & WDTDIS & PWRTEN & UNPROTECT);
#include <PIC.h>
#include "delay.h"
#include "settaggio.h"
//#include "htc.h"

void DelayMs(unsigned char cnt)
{
#if   XTAL_FREQ <= 2MHZ
   do {
      DelayUs(996);
   } while(--cnt);
#endif

#if    XTAL_FREQ > 2MHZ   
   unsigned char   i;
   do {
      i = 4;
      do {
         DelayUs(250);
      } while(--i);
   } while(--cnt);
#endif
}

************************************************************************
Use the following defines to set the lines as your hardware requires
You can use ANY output line of the MCU, even on several ports :)
************************************************************************/
#define   LCD_RS   RB5   // Register select
#define   LCD_EN   RB4   // Enable
#define   LCD_D4   RB0   // LCD data 4
#define   LCD_D5   RB1   // LCD data 5
#define   LCD_D6   RB2   // LCD data 6
#define   LCD_D7   RB3   // LCD data 7

/************************************************************************
Now you have only to write LCD Rows and Columns number
and the cursor behaviour
/************************************************************************
!!! NOTE !!!
Some 1x16 LCD works as 2x8!!! ...be sure how to configure
yours, see its datasheet!!!
************************************************************************/

#define LCD_ROWS 2 // valid numbers are: 1,2 (set to 2 for 2 or more rows)
#define LCD_COLS 16 // valid numbers are: 8,16,20
#define LCD_CURSOR_VISIBLE 0 // 1:cursor on 0:cursor off
#define LCD_CURSOR_BLINK 0 // 1:cursor blinks 0:cursor doesn't blinks
#define LCD_TYPEWRITE 0 // 1:delay between characters
#define LCD_TW_DELAY 50 // milliseconds between characters

/************************************************************************
YOUR LCD IS NOW READY TO WORK!!! :)
YOU CAN IGNORE THE FOLLOWING CODE
ENJOY !!!
************************************************************************/

// define the right control value to set the cursor behavior

#if LCD_CURSOR_VISIBLE==1
   #if LCD_CURSOR_BLINK==1
   #define LCD_CONTROL 0b00001111
   #else
   #define LCD_CONTROL 0b00001110
   #endif
#else
   #define LCD_CONTROL 0b00001100
#endif

/************************************************************************
Use the following defines to send fast command to the LCD
Ex.: LCD_CMD(LCD_line2); will set the cursor on line 2
You can add fast command of your own!!!
*************************************************************************
!!! NOTE !!!
DON'T CHANGE THE DEFINES WITHIN #if-#endif
*************************************************************************/

#define LCD_CLR  0x01 // Clears Display
#define LCD_HOME 0x02 // Cursor to Home position

#define LCD_line1 0x80 // Cursor to Line 1 position 1
#define LCD_line2 0xC0 // Cursor to Line 2 position 1

#if (LCD_COLS==20)
   #define LCD_line3 0x94 // Cursror to Line 3 position 1 (20 char LCD)
   #define LCD_line4 0xD4 // Cursor to Line 4 position 1 (20 char LCD)
#else
   #define LCD_line3 0x90 // Cursor to Line 3 position 1 (16 char LCD)
   #define LCD_line4 0xD0 // Cursor to Line 4 position 1 (16 char LCD)
#endif

/************************************************************************/

/****************************************
Enable LCD to read data
*****************************************/
void LCD_STROBE (void)
   {
   LCD_EN = 1;
   DelayUs(1);
   LCD_EN=0;
   }   

/****************************************
Write a nibble to the LCD
****************************************/
void LCD_NIBBLE_OUT (unsigned char c)
   {
   if (c & 0b10000000)
      LCD_D7=1;
   else LCD_D7=0;
   
   if (c & 0b01000000)
      LCD_D6=1;
   else LCD_D6=0;

   if (c & 0b00100000)
      LCD_D5=1;
   else LCD_D5=0;

   if (c & 0b00010000)
      LCD_D4=1;
   else LCD_D4=0;

   LCD_STROBE();
   }

/****************************************
Write a byte to the LCD (4 bit mode)
****************************************/
void LCD_WRITE (unsigned char c)
   {
   LCD_NIBBLE_OUT(c);
   c <<= 4;
   LCD_NIBBLE_OUT(c);
   DelayUs(50);
   #if LCD_TYPEWRITE==1
   if (LCD_RS)
      {
      DelayMs(LCD_TW_DELAY); // Delay between characters
      }
   #endif
   }

/****************************************
Sends a command to the LCD
****************************************/
void LCD_CMD (char c)
   {
   LCD_RS = 0; // writes command
   LCD_WRITE(c);
   }

/****************************************
GoTo specified line and position
****************************************/
void LCD_GOTO (char line,char pos)
   {
   switch(line)
      {
      case 1: LCD_CMD((LCD_line1-1)+pos);
      break;
      
      case 2: LCD_CMD((LCD_line2-1)+pos);
      break;
      
      case 3: LCD_CMD((LCD_line3-1)+pos);
      break;
      
      case 4: LCD_CMD((LCD_line4-1)+pos);
      }
   }

/****************************************
Clears and Home LCD
*****************************************/
void LCD_CLEAR (void)
   {
   LCD_CMD(LCD_CLR);
   DelayMs(3);
   }

/****************************************
Writes one character (ASCII) to LCD
****************************************/
void LCD_PUTCH (char c)
   {
   LCD_RS = 1; // write characters
   LCD_WRITE(c);
   }

/****************************************
  Writes unsigned numbers to the LCD
*****************************************/
void LCD_PUTUN (unsigned int c)
   {
   unsigned char t1,i,wrote;
   unsigned int k;
   wrote=0;
   for (i=4;i>=1;i--)
      {
      switch(i)
         {
         case 4: k=10000;
         break;
   
         case 3: k=1000;
         break;
         
         case 2: k=100;
         break;
   
         case 1: k=10;
         }
      
      t1=c/k;
      
      if((wrote)||(t1!=0))
         {
         LCD_PUTCH(t1+'0');
         wrote=1;
         }
   
      c-=(t1*k);
      }

   LCD_PUTCH(c+'0');
   }

/****************************************
  Writes signed numbers to the LCD
*****************************************/
void LCD_PUTSN (signed int c)
   {
   if(c<0)
      {
      LCD_PUTCH('-');
      c*=(-1);
      }
   
   LCD_PUTUN(c);
   }

/****************************************
Writes a string to the LCD
****************************************/
void LCD_PUTS (const char * s)
   {
   LCD_RS = 1; // write characters
   while(*s)
      LCD_WRITE(*s++);
   }

/****************************************
Customizes the CGRAM characters (0-7)
****************************************/
void LCD_CUSTOMCHAR(unsigned char pos,unsigned char byte0,unsigned char byte1,unsigned char byte2,unsigned char byte3,unsigned char byte4,unsigned char byte5,unsigned char byte6,unsigned char byte7)
   {
   LCD_CMD(0b00001000); // display off
   LCD_CLEAR();
   LCD_CMD(64+(pos*8)); // goto the right CGRAM location
   LCD_PUTCH(byte0);
   LCD_PUTCH(byte1);
   LCD_PUTCH(byte2);
   LCD_PUTCH(byte3);
   LCD_PUTCH(byte4);
   LCD_PUTCH(byte5);
   LCD_PUTCH(byte6);
   LCD_PUTCH(byte7);
   LCD_CMD(LCD_CONTROL); // display on with preferred settings
   }

/****************************************
Initializes LCD
****************************************/   
void LCD_INIT (void)
   {
   
   LCD_RS = 0; // write control bytes
   DelayMs(50); // power on delay

   LCD_D4=1;
   LCD_D5=1;
   LCD_D6=0;
   LCD_D7=0;

   LCD_STROBE();
   DelayMs(6);

   LCD_STROBE();
   DelayUs(150);

   LCD_STROBE();
   DelayMs(6);

   LCD_D4=0; // set 4 bit mode
   LCD_STROBE();
   
   DelayUs(100);
   
   #if (LCD_ROWS==1)
      LCD_WRITE(0b00100000);   // 4 bit mode, 1 line, 5x8 font
   #else
      LCD_WRITE(0b00101000);   // 4 bit mode, 2 or more lines, 5x8 font
   #endif
   
   LCD_WRITE(0b00001000); // display off
   LCD_WRITE(0b00000000); // clear display
   LCD_WRITE(LCD_CONTROL); // display on, set the cursor behavior as specified
   LCD_WRITE(0b00000110); // entry mode, display not shifted, cursor increments
   }


#undef LCD_ROWS
#undef LCD_COLS
#undef LCD_CURSOR_BLINK
#undef LCD_CURSOR_VISIBLE

void main (void)
{
  settaggio(); // imposto le porte
   
      LCD_INIT(); // inizializzo l'LCD
      DelayMs(100); // piccolo ritardo iniziale
      LCD_CLEAR(); // ripulisco il display
      LCD_GOTO(1,1); // posiziono il cursore sull'LCD: riga1, colonna1
      LCD_PUTS("HELLO");
      LCD_GOTO(2,1); // riga2, colonna1
      LCD_PUTS("WORLD !");
      while(1)
       {
       }





grazie ancora per i consigli che mi dai,e considerando che ho scelto la strada piu breve ma piu confusionale in quanto i file .c sono tutti scritti in un solo file, apro subito un argomento in merito nella sezione opportuna.
Grazie
Buona Serata a tutti
Avatar utente
Foto Utentefantamed
30 5
Frequentatore
Frequentatore
 
Messaggi: 110
Iscritto il: 8 nov 2013, 13:44

0
voti

[6] Re: Display problema configurazione

Messaggioda Foto Utentefantamed » 23 mag 2019, 15:51

:ok: ,il problema dei ritardi lo ho risolto leggendo questo argomento : [url]. viewtopic.php?f=15&t=54686[/url]
Grazie a tutti O_/
Avatar utente
Foto Utentefantamed
30 5
Frequentatore
Frequentatore
 
Messaggi: 110
Iscritto il: 8 nov 2013, 13:44


Torna a Realizzazioni, interfacciamento e nozioni generali.

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite