Ir ao conteúdo
  • Cadastre-se

alexandro umbert

Membro Pleno
  • Posts

    25
  • Cadastrado em

  • Última visita

posts postados por alexandro umbert

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

     

     

  3. @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;
     

  4. @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);
        }
        
          }

        }

        
        
         
        

  5. @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)?

  6. @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);
     }
        }
        }
     

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

     

     

     

     


     

    • Curtir 1
  8. @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?
     

  9. 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);
        }
    }
         
        }

  10. @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?

  11. @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);
                        

    • Curtir 1
  12. @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;

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

     

  14. 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);
            }
       }
  15. 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);
    }
    }

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

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

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!