Vai al contenuto
PLC Forum


Gestione Lcd Con Pic - routine che non funziona


Giorgio Demurtas

Messaggi consigliati

Giorgio Demurtas

Sto tentando di comandare un display 2x16 caratteri con un 16F84A e il compilatore PCW della CCS C. Il problema è che ho errori di compilazione nella routine lcd_mm.c quando compilo lcd_prova2.c

Il collegamento hardware è:

display - pic

RS - RB2

E - RB3

DB4 - RB4

DB5 - RB5

DB6 - RB6

DB7 - RB7

Son partito da una routine di gestione LCD di andrea bonzini,

http://www.web giorgio.it/files/lcd_bonzini.c

che ho modificato in

http://www.web giorgio.it/files/lcd_mm.c

per poter usare le linee del display anche su porte diverse (anche se adesso ho tutto sulla porta B ). Comunque, anche usando l'originale avevo un errore di compilazione.

Il programma principale è

http://www.web giorgio.it/files/lcd_prova2.c

Altri file inclusi sono

http://www.web giorgio.it/files/Delay.c

http://www.web giorgio.it/files/Delay.h

Mi servirebbe una mano a risolvere, anche cambiando routine di gestione LCD se ne avete una da passarmi.

grazie

Link al commento
Condividi su altri siti


ricambista2008

Ciao, se vuoi divertirti con il pic 16f84 e i display prova qui:

www.fisertek.it

oppure digita su google nel campo ricerca software picgenius

Picgenius e' un programma che ti permette di scrivere codice sorgente per molti pic senza essere esperto con un linguaggio comprensibile a tutti.

Io ho provato la demo che anche se limitata ti permette di fare alcune prove;poi se il programma ti soddisfa puoi contattare l'autore e con una modica cifra ottieni la licenza completa. biggrin.gif

Link al commento
Condividi su altri siti

Giorgio Demurtas

Ho risolto utilizzando la funzione lcd.c già a disposizione con il compilatore CCS C. smile.gif

Il programma è molto semplice e funziona:

#include <16F84.h>
#use delay(clock=4000000) // you must use this line becuse the LCD.C use the delay_us() functions
#fuses XT, PUT, NOWDT
#include <F:\pic\lcd_prova3\lcd.c>

void main() {

set_tris_a(0x00);
set_tris_b(0x00);

lcd_init();
lcd_gotoxy(1,1);
lcd_putc("Welcome to EGYPT");

} 

La funzione può usare la funzione rw (read-write), che a me non serve.

Eliminandola come letto qua http://www.edaboard.com/ftopic64934.html, anche se la compilazione va a buon fine, non riesco a usare il display.

Link al commento
Condividi su altri siti

Giorgio Demurtas

Si.

Butto un altra domanda: Come è la sintassi per scrivere sul display il valore di una variabile int16 ? lcd_putc("tempo: %u",variabile); ?

Ho anche trovato (e funziona) un altra routine, che di meglio di quella originale lcd.c può avere i pin che vanno al display su porte diverse, e i 4 di dati possono non essere consecutivi. Eccola: http://www.ccsinfo.com/forum/viewtopic.php?t=24661

Link al commento
Condividi su altri siti

  • 2 weeks later...
Giorgio Demurtas

Alla fine ci son riuscito.

http://www.ccsinfo.com/forum/viewtopic.php?t=33390

Ho usato la routine flex_lcd presa dal forum di CCS C.

Per scrivere una variabile int16 l'identificatore è %lu,

printf(lcd_putc, "\fseconds=%lu", numero);

mentre per una in virgola mobile (float) è

printf(lcd_putc, "\fseconds=%3.2f", numero);

3.2 significa tre cifre, e due decimali.

Link al commento
Condividi su altri siti

Crea un account o accedi per commentare

Devi essere un utente per poter lasciare un commento

Crea un account

Registrati per un nuovo account nella nostra comunità. è facile!

Registra un nuovo account

Accedi

Hai già un account? Accedi qui.

Accedi ora
×
×
  • Crea nuovo/a...