Ir ao conteúdo
  • Cadastre-se

Thiago Felipe Soares Gonçalves

Membro Pleno
  • Posts

    86
  • Cadastrado em

  • Última visita

Tudo que Thiago Felipe Soares Gonçalves postou

  1. Meu rapaz mandou muito bem!!! Eu escrevendo o código errado também não dava né kkkk Vou fazer aqui. adicionado 33 minutos depois Meu irmão, funcionou direitinho obrigadão. Agora só implementar no meu código principal e boa.
  2. Não deu boa, continua não identificando a expressão, olha o que estou fazendo: bit control; float rad = 0.00; float T1 = 0.00; int Tempo = 0x00; void Interrupt() { if (INTF_bit) { Tempo = (int) T1; lsbyte_int8 = Tempo; msbyte_int8 = (Tempo & 0xFF00) >> 8; TMR1H = msbyte_int8; TMR1L = lsbyte_int8; TMR1ON_bit = 0x01; control = ~control; INTF_bit = 0x00; if(control) INTEDG_bit = 0x01; else INTEDG_bit = 0x00; } if(TMR1IF_bit) { TMR1IF_bit = 0x00; RC1_bit = 0x01; delay_us(10); RC1_bit = 0x00; TMR1ON_bit = 0x00; } } void main() { CMCON0 = 0x07; ANSEL = 0x00; T1CON = 0x00; INTCON = 0xD0; INTEDG_bit = 0x00; TMR1IF_bit = 0x00; TMR1H = 0xEF; TMR1L = 0xB9; TMR1IE_bit = 0x01; TRISC = 0x00; RC0_bit = 0x00; RC1_bit = 0x00; RC2_bit = 0x00; control = 0x00; while(1) { while(rad>3.14) { rad = rad + 0.01; T1 = (rad*8333.33)/3.14; delay_us(100); } rad = 0.00; } }
  3. Não deu certo, não reconhece no microC esse código, aparece um monte de erros. Mas valeu a tentativa.
  4. Não sei, mas logo pela manhã vou tentar. E já posto aqui se funcionou. Obrigadoooo!!! \o/\o/\o/
  5. Boa noite, estou com o seguinte problema eu tenho uma variável tipo float, porém preciso transformar ela para int e depois para hexadecimal com 16 bit separando os 8 bits mais significativos dos 8 bit menos significativos. O que quero fazer é uma interrupção pelo Timer1 com base num tempo calculado pelo meu programa dentro do main. float T1 = 0.00; // Variável de tempo T1 = (rad*8333.33)/3.14; // Calcula o tempo de espera para o chaveamento Com base no tempo calculado em T1 preciso transformá-lo em um inteiro que seria o tempo em micro segundos arredondado para então transformá-lo em hexadecimal com 16 bits separando os 8 bits mais significativos dos 8 bits menos significativos para então armazená-los em. TMR1H = 0xEF; TMR1L = 0xB9; Espero que possam me ajudar a resolver esse problema, agradeço muito atenção.
  6. Opa realmente estava invertido, porém ainda faltava configurar os registradores corretamente, segue o código: void Interrupt() { if (TMR1IF_bit) { TMR1IF_bit = 0x00; TMR1H = 0x0B; TMR1L = 0xDC; RC3_bit = ~RC3_bit; } } void main() { CMCON0 = 0x07; T1CON = 0x31; INTCON = 0xC0; TMR1IF_bit = 0x00; TMR1H = 0x0B; TMR1L = 0xDC; TMR1IE_bit = 0x01; TRISC = 0x00; RC3_bit = 0x00; RC4_bit = 0x00; while(1) { RC4_bit = 0x01; delay_ms(1000); RC4_bit = 0x00; delay_ms(1000); } } Obrigado pela ajuda.
  7. Boa Tarde, estou com o seguinte problema estou tentando fazer uma interrupção por timer1 que conta até 500 ms. O código não funciona, mas não consigo achar o erro. Segue ele: void interrup() { if(TMR1IF_bit) { TMR1IF_bit = 0x00; TMR1L = 0x0B; TMR1H = 0xDC; RC4_bit = ~RC4_bit; } } void main() { CMCON0 = 0x07; CMCON1 = 0x02; INTCON = 0xC0; TMR1IE_bit = 0x00; TMR1L = 0x0B; TMR1H = 0xDC; T1CON = 0b00110001; TRISC = 0x00; RC3_bit = 0x00; RC4_bit = 0x00; while(1) { RC3_bit = 0x01; delay_ms(1000); RC3_bit = 0x00; delay_ms(1000); } } Na simulação ele não inverte o estado do pino RC4.
  8. Realmente, colocando o valor numérico do canal que quero usar, funcionou o código ficou assim: #define LED1 PORTC.F2 #define LED2 PORTC.F3 #define LED3 PORTC.F4 int AD = 0; int AD2 = 0; void main() { CMCON0 = 0x07; ADCON1 = 0x00; TRISA = 0xFF; TRISC = 0x00; ANSEL = 0x03; PORTA = 0x00; PORTC = 0x00; while(1) { LED3 = 0x00; delay_ms(500); ADCON0 = 0x01; // Habilita o canal AN0 delay_us(100); // Tempo necessario para set o canal AD = ADC_Read(0); // Lê a porta analogica AN0 ADCON0 = 0x05; // Habilita o canal AN1 delay_us(100); // Tempo necessario para set o canal AD2 = ADC_Read(1); // Lê a porta analogica AN1 if(AD >= 512) { LED1 = 0x01; } else { LED1 = 0x00; } if(AD2 >= 512) { LED2 = 0x01; } else { LED2 = 0x00; } LED3 = 0x01; delay_ms(500); } }
  9. Estou tentando ler o sinal de dois sensores cada um em uns dos canais do PIC16F688, usando as entradas analógicas AN0 e AN1, segue o código. #define POT PORTA.F0 #define SENSOR PORTA.F1 #define LED1 PORTC.F2 #define LED2 PORTC.F3 #define LED3 PORTC.F4 int AD = 0; int AD2 = 0; void main() { ANSEL = 0x03; CMCON0 = 0x07; TRISA = 0xFF; TRISC = 0x00; PORTA = 0x00; PORTC = 0x00; while(1) { LED3 = 0x00; delay_ms(500); ADCON0 = 0x01; AD = ADC_Read(POT); delay_ms(100); ADCON0 = 0x05; AD2 = ADC_Read(SENSOR); delay_ms(100); if(AD >= 512) { LED1 = 0x01; } else { LED1 = 0x00; } if(AD2 >= 512) { LED2 = 0x01; } else { LED2 = 0x00; } LED3 = 0x01; delay_ms(500); } } A ideia é simples, ele deveria ler os dois sensores comparar os valores de AD e AD2 nos ifs e acender o LED referente aquele sensor. O que acontece na simulação o AD do POT acende os dois LEDs e o AD2 do SENSOR não funciona.
  10. Depois de ler mais a fundo o datasheet descobri que é necessário configurar as flags do registrado ANSEL para 0x00. O código fica assim: bit control; void interrupt() { if(INTF_bit) { control = ~control; INTF_bit = 0x00; if(control) RC1_bit = 0x01; else RC1_bit = 0x00; } } void main() { CMCON0 = 0x07; ANSEL = 0x00; GIE_bit = 0x01; INTE_bit = 0x01; INTEDG_bit = 0x00; TRISA = 0b00000100; TRISC = 0b00000000; PORTA = 0b00000100; PORTC = 0b00000000; control = 0x00; while(1) { RC0_bit = 0x01; delay_ms (2000); RC0_bit = 0x00; delay_ms (2000); } }
  11. Estou com um problema ao tentar fazer uma interrupção externa no PIC16F688, segue o codigo: bit control; void interrupt() { if(INTF_bit) { control = ~control; INTF_bit = 0x00; if(control) RC1_bit = 0x01; else RC1_bit = 0x00; } } void main() { CMCON0 = 0x00; CMCON1 = 0x00; INTCON = 0b11010000; INTEDG_bit = 0x00; TRISA = 0b00000100; TRISC = 0x00; PORTA = 0b00000100; PORTC = 0x00; control = 0x00; while(1) { RC0_bit = 0x01; delay_ms (2000); RC0_bit = 0x00; delay_ms (2000); } } Tentei simular no Proteus mas não funcionou. A ideia é um led acender e apagar com delay de 2 segundos e ao aperta o botão que esta no pino RA2/INT ele deveria acender o segundo led e ao pressionar novamente apagar-lo. porém não funciona o cogido para o PIC16F688, mas para o PIC16F648 funcionou direito.

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!