- Messaggi: 43
- Ringraziamenti ricevuti 2
CGRAM caratteri personalizzati
- iv3ynb
-
Autore della discussione
- Anziano Utente
-
Less
Di più
10 Anni 2 Mesi fa - 10 Anni 2 Mesi fa #1
da iv3ynb
non esistono domande stupide, ma le risposte...
CGRAM caratteri personalizzati è stato creato da iv3ynb
Ciao a tutti,
una cosa interessante è la programmazione degli 8 caratteri personalizzati, che nella libreria LCD manca, per tanto ho tentato di modificarla io, dato che lo scopo è imparare!!! Ahimè... qui devo un attimo chiedere una mano.
Risultato: XC8 mi compila il programma senza warning, scrive sull'LCD al posto giusto... purtroppo scrive caratteri che non sono quelli da me desiderati. Come faccio a fargli scirvere i caratteri desiderati???
Invio sotto il codice dei miei *.c (non allego quelli che funzionano come kpad.c ed encoder.c o che sono in libreria ma non ho modificato, per non complicare la lettura) così qualcuno mi può aiutare a capire dove sbaglio.
Inserisco in colore ROSSO alcune domande sul codice...
Ho usato come esempio le librerie di settorezero.
Grazie in anticipo per l'aiuto
Matteo IV3YNB
AGGIORNAMENTO: siccome mi sono accorto di un errore nel listato e di un ragionamento errato, tento di risolvere e poi magari riscrivo il post... grazie e a chi mi ha letto !!!
certo che... è dura !!!

Matteo IV3YNB
una cosa interessante è la programmazione degli 8 caratteri personalizzati, che nella libreria LCD manca, per tanto ho tentato di modificarla io, dato che lo scopo è imparare!!! Ahimè... qui devo un attimo chiedere una mano.
Risultato: XC8 mi compila il programma senza warning, scrive sull'LCD al posto giusto... purtroppo scrive caratteri che non sono quelli da me desiderati. Come faccio a fargli scirvere i caratteri desiderati???
Invio sotto il codice dei miei *.c (non allego quelli che funzionano come kpad.c ed encoder.c o che sono in libreria ma non ho modificato, per non complicare la lettura) così qualcuno mi può aiutare a capire dove sbaglio.
Inserisco in colore ROSSO alcune domande sul codice...
Ho usato come esempio le librerie di settorezero.
Grazie in anticipo per l'aiuto
Matteo IV3YNB
AGGIORNAMENTO: siccome mi sono accorto di un errore nel listato e di un ragionamento errato, tento di risolvere e poi magari riscrivo il post... grazie e a chi mi ha letto !!!
certo che... è dura !!!






Matteo IV3YNB
non esistono domande stupide, ma le risposte...
Ultima Modifica 10 Anni 2 Mesi fa da iv3ynb.
Si prega Accesso o Crea un account a partecipare alla conversazione.
10 Anni 2 Mesi fa #2
da Mauro Laurenti
Risposta da Mauro Laurenti al topic CGRAM caratteri personalizzati
...penso che pure Marconi abbia detto lo stesso! 
...e non aveva un Forum a cui rivolgersi!
Saluti,
Mauro

...e non aveva un Forum a cui rivolgersi!

Saluti,
Mauro
Si prega Accesso o Crea un account a partecipare alla conversazione.
- iv3ynb
-
Autore della discussione
- Anziano Utente
-
Less
Di più
- Messaggi: 43
- Ringraziamenti ricevuti 2
10 Anni 2 Mesi fa - 10 Anni 2 Mesi fa #3
da iv3ynb
non esistono domande stupide, ma le risposte...
Risposta da iv3ynb al topic CGRAM caratteri personalizzati
Ciao, mi devo arrendere... non trovo l'errore. Evidentemente non riesco a programmare gli 8 caratteri custom, eppure mi sembra di non dimenticare nessun passaggio...
Grazie a chi mi darà una mano
Matteo IV3YNB
Ecco i listati:
MODIFICHE EFFETTUATE ala fine di libreria LCD_44780.c
il codice sotto INCLUDE l'ENABLE !!!
MODIFICHE EFFETTUATE alla fine di libreria LCD_44780.h
Grazie a chi mi darà una mano

Matteo IV3YNB
Ecco i listati:
Code:
//*************************************
// CGRAM
// IV3YNB 03/2015
//*************************************
#include <XC.h>
#include "PIC18F4550_config.h"
#define LCD_DEFAULT
#include "LCD_44780.h"
#include "LCD_44780.c"
#include "delay.h"
#include "delay.c"
#include "custom_chars.c"
//*************************************
// PROTOTIPI DI FUNZIONE
//*************************************
int board_initialization (void) {
LATA = 0x00;
TRISA = 0xFF;
//LCD display on LATB
LATB = 0x00;
TRISB = 0b11000000;
LATC = 0x00;
TRISC = 0xFF;
LATD = 0x00;
TRISD = 0xFF;
LATE = 0x00;
TRISE = 0xFF;
//scrivi in CGRAM i carateri custom
custom_chars ();
}
//*************************************
//*************************************
// PROGRAMMA PRINCIPALE
//*************************************
//*************************************
int main (void) {
delay_ms(100);
board_initialization();
delay_ms(100);
LCD_initialize (20); //20 = 20MHz di clock
delay_ms(100);
LCD_write_message ("CGRAM TEST");
delay_ms(100);
LCD_goto_line (2);
LCD_cursor(1,1);
delay_ms(100);
//scrivi gli 8 caratteri custom
LCD_write_char (run);
LCD_write_char (lock);
LCD_write_char (filter);
LCD_write_char (warning);
LCD_write_char (rusd);
LCD_write_char (rusi);
LCD_write_char (rf);
LCD_write_char (slow);
//*************************************
// CICLO INFINITO
//*************************************
while (1) {
}
}
//*************************************
// custom characters library
// by IV3YNB 03/2015
//*************************************
#define run 0b00000000 //0
#define lock 0b00000001 //1
#define filter 0b00000010 //2
#define warning 0b00000011 //3
#define rusd 0b00000100 //4
#define rusi 0b00000101 //5
#define rf 0b00000110 //6
#define slow 0b00000111 //7
int custom_chars (void) {
LCD_set_CGRAM (run,20,16,31,5,12,50,19,0); //0= omino corre
LCD_set_CGRAM (lock,14,8,14,8,30,18,30,0); //1= chiave
LCD_set_CGRAM (filter,14,10,10,10,27,0,31,0); //2= filtro
LCD_set_CGRAM (warning,14,27,27,27,31,27,14,0); //3= punto escl negativo
LCD_set_CGRAM (rusd,15,5,5,9,17,31,17,0); //4= D cirillico
LCD_set_CGRAM (rusi,17,17,19,21,25,17,17,0); //5= I cirillico
LCD_set_CGRAM (rf,14,17,4,10,0,4,4,0); //6= radiofrequenza
LCD_set_CGRAM (slow,4,0,14,21,4,10,9,0); //7= omino cammina
}
MODIFICHE EFFETTUATE ala fine di libreria LCD_44780.c
Code:
//************************************************************
// LCD_send_cgram COMMAND
//************************************************************
void LCD_send_cgram (unsigned char value) {
unsigned char D3,D2,D1,D0;
LCD_RS = 0; //RS=0 PER MANDARE UN COMANDO !!!
// Splitting of the first nibble
D3 = (value) >> 7;
D2 = (value) >> 6;
D1 = (value) >> 5;
D0 = (value) >> 4;
il codice sotto INCLUDE l'ENABLE !!!
Code:
send_command_LCD (D3,D2,D1,D0);
// Splitting of the second nibble
D3 = (value) >> 3;
D2 = (value) >> 2;
D1 = (value) >> 1;
D0 = (value);
send_command_LCD (D3,D2,D1,D0);
}
//************************************************************
// custom char by IV3YNB
//************************************************************
void LCD_set_CGRAM (unsigned char pos, unsigned char byte0, unsigned char byte1, unsigned char byte2, unsigned char byte3, unsigned char byte4, unsigned char byte5, unsigned char byte6, unsigned char byte7){
LCD_send_cgram (0b00001000); //LCD off
LCD_clear ();
LCD_send_cgram (64+(pos*8)); //64 = char0 pos0 (64+(pos*8)) [b][color=#ff0000]prima posizione:64, poi +8[/color][/b]
LCD_send_cgram (byte0);
LCD_send_cgram (byte1);
LCD_send_cgram (byte2);
LCD_send_cgram (byte3);
LCD_send_cgram (byte4);
LCD_send_cgram (byte5);
LCD_send_cgram (byte6);
LCD_send_cgram (byte7);
LCD_send_cgram (0b00001000); //LCD on
LCD_clear ();
}
MODIFICHE EFFETTUATE alla fine di libreria LCD_44780.h
Code:
void LCD_send_cgram (unsigned char value);
#define SendCgram LCD_send_char
#define LCDsendcgram LCD_send_char
non esistono domande stupide, ma le risposte...
Ultima Modifica 10 Anni 2 Mesi fa da iv3ynb.
Si prega Accesso o Crea un account a partecipare alla conversazione.
- alfa75
-
- Platino Utente
-
Less
Di più
- Messaggi: 527
- Ringraziamenti ricevuti 86
10 Anni 2 Mesi fa - 10 Anni 2 Mesi fa #4
da alfa75
Risposta da alfa75 al topic CGRAM caratteri personalizzati
ciao iv3ynb sto tentando anche io di modificare la libreria per creare dei caratteri custom,e girellando per la rete ho scoperto che non tutti i controller dei display hanno spazi di ram vuota da personalizzare ,ad esempio i controller europei hanno tutta la ram occupata da caratteri standard e cirllici,gli unici che hanno spazi vuoti sono quelli di origine orientale come difatti il 44780,comunque è sempre meglio controllare il datasheet del display prima di perdere tempo a capire perchè non fa
Ultima Modifica 10 Anni 2 Mesi fa da alfa75.
Si prega Accesso o Crea un account a partecipare alla conversazione.
- iv3ynb
-
Autore della discussione
- Anziano Utente
-
Less
Di più
- Messaggi: 43
- Ringraziamenti ricevuti 2
10 Anni 2 Mesi fa #5
da iv3ynb
non esistono domande stupide, ma le risposte...
Risposta da iv3ynb al topic CGRAM caratteri personalizzati
Grazie alfa75, controllerò il datasheet, per sicurezza.
Il problema è che il display che sto usando, ovvero quello montato sulla easypic5 (scheda che ho modificato per poter programmare i PIC anche con il PicKIT3), ha sempre accettato 8 caratteri custom quando scrivevo in mikrobasic. Inoltre con un 16F877 montato su una mia schedina, programmato in C con le librerie di settorezero, tutto funzionava.
Il codice scritto per MPLABX e XC8 altro non è che la trasposizione del codice di settorezero sul 18F4550. Mi sembra non ci siano errori. All'inizio mi sembrava di aver messo un RS pari a 1 per scrivere i caratteri nella CGRAM, poi ho copiato il codice in libreria, rinominandolo, con l'unica differenza che stavolta RS sia pari a 0 per dare il comando al display di scrivere in CGRAM e non di inviare caratteri a video.
Mi viene ora in mente che possa essere tutta una questione di timing, visto che si parla di almeno 40uS per dare il comando.
Se non ricordo male, nella libreria Laurtech i delay sono esprimibili in secondi o in microsecondi, mentre su settorezero c'è il codice per ritardi in microsecondi e milisecondi (i secondi li fai a colpi di 1000ms). Dovrei mettere mano alla libreria anche per i microsecondi ( ? ) ma non sono molto ferrato in questo... nemmeno in ASM ero bravo a lavorare sui delay... è una mia pecca, lo ammetto.
Forse la cosa più veloce è provare le librerie di settorezero... meglio sarebbe, come dire... unirle :lol:
Purtroppo non ho avuto il tempo di provare tante soluzioni, ho piuttosto cercato di capire se il mio codice fosse corretto, e tale mi sembra: in aggiunta a quanto sopra, non sono molto pratico ancora di MPLABX (vedi uso dello stopwatch ecc...) e soprattutto ho la scheda sul mio banco al lavoro, dove vorrei usare il C per un progettino niente male per il mio lab...
e non solo per mio diletto
Perciò nel weekend non ho combinato nulla :silly: :sick: :blink:
Francamente preferivo il vecchio MPLAB... ma bisogna guardare al futuro.
Se qualcuno potesse dare un'occhiata al mi codice, gliene sarei davvero grato.
Matteo IV3YNB
P.S.: come si inserisce il codice in maniera corretta, nei messaggi nel forum? (intendo nella loro finestrella apposita... non trovo il comando)
Il problema è che il display che sto usando, ovvero quello montato sulla easypic5 (scheda che ho modificato per poter programmare i PIC anche con il PicKIT3), ha sempre accettato 8 caratteri custom quando scrivevo in mikrobasic. Inoltre con un 16F877 montato su una mia schedina, programmato in C con le librerie di settorezero, tutto funzionava.
Il codice scritto per MPLABX e XC8 altro non è che la trasposizione del codice di settorezero sul 18F4550. Mi sembra non ci siano errori. All'inizio mi sembrava di aver messo un RS pari a 1 per scrivere i caratteri nella CGRAM, poi ho copiato il codice in libreria, rinominandolo, con l'unica differenza che stavolta RS sia pari a 0 per dare il comando al display di scrivere in CGRAM e non di inviare caratteri a video.
Mi viene ora in mente che possa essere tutta una questione di timing, visto che si parla di almeno 40uS per dare il comando.
Se non ricordo male, nella libreria Laurtech i delay sono esprimibili in secondi o in microsecondi, mentre su settorezero c'è il codice per ritardi in microsecondi e milisecondi (i secondi li fai a colpi di 1000ms). Dovrei mettere mano alla libreria anche per i microsecondi ( ? ) ma non sono molto ferrato in questo... nemmeno in ASM ero bravo a lavorare sui delay... è una mia pecca, lo ammetto.

Purtroppo non ho avuto il tempo di provare tante soluzioni, ho piuttosto cercato di capire se il mio codice fosse corretto, e tale mi sembra: in aggiunta a quanto sopra, non sono molto pratico ancora di MPLABX (vedi uso dello stopwatch ecc...) e soprattutto ho la scheda sul mio banco al lavoro, dove vorrei usare il C per un progettino niente male per il mio lab...


Francamente preferivo il vecchio MPLAB... ma bisogna guardare al futuro.
Se qualcuno potesse dare un'occhiata al mi codice, gliene sarei davvero grato.
Matteo IV3YNB
P.S.: come si inserisce il codice in maniera corretta, nei messaggi nel forum? (intendo nella loro finestrella apposita... non trovo il comando)
non esistono domande stupide, ma le risposte...
Si prega Accesso o Crea un account a partecipare alla conversazione.
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.
Forum - Ultimi messaggi
-
- progetto can
- da marcelloraja
-
- MODULO GSM SIM900A
- da Mauro Laurenti
-
- Freedom III e compilazioni fallite
- da Mauro Laurenti
-
- Gestione degli errori su comunicazione seriale
- da Mauro Laurenti
-
- Timer0 e interrupt
- da Mauro Laurenti