Ir ao conteúdo
  • Cadastre-se

alexandro umbert

Membro Pleno
  • Posts

    25
  • Cadastrado em

  • Última visita

Tudo que alexandro umbert postou

  1. Ola pessoal Estou fazendo comunicação PIC e nextion RX TX,,mas quando eu aperto o botão do nextion para acender led,ele envia apenas uma vez o caracteres,depois quando eu aperto outro botão ele não envia mais nada. O valor anterior do caracteres fica na tela e não recebe mais nada. Alguem poderia me ajuda onde está o erro: while(true){ char=d; if(kbhit()) { d=getc(); printf(lcd_putc,"\%u",d); delay_ms(200); if(d==10){ output_low(PIN_B1); } }
  2. Ola, Utilizo PIC 18f4550,e estou fazendo trabalho com no compiler CCS,vi varios locais na net conectando mouse no pinos do PIC e consegue pegar informação do eixo X e Y . Alguem já fez com PIC? segue video do cara fez com arduino: https://www.youtube.com/watch?v=SXQfT7c-9rU&t=21s
  3. 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
  4. @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;
  5. @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); } } }
  6. modelo gps é gy-gps6mv2 adicionado 9 minutos depois @ViniciusKruz modelo gps é gy-gps6mv2
  7. @ViniciusKruz obrigado pela alerta do problema, tentei diminuir para o valor de 1000 para 100,mas infelizmente não funcionou.
  8. @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)?
  9. @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); } } }
  10. @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.
  11. @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?
  12. 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); } } }
  13. @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?
  14. sim está correto,está recebendo coordenadas corretas.
  15. @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);
  16. Ok entendi, como ficaria para armazenar esses 11 caracteres recebido da variavel char e armazenar na variavel float latitude?
  17. 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.
  18. @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;
  19. 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?
  20. Isadora obrigado,verificando o circuito venho lhe informar que o mesmo tinha resistor aterrado. puts que falhaaa...kkkkk
  21. 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); } }
  22. Boa noite. Estou fazendo um robozinho e vou utilizar sensores ultrassônicos,eu fiz o código no compile CCS e gostaria se alguém verificasse se existe erro. #include <18F4550.h> #device ADC=10; #fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV2,VREGEN #use delay(clock=48000000) #define trisa 0b00000000 // Configurado para saida #define trisb 0b00000000 // tris utilizado pelo LCD #define trisc 0b11111111 #define trisd 0b00000000 int16 time; float distance; #define trig pin_D1 #define echo pin_C0 void main() { delay_ms(1000); setup_timer_1(T1_INTERNAL|T1_DIV_BY_1); while(true) { output_high(trig); delay_us(10); output_low(trig); while(!input(ECHO)) {} set_timer1(0); while(input(ECHO)) {} time=get_timer1(); distance=time*0.017; if (distance < 4) { // } if (distance > 4) { // } delay_ms(1000); } }
  23. Ola Amigos, estou tentando instalar um sensor capacitivo 6~36VDC NPN ,o sensor utiliza 3 fios sendo 2 alimentação e 1 sinal,instalação no PIC16f628a. Corrente de saída = 200mA SE alimentar 12VDC no positivo e terra e o no fio do sinal colocar resistor de 10k e alimentar no PIC ,vai funcionar? Alguém poderia me ajuda em um circuito simples? abraços
  24. Boa tarde! Estou com um código do PIC18f4550 compilado no CCS,foi gravado com sucesso no PIC. Foi utilizado os pinos corretamentes no LCD ,porém ele não mostra a mensagem. Modelo LCD: MGD1602B SERIES LCD MODULE Alguem poderia me ajudar? #include <18f4550.h> #device ADC=8 #fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN #use delay(clock=48000000) #define LCD_ENABLE_PIN PIN_C2 #define LCD_RS_PIN PIN_C1 #define LCD_RW_PIN PIN_C0 #define LCD_DATA4 PIN_D4 #define LCD_DATA5 PIN_D5 #define LCD_DATA6 PIN_D6 #define LCD_DATA7 PIN_D7 #include <lcd.c> void main() { set_tris_d(0x00); set_tris_c(0x00); output_d(0x00); lcd_init(); Delay_ms(100); lcd_gotoxy(3,1); Delay_ms(1000); lcd_putc("teste!"); lcd_gotoxy(4,2); lcd_putc("LCD PIC"); while(1); }

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