Scrittura e lettura eeprom esterna scheda Freedom

12 Anni 6 Mesi fa - 12 Anni 6 Mesi fa #1 da Pinna
Ciao a tutto il forum. Scrivo queste righe, (grazie Mauro per avermi spinto a farlo), con lo spirito di condivisione e nella speranza che possano essere di aiuto a qualcuno, come me, alle prime armi con i pic18 (non che con i pic16 sia un cranio). Da una decina di giorni ho iniziato, con l'aiuto della Freedom, lo studio del tutorial "c18 step by step". Mi sono soffermato, in particolare, sul capitolo XIII e sull'utilizzo del modulo I2C. Dopo avere studiato l'esempio della scrittura di un byte sulla eeprom a bordo della freedom e sulla sua successiva lettura, visualizzata con ii led, ho cercato su internet un esempio che facesse la stessa cosa, ma che visualizzasse il dato (anzi molti dati o stringhe) sul display lcd. Non avendo trovato nulla, ho deciso di provare a scrivere io stesso un firmware che facesse questo, modificando il sorgente originale di Mauro ed utilizzando le librerie Laurtec di supporto al tutorial. Il programma, ovviamente testato sulla Freedom e che definirei allo stato moooolto embrionale, scrive due parole sulla 24LC32, le legge subito dopo la scrittura e le visualizza sulla prima riga del display. Le due parole sono dichiarate su array monodimensionale, sia come valore in esadecimale per singolo carattere, sia come stringa. Chi è molto avanti nella programmazione troverà sicuramente degli errori o sarà a conoscenza di altri modi più semplici per gestire in questo modo le eeprom esterne per cui ben vengano critiche o suggerimenti.
Prova Scrittura eeprom ARRAY.rar

Chi vola vale, chi vale vola, chi non vola è un vile
Ultima Modifica 12 Anni 6 Mesi fa da Pinna. Motivo: edit: NON RIESCO AD ALLEGARE IL FILE RAR O I SINGOLI FILE DEL PROGETTO

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

  • Pinna
  • Avatar di Pinna
  • Moderator
  • Moderator
Di più
12 Anni 6 Mesi fa #2 da Pinna
In attesa di capire come allegare tutta la cartella allego il main. Nel compilare il progettp includere anche LCD_44780.h, i2cEEPROM.h, delay.h, LCD_44780.LIB, i2cEEPROM.LIB, delay.LIB



/*Programma di esempio, gestito in I2C, che scrive una stringa sulla eeprom esterna della scheda freedom,
ne legge il contenuto e lo visualizza sul display lcd. Si è fatto uso di un array monodimensionale.
(per quelli bidimensionali mi sto attrezzando!!!!!)

Il programma funziona anche sostituendo la stringa con i singoli caratteri espressi in esadecimale.

NOTA: Dopo avere fatto il build all del progetto, dare un colpo di erase prima della programmazione. Ho notato
che a volte l'eeprom non viene scritta e mantiene in memoria i valori dovuti alla precedente programmazione.
In altre parole, non fidarsi dell'erase che viene effettuato in automatico prima della programmazione.


Tratto da un lavoro di Mauro Laurenti
*/

#include <p18f4550.h>

#define LCD_DEFAULT
#include "LCD_44780.h"
#include "i2cEEPROM.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


// Variabile che definisce la grandezza dell'array
#define ADDRESS 16

// Variabile per salvare il dato di ritorno
unsigned char data = 0;

// Contatore per le celle di memoria della eeprom
unsigned char i = 0;

// Definizione dell'array ESADECIMALE della frase "WRITE COMPLETED"
//unsigned char mioArray []= {0x57,0x52,0x49,0x54,0x45,0x20,0X20,0x43,0x4F,0x4D,0x50,0x4C,0x45,0x54,0x45,0x44};

// Definizione dell'array STRINGA
unsigned char mioArray []="SCRITTURA FINITA";


void main (void){

// 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_ON);
SSPADD = 12;

/*********************************** SCRITTURA ****************************************************/

// Inizializzo il mio Array
for (i = 0; i < ADDRESS; i++) { /* per colpa della mancanza delle parentesi grafe, leggi la mia
infinita sbadataggine, non scriveva nulla: un giorno perso!!!
*/

// Scrivo nelle locazioni di memoria il contenuto dell'array
writeI2C_EEPROM (0xA0, i, mioArray);
delay_ms(10);

}

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

OpenLCD (20);
BacklightLCD (TURN_ON);

/*********************************** LETTURA ****************************************************/
// Inizializzo il mio Array
for (i = 0; i < ADDRESS; i++)
mioArray = i;

for (i=0; i < ADDRESS; i++) {

// Leggo le locazioni di memoria in cui sono contenuti i caratteri. Per fare questo ho dovuto levare
// l'operatore &
readI2C_EEPROM (0xA0, mioArray, data);
delay_ms(10);
WriteVarLCD (data);

}

// Ciclo infinito
while (1) {

}
}

Chi vola vale, chi vale vola, chi non vola è un vile

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

  • Pinna
  • Avatar di Pinna
  • Moderator
  • Moderator
Di più
12 Anni 6 Mesi fa #3 da Pinna
Ciao ancora a tutti. Provo ad allegare il file compresso con winzip. Speriamo bene

File allegato:

Nome del file: ProvaScrit...RRAY.zip
Dimensione del file:47 KB

Chi vola vale, chi vale vola, chi non vola è un vile
Allegati:

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

  • Pinna
  • Avatar di Pinna
  • Moderator
  • Moderator
Di più
12 Anni 6 Mesi fa #4 da Mauro Laurenti
Risposta da Mauro Laurenti al topic Re: Scrittura e lettura eeprom esterna scheda Freedom
Molto bene,
continua cosi!
L'appetito verrà mangiando!

Saluti,

Mauro

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

  • Mauro Laurenti
  • Avatar di Mauro Laurenti
  • Moderator
  • Moderator
Di più
Moderatori: Mauro Laurenti

Registrati al sito

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

Registrati al sito LaurTec.

Login