Progetti

   

Sponsor

   

Servizi

   
Benvenuto, Ospite
Nome utente: Password: Ricordami
  • Pagina:
  • 1
  • 2
  • 3

ARGOMENTO: display 16x2 I2C

display 16x2 I2C 1 Settimana 2 Giorni fa #1

  • x206
  • Avatar di x206
  • Offline
  • Fresh Boarder
  • Messaggi: 18
  • Karma: 0
Salve,

oggi ho provato a collegare un display lcd 16x2 con modulo I2C e chip integrato PCF8574T, ho

realizzato un semplice programma per visualizzare una scritta ma niente da fare non ci sono

riuscito, utilizzando la libreria LaurTec_PIC_libraries_v_3.3.1 nel file "LCD_44780_I2C.h" ho

provato sia l'impostazione per PCF8574 che PCF8574A ottenendo lo stesso risultato di display

vuoto. Il debug si ferma alla riga LCD_initialize(20). Vi posto il codice
#include <xc.h>
#include <i2c.h>
#include <PIC18f4550_config.h>
#include "LCD_44780_I2C.h"
#include "LCD_44780_I2C.c"
#include "PCF8574.h"
#include "PCF8574.c"
#include "delay.h"
#include "delay.c"
 
void board_initialization (void);
 
void main (void){
 
        board_initialization ();
 
	// Inizializza il modulo I2C a 100KHz @20MHz
        OpenI2C(MASTER, SLEW_OFF);
        SSPADD = 49;
 
	// Inizializzo il display LCD con quarzo a 20MHz
        LCD_initialize (20);
        LCD_backlight (LCD_TURN_OFF_LED);
        LCD_write_message ("Hello");
        goto_line_LCD (2);
        LCD_write_message ("World!");
 
	// Ciclo infinito
 	while (1) {            
 
 	}
}
void board_initialization (void){
    // Imposto PORTA tutti ingressi
LATA = 0x00;
TRISA = 0xFF;
// Imposto PORTB tutti ingressi
LATB = 0x00;
TRISB = 0xFF;
// Imposto PORTC tutti ingressi
LATC = 0x00;
TRISC = 0xFF;
// Imposto PORTD tutti ingressi
LATD = 0x00;
TRISD = 0xFF;
// Imposto PORTE tutti ingressi
LATE = 0x00;
TRISE = 0xFF;
//Attivo i restitori di pull-up su PORTB
INTCON2bits.RBPU = 0;
}

Saluti
Luca
Ultima modifica: 1 Settimana 2 Giorni fa da x206.
L\'Amministratore ha disattivato l\'accesso in scrittura al pubblico.

display 16x2 I2C 6 Giorni 16 Ore fa #2

  • Mauro Laurenti
  • Avatar di Mauro Laurenti
  • Offline
  • Moderatore
  • Messaggi: 4591
  • Ringraziamenti ricevuti 539
  • Karma: 52
Salve Luca,

ci sono troppe variabili in gioco.

Potresti fare prima una prova con gli esempi del PCF8574?

In particolare cerca di migrare alle nuove librerie LTlib che hanno diversi esempi.

Hai un oscilloscopio con cui controllare il bus I2C?

Il problema è che ci sono diversi collegamenti con i fili e devi accertarti che il PCF risponde sul bus.

Saluti,

mauro
L\'Amministratore ha disattivato l\'accesso in scrittura al pubblico.

display 16x2 I2C 6 Giorni 8 Ore fa #3

  • x206
  • Avatar di x206
  • Offline
  • Fresh Boarder
  • Messaggi: 18
  • Karma: 0
Salve Mauro,

non posso provare gli esempi del PCF8574 perchè è integrato in un modulo del quale non riesco a reperire il

datasheet, inoltre non posseggo un oscilloscopio, di seguito inserisco il link del modulo che sto usando

LCD_I2C

ho provato ad usare le LTlib 5 per quel poco che ci ho capito :lol: ottenendo questo codice
#include <xc.h>
 
#include "LTlib.h"
 
#include "LTlib_utilities.h"
#include "LTlib_utilities.c"
 
#include "module_IO.h"
#include "module_IO.c"
 
#include "module_I2C.h"
#include "module_I2C.c"
 
#include "LTlib_delay.h"
#include "LTlib_delay.c"
 
#include "MCP2300x.h" 
#include "MCP2300x.c"
 
#include "LCD_44780_I2C.h"
#include "LCD_44780_I2C.c"
 
#include "PCF8574.h"
#include "PCF8574.c"
 
 
 
void board_initialization (void);
 
void main (void){
 
        board_initialization ();
 
        I2C1_open (I2C_MASTER);
        I2C1_baud_rate (100);
        PCF8574_initialize(100);
 
	// Inizializzo il display LCD con quarzo a 20MHz
        LCD_initialize (20);
        LCD_backlight (LCD_TURN_ON_LED);
        LCD_goto_line (1);
        LCD_write_message ("Hello");
        LCD_goto_line (2);
        LCD_write_message ("World!");
 
	// Ciclo infinito
 	while (1) {            
 
 	}
}
void board_initialization (void){
    // Imposto PORTA tutti ingressi
LATA = 0x00;
TRISA = 0xFF;
// Imposto PORTB tutti ingressi
LATB = 0x00;
TRISB = 0xFF;
// Imposto PORTC tutti ingressi
LATC = 0x00;
TRISC = 0xFF;
// Imposto PORTD tutti ingressi
LATD = 0x00;
TRISD = 0xFF;
// Imposto PORTE tutti ingressi
LATE = 0x00;
TRISE = 0xFF;
//Attivo i restitori di pull-up su PORTB
INTCON2bits.RBPU = 0;
}

al PIC sono solo collegati 4 fili, 2 per l'alimentazione del display

e due per le linee SDA e SDL

Saluti
Luca
Ultima modifica: 6 Giorni 8 Ore fa da x206.
L\'Amministratore ha disattivato l\'accesso in scrittura al pubblico.

display 16x2 I2C 5 Giorni 18 Ore fa #4

  • x206
  • Avatar di x206
  • Offline
  • Fresh Boarder
  • Messaggi: 18
  • Karma: 0
Salve,

oggi ho trovato questo Link

dove dice che l'indirizzo i2c predefinito del modulo che sto usando è lo 0x27, dove posso trovare quello impostato

nella libreria? ho provato a spulciare ma non sono sicuro, all'interno della libreria <I2C.h> c'è un define SLAVE_7, è

corretto?

Grazie

Luca
Ultima modifica: 5 Giorni 14 Ore fa da x206.
L\'Amministratore ha disattivato l\'accesso in scrittura al pubblico.

display 16x2 I2C 5 Giorni 11 Ore fa #5

  • Mauro Laurenti
  • Avatar di Mauro Laurenti
  • Offline
  • Moderatore
  • Messaggi: 4591
  • Ringraziamenti ricevuti 539
  • Karma: 52
Un esempio dovrebbe essere questo:
//******************************************************************************
// The software writes "Hello World" to the LCD.
// The LCD must be connected as specified in the library included above.
// 
//
// Tested Platform: Freedom III
// Tested MCU: PIC18F46K22
// Tested Compiler: XC8 2.05
//******************************************************************************
 
#include <xc.h>
 
#include "LTlib.h"
 
#include "LTlib_utilities.h"
#include "LTlib_utilities.c"
 
#include "module_IO.h"
#include "module_IO.c"
 
#include "module_I2C.h"
#include "module_I2C.c"
 
#include "LTlib_delay.h"
#include "LTlib_delay.c"
 
#include "PCF8574.h" 
#include "PCF8574.c"
 
#define PCF8574
#include "LCD_44780_I2C.h"
#include "LCD_44780_I2C.c"
 
void main(void) {
 
    IO_set_all_ports_as_inputs();
 
    LCD_initialize(20);
 
    LCD_write_message("   Hello World");
 
    LCD_backlight(LCD_TURN_ON_LED);
 
    while(1);   
}

poi devi aprire il file LCD:44780_I2C.h e modificare le seguenti linee:
//**************************************************
// LCD constants
// Each bit is connected to the PCF8574/MC23008 
//**************************************************
 
// Standard LaurTec Definition
#define LCD_D0  1
#define LCD_D1  2
#define LCD_D2  4	
#define LCD_D3  8	
#define LCD_E   16	
#define LCD_RW  32
#define LCD_RS  64	
#define LCD_LED 128
 
//PCF8574 LCD module adapter layout (may differ from product to product)
//#define LCD_D0  16
//#define LCD_D1  32
//#define LCD_D2  64	
//#define LCD_D3  128	
//#define LCD_E   4	
//#define LCD_RW  2
//#define LCD_RS  1	
//#define LCD_LED 8

in
//**************************************************
// LCD constants
// Each bit is connected to the PCF8574/MC23008 
//**************************************************
 
// Standard LaurTec Definition
//#define LCD_D0  1
//#define LCD_D1  2
//#define LCD_D2  4	
//#define LCD_D3  8	
//#define LCD_E   16	
//#define LCD_RW  32
//#define LCD_RS  64	
//#define LCD_LED 128
 
//PCF8574 LCD module adapter layout (may differ from product to product)
#define LCD_D0  16
#define LCD_D1  32
#define LCD_D2  64	
#define LCD_D3  128	
#define LCD_E   4	
#define LCD_RW  2
#define LCD_RS  1	
#define LCD_LED 8

L'indirizzo del modulo dipende dai resistori montati sulla schedina.
sono collegati alle linee A0, A1, A2.

L'indirizzo lo puoi cambiare sempre nello stesso file modificando il seguente codice con il tuo indirizzo.
//PCF8574
#ifdef PCF8574
    #define DEVICE_ADDRESS_H 0x40
    #define DEVICE_ADDRESS_L 0x00 
    #define PCF8574_GENERIC
#endif 
 
//PCF8574A
#ifdef PCF8574A
    #define DEVICE_ADDRESS_H 0x70
    #define DEVICE_ADDRESS_L 0x00 
    #define PCF8574_GENERIC
#endif


Le modifiche precedenti creano i relativi collegamenti tra i pin del PCF8574 e il modulo LCD.

Saluti,

Mauro
L\'Amministratore ha disattivato l\'accesso in scrittura al pubblico.
  • Pagina:
  • 1
  • 2
  • 3
Moderatori: Mauro Laurenti, Pinna, StefA, Matteo Garia
Powered by Forum Kunena
   
© LaurTec 2006-2015