
alexandro umbert
Membro Pleno-
Posts
22 -
Cadastrado em
-
Última visita
Reputação
2-
PIC bussola eletronica PIC18f4550 compiler CCS
alexandro umbert postou um tópico em Microcontroladores
Boa noite Pessoal! neste link tem sistema de bussola eletronica feita para pIC18f4550 no compilador CCS. porém no video ele está utilizando oscilador interno de 8MHZ e minha placa está montada com clock 20MHZ. Alguem poderia me dar uma ajuda,compilei o sistema e envia pic ,mas não mostra valores reais. projeto completo está aqui: https://www.4shared.com/rar/6EYF8d2Mce/PIC18F4550_HMC5883L_CCS.html? https://www.youtube.com/watch?v=Rji4lxLLp9A&pbjreload=10 -
variavel matriz com PIC18f4550
alexandro umbert respondeu ao tópico de alexandro umbert em Microcontroladores
@ViniciusKruz @ViniciusKruz tem essa parte do codigo que fica acima do for. #define Buffer_Size 1000 int16 VetorPos; char TpS; short int TemPacote; char RxBuf[Buffer_Size]; char ValorL; int16 k; char j; char divT; char Lat; int16 m_Boot; int1 f_Boot; float variavel; float matrix[3][3]; float latitude,latReal; char latCompleto[10]; char longCompleto[10]; #INT_RDA void Serial_isr(void) { char temp; temp = RCREG; TpS = 5; RxBuf[VetorPos] = temp; VetorPos++; if(VetorPos>1000){ TpS = 0; TemPacote = 1; return; } } #INT_TIMER1 void int_timer_1 () { set_timer1(50535); if(TpS>0){TpS--;if(TpS==0){TemPacote=1;}} if(divT-- == 0){ divT =20; Life = !Life; } } void LimpRxBuf (void){ int16 i; for(i=0;i<1000;i++){ RxBuf = 0; } } void main(void) { setup_timer_1(T1_INTERNAL|T1_DIV_BY_8); set_timer1(50535); divT = 100; enable_interrupts(INT_TIMER1); set_tris_A(TRIS_A_INIT); set_tris_B(TRIS_B_INIT); set_tris_C(TRIS_C_INIT); set_tris_D(TRIS_D_INIT); set_tris_E(TRIS_E_INIT); lcd_init(); delay_ms(1); lcd_putc("\fROBO GUIADO GPS"); lcd_putc("\n FABIO BETIOL"); delay_ms(5000); LimpRxBuf(); VetorPos=0; TemPacote = 0; TpS = 0; m_Boot = 60000; f_Boot = 1; enable_interrupts(GLOBAL); ValorL = RCREG; CREN = 0; CREN = 1; -
variavel matriz com PIC18f4550
alexandro umbert respondeu ao tópico de alexandro umbert em Microcontroladores
@ViniciusKruz n tem biblioteca. codigo for(;;){ if(f_Boot == 0){ if(TemPacote == 1){ TemPacote = 0; for(k=0;k<500;k++){ ValorL = RxBuf[k]; if(ValorL == '$'){ ValorL = RxBuf[k+5]; if(ValorL == 'L'){ lcd_gotoxy(1,1); lcd_putc("Lat "); for(j=0;j<10;j++){ Lat = RxBuf[k+7+j]; lcd_putc(Lat); latCompleto[j]=Lat; } lcd_gotoxy(1,2); lcd_putc("Lon "); for(j=0;j<10;j++){ Lat = RxBuf[k+21+j]; lcd_putc(Lat); longCompleto[j]=Lat; latReal= atof(latCompleto); if (latitude< latReal){ output_low(PIN_B0); } else { output_high(PIN_B0); } if (latitude >latReal){ output_low(PIN_B2); } else { output_high(PIN_B2); } } break; } } } LimpRxBuf(); VetorPos=0; TpS = 0; } } if(m_Boot>0){m_Boot--;if(m_Boot == 0){ f_Boot = 0;enable_interrupts(INT_RDA); delay_ms(100);ValorL=RCREG;CREN=0;CREN=1; } } delay_ms(1); if (input(PIN_B5)==0){ latitude= atof(latCompleto); printf(LCD_PUTC,"\f%1.5f ",latitude); delay_ms(1000); } } } -
variavel matriz com PIC18f4550
alexandro umbert respondeu ao tópico de alexandro umbert em Microcontroladores
modelo gps é gy-gps6mv2 adicionado 9 minutos depois @ViniciusKruz modelo gps é gy-gps6mv2 -
variavel matriz com PIC18f4550
alexandro umbert respondeu ao tópico de alexandro umbert em Microcontroladores
@ViniciusKruz obrigado pela alerta do problema, tentei diminuir para o valor de 1000 para 100,mas infelizmente não funcionou. -
variavel matriz com PIC18f4550
alexandro umbert respondeu ao tópico de alexandro umbert em Microcontroladores
@ViniciusKruz or(;;){ float variavel; float matrix[3][3]; float latitude,latReal; char latCompleto[10]; char longCompleto[10]; if(f_Boot == 0){ if(TemPacote == 1){ TemPacote = 0; for(k=0;k<1000;k++){ ValorL = RxBuf[k]; if(ValorL == '$'){ ValorL = RxBuf[k+5]; if(ValorL == 'L'){ lcd_gotoxy(1,1); lcd_putc("Lat "); for(j=0;j<10;j++){ Lat = RxBuf[k+7+j]; lcd_putc(Lat); latCompleto[j]=Lat; } lcd_gotoxy(1,2); lcd_putc("Lon "); for(j=0;j<10;j++){ Lat = RxBuf[k+21+j]; lcd_putc(Lat); longCompleto[j]=Lat; } latReal= atof(latCompleto); if (latitude< latReal){ output_low(PIN_B0); delay_ms(20); } else { output_high(PIN_B0); } if (latitude >latReal){ output_low(PIN_B2); delay_ms(20); } else { output_high(PIN_B2); } break; } } } LimpRxBuf(); VetorPos=0; TpS = 0; } } if(m_Boot>0){m_Boot--;if(m_Boot == 0){ f_Boot = 0;enable_interrupts(INT_RDA); delay_ms(100);ValorL=RCREG;CREN=0;CREN=1; } } delay_ms(1); if (input(PIN_B5)==0){ latitude= atof(latCompleto); printf(LCD_PUTC,"\f%1.5f ",latitude); delay_ms(1000); } } } Em negrito tem parte que faz a comparação,Porque será que não faz a comparação em negrito na mesma velocidade que atualiza as coordenadas do gps? gps a cada 1 segundo atualiza. devo colocar algum comando while(true)? -
variavel matriz com PIC18f4550
alexandro umbert respondeu ao tópico de alexandro umbert em Microcontroladores
@ViniciusKruz adicionado 1 minuto depois @ViniciusKruz tá certo fazer isso? lcd_gotoxy(1,2); lcd_putc("Lon "); for(j=0;j<10;j++){ Lat = RxBuf[k+21+j]; lcd_putc(Lat); longCompleto[j]=Lat; } break; } } } LimpRxBuf(); VetorPos=0; TpS = 0; } } if(m_Boot>0){m_Boot--;if(m_Boot == 0){ f_Boot = 0;enable_interrupts(INT_RDA); delay_ms(100);ValorL=RCREG;CREN=0;CREN=1; } } delay_ms(1); latReal= atof(latCompleto); if (input(PIN_B5)==0){ latitude= atof(latCompleto); printf(LCD_PUTC,"\f%1.5f ",latitude); delay_ms(1000); } if (atof(latCompleto) < latReal){ output_low(PIN_B0); delay_ms(20); } else { output_high(PIN_B0); } if (atof(latCompleto) >latReal){ output_low(PIN_B2); delay_ms(20); } else { output_high(PIN_B2); } } } -
variavel matriz com PIC18f4550
alexandro umbert respondeu ao tópico de alexandro umbert em Microcontroladores
@ViniciusKruz ok entendi. Veja que 1 eu to querendo gravar a latitude real na variavel latitude: if (input(PIN_B5)==0){/////////////////////////grava coordenada real na variavel latitude. latitude= atof(latCompleto); printf(LCD_PUTC,"\f%1.5f ",latitude); delay_ms(1000); } e depois preciso comparar entre a latitude gravada e latitude real : if (latitude<latReal){ output_low(PIN_B0); delay_ms(20); } if (latitude>latReal){ output_low(PIN_B2); delay_ms(20); } assim caso eu esteva com o modulo e coordenada for maior ou menor com latitude gravada na variavel latitude e executar a função. -
variavel matriz com PIC18f4550
alexandro umbert respondeu ao tópico de alexandro umbert em Microcontroladores
@ViniciusKruz Obrigado,agora estou clareando as ideias! No primeiro for mostra Latitude e segundo for mostra a Longitude. E por isso q tem dois for. if (input(PIN_B5)==0){ // latitude=0; latitude= atof(latCompleto); matrix[0][1]= latitude; printf(LCD_PUTC,"\f%1.5f ",latitude); delay_ms(1000); } if (lat<latitude){ output_high(PIN_B0); } if (lat>latitude){ output_high(PIN_B2); } Agora uma duvida,quando aperto botão a variavel latitude estão sendo gravada a variavel. agora preciso comparar a variavel latitude e variavel Lat,a variavel Lat por ser tipo char,posso comparar com a tipo float? -
variavel matriz com PIC18f4550
alexandro umbert respondeu ao tópico de alexandro umbert em Microcontroladores
opa, agora tá gravando ok Mas exemplo as coordenadas mostradas no LCD tá 2226.34678....está gravando valores pouco acima ou abaixo...exemplo 2226.34599. segue a modificação que fiz: for(j=0;j<10;j++){ Lat = RxBuf[k+7+j]; lcd_putc(Lat); latCompleto[j]=Lat; } lcd_gotoxy(1,2); lcd_putc("Lon "); for(j=0;j<10;j++){ Lat = RxBuf[k+21+j]; lcd_putc(Lat); } break; } } } LimpRxBuf(); VetorPos=0; TpS = 0; } } if(m_Boot>0){m_Boot--;if(m_Boot == 0){ f_Boot = 0;enable_interrupts(INT_RDA); delay_ms(100);ValorL=RCREG;CREN=0;CREN=1; } } delay_ms(1); if (input(PIN_B5)==0){ latitude= atof(latCompleto); matrix[0][1]= latitude; printf(LCD_PUTC,"\f%1.5f ",matrix[0][1]); delay_ms(1000); } } } -
variavel matriz com PIC18f4550
alexandro umbert respondeu ao tópico de alexandro umbert em Microcontroladores
@ViniciusKruz valeu amigo,consegui com comando atof. Mas tem momento que a variavel aparece só zeros,veja como ficou agora em negrito que alterei: } lcd_gotoxy(1,2); lcd_putc("Lon "); for(j=0;j<10;j++){ Lat = RxBuf[k+21+j]; lcd_putc(Lat); latitude= atof(Lat); } break; } } } LimpRxBuf(); VetorPos=0; TpS = 0; } } if(m_Boot>0){m_Boot--;if(m_Boot == 0){ f_Boot = 0;enable_interrupts(INT_RDA); delay_ms(100);ValorL=RCREG;CREN=0;CREN=1; } } delay_ms(1); if (input(PIN_B5)==0){ printf(LCD_PUTC,"\f%1.5f ",latitude); delay_ms(1000); } } dá pra fazer alguma alteração? -
variavel matriz com PIC18f4550
alexandro umbert respondeu ao tópico de alexandro umbert em Microcontroladores
sim está correto,está recebendo coordenadas corretas. -
variavel matriz com PIC18f4550
alexandro umbert respondeu ao tópico de alexandro umbert em Microcontroladores
@ViniciusKruz@ViniciusKruz eu já tentei esse comando que me falaram atof,realmente ,mas o compilador ccs dizem que não aceita. não teria uma outra opção para fazer isso? olha isso: for(;;){ float variavel; float matrix[3][3]; float latitude; if(f_Boot == 0){ if(TemPacote == 1){ TemPacote = 0; for(k=0;k<1000;k++){ ValorL = RxBuf[k]; if(ValorL == '$'){ ValorL = RxBuf[k+5]; if(ValorL == 'L'){ lcd_gotoxy(1,1); lcd_putc("Lat "); for(j=0;j<10;j++){ Lat = RxBuf[k+7+j]; lcd_putc(Lat); } lcd_gotoxy(1,2); lcd_putc("Lon "); for(j=0;j<10;j++){ Lat = RxBuf[k+21+j]; lcd_putc(Lat); -
variavel matriz com PIC18f4550
alexandro umbert respondeu ao tópico de alexandro umbert em Microcontroladores
Ok entendi, como ficaria para armazenar esses 11 caracteres recebido da variavel char e armazenar na variavel float latitude? -
variavel matriz com PIC18f4550
alexandro umbert respondeu ao tópico de alexandro umbert em Microcontroladores
Realmente é isto mesmo que estou querendo,meu gps envia serialmente a latitude exemplo:4547.34567 neste formato ele envia. Poederia me ajudar neste codigo? para receber numero de cada vez ,armazenar em um buffer. depois disso armazeno na variavel latitude.
Sobre o Clube do Hardware
No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais
Direitos autorais
Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais