Pic läser inte av gps korrekt

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Christian
Inlägg: 86
Blev medlem: 3 november 2003, 22:54:49

Pic läser inte av gps korrekt

Inlägg av Christian »

Hej! Försöker på min PIC 16f690 att ta emot bytes från en gps mottagare (em406). PIC:en lagrar 16 bytes i en array och stänger sedan av mottagningen från gps:en för att skriva tecknen på en display. Jag använder HITEC:s kompilator och den inbyggda oscillatorn i PIC:en med 4MHz. Gps:en "outputtar" data med 4800 bps och USART:en på PIC:en är konfigurerad därefter.

När jag kör igång det hela så skrivs det ut "rätt information" lite då och då, men mestadels bara en massa skräp. Jag undrar om det är tänkbart att den interna oscillatorn är för onogrann för en sån här applikation? För ibland så dyker det upp relevant data på displayen men som sagt för det mesta inte..

Sen undrar jag om det räcker att stänga av mottagningen på USART:en (CREN = 0;) när jag är klar med lagringen av mina 16 tecken och vill skriva dem till LCD:n? Eller måste jag stänga av interrupts också medans jag behandlar datan?
Jag skulle uppskatta om jag kunde få lite tips på hur jag gör detta på bästa sätt!

mvh / Christian


här är koden jag använder:

Kod: Markera allt

#include <pic.h>
#include <htc.h>
#include "lcd.h"
#include "delay.h"


__CONFIG(INTIO & WDTDIS & PWRTDIS & MCLRDIS & UNPROTECT & BORDIS & IESODIS & FCMDIS);
char buffer[52];	//Databuffer
int index = 0; 

void usart(void){
	TRISB = 0XFF;
	TRISC = 0X00;	//Just for debug
	PORTC = 0;		//-||-
	ANSELH = 0x00; 	//All pins digital
	SPBRG = 52;		//4800 bps
	BRGH = 1;
	TXEN = 1; 		//Allows sending
	SYNC = 0; 		//The SYNC bit should be cleared to select asynchronous operation.
	SPEN = 1; 		//SPEN bit is used to enable the entire serial port
	CREN = 0;
	CREN = 1; 		//Allows receiving
	
	GIE = 1;  		//*Interrupts
	PEIE = 1;
	TXIE = 0; 		//Disable transmit interrupt
	RCIE = 1; 		//Enable receive interrupt

}

static void interrupt isr(void){	
	if((RCIE)&&(RCIF)){

		if(OERR){       // If overun-error has occured                  
			CREN=0;     // Re-enable receiving           
			CREN=1;     
        }  
		 
		char r = RCREG;
		
		
			buffer[index] = r;  //Place received byte in buffer
			index++;			//Increment index
		
	}       

}

void main(void){
 	lcd_init();
	lcd_clear();
	lcd_posyx(0,0);
	usart();							//Initialize USART
	while(1){							//Do forever
		if(index>=15){		
			CREN = 0;				//Stop receiving 
			
			for(int i = 0; i <= index-1; i++){  //Print buffer
		
				lcd_data(buffer[i]);
	
			}
			DelayMs(1000);
			lcd_clear();
			lcd_posyx(0,0);
			index = 0;							
			CREN = 1;			//Start receiving again
		
		}
	}
}





Senast redigerad av Christian 28 juli 2010, 00:07:50, redigerad totalt 1 gång.
Användarvisningsbild
Swech
EF Sponsor
Inlägg: 4750
Blev medlem: 6 november 2006, 21:43:35
Ort: Munkedal, Sverige (Sweden)
Kontakt:

Re: Pic läser inte av gps korrekt

Inlägg av Swech »

På AVR finns en kalibreringsbyte för intern oscillator. gissar att det finns något liknande även på PIC.
Du bör isåfall kunna trimma in oscillatorn.

Har du verifierat med t.ex. en RS232 omvandlare och en PC att det som kommer ut från GPSen är vad du
antar att det är?

Swech
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Pic läser inte av gps korrekt

Inlägg av sodjan »

Prova att justera SPBRG lite för att se om du ligger på kanten.
52 kanske är det teoretiskt korrekta värdet, men prova med t.ex
50, 51, 52, 53, 54. Eller prova fler värden för att hitta gränserna
där det lägger av helt. Rätt bör vara ungeför i mitten. Sen finns det
ett separat justeringsregister också.

Jag *tror* inte att det är det, interna osc bör fungera bra, men
man vet ju inte hur "fel" GPS'en ligger i hastighet. Har du kört
GPS'en mot något annat ? T.ex en PC ?

Det här med "en massa skräp", det är inte bara så att du hamnar ur
synk på något sätt ? Och kommer in fel i sekvensen ?

Sänder GPS'en kontinuerligt ?
Hur gör du i så fall för att veta var en ny sekvens börjar ?
Christian
Inlägg: 86
Blev medlem: 3 november 2003, 22:54:49

Re: Pic läser inte av gps korrekt

Inlägg av Christian »

Tack för snabbt svar!
Jag *tror* inte att det är det, interna osc bör fungera bra, men
man vet ju inte hur "fel" GPS'en ligger i hastighet. Har du kört
GPS'en mot något annat ? T.ex en PC ?
Jag har kört den mot Hyperterminalen med max232 och det fungerar bra.
Det här med "en massa skräp", det är inte bara så att du hamnar ur
synk på något sätt ? Och kommer in fel i sekvensen ?

Sänder GPS'en kontinuerligt ?
Hur gör du i så fall för att veta var en ny sekvens börjar ?
Med den här koden har jag bara varit ute efter att kunna läsa det som gps:en skickar och se så att den biten fungerar, för att senare kunna välja ut tex long och lat endast. Men även om jag kommer in fel i sekvensen så borde den ju visa sånt som Nmea strängarna innehåller.. för den skriver ut tecken som inte alls påminner om det..

Jag ska prova med andra värden på SPBRG och se om det ger bättre lycka, för som sagt ibland blixtrar den till och visar tecken som finns i Nmea strängarna..

Hur är det med att disabla USART mottagningen när jag behandlar data? Räcker det med CREN = 0; eller kan interrupten störa om jag inte stänger av dem?
Användarvisningsbild
Icecap
Inlägg: 26658
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Re: Pic läser inte av gps korrekt

Inlägg av Icecap »

Varför "stänga av" UART'en? Varför inte bara kasta det som är ointressant under tiden?

Jag har dåliga erfarenheter med att stänga av hårdvara när allting kör, det ger en massa konstigheter och tecknen kommer oftast ur synk.
Användarvisningsbild
Swech
EF Sponsor
Inlägg: 4750
Blev medlem: 6 november 2006, 21:43:35
Ort: Munkedal, Sverige (Sweden)
Kontakt:

Re: Pic läser inte av gps korrekt

Inlägg av Swech »

Om du trycker in data från hyperterminal till din PIC, blir det tok då också?

Swech
ToPNoTCH
Inlägg: 5158
Blev medlem: 21 december 2009, 17:59:48

Re: Pic läser inte av gps korrekt

Inlägg av ToPNoTCH »

SPBRG skall nog hellre vara 51 än 52.

52 = 4,716.98 = 1.8% off
51 = 4,807.69 = 0.1% off

Jag är lite nyfiken på varför du inte kör 8 MHz. Spara på strömmen eller ??
Användarvisningsbild
vfr
EF Sponsor
Inlägg: 3515
Blev medlem: 31 mars 2005, 17:55:45
Ort: Kungsbacka

Re: Pic läser inte av gps korrekt

Inlägg av vfr »

Om du trycker in data från hyperterminal till din PIC, blir det tok då också?

Precis! Testa motsatsen. Att se om det är PIC:en som har generellt svårt att kommunicera med den hastigheten med någonting annat.
Skriv svar