Ho tentato di leggere le informazioni contenute in una posizione DDRAM, ma il risultato che mi torna, se non ho capito male,è la posizione CGRAM 0x08.
La funzione di lettura che ho scritto è la seguente:
- Codice: Seleziona tutto
char Lettura(unsigned char nBit, unsigned char DatoComando)
{
// risultato da ritornare alla fine
char Ritorno = 0x00;
// imposta tutto in input
STLCD_D0_DIR = 1;
STLCD_D1_DIR = 1;
STLCD_D2_DIR = 1;
STLCD_D3_DIR = 1;
STLCD_D4_DIR = 1;
STLCD_D5_DIR = 1;
STLCD_D6_DIR = 1;
STLCD_D7_DIR = 1;
// 8bit
if (nBit == 0)
{
STLCD_DRW = 1;
STLCD_DRS = DatoComando;
STLCD_DE = 1;
Ritardo(1);
//se il valore del bit è true allora è 1 altrimenti è 0
if(STLCD_D7) Ritorno | 0x80;
if(STLCD_D6) Ritorno | 0x40;
if(STLCD_D5) Ritorno | 0x20;
if(STLCD_D4) Ritorno | 0x10;
if(STLCD_D3) Ritorno | 0x08;
if(STLCD_D2) Ritorno | 0x04;
if(STLCD_D1) Ritorno | 0x02;
if(STLCD_D0) Ritorno | 0x01;
STLCD_DE = 0;
Ritardo(1);
} else {
//4bit
STLCD_DRW = 1;
STLCD_DRS = DatoComando;
STLCD_DE = 1;
Ritardo(1);
if(STLCD_D7)Ritorno | 0x80;
if(STLCD_D6)Ritorno | 0x40;
if(STLCD_D5)Ritorno | 0x20;
if(STLCD_D4)Ritorno | 0x10;
STLCD_DE = 0;
Ritardo(1);
STLCD_DRW = 1;
STLCD_DRS = DatoComando;
STLCD_DE = 1;
// Seconda parte
//Ritardo(1);
if(STLCD_D7)Ritorno | 0x08;
if(STLCD_D6)Ritorno | 0x04;
if(STLCD_D5)Ritorno | 0x02;
if(STLCD_D4)Ritorno | 0x01;
STLCD_DE = 0;
Ritardo(1);
}
return Ritorno;
I ritardi li ho aggiunti dopo, per scrupolo, anche se mi sembra di aver letto sul datasheet che in lettura non c'era bisogno.
Anche cambiando posizione del cursore, il dato stampato è sempre lo stesso.
Ulteriore cosa, non uso i latch LAT ma PORTbits.
Ho provato prima con i latch, poi per fare una prova ho lasciato i PORTbits.
questo è il codice prima di richiamare la funzione lettura:
- Codice: Seleziona tutto
Caricamento(BIT4,Comando,0b11000000);// DDRAM, inizio seconda riga
SuperDelay(); ClrWdt();
Caricamento(BIT4,Dato,'C');
SuperDelay(); ClrWdt();
Caricamento(BIT4,Comando,0b11000000);// DDRAM, inizio seconda riga
SuperDelay(); ClrWdt();
RAMLETTURA = Lettura(BIT4,Dato);
Caricamento(BIT4,Dato,RAMLETTURA);
SuperDelay();
// RAMLETTURA equivale a 0x08, ed ecco qui sotto la prova.
Caricamento(BIT4,Dato,0x08);
SuperDelay();
Se vi chiedete come ho scoperto il lavore di ramlettura... ho utilizzato un sistema rudimentale. ho impostato questo:
- Codice: Seleziona tutto
char test = 0;
//char im[] = {1};
while(test!=0b11111111)
{
Caricamento(BIT4,Comando,ClearDisplay);
Ritardo(1);
test++;
//im[0] = im[0]++;
Caricamento(BIT4,Dato,test);
//CaricaStringa(im,BIT4);
SuperDelay();
ClrWdt();
e ho avuto culo perché ho dovuto contare solo fino ad OTTO

Elettrotecnica e non solo (admin)
Un gatto tra gli elettroni (IsidoroKZ)
Esperienza e simulazioni (g.schgor)
Moleskine di un idraulico (RenzoDF)
Il Blog di ElectroYou (webmaster)
Idee microcontrollate (TardoFreak)
PICcoli grandi PICMicro (Paolino)
Il blog elettrico di carloc (carloc)
DirtEYblooog (dirtydeeds)
Di tutto... un po' (jordan20)
AK47 (lillo)
Esperienze elettroniche (marco438)
Telecomunicazioni musicali (clavicordo)
Automazione ed Elettronica (gustavo)
Direttive per la sicurezza (ErnestoCappelletti)
EYnfo dall'Alaska (mir)
Apriamo il quadro! (attilio)
H7-25 (asdf)
Passione Elettrica (massimob)
Elettroni a spasso (guidob)
Bloguerra (guerra)
