Ir ao conteúdo

alexandro umbert

Membro Pleno
  • Posts

    22
  • Cadastrado em

  • Última visita

Tudo que alexandro umbert postou

  1. 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
  2. @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;
  3. @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); } } }
  4. modelo gps é gy-gps6mv2 adicionado 9 minutos depois @ViniciusKruz modelo gps é gy-gps6mv2
  5. @ViniciusKruz obrigado pela alerta do problema, tentei diminuir para o valor de 1000 para 100,mas infelizmente não funcionou.
  6. @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)?
  7. @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); } } }
  8. @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.
  9. @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?
  10. 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); } } }
  11. @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?
  12. sim está correto,está recebendo coordenadas corretas.
  13. @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);
  14. Ok entendi, como ficaria para armazenar esses 11 caracteres recebido da variavel char e armazenar na variavel float latitude?
  15. 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.
  16. @ViniciusKruz ola,obrigado. O codigo do gps fica enviando coordenadas pela variavel tipo char lat e float latmin=3456.6785; float latitude; char Lat; lcd_gotoxy(1,2); lcd_putc("Lon "); for(j=0;j<12;j++){ Lat = RxBuf[k+21+j]; lcd_putc(Lat); variavel Lat que envia coordenadas no display latitude=lat; if (latitude>latmin){ output_high(PIN_B3); } if (latitude<latmin){ output_high(PIN_B3); }recebida pela variavel Lat Eu preciso que as coordenadas recebida pela variavel Lat sejam colocada na variavel latitude e assim jogar esse valor na matriz: latitude=lat; matrix[2][2]=latitude;
  17. Ola amigos! Tenho esse codigo: float latmin=3456.6785; float latitude; char Lat; lcd_gotoxy(1,2); lcd_putc("Lon "); for(j=0;j<12;j++){ Lat = RxBuf[k+21+j]; lcd_putc(Lat); latitude=lat; if (latitude>latmin){ output_high(PIN_B3); } if (latitude<latmin){ output_high(PIN_B3); } Esse codigo é parte do comunicação de GPS,e preciso gravar valor recebido da variavel char LAT e grave este valor na matriz,alguem poderia me ajudar?
  18. Isadora obrigado,verificando o circuito venho lhe informar que o mesmo tinha resistor aterrado. puts que falhaaa...kkkkk
  19. boa noite. Estou com esse código é está dando problema,estou utilizando LDR. O valor só fica oscilando até 1023,porém quando coloco luz e escuro ele não altera muito o valor. codigo: #include <18F4550.h> #device ADC=10; #fuses NOWDT,NOPROTECT,NOLVP,HS #use delay(clock=20000000) //#define trisa 0b00000000 #define trisb 0b00000000 // tris utilizado pelo LCD #define trisc 0b11111111 #define trisd 0b00000000 #include <lcd.c> int16 sensor; int main() { lcd_init(); setup_adc_ports(AN0); setup_adc(ADC_CLOCK_DIV_8); set_adc_channel(0); delay_us (20); while (TRUE) { sensor = read_adc(); printf (lcd_putc,"\fVALOR:%ld",sensor); delay_ms (200); } }

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

×
×
  • Criar novo...