Lettura EEPROM 24LC256 montata
- Lello Guidi
- Autore della discussione
- Platino Utente
Less
Di più
6 Anni 10 Mesi fa #1
da Lello Guidi
Lettura EEPROM 24LC256 montata è stato creato da Lello Guidi
Ho un problema con un semplice programma per leggere la 24LC256 montata sulla Freedom II.
Il LCD non visualizza niente, neanche la intestazione con il nome del programma e la data.
Durante il "Build" mi da degli errori di "main.c:45: warning: (357) illegal conversion of integer to pointer".
Non penso che siano quelli che creano problemi di visualizzazioni.
Anche spegnendo il tutto e riaccendendo rimane il display acceso e basta.
Non vedo neanche lampeggiare gli otto led rossi, cosa che succede normalmente avendoli abilitati tramite il ponticello.
Il listato è il seguente:
Saluti
Lello
Il LCD non visualizza niente, neanche la intestazione con il nome del programma e la data.
Durante il "Build" mi da degli errori di "main.c:45: warning: (357) illegal conversion of integer to pointer".
Non penso che siano quelli che creano problemi di visualizzazioni.
Anche spegnendo il tutto e riaccendendo rimane il display acceso e basta.
Non vedo neanche lampeggiare gli otto led rossi, cosa che succede normalmente avendoli abilitati tramite il ponticello.
Il listato è il seguente:
Code:
/*
* File: main.c
* Author: Lello Guidi
* Lettura 24LC256
* MPLABX IDE v4.05 e XC8 v1.45
* LTlib v4.0.4
* PIC18F4550
* clock: 20MHz
* Freedom II
* Created on February 13, 2018, 12:06 PM
*/
#include <xc.h>
#include <LTlib_delay.h>
#include <LTlib_delay.c>
#include "module_I2C.h"
#include "module_I2C.c"
#include <module_IO.h>
#include <module_IO.c>
#include <LCD_44780.h>
#include <LCD_44780.c>
#include "I2C_EEPROM.h"
#include "I2C_EEPROM.c"
#include "settings.h"
void main(void) {
settings();
IO_set_all_ports_as_inputs();
IO_set_port_direction(IO_PORTD, IO_ALL_PORT_OUTPUT);
LCD_initialize(20);
LCD_backlight(LCD_TURN_ON_LED);
LCD_cursor(LCD_TURN_OFF_CURSOR, LCD_BLINKING_OFF);
LCD_write_message ("Lettura 24LC256");
LCD_goto_line(2);
LCD_write_message ("13 febbraio 2018");
delay_s(2);
LCD_clear();
I2C_EEPROM_initialize (100);
delay_ms(10);
datoLo = I2C_EEPROM_read_byte (deviceId, deviceAdr, valore);// cella 0
delay_ms(5);
deviceAdr++;
datoHi = I2C_EEPROM_read_byte (deviceId, deviceAdr, valore);// cella 1
delay_ms(5);
LCD_goto_line(1);
LCD_write_message ("cella: ");
LCD_goto_xy(8,1);
LCD_write_integer (deviceAdr, 4, LCD_ZERO_CLEANING_OFF);
LCD_write_message (" ");
LCD_goto_line(2);
LCD_write_message ("dato: ");
LCD_goto_xy(7,2);
valore = datoLo + (datoHi<<8);
LCD_write_integer (valore, 4, LCD_ZERO_CLEANING_OFF);
delay_ms(100);
while(1){
if (!BTN_UP){
delay_ms(100);
if (!BTN_UP){
deviceAdr++;
datoLo = I2C_EEPROM_read_byte (deviceId, deviceAdr, valore);
delay_ms(5);
deviceAdr++;
datoHi = I2C_EEPROM_read_byte (deviceId, deviceAdr, valore);
delay_ms(5);
LCD_clear();
}
}
if(!BTN_DN){
delay_ms(100);
if (!BTN_DN){
deviceAdr--;
deviceAdr--;
deviceAdr--;
datoLo = I2C_EEPROM_read_byte (deviceId, deviceAdr, valore);
delay_ms(5);
deviceAdr++;
datoHi = I2C_EEPROM_read_byte (deviceId, deviceAdr, valore);
delay_ms(5);
LCD_clear();
}
}
LCD_goto_line(1);
LCD_write_message ("cella: ");
LCD_goto_xy(8,1);
LCD_write_integer (deviceAdr, 4, LCD_ZERO_CLEANING_OFF);
LCD_write_message (" ");
LCD_goto_line(2);
LCD_write_message ("dato: ");
LCD_goto_xy(7,2);
valore = datoLo + (datoHi<<8);
LCD_write_integer (valore, 4, LCD_ZERO_CLEANING_OFF);
delay_ms(100);
}
}
Saluti
Lello
Si prega Accesso o Crea un account a partecipare alla conversazione.
- Lello Guidi
- Autore della discussione
- Platino Utente
6 Anni 10 Mesi fa #2
da Lello Guidi
Risposta da Lello Guidi al topic Lettura EEPROM 24LC256 montata
Adesso la Freedom II non va neanche con il semplice eseguibile di test per la Freedom II.
Ho caricato un'altro programma e vedo che gira, ma il' LCD rimane solo acceso senza nessun carattere visualizzato.
Sostituito LCD ma il risultato non cambia.
Si sono forse fottute le porte D dei comandi dell' LCD?
Saluti
Lello
Ho caricato un'altro programma e vedo che gira, ma il' LCD rimane solo acceso senza nessun carattere visualizzato.
Sostituito LCD ma il risultato non cambia.
Si sono forse fottute le porte D dei comandi dell' LCD?
Saluti
Lello
Si prega Accesso o Crea un account a partecipare alla conversazione.
6 Anni 10 Mesi fa #3
da Mauro Laurenti
Risposta da Mauro Laurenti al topic Lettura EEPROM 24LC256 montata
Salve Lello,
dal programma vedo che stai usando il PIC18F4550, potresti confermare che effettivamente sulla scheda hai quel PIC montato?
Visto che stavi lavorando su diversi PIC, mai dire mai...
Puoi caricare il file .hex direttamente nel PIC18F4550 senza compilare il programma?
Accertati di mettere i jumper come riportato nella sezione dei test della documentazione.
La porta PORTD si potrebbe rompere se hai creato dei cortocircuiti sui pin, ma non sempre al verificarsi di questi eventi si rompe, visto che il regolatore 7805, in caso di cortocircuito abbassa la tensione.
Saluti,
Mauro
dal programma vedo che stai usando il PIC18F4550, potresti confermare che effettivamente sulla scheda hai quel PIC montato?
Visto che stavi lavorando su diversi PIC, mai dire mai...
Puoi caricare il file .hex direttamente nel PIC18F4550 senza compilare il programma?
Accertati di mettere i jumper come riportato nella sezione dei test della documentazione.
La porta PORTD si potrebbe rompere se hai creato dei cortocircuiti sui pin, ma non sempre al verificarsi di questi eventi si rompe, visto che il regolatore 7805, in caso di cortocircuito abbassa la tensione.
Saluti,
Mauro
Si prega Accesso o Crea un account a partecipare alla conversazione.
- Lello Guidi
- Autore della discussione
- Platino Utente
6 Anni 10 Mesi fa - 6 Anni 10 Mesi fa #4
da Lello Guidi
Risposta da Lello Guidi al topic Lettura EEPROM 24LC256 montata
Ho fatto le verifiche che mi hai consigliato era tutto Ok.
Allora ho sostituito il 18F4550 e ha ripreso a funzionare ma come entra nel "while(1)" non visualizza niente.
In fondo ho aggiunto un led per visualizzare se esegue il programma ma il Led rimane spento.
Ho cambiato anche il listato della pressione dei due tasti ma niente.
Allego il listato:
Inoltre a questo codice "datoLo=I2C_EEPROM_read_byte (EEPROM_address, memory_address, read_data);// cella 0" mi da errore " warning: (357) illegal conversion of integer to pointer".
A questo codice " buzzer = 1;" mi da errore "warning: (1385) variable "_RC0" is deprecated (declared at /Applications/microchip/xc8/v1.45/include/pic18f4550.h:9895).
Mi sembra di aver dichiarato correttamente le variabili e non so più come risolvere la cosa.
Ho bisogno di un consiglio.
Saluti
Lello
Allora ho sostituito il 18F4550 e ha ripreso a funzionare ma come entra nel "while(1)" non visualizza niente.
In fondo ho aggiunto un led per visualizzare se esegue il programma ma il Led rimane spento.
Ho cambiato anche il listato della pressione dei due tasti ma niente.
Allego il listato:
Code:
/*
* File: main.c
* Author: Lello
* Lettura 24LC256
* MPLABX IDE v4.05 e XC8 v1.45
* LTlib v4.0.4
* PIC18F4550
* clock: 20MHz
* Freedom II
* Created on February 14, 2018, 12:06 PM
*/
#include <xc.h>
#include <LTlib_delay.h>
#include <LTlib_delay.c>
#include "module_I2C.h"
#include "module_I2C.c"
#include <module_IO.h>
#include <module_IO.c>
#include <LCD_44780.h>
#include <LCD_44780.c>
#include "I2C_EEPROM.h"
#include "I2C_EEPROM.c"
#define LEDrosso RD0
#define buzzer RC0
#define BUTTON_PRESSED 0X00
//#define BTN_UP RB4 // pulsante incremento btn1
//#define BTN_DN RB5 // pulsante decremento btn2
void main(void) {
int EEPROM_address = 0xA0; // Indirizzo della 24LC256 esterna
int memory_addressMax=0x7FF0; // numero massimo di memorizzazioni
int memory_address = 0x00; // Indirizzo della cella da leggere
unsigned char write_data = 0x01;
unsigned int read_data; // dato
unsigned int datoLo; // byte basso
unsigned int datoHi; // byte alto
IO_set_all_ports_as_inputs();
IO_set_port_direction(IO_PORTD, IO_ALL_PORT_OUTPUT);
IO_set_port_direction(IO_PORTC, IO_BIT0_OUT);
IO_set_port_direction(IO_PORTB, IO_BIT4_IN + IO_BIT5_IN);
IO_enable_pull_up_resistors (IO_PORTB, IO_BIT4 + IO_BIT5);
LCD_initialize(20);
LCD_backlight(LCD_TURN_ON_LED);
LCD_cursor(LCD_TURN_OFF_CURSOR, LCD_BLINKING_OFF);
LCD_write_message ("Lettura 24LC256");
LCD_goto_line(2);
LCD_write_message ("14 febbraio 2018");
delay_s(2);
LCD_clear();
I2C_EEPROM_initialize (100);
datoLo=I2C_EEPROM_read_byte (EEPROM_address, memory_address, read_data);// cella 0
memory_address++;
datoHi = I2C_EEPROM_read_byte (EEPROM_address, memory_address, read_data);// cella 1
read_data = datoLo + (datoHi<<8);
LCD_goto_line(1);
LCD_write_message ("cella: ");
LCD_goto_xy(8,1);
LCD_write_integer (memory_address, 4, LCD_ZERO_CLEANING_OFF);
LCD_goto_line(2);
LCD_write_message ("dato: ");
LCD_goto_xy(7,2);
read_data = datoLo + (datoHi<<8);
LCD_write_integer (read_data, 4, LCD_ZERO_CLEANING_OFF);
delay_s(1);
while(1){
if(IO_read_port_bit(IO_PORTB,IO_BIT4)== BUTTON_PRESSED){
memory_address++;
datoLo = I2C_EEPROM_read_byte (EEPROM_address, memory_address, read_data);
delay_ms(5);
memory_address++;
datoHi = I2C_EEPROM_read_byte (EEPROM_address, memory_address, read_data);
delay_ms(5);
buzzer = 1;
delay_ms(100);
buzzer = 0;
}
if(IO_read_port_bit(IO_PORTB,IO_BIT4)== BUTTON_PRESSED){
memory_address--;
memory_address--;
memory_address--;
datoLo = I2C_EEPROM_read_byte (EEPROM_address, memory_address, read_data);
delay_ms(5);
memory_address++;
datoHi = I2C_EEPROM_read_byte (EEPROM_address, memory_address, read_data);
delay_ms(5);
buzzer = 1;
delay_ms(100);
buzzer = 0;
}
LCD_goto_line(1);
LCD_write_message ("cella: ");
LCD_goto_xy(8,1);
LCD_write_integer (memory_address, 4, LCD_ZERO_CLEANING_OFF);
LCD_write_message (" ");
LCD_goto_line(2);
LCD_write_message ("dato: ");
LCD_goto_xy(7,2);
read_data = datoLo + (datoHi<<8);
LCD_write_integer (read_data, 4, LCD_ZERO_CLEANING_OFF);
LEDrosso = 1;
delay_s(1);
LEDrosso = 0;
}
}
Inoltre a questo codice "datoLo=I2C_EEPROM_read_byte (EEPROM_address, memory_address, read_data);// cella 0" mi da errore " warning: (357) illegal conversion of integer to pointer".
A questo codice " buzzer = 1;" mi da errore "warning: (1385) variable "_RC0" is deprecated (declared at /Applications/microchip/xc8/v1.45/include/pic18f4550.h:9895).
Mi sembra di aver dichiarato correttamente le variabili e non so più come risolvere la cosa.
Ho bisogno di un consiglio.
Saluti
Lello
Ultima Modifica 6 Anni 10 Mesi fa da Lello Guidi. Motivo: errore di ortografia
Si prega Accesso o Crea un account a partecipare alla conversazione.
- Cosimix
- Elit Utente
Less
Di più
- Messaggi: 198
- Ringraziamenti ricevuti 26
6 Anni 10 Mesi fa #5
da Cosimix
Risposta da Cosimix al topic Lettura EEPROM 24LC256 montata
Salve!
Da una rapida occhiata, hai provato a sostituire la tua definizione
con l'inizializzazione di una variabile costante?
E' probabile che gli if non vengano mai eseguiti..
Saluti,
Cosimo
Da una rapida occhiata, hai provato a sostituire la tua definizione
#define BUTTON_PRESSED 0X00
con l'inizializzazione di una variabile costante?
E' probabile che gli if non vengano mai eseguiti..
Saluti,
Cosimo
I seguenti utenti hanno detto grazie : Lello Guidi
Si prega Accesso o Crea un account a partecipare alla conversazione.
Moderatori: Mauro Laurenti, StefA
Registrati al sito
Accedi a tutte le risorse e articoli non visibili pubblicamente, puoi registrarti con pochi passi.
Forum - Ultimi messaggi
-
- Aggiornamento sito completato
- da Mauro Laurenti
-
- registro a scorrimento PIPO in cascata
- da Mauro Laurenti
-
- FORMULA PER LINEARIZZARE TERMOCOPIA
- da Mauro Laurenti
-
- Spostamento impronte
- da Mauro Laurenti