Lettura EEPROM 24LC256 montata

  • Lello Guidi
  • Autore della discussione
  • Platino Utente
  • Platino Utente
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:
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
  • Platino Utente
Di più
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

Si prega Accesso o Crea un account a partecipare alla conversazione.

  • Mauro Laurenti
  • Moderatore
  • Moderatore
Di più
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

Si prega Accesso o Crea un account a partecipare alla conversazione.

  • Lello Guidi
  • Autore della discussione
  • Platino Utente
  • Platino Utente
Di più
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:
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
  • Elit Utente
Di più
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

#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 LaurentiStefA

Registrati al sito

Accedi a tutte le risorse e articoli non visibili pubblicamente, puoi registrarti con pochi passi.

Registrati al sito LaurTec.