Libreria LCD e EasyUsb

8 Anni 4 Mesi fa #1 da Di_Fi
Libreria LCD e EasyUsb è stato creato da Di_Fi
Salve a tutti

sto cercando di utilizzare la scheda EasyUSb per visualizzare informazioni su un display LCD. Penso di aver collegato tutto come si deve. Alimento il display tramite il pin RC1 settato come uscita ad 1. Il Write è collegato a massa. e il contrasto regolato con un potenziomentro. Dato che voglio caricare tutto tramite USB ho utilizzato il framework della scheda che rimappa il reset vector. Ho inserito poi le librerie versione 3.3 e le righe:

unsigned char frase [] = "Hello World 2";

board_initialization ();

// Inizializzo il display LCD con quarzo a 20MHz
LCD_initialize (20);

LCD_backlight (LCD_TURN_ON_LED);

LCD_write_message ("Hello World 1");

LCD_goto_line (2);

LCD_write_string (frase);

ma quello che ottengo sono simboli senza significato. Dato che la rimappatura richiede il compilatore C18 non vorrei che le librerie non vadano bene, anche se, guardando il codice mi sembra che si tiene conto dell'eventualità che non si utilizzi l'XC8.

Ho provato a caricare con il pickit3 il programma di esempio capitolo 9 del tutorial su XC8 step By Step ma ottengo ancora simboli senza senso. Prima di testare ogni singola porzione di codice volevo sapere se è successo anche ad altri.

Grazie

Si prega Accedi o Crea un account a partecipare alla conversazione.

  • Di_Fi
  • New Member
  • New Member
Di più
8 Anni 4 Mesi fa #2 da Mauro Laurenti
Risposta da Mauro Laurenti al topic Libreria LCD e EasyUsb
La versione 3.3 della libreria supporta entrambi i compilatori C18 e XC8.

Per un miglior debug potresti postare il programma intero e lo schema elettrico che usi?
Puoi postare anche una foto del montaggio?


Presumo che attualmente non hai caricato lo stack USB.
Presumo anche che tu stia usando il compilatore C18

nelle prossime settimane aggiornerò tutti i documenti al compilatore XC8.

Da questa sera trovi online i nuovi bootloaders .

Domani invierò l'aggiornamento per email.

Saluti,

Mauro
Ringraziano per il messaggio: Di_Fi

Si prega Accedi o Crea un account a partecipare alla conversazione.

  • Mauro Laurenti
  • Avatar di Mauro Laurenti
  • Moderator
  • Moderator
Di più
8 Anni 4 Mesi fa #3 da Di_Fi
Risposta da Di_Fi al topic Libreria LCD e EasyUsb
drive.google.com/file/d/0B5PsOQZrZW7seG1...aGc/view?usp=sharing

drive.google.com/file/d/0B5PsOQZrZW7sWWZ...bUk/view?usp=sharing

Buongiorno Mauro

non riesco a caricare le foto. Ti invio i link di condivisione. Mi piacerebbe utilizzare la tua scheda a scuola senza dover comprare i programmatori. E poi andare avanti per scambiare dati tra scheda e pc (prima o poi). Il compilatore è C18 cosi non devo modificare il codice per rimappare, ora non sarei in grado. La retroilluminazione e il contrasto sono cotrollati esternamente, ma la chiamata a LCD_backlight (TURN_ON_LED_LCD); l'ho lasciata non dovrebbe cambiare nulla. Il codice è il tuo framework modificato.
Ti ringrazio. (Non mi piace reinventare la ruota, preferisco studiare il tuo lavoro in modo da accelerare un po l'apprendimento).

********************************************************

EasyUSB programming Framework

*******************************************************
*******************************************************/


#include <p18f4550.h>

#include <delay.h>
#include <delay.c>

#define LCD_DEFAULT

#include "LCD_44780.h"
#include "LCD_44780.c"

#define FRASE "PIC18F4550-> GO!!!"



#pragma config FOSC = HS
#pragma config WDT = OFF
#pragma config LVP = OFF
#pragma config PBADEN = OFF

//OSC = HS Impostato per lavorare ad alta frequenza
//WDT = OFF Disabilito il watchdog timer
//LVP = OFF Disabilito programmazione LVP
//PBADEN = OFF Disabilito gli ingressi analogici


void New_High_Priority_ISR_Code();
void New_Low_Priority_ISR_Code();

//*************************************************************
// Definizione nuovi indirizzi
//*************************************************************

#define REMAPPED_RESET_VECTOR_ADDRESS 0x1000
#define REMAPPED_HIGH_INTERRUPT_VECTOR_ADDRESS 0x1008
#define REMAPPED_LOW_INTERRUPT_VECTOR_ADDRESS 0x1018

//Vedi il file c018i.c
extern void _startup (void);


//*************************************************************
// Rimappatura Interrupt Service Routine
//*************************************************************

#pragma code REMAPPED_RESET_VECTOR = REMAPPED_RESET_VECTOR_ADDRESS
void _reset (void){
_asm goto _startup _endasm
}

#pragma code REMAPPED_HIGH_INTERRUPT_VECTOR = REMAPPED_HIGH_INTERRUPT_VECTOR_ADDRESS
void Remapped_High_ISR (void) {

_asm goto New_High_Priority_ISR_Code _endasm
}

#pragma code REMAPPED_LOW_INTERRUPT_VECTOR = REMAPPED_LOW_INTERRUPT_VECTOR_ADDRESS
void Remapped_Low_ISR (void) {

_asm goto New_Low_Priority_ISR_Code _endasm
}

//*************************************************************
// Standard Interrupt Service Routine
//*************************************************************

#pragma code HIGH_INTERRUPT_VECTOR = 0x08
void High_ISR (void) {

_asm goto REMAPPED_HIGH_INTERRUPT_VECTOR_ADDRESS _endasm
}


#pragma code LOW_INTERRUPT_VECTOR = 0x18
void Low_ISR (void) {
_asm goto REMAPPED_LOW_INTERRUPT_VECTOR_ADDRESS _endasm
}

#pragma code


//*************************************************************
// Nuovi Interrupt Service Routines
//*************************************************************

#pragma interrupt New_High_Priority_ISR_Code
void New_High_Priority_ISR_Code() {
// Gestione Interrupt alta Priorita'
}


#pragma interruptlow New_Low_Priority_ISR_Code
void New_Low_Priority_ISR_Code(){
// Gestione Interrupt bassa Priorita'
}

//*************************************************************
// Funzione main ()
//*************************************************************
void main (void){

// Imposto PORTA tutti ingressi
LATA = 0x00;
TRISA = 0xFF;

// Imposto PORTB tutti ingressi
LATB = 0x00;
TRISB = 0xFF;

// Imposto PORTC tutti ingressi, RC1 e RC0 come output
LATC = 0x00;
TRISC = 0b11111100;

// Imposto PORTD tutte uscite, RD0 come ingresso
LATD = 0x00;
TRISD = 0b00000001;


// Imposto PORTE tutti ingressi
LATE = 0x00;
TRISE = 0xFF;


// Inizializzo il display LCD con quarzo a 20MHz
LCD_initialize (20);
LCD_backlight (TURN_ON_LED_LCD);
LCD_write_message ("Ok");

LATCbits.LATC0 = 0x01;

// Ciclo infinito
while (1) {

}
}

Si prega Accedi o Crea un account a partecipare alla conversazione.

  • Di_Fi
  • New Member
  • New Member
Di più
8 Anni 4 Mesi fa #4 da Mauro Laurenti
Risposta da Mauro Laurenti al topic Libreria LCD e EasyUsb
i collegamenti del foglio sono corretti per la libreria ma EasyUSB usa RD4 e RD5 per controllare i mos che poi forniscono i 5V sul connettore EX1. Per questa ragione se usi tali linee attivi e disattivi l'alimentazione su EX1 quando cerchi di pilotare il modulo LCD. Per cui dovresti modificare nella libreria i relativi pin e usarne altri.

Ti consiglio in ogni modo di usare XC8 e MPLAB e scrivi senza pensare al bootloader. In questo ambiente quando metterai il bootloader devi modificare il programma, ovvero le impostazioni cambiando semplicemente queste impostazioni:

ROM ranges: default,-0-FFF,-1006-1007,-1016-1017
Codeoffset: 0x1000

gioco fatto e programma pulito.

Saluti,

Mauro
Ringraziano per il messaggio: Di_Fi

Si prega Accedi o Crea un account a partecipare alla conversazione.

  • Mauro Laurenti
  • Avatar di Mauro Laurenti
  • Moderator
  • Moderator
Di più
8 Anni 4 Mesi fa - 8 Anni 4 Mesi fa #5 da Di_Fi
Risposta da Di_Fi al topic Libreria LCD e EasyUsb
Buongiorno Mauro

grazie della risposta. Appena ho tempo proverò per prima cosa a cambiare i piedini e vedere se gira. Per quando riguarda l'utilizzo di XC8 utilizzando il bootloader:

ho provato a caricare un programma semplice di test con le opzioni per riservare la ROM e il codeoffset (ho trovato subito i campi nelle opzioni di compilazione) alla fine della compilazione compare un warning:

Warning: C:/Users/Davide/Google Drive/Microchip_sviluppo/Software/CP_09/02_Scrittura_di_Messaggio_e_una_Stringa.X/dist/default/production/02_Scrittura_di_Messaggio_e_una_Stringa.X.production.hex contains code that is located at addresses that do not exist on the PIC18F4550.

Il programma non gira (Si doveva accendere un semplice led esterno). Volevo chiederti:

1 devo caricare il nuovo firmware del bootloader ossia la versione 2 sulla scheda (che ho appena scaricato)?
2 devo usare il nuovo programma di caricamento?
3 devo usare sempre il linker modificato per il bootloader o posso lasciare che mplab X utilizzi quello di default?

Farò ancora altri tentativi per vedere cosa succede e a cercare in giro per la rete. Grazie tante per il tempo che mi fai risparmiare.

Davide
Ultima Modifica 8 Anni 4 Mesi fa da Di_Fi. Motivo: Mi sono dimenticato di dire che non gira

Si prega Accedi o Crea un account a partecipare alla conversazione.

  • Di_Fi
  • New Member
  • New Member
Di più
Moderatori: Mauro LaurentiPinnaStefAMatteo Garia

Registrati al sito

Accedi a tutte le risorse e articoli non visibili pubblicamente, puoi registrarti con pochi passi.

Registrati al sito LaurTec.

Login