- Messaggi: 33
- Ringraziamenti ricevuti 1
usart c18 step by step con compilatore xc8
Sto compilando gli esempi del C18 step by step con mplabx e xc8. Sono arrivato all'esempio sull usart, il programma viene compilato senza errori ma quando lo eseguo sulla freedom 2 sul terminale ricevo caratteri strani.
Ho notato che nel file PIC18F4550_config il postscaler è settato così : #pragma config CPUDIV =OSC3_PLL4 , dovrebbe dividere la frequenza per 3.
Se lo imposto così: #pragma config CPUDIV=OSC1_PLL2 dovrebbe dividere per 1, compilando con questa configurazione la comunicazione col terminale funziona correttamente ma ottengo caratteri srtani sul display.
Ho pensato quindi a un problema di ritardi dei comandi inviati al display, ho sostituito la libreria delay laurtec con quella microchip e tutto funziona correttamente (sia il display che la comunicazione con il terminale).
Concludendo, volevo sapere se è corretto impostare il registro CPUDIV=OSC1_PLL2 e se la libreria delay effettivamente non è precisa . Inoltre sempre nel file PIC18F4550_config c'è settato #pragma config PLLDIV=1 ma nelle note sembra che con un quarzo da 20Mhz vada impostato a 5.
Allego una copia del file funzionante. Grazie Andrea
Si prega Accedi o Crea un account a partecipare alla conversazione.
- alpignolo
- Autore della discussione
- Junior Member
Inoltre sempre nel file PIC18F4550_config c'è settato #pragma config PLLDIV=1 ma nelle note sembra che con un quarzo da 20Mhz vada impostato a 5.
di quali note parli?
I file di libreria da includere li hai aggiunti al progetto? perché nel main non ci sono tutti..
Ste
..avevano magari fatto lo sgambetto al ka, ma il sangue restava sempre più denso dell'acqua.. [cit.]
Si prega Accedi o Crea un account a partecipare alla conversazione.
- StefA
- Moderator
- Messaggi: 1222
- Ringraziamenti ricevuti 104
//PLL Prescaler Selection bits
//1 No prescale (4 MHz oscillator input drives PLL directly)
//5 Divide by 5 (20 MHz oscillator input)
//12 Divide by 12 (48 MHz oscillator input)
//2 Divide by 2 (8 MHz oscillator input)
//6 Divide by 6 (24 MHz oscillator input)
//3 Divide by 3 (12 MHz oscillator input)
//10 Divide by 10 (40 MHz oscillator input)
//4 Divide by 4 (16 MHz oscillator input)
#pragma config PLLDIV = 1
Nel main del programma che mi funziona ho incluso:
#include <xc.h>
#include "PIC18F4550_232.h" // impostato #pragma config CPUDIV=OSC1_PLL2
#define _XTAL_FREQ 20000000
#include <usart.h>
#define LCD_DEFAULT
#include "LCD_44780delay.c" // uso delay microchip
PIC18F4550_232.h è il file PIC18F4550_config modificato con #pragma config CPUDIV=OSC1_PLL2, delay.c/h li ho tolti perchè ho usato i delay che sono presenti in xc.h. LCD_44780delay.c è il file LCD_44780 dove ho sostituito le funzioni delay.
Posto anche questi due file. Credo dovrebbe esserci tutto anche perchè il programma così modificato viene compilato senza errori e funziona correttamente.
Grazie ciao Andrea
Si prega Accedi o Crea un account a partecipare alla conversazione.
- alpignolo
- Autore della discussione
- Junior Member
- Messaggi: 33
- Ringraziamenti ricevuti 1
Si prega Accedi o Crea un account a partecipare alla conversazione.
- alpignolo
- Autore della discussione
- Junior Member
- Messaggi: 33
- Ringraziamenti ricevuti 1
Marcello
Chi vola vale, chi vale vola, chi non vola è un vile
Si prega Accedi o Crea un account a partecipare alla conversazione.
- Pinna
- Moderator
- Messaggi: 1010
- Ringraziamenti ricevuti 107
Registrati al sito
Accedi a tutte le risorse e articoli non visibili pubblicamente, puoi registrarti con pochi passi.