Merhaba,
MikroC PIC32 derleyicisini kullanıyorum.Çalıştığım işlemci PIC32MX220F032D.GPS modülden data okuyup LCD'ye konum bilgisini yazdırmaya çalışıyorum.Kodları 8 bitte çalıştırdım daha önce.Hatta MikroC ARM derleyicisi üzerinde STM32F4 Discovery Kit üzerinde de çalıştırdım.Fakat PIC32'de program sadece bir kere ekrana yazıyor ve kilitleniyor.Sigorta ayarlarınında resmini ekledim.Nerede hata yapıyorum acaba?
// GLCD module connections
sbit LCD_RS at LATB5_bit;
sbit LCD_EN at LATB13_bit;
sbit LCD_D4 at LATB3_bit;
sbit LCD_D5 at LATB2_bit;
sbit LCD_D6 at LATB1_bit;
sbit LCD_D7 at LATB0_bit;
sbit LCD_RS_Direction at TRISB5_bit;
sbit LCD_EN_Direction at TRISB13_bit;
sbit LCD_D4_Direction at TRISB3_bit;
sbit LCD_D5_Direction at TRISB2_bit;
sbit LCD_D6_Direction at TRISB1_bit;
sbit LCD_D7_Direction at TRISB0_bit;
// End GLCD module connections
// Variables
unsigned int received = 0;
unsigned char DataType[] = "GPXXX";
unsigned char NMEA[] = "$xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
unsigned char receive;
// End Variables
void main()
{
ANSELA=0;
ANSELB=0;
ANSELC=0;
UART1_Init(9600); // Initialize UART for GPS board connectivity
delay_ms(100);
Unlock_IOLOCK();
PPS_Mapping_NoLock(_RPA4, _INPUT, _U1RX); // Sets pin PORTC.B7 to be Input and maps UART1 Receive to it
Lock_IOLOCK();
Lcd_Init(); // Initialize LCD
Lcd_Cmd(_LCD_CLEAR); // Clear display
Lcd_Cmd(_LCD_CURSOR_OFF); // Cursor off
while(1)
{
if (UART1_Data_Ready() == 1)
{
receive = UART1_Read();
if (receive == '$') // Check if sentence begins.
{
received = 0;
do{
if (UART1_Data_Ready() == 1)
{
UART1_Read_Text(DataType, ",", 10); // Capture GPXXX word
received = 1;
}
} while(received == 0);
// If it is GPGGA Data, then acquire it.
if ((DataType[2] == 'G') && (DataType[3] == 'G') && (DataType[4] == 'A'))
{
received = 0;
do{
if (UART1_Data_Ready() == 1)
{
UART1_Read_Text(NMEA, "*", 100); // Stop at *XX checksum data
received = 1;
}
} while(received == 0);
// Fill LCD with relevant data
// Number of satellites being tracked
Lcd_chr(1,1,NMEA[10]);
Lcd_chr(1,2,NMEA[11]);
Lcd_chr(1,4,NMEA[12]);
Lcd_chr(1,5,NMEA[13]);
Lcd_chr(1,7,NMEA[15]);
Lcd_chr(1,8,NMEA[16]);
Lcd_chr(1,9,NMEA[17]);
Lcd_chr(1,10,NMEA[18]);
Lcd_chr(1,11,NMEA[19]);
Lcd_chr(1,13,NMEA[21]);
// Longitude
Lcd_chr(2,1,NMEA[23]);
Lcd_chr(2,2,NMEA[24]);
Lcd_chr(2,3,NMEA[25]);
Lcd_chr(2,5,NMEA[26]);
Lcd_chr(2,6,NMEA[27]);
Lcd_chr(2,8,NMEA[29]);
Lcd_chr(2,9,NMEA[30]);
Lcd_chr(2,10,NMEA[31]);
Lcd_chr(2,11,NMEA[32]);
Lcd_chr(2,12,NMEA[33]);
Lcd_chr(2,14,NMEA[35]);
}
receive = 'x';
}
}
}
}
(http://i.hizliresim.com/MPkga9.png) (http://hizliresim.com/MPkga9)
(http://i.hizliresim.com/k1ELX9.png) (http://hizliresim.com/k1ELX9)
kiliteniyor mu, yoksa gelen veriyi değerlendirmiyor mu?
Gelen verileri hiç işleme sokmadan değerlendirme için yaptığın (algılama yaptığın) bellek alanlarını bir gözle. Belki sadece veri saklamak için kullandığın bellek alanları kayıyordur.
Programın geri kalanını bilmiyorum, veri alımı için kullandığın sayıcıyı sıfırlıyor musun?
Belki araya başka veriler karışıyordur.
Yerin varsa ikinci bir uart ile bilgisayara gönderip gelen veriyi incele.
Benimkisi sadece bir düşünce tabii.