Problem programmering PIC16F916-F2M03GX-S01
Problem programmering PIC16F916-F2M03GX-S01
Hej!
Försöker programmera en blåtandsmodul från Free2Move men får inte rätt på det.
Vid programmeringen skall jag skicka ett antal kommandon från PICen till blåtandsmodulen via TX
och efter varje skickat kommando skickar blåtandsmodulen en statussvar tillbaka.
Blåtandsmodulen kör på baudrate 38400. Efter att ha tittat igenom databladet för PICen
(sida 130) http://www.datasheetcatalog.com/datashe ... F916.shtml
är det närmaste jag kommer 35714 (BRG=1 Fosc=4Mhz, SPBRG=6).
Hur viktigt är det att dom är exakt samma? Går det att köra trots att det är några procents skillnad?
Någon som hållit på med detta som kanske kan hjälpa till lite?
Försöker programmera en blåtandsmodul från Free2Move men får inte rätt på det.
Vid programmeringen skall jag skicka ett antal kommandon från PICen till blåtandsmodulen via TX
och efter varje skickat kommando skickar blåtandsmodulen en statussvar tillbaka.
Blåtandsmodulen kör på baudrate 38400. Efter att ha tittat igenom databladet för PICen
(sida 130) http://www.datasheetcatalog.com/datashe ... F916.shtml
är det närmaste jag kommer 35714 (BRG=1 Fosc=4Mhz, SPBRG=6).
Hur viktigt är det att dom är exakt samma? Går det att köra trots att det är några procents skillnad?
Någon som hållit på med detta som kanske kan hjälpa till lite?
Re: Problem programmering PIC16F916-F2M03GX-S01
Koppla till en kristall med en mer "logisk" frekvens, då kan du få det exakt. Jag har för mig att ett par % inte är ett större problem men det är bra att få det så nära det bara går.
Re: Problem programmering PIC16F916-F2M03GX-S01
Det finns ingen "magisk gräns" för felet, men jag vågar nog påstå att dina 7% är för mycket.
"There is no exact limit on how much frequency error can be tolerated by the UART, since
this depends on the baud rates, the precise frequencies used by the two devices, the
character length, the number of stop bits, and whether a parity bit is used or not. However,
most UARTs will work with a frequency error less than 5 %. This is the theoretical limit
based on 16× sampling of the start bit, and 10-bit data format (one start bit, 8 data bits,
and one stop bit)." - NXP App note AN10386
"...UBRR values which yield an actual baud rate differing less than 0.5% from the target baud rate,
are bold in the table. Higher error ratings are acceptable, but the Receiver will have less noise
resistance when the error ratings are high, especially for large serial frames" - ATmega datablad
"There is no exact limit on how much frequency error can be tolerated by the UART, since
this depends on the baud rates, the precise frequencies used by the two devices, the
character length, the number of stop bits, and whether a parity bit is used or not. However,
most UARTs will work with a frequency error less than 5 %. This is the theoretical limit
based on 16× sampling of the start bit, and 10-bit data format (one start bit, 8 data bits,
and one stop bit)." - NXP App note AN10386
"...UBRR values which yield an actual baud rate differing less than 0.5% from the target baud rate,
are bold in the table. Higher error ratings are acceptable, but the Receiver will have less noise
resistance when the error ratings are high, especially for large serial frames" - ATmega datablad
Re: Problem programmering PIC16F916-F2M03GX-S01
Det finns f.ö små program som räknar ut just det där åt dej, med olika infrekvenser.
vet att jag har ett som heter picmulticalc, jag TROR det fixar det, men kan inte kolla just nu.
vet att jag har ett som heter picmulticalc, jag TROR det fixar det, men kan inte kolla just nu.
Re: Problem programmering PIC16F916-F2M03GX-S01
Har testat med sådana småprogram men det enda de ger ju samma svar som databladet.
Hur beter det sig när det inte funkar? Mätte nämligen upp TX på oscilloskopet och där
händer inget alls utan den ligger hög hela tiden.
Hur beter det sig när det inte funkar? Mätte nämligen upp TX på oscilloskopet och där
händer inget alls utan den ligger hög hela tiden.
Re: Problem programmering PIC16F916-F2M03GX-S01
Om den ligger hög hela tiden sänder du inget! Detta har inget med baudrate eller liknande att göra, det kan dock bero på fel inställning av UART-funktion eller att du helt enkelt inte sänder något.
Re: Problem programmering PIC16F916-F2M03GX-S01
Nej precis. Därför jag undrar hur det beter sig när baudraten inte stämmer överrens. Skickar den ändå men BTmodulen kommer
inte "förstå" vad den skickat eller hur beter det sig?
Lite kod:
Funktionen som jag använder när jag ska skicka...
Initieringen..
inte "förstå" vad den skickat eller hur beter det sig?
Lite kod:
Funktionen som jag använder när jag ska skicka...
Kod: Markera allt
char sendByte(char byte){
unsigned int i;
for(i = 0; i<20000 && TRMT == 0; i++); //wait for register to be empty
if(i == 20000){
return Fail;}
TXREG = byte;
return Pass;
}
Kod: Markera allt
....
GIE = 1; // Global Interrupts Enable
TXSTA = 0x00;
SYNC = 0; // Asynchronous mode
BRGH = 1; // High baud rate select bit RCSTA = 0x00;
SPEN = 1; // RCSTA<7>
CREN = 1; // Enable reception
RCIE = 1; // Enable reception interrupt
TXEN = 1; // Enable transmission
TXIE = 0; // Disable transmission interrupt
Re: Problem programmering PIC16F916-F2M03GX-S01
> Därför jag undrar hur det beter sig när baudraten inte stämmer överrens.
> Skickar den ändå men BTmodulen kommer inte "förstå" vad den skickat eller hur beter det sig?
Varför skulle den inte skicka ?
Hur skulle den kunna veta att hastigheterna är fel och att den andra
sidan inte kan "förstå" och därmed avstå från att sända helt ?
Har du alls fundera på logiken i vad du frågar ?
> Skickar den ändå men BTmodulen kommer inte "förstå" vad den skickat eller hur beter det sig?
Varför skulle den inte skicka ?
Hur skulle den kunna veta att hastigheterna är fel och att den andra
sidan inte kan "förstå" och därmed avstå från att sända helt ?
Har du alls fundera på logiken i vad du frågar ?
Re: Problem programmering PIC16F916-F2M03GX-S01
Sant. Ursäkta, ibland är man för snabb med tangentbordet!
Då bör det ligga i min kod, får återgå till att gå igenom den igen..
Då bör det ligga i min kod, får återgå till att gå igenom den igen..