- Messaggi: 3
- Ringraziamenti ricevuti 0
Help! problema uart pic 16f1824
12 Anni 2 Mesi fa #1
da nelluzzo
Help! problema uart pic 16f1824 è stato creato da nelluzzo
Ciao a tutti.
Ho un problema con la Usart. Non riesco a farla funzionare con il pic16f1824. All’avvio il programma mi resistuisce strani caratteri. Il led ovviamente resta acceso.
questo è il listato:
main.c:
#define XTAL_FREQ 20MHZ
#include
#include “delay.c”
#include “settings.h”
#include “usart.c” // richiama usart.h ed include la libreria stdio.h e le funzioni putch, getch e getche.
__CONFIG(FOSC_HS & WDTE_OFF & PWRTE_ON & MCLRE_OFF & CLKOUTEN_OFF & BOREN_OFF & LVP_OFF & CPD_OFF & WRT_OFF & CP_OFF);
void main(void)
{
settings(); // imposto le porte come da settings.h
init_comms(); // set up the USART – settings defined in usart.h
printf(“Ciao”);
while(1)
{
LED0=1; //partito!!!
if(Flags==1 && C0==1)
{
analizza_stringa(); //non ho postato il codice della funzione perchè penso sia inutile ai fini del problema
}
}
}
// INTERRUPT SERVICE ROUTINE
void interrupt isr(void)
{
if(RCIF)
{
input = getch();
if (RCREG==0×44)
{
C1=0,C2=0,C0=1; //azzero la stringa
RxPos=0,Flags=0;
}
if (RxPos==1) C1=RCREG; //ricezione della stringa comandi
if (RxPos==2 && RCREG==0×0d)
{
Flags=1; // terminator
}
RxPos++;
}
}
setting.h:
char C0=0;
char C1=0;
char C2=0;
char RxPos=0;
char Flags=0;
char input=0;
void settings(void);
void interrupt isr(void);
void settings(void)
{
PORTA=0;
PORTC=0;
TRISA=0b00000000;
TRISC=0b00110000; // RC5 e RC4 pin di ricetrasmissione seriale
// RXDTSEL=0; // alternate pin function RC5 = RX / RC4 = TX
// TXCKSEL=0;
ADCON0=0;
ADCON1=0;
RCSTA = 0×90;
TXSTA = 0×26;
ANSELA=0; //ingressi analogici disattivati
ANSELC=0;
INTCON=0b11000000;
APFCON1=0b00001000;
APFCON0=0b01101000;
}
Usart.h:
#ifndef _SERIAL_H_
#define _SERIAL_H_
#define BAUD 9600
#define FOSC 20000000L
#define NINE 0 /* Use 9bit communication? FALSE=8bit */
#define init_comms()\
BRG16=0; \
SPBRGH = 129; \
SPBRGL=0; \
BAUDCON=0×00; \
RCIE=1; \ // interrupt di ricezione su seriale attivato
void putch(unsigned char);
unsigned char getch(void);
unsigned char getche(void);
#endif
Un grazie a chiunque voglia aiutarmi.
Ho un problema con la Usart. Non riesco a farla funzionare con il pic16f1824. All’avvio il programma mi resistuisce strani caratteri. Il led ovviamente resta acceso.
questo è il listato:
main.c:
#define XTAL_FREQ 20MHZ
#include
#include “delay.c”
#include “settings.h”
#include “usart.c” // richiama usart.h ed include la libreria stdio.h e le funzioni putch, getch e getche.
__CONFIG(FOSC_HS & WDTE_OFF & PWRTE_ON & MCLRE_OFF & CLKOUTEN_OFF & BOREN_OFF & LVP_OFF & CPD_OFF & WRT_OFF & CP_OFF);
void main(void)
{
settings(); // imposto le porte come da settings.h
init_comms(); // set up the USART – settings defined in usart.h
printf(“Ciao”);
while(1)
{
LED0=1; //partito!!!
if(Flags==1 && C0==1)
{
analizza_stringa(); //non ho postato il codice della funzione perchè penso sia inutile ai fini del problema
}
}
}
// INTERRUPT SERVICE ROUTINE
void interrupt isr(void)
{
if(RCIF)
{
input = getch();
if (RCREG==0×44)
{
C1=0,C2=0,C0=1; //azzero la stringa
RxPos=0,Flags=0;
}
if (RxPos==1) C1=RCREG; //ricezione della stringa comandi
if (RxPos==2 && RCREG==0×0d)
{
Flags=1; // terminator
}
RxPos++;
}
}
setting.h:
char C0=0;
char C1=0;
char C2=0;
char RxPos=0;
char Flags=0;
char input=0;
void settings(void);
void interrupt isr(void);
void settings(void)
{
PORTA=0;
PORTC=0;
TRISA=0b00000000;
TRISC=0b00110000; // RC5 e RC4 pin di ricetrasmissione seriale
// RXDTSEL=0; // alternate pin function RC5 = RX / RC4 = TX
// TXCKSEL=0;
ADCON0=0;
ADCON1=0;
RCSTA = 0×90;
TXSTA = 0×26;
ANSELA=0; //ingressi analogici disattivati
ANSELC=0;
INTCON=0b11000000;
APFCON1=0b00001000;
APFCON0=0b01101000;
}
Usart.h:
#ifndef _SERIAL_H_
#define _SERIAL_H_
#define BAUD 9600
#define FOSC 20000000L
#define NINE 0 /* Use 9bit communication? FALSE=8bit */
#define init_comms()\
BRG16=0; \
SPBRGH = 129; \
SPBRGL=0; \
BAUDCON=0×00; \
RCIE=1; \ // interrupt di ricezione su seriale attivato
void putch(unsigned char);
unsigned char getch(void);
unsigned char getche(void);
#endif
Un grazie a chiunque voglia aiutarmi.
Si prega Accedi o Crea un account a partecipare alla conversazione.
- nelluzzo
- Autore della discussione
- New Member
Riduci
Di più
12 Anni 2 Mesi fa #2
da Mauro Laurenti
Risposta da Mauro Laurenti al topic Re: Help! problema uart pic 16f1824
Ciao Nelluzzo,
Se ottieni caratteri strani e' un buon segno.
Non ho visto il codice ma questa situazione si ha spesso quando le impostazione del microcontrollore e dell'applicazione in ricezione non sono propriamente impostati allo stesso modo.
Hai avuto modo di fare altre prove in questi giorni?
Saluti,
Mauro
Se ottieni caratteri strani e' un buon segno.
Non ho visto il codice ma questa situazione si ha spesso quando le impostazione del microcontrollore e dell'applicazione in ricezione non sono propriamente impostati allo stesso modo.
Hai avuto modo di fare altre prove in questi giorni?
Saluti,
Mauro
Si prega Accedi o Crea un account a partecipare alla conversazione.
12 Anni 2 Mesi fa #3
da nelluzzo
Risposta da nelluzzo al topic Re: Help! problema uart pic 16f1824
Ciao Mauro,
finalmente ho risolto il problema!
Non avevo disattivato i comparatori e i capacitive sensing control register (che opera sugli stessi pin della usart.
Grazie per aver risposto
Saluti,
Nello
finalmente ho risolto il problema!
Non avevo disattivato i comparatori e i capacitive sensing control register (che opera sugli stessi pin della usart.
Grazie per aver risposto
Saluti,
Nello
Si prega Accedi o Crea un account a partecipare alla conversazione.
- nelluzzo
- Autore della discussione
- New Member
Riduci
Di più
- Messaggi: 3
- Ringraziamenti ricevuti 0
12 Anni 1 Mese fa #4
da Mauro Laurenti
Risposta da Mauro Laurenti al topic Re: Help! problema uart pic 16f1824
E' si, il multiplexaggio dei pin e' un'altra cosa che bisogna tenere sempre a mente.
In particolare la configurazione di default delle varie periferiche/moduli presenti su uno stesso pin.
grazie per aver condiviso la soluzione.
Saluti,
Mauro
In particolare la configurazione di default delle varie periferiche/moduli presenti su uno stesso pin.
grazie per aver condiviso la soluzione.
Saluti,
Mauro
Si prega Accedi o Crea un account a partecipare alla conversazione.
12 Anni 1 Mese fa #5
da paoletto
Rendering Error in layout Message/Item: array_keys(): Argument #1 ($array) must be of type array, null given. Please enable debug mode for more information.
Risposta da paoletto al topic Re: Help! problema uart pic 16f1824
Rendering Error in layout Message/Item: array_keys(): Argument #1 ($array) must be of type array, null given. Please enable debug mode for more information.
Si prega Accedi o Crea un account a partecipare alla conversazione.
- paoletto
- Elite Member
Riduci
Di più
- Messaggi: 186
- Ringraziamenti ricevuti 3
Moderatori: Mauro Laurenti, StefA, Matteo Garia
Registrati al sito
Accedi a tutte le risorse e articoli non visibili pubblicamente, puoi registrarti con pochi passi.
Login
© LaurTec 2006 - 2024