Jump to content
PLC Forum


Sign in to follow this  
Giorgio Demurtas

Gestione Lcd Con Pic - routine che non funziona

Recommended Posts

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites
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.

Share this post


Link to post
Share on other sites
Jtag

RW è a massa?

Edited by Jtag

Share this post


Link to post
Share on other sites
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

Share this post


Link to post
Share on other sites
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.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

×
×
  • Create New...