Problem programmering PIC16F916-F2M03GX-S01

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
danne.H
Inlägg: 19
Blev medlem: 20 november 2009, 10:54:23
Ort: Halmstad

Problem programmering PIC16F916-F2M03GX-S01

Inlägg av danne.H »

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?
Användarvisningsbild
Icecap
Inlägg: 26636
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Re: Problem programmering PIC16F916-F2M03GX-S01

Inlägg av Icecap »

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.
hatten
Inlägg: 94
Blev medlem: 9 maj 2008, 22:16:23
Ort: Uppsala

Re: Problem programmering PIC16F916-F2M03GX-S01

Inlägg av hatten »

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
Användarvisningsbild
Glenn
Inlägg: 36670
Blev medlem: 24 februari 2006, 12:01:56
Ort: Norr om Sthlm
Kontakt:

Re: Problem programmering PIC16F916-F2M03GX-S01

Inlägg av Glenn »

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.
danne.H
Inlägg: 19
Blev medlem: 20 november 2009, 10:54:23
Ort: Halmstad

Re: Problem programmering PIC16F916-F2M03GX-S01

Inlägg av danne.H »

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.
Användarvisningsbild
Icecap
Inlägg: 26636
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Re: Problem programmering PIC16F916-F2M03GX-S01

Inlägg av Icecap »

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.
danne.H
Inlägg: 19
Blev medlem: 20 november 2009, 10:54:23
Ort: Halmstad

Re: Problem programmering PIC16F916-F2M03GX-S01

Inlägg av danne.H »

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...

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;
}
Initieringen..

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
sodjan
EF Sponsor
Inlägg: 43249
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Problem programmering PIC16F916-F2M03GX-S01

Inlägg av sodjan »

> 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 ?
danne.H
Inlägg: 19
Blev medlem: 20 november 2009, 10:54:23
Ort: Halmstad

Re: Problem programmering PIC16F916-F2M03GX-S01

Inlägg av danne.H »

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..
Skriv svar