Home Forum MICROCONTROLLORI PIC18F & LCD 2X16

Questo argomento contiene 3 risposte, ha 2 partecipanti, ed è stato aggiornato da  lucagiuliodori 3 anni, 4 mesi fa.

Stai vedendo 4 articoli - dal 1 a 4 (di 4 totali)
  • Autore
    Articoli
  • #57829

    rictec
    Membro

    Salve, sono alle prime armi con il PIC. Ho a disposizione un PIC18F4520 e una scheda PICDEM2+. Programmo con C18 in ambiente MPLAB. Vorrei imparare a scrivere qlc su un LCD 2×16 della Hitachi. Guardando qualche esempio on line ho scopiazzato un sorgente che mi pareva facesse al caso mio: ho modificato la parte del file xlcd.h per quanto riguarda il dispositivo che io utilizzo. Morale: quando trasferisco si accende solo la prima riga dell’lcd nonfacendomi visualizzare proprio nulla. Utilizzo un quarzo a 4MHz e non modifico il clock. C’è qualcuno che può aiutarmi? Posto per maggior chiarezza il codice del main.c e del xlc.h che ho personalmente modificato.

    ===========main.c
    # include # include
    # include
    # include
    /*# pragma config FOSC = AS, FCMEN = OFF, IESO = OFF
    # pragma config PWRT = ON, BOR = OFF, BORV = 0
    # pragma config WDT = OFF
    # pragma config MCLRE = OFF, LPT1OSC = OFF, PBADEN = OFF, CCP2MX = OFF
    # pragma config STVREN = OFF, LVP = OFF, XINST = OFF, DEBUG = OFF
    # pragma config CP0 = OFF, CP1 = OFF, CP2 = OFF
    # pragma config CPB = OFF, CPD = OFF
    # pragma config WRT0 = OFF, WRT1 = OFF, WRT2 = OFF
    # pragma config WRTB = OFF, WRTC = OFF, WRTD = OFF
    # pragma config EBTR0 = OFF, EBTR1 = OFF, EBTR2 = OFF
    # pragma config EBTRB = OFF */

    void DelayFor18TCY (void) {
    Nop ();
    Nop ();
    Nop ();
    Nop ();
    Nop ();
    Nop ();
    Nop ();
    Nop ();
    Nop ();
    Nop ();
    Nop ();
    Nop ();

    }

    void DelayPORXLCD (void) {
    Delay1KTCYx (15);
    return;

    }
    void DelayXLCD (void) {
    Delay1KTCYx (5);
    return;

    }

    void main (void) {
    ADCON1= 0x0F;
    TRISD = 0x00;

    OpenXLCD (FOUR_BIT & LINES_5X7);
    BusyXLCD ();
    while (1){

    char mybuff [10];
    putrsXLCD( “ciao” );
    putsXLCD( mybuff );

    }
    }

    ================= xlc.h
    #ifndef __XLCD_H
    #define __XLCD_H
    #include “p18cxxx.h”
    “include “p18f4520.h”
    /* PIC18 XLCD peripheral routines.
    *
    * Notes:
    * – These libraries routines are written to support the
    * Hitachi HD44780 LCD controller.
    * – The user must define the following items:
    * – The LCD interface type (4- or 8-bits)
    * – If 4-bit mode
    * – whether using the upper or lower nibble
    * – The data port
    * – The tris register for data port
    * – The control signal ports and pins
    * – The control signal port tris and pins
    * – The user must provide three delay routines:
    * – DelayFor18TCY() provides a 18 Tcy delay
    * – DelayPORXLCD() provides at least 15ms delay
    * – DelayXLCD() provides at least 5ms delay
    */

    /* Interface type 8-bit or 4-bit
    * For 8-bit operation uncomment the #define BIT8
    */
    /* #define BIT8 */

    /* When in 4-bit interface define if the data is in the upper
    * or lower nibble. For lower nibble, comment the #define UPPER
    */
    /* #define UPPER */

    # define DATA_PORT PORTD
    # define TRIS_DATA_PORT TRISD

    / * CTRL_PORT definisce il porto in cui le linee di controllo sono collegati.
    * Questi sono solo i campioni, a cambiare i tuoi applicazione.
    * /
    # define RW_PIN LATDbits.LATD5 / * PORT per RW * /
    # define TRIS_RW TRISDbits.TRISD5 / * TRIS per RW * /

    # define LATDbits.LATD4 RS_PIN / * PORT per RS * /
    # define TRISDbits.TRISD4 TRIS_RS / * TRIS per RS * /

    # define E_PIN LATDbits.LATD6 / * PORT per E * /
    # define TRIS_E TRISDbits.TRISD6 / * TRIS per E * /

    /* Display ON/OFF Control defines */
    #define DON 0b00001111 /* Display on */
    #define DOFF 0b00001011 /* Display off */
    #define CURSOR_ON 0b00001111 /* Cursor on */
    #define CURSOR_OFF 0b00001101 /* Cursor off */
    #define BLINK_ON 0b00001111 /* Cursor Blink */
    #define BLINK_OFF 0b00001110 /* Cursor No Blink */

    /* Cursor or Display Shift defines */
    #define SHIFT_CUR_LEFT 0b00000100 /* Cursor shifts to the left */
    #define SHIFT_CUR_RIGHT 0b00000101 /* Cursor shifts to the right */
    #define SHIFT_DISP_LEFT 0b00000110 /* Display shifts to the left */
    #define SHIFT_DISP_RIGHT 0b00000111 /* Display shifts to the right */

    /* Function Set defines */
    #define FOUR_BIT 0b00101100 /* 4-bit Interface */
    #define EIGHT_BIT 0b00111100 /* 8-bit Interface */
    #define LINE_5X7 0b00110000 /* 5×7 characters, single line */
    #define LINE_5X10 0b00110100 /* 5×10 characters */
    #define LINES_5X7 0b00111000 /* 5×7 characters, multiple line */

    In che cosa sbaglio?
    Grazie in anticipo.

    #69367

    rictec
    Membro

    mi sono accorto dell’errore negli #include.
    Naturalmente:
    # include # include
    # include
    # include

    #69368

    rictec
    Membro

    # include “p18f4520.h”
    # include “stdio.h”
    # include “delays.h”
    # include “xlcd.h”

    anche nel primo post naturalmente xlc si deve intendere come xlcd

    Grazie ancora.

    #69408

    Ciao,

    come prima cosa ti consiglio di fare la famosa “prova dello stupido” (senza offese chiaramente) che consiste nel verificare l’hardware è collegato correttamente (sempre che tu già non l’abbia già fatto).
    Fatta questa verifica ti consiglio di prendere i sorgenti direttamente dal sito della Microchip: scarichi il framework per i PIC18 e li dovresti trovare anche gli esempi già implementati da Microchip. Solitamente il framework che danno loro funziona, magari ci devi rimettere mano per adattarlo alle tue esigenze ma seguendo la guida data in dotazione di solita si riesce a farlo funzionare.

    Analizzare così il codice che hai postato la vedo una cosa un po’ difficile, prova con quello che ti ho suggerito e facci sapere.

    Ciao!

Stai vedendo 4 articoli - dal 1 a 4 (di 4 totali)

Devi aver eseguito l’accesso per poter rispondere a questa discussione.