- Messaggi: 1010
- Ringraziamenti ricevuti 107
Lettura caratteri con PCF8574
12 Anni 9 Mesi fa - 12 Anni 9 Mesi fa #1
da Pinna
Chi vola vale, chi vale vola, chi non vola è un vile
Lettura caratteri con PCF8574 è stato creato da Pinna
Ciao a tutto il forum, da ieri sera ho iniziato ad "amoreggiare" con l'expander PCF8574 perchè prevedo di utilizzarlo in futuro per pilotare, tramite protocollo I2C, un display lcd 20x4. Al fine di prendere un pò di confidenza, ho adattato il sorgente che il buon Mauro ha messo a nostra disposizione e ho tentato di leggere i vari caratteri della tabella ASCII nel display della scheda freedom II. Il problema che ho riscontrato è che alcuni caratteri non vengono letti nel modo giusto. Ad esempio, legge bene il carattere A, B, o C mentre la Z mi rende la R, la X mi rende la P, la Y mi rende la Q. Preciso che anche i led della freedom mi rendono in codice binario gli stessi risultati che leggo nel display. Chiedo se qualcuno di voi ha qualche idea in merito. Il ragionamento terra terra che faccio io è: o li legge tutti giusti oppure tutti sbagliati, ma non a mezzadria. Il main, che allego qui, apparentemente mi sembra corretto. Ho provato anche ad azzerare tutte le porte dell'expander prima di scrivere il nuovo dato ma non cambia nulla: quelle maledette lettere le legge come vuole lui ed è chiaro che non si può andare avanti nel progetto se già in partenza qualcosa non va per il verso giusto.
Grazie per un eventuale aiuto
#include <p18f4550.h>
#include "PCF8574.c"
#define LCD_DEFAULT
#include "LCD_44780.h"
#include "delay.h"
#pragma config FOSC = HS
#pragma config WDT = OFF
#pragma config LVP = OFF
#pragma config PBADEN = OFF
//OSC = HS Impostato per lavorare ad alta frequenza
//WDT = OFF Disabilito il watchdog timer
//LVP = OFF Disabilito programmazione LVP
//PBADEN = OFF Disabilito gli ingressi analogici
void main (void){
// Variabile per salvare il dato di ritorno
unsigned char data = 0;
// Imposto PORTA tutti ingressi
LATA = 0x00;
TRISA = 0xFF;
// Imposto PORTB tutti ingressi
LATB = 0x00;
TRISB = 0xFF;
// Imposto PORTC tutti ingressi, RC1 come output
LATC = 0x00;
TRISC = 0b11111101;
// Imposto PORTD tutte uscite
LATD = 0x00;
TRISD = 0x00;
// Imposto PORTE tutti ingressi
LATE = 0x00;
TRISE = 0xFF;
// Imposto il quarzo per la libreria delay
setQuartz (20);
// Inizializza il modulo I2C a 400KHz @20MHz
OpenI2C(MASTER, SLEW_OFF);
SSPADD = 49;
/****************************************************************************************************/
OpenLCD (20);
BacklightLCD (TURN_ON);
/*********************************** SCRITTURA ****************************************************/
// Scrivo il dato nell'IO expander
//PCF8574_write_data (0x40, 0b01011010); codice corrispondente alla lettera Z
PCF8574_write_data (0x40, 'Z');
/*********************************** LETTURA ****************************************************/
// Leggo il dato dall' IO expander
PCF8574_read_data (0x40, &data); //RESTITUISCE LA LETTERA R
WriteCharLCD (data);
LATD = data; // ANCHE I LED RESTITUISCONO IN BINARIO LA LETTERA R
// Ciclo infinito
while (1) {
}
}
Grazie per un eventuale aiuto
#include <p18f4550.h>
#include "PCF8574.c"
#define LCD_DEFAULT
#include "LCD_44780.h"
#include "delay.h"
#pragma config FOSC = HS
#pragma config WDT = OFF
#pragma config LVP = OFF
#pragma config PBADEN = OFF
//OSC = HS Impostato per lavorare ad alta frequenza
//WDT = OFF Disabilito il watchdog timer
//LVP = OFF Disabilito programmazione LVP
//PBADEN = OFF Disabilito gli ingressi analogici
void main (void){
// Variabile per salvare il dato di ritorno
unsigned char data = 0;
// Imposto PORTA tutti ingressi
LATA = 0x00;
TRISA = 0xFF;
// Imposto PORTB tutti ingressi
LATB = 0x00;
TRISB = 0xFF;
// Imposto PORTC tutti ingressi, RC1 come output
LATC = 0x00;
TRISC = 0b11111101;
// Imposto PORTD tutte uscite
LATD = 0x00;
TRISD = 0x00;
// Imposto PORTE tutti ingressi
LATE = 0x00;
TRISE = 0xFF;
// Imposto il quarzo per la libreria delay
setQuartz (20);
// Inizializza il modulo I2C a 400KHz @20MHz
OpenI2C(MASTER, SLEW_OFF);
SSPADD = 49;
/****************************************************************************************************/
OpenLCD (20);
BacklightLCD (TURN_ON);
/*********************************** SCRITTURA ****************************************************/
// Scrivo il dato nell'IO expander
//PCF8574_write_data (0x40, 0b01011010); codice corrispondente alla lettera Z
PCF8574_write_data (0x40, 'Z');
/*********************************** LETTURA ****************************************************/
// Leggo il dato dall' IO expander
PCF8574_read_data (0x40, &data); //RESTITUISCE LA LETTERA R
WriteCharLCD (data);
LATD = data; // ANCHE I LED RESTITUISCONO IN BINARIO LA LETTERA R
// Ciclo infinito
while (1) {
}
}
Chi vola vale, chi vale vola, chi non vola è un vile
Ultima Modifica 12 Anni 9 Mesi fa da Mauro Laurenti.
Si prega Accedi o Crea un account a partecipare alla conversazione.
- Pinna
- Autore della discussione
- Moderator
Riduci
Di più
12 Anni 9 Mesi fa #2
da Ale_Pic
Risposta da Ale_Pic al topic Re: Lettura caratteri con PCF8574
ciao, potresti dire come hai collegato il pcf8574?
mi spiego meglio:
vorrei sapere se hai collegato il pcf solo alle linee di dati (D7-D0) oppure hai incluso anche i pin R/W, EN, ed uttilizzando un' interfaccia a 4bit..
mi spiego meglio:
vorrei sapere se hai collegato il pcf solo alle linee di dati (D7-D0) oppure hai incluso anche i pin R/W, EN, ed uttilizzando un' interfaccia a 4bit..
Si prega Accedi o Crea un account a partecipare alla conversazione.
- Ale_Pic
- Junior Member
Riduci
Di più
- Messaggi: 38
- Ringraziamenti ricevuti 2
12 Anni 9 Mesi fa #3
da Pinna
Chi vola vale, chi vale vola, chi non vola è un vile
Risposta da Pinna al topic Re: Lettura caratteri con PCF8574
il pcf è collegato solo alle linee di alimentazione e alle linee SDA e SCK del 18F4550. A0, A1 e A2 sono collegate a massa tramite resistenze da 10K. Il display è quello montato sulla freedom. Il programma è quello scritto da Mauro, l'unica aggiunta è stata includere nel progetto la libreria per il display e la riga nel main che mi permette di visualizzare il dato
Chi vola vale, chi vale vola, chi non vola è un vile
Si prega Accedi o Crea un account a partecipare alla conversazione.
- Pinna
- Autore della discussione
- Moderator
Riduci
Di più
- Messaggi: 1010
- Ringraziamenti ricevuti 107
12 Anni 9 Mesi fa #4
da Ale_Pic
Risposta da Ale_Pic al topic Re: Lettura caratteri con PCF8574
non intendo lato PIC-PCF ma PCF-LCD
Si prega Accedi o Crea un account a partecipare alla conversazione.
- Ale_Pic
- Junior Member
Riduci
Di più
- Messaggi: 38
- Ringraziamenti ricevuti 2
12 Anni 9 Mesi fa #5
da Pinna
Chi vola vale, chi vale vola, chi non vola è un vile
Risposta da Pinna al topic Re: Lettura caratteri con PCF8574
non ho collegato nessun display aggiuntivo al pcf proprio perchè, prima di andare avanti, volevo vedere se riuscivo inizialmente a visualizzare il dato in quello della freedom. La comunicazione pcf - lcd freedom avviene, solo che, come già scritto, tra qualche dato scritto e dato letto non c'è corrispondenza...
Chi vola vale, chi vale vola, chi non vola è un vile
Si prega Accedi o Crea un account a partecipare alla conversazione.
- Pinna
- Autore della discussione
- Moderator
Riduci
Di più
- Messaggi: 1010
- Ringraziamenti ricevuti 107
Moderatori: Mauro Laurenti, Pinna, StefA, Matteo Garia
Registrati al sito
Accedi a tutte le risorse e articoli non visibili pubblicamente, puoi registrarti con pochi passi.