Ir ao conteúdo

DELPITEC

Membro Pleno
  • Posts

    115
  • Cadastrado em

  • Última visita

Tudo que DELPITEC postou

  1. Ué...colocar mais peso em cima dele. Kkkkkk Ok, agora que já fiz a piadinha posso perguntar? Cadê seu código? Seu diagrama? Você já fez algo?
  2. Só pra não deixar passar em branco...eu não sei se esse pic tem o bit HLVDCON Caso tenha, só colocar um capacitor na fonte que mantenha o pic alimentado o tempo suficiente para testar o bit e se ele detectar tensão baixa, grava o dado que for na eeprom, correto @Isadora Ferraz ? Abs
  3. O exemplo do datasheet é em assembly mas é simples de converter para C. É antes do código em asm (no datasheet) tem um explicação passo a passo do que deveria ser feito. Abs
  4. Em qualquer compilador, prefiro eu mesmo escrever a função de gravar dados na eeprom. Essas bibliotecas não desativam o flag de gravação da EEPROM e nem apontam o registrador EEADR para um endereço vazio e ao executar em um power down os dados podem ser perdidos (já passei por isso na prática, um pic em um sistema com muitas quedas de energia perdia os dados na eeprom, pesquisa por EEPROM Lost data em fóruns gringo e verá que muitos passam por isso). Isso acontece pelo que citei acima: porque as bibliotecas não desativam os flags de escrita e nem zeram o registrador que aponta o endereço de memória que será gravado. A melhor coisa é você escrever na mão essa biblioteca. Pesquisa no datasheet por EEPROM write e EEPROM read e lá tem os comandos para fazer escrita e leitura. Não vai dar mais que 5 linhas de código cada uma. Abraço
  5. Dá pra fazer de vários jeitos, aqui vai um: 1) Configura o TIMER 0 como temporizador e que incremente uma variável global contador_estouros a cada 1ms 2) Crie eu próprio delay Ex: void my_delay_ms(char estouros){ start_timer0(); // você terá que criar a função que inicializa o timer0 com o valor de 0 while(estouros > contador_estouros_timer0); // ficará aqui enquanto seu valor em ms for maior que o contador do TMR0 stop_timer0(); // você terá que criar uma função que pare o timer0, para ele não ficar contando infinitamente } 3) Substitua seus delays antigos por my_delay_ms(); Existem vários artigos de como configurar o timer 0 do PIC. Aqui tem um bem didático. http://microcontrolandos.blogspot.com.br/2012/11/utilizando-o-timer0-do-pic.html Abraço
  6. Olá. Eu sempre utilizo portB porque eles já vem com resistor de pull up interno, e eles só compartilham a função de PGM/PGD/PGC. Já o portA compartilha funções de entrada analógica, comparador, master clear, etc... além de não possuir pull up interno. Mas você pode usar como digital i/o qualquer uma das portas. Abs
  7. Já que você já sabe como fazer, vou só dar a lógica...os periféricos você faz... #define BOTAO PORTBbits.RB0 if (BOTAO){ start(timer0); while (BOTAO); if (timer0 > 2 segundos) piscaled(2); // a função para piscar o led voce faz fora else piscaled(1); stop(timer0); reset(timer0; } As funções é com você. Abraço
  8. Grande Isa. Pois é. Até vi alguns circuitos de adaptação, mas preferi investir em um hardware com i2c e spi em portas separadas
  9. aproveitando o tópico: Como faço para ligar um shield SPI e 12C no mesmo pino? Pois queria ligar um RTC i2C e o módulo enc28j60 em um PIC.
  10. Olá. Não analisei profundamente, até poruqe o jeito que foi feita a postagem ficou meio confuso. Mas n pino RA4 é coletor aberto (tens que colocar um resistor de puul-up nele) Boa sorte!
  11. Já fiz esse tipo de circuito (não com arduino) Existe um CI chamado FT232 que converte o serial do teu arduino para o USB. Nunca usei arduino mas já me informaram de um problema ao utilizar este CI com o arduino (não lembro qual): A porta serial do arduino já está sendo utilizada para comunicar com o PC, e é a mesma porta que é utilizada no conector preto, o que se usa para soquetar com jumpers. Não sei como resolveu esse problema, mas eu imagino que a solução seja desconectar do PC o usb do arduino ou , selecionar outra porta serial do PC para ler o conversor. Abs
  12. Não esqueceu de deixar o pino do mclr em high?
  13. Olá. Claro que pode. Olhei beeem por cima. Parece que o código já sai contando e quando pressionado e mantido, ele pausa e depois de solto ele zera e ao pressionar de novo inicia a contagem. Acho que algo funcional seria: while(1) { if(Zerar){ Timer0_Init(); Timer1_Init(); zerar_flag = 1; while (Zerar); zerar_flag = 1; Crono.minutos = 0; Crono.segundos = 0; Crono.mSegundos = 0; MicroSegundos = 0; } Lcd_Chr( 2, 5, Crono.minutos/10 + '0' ); Lcd_Chr_CP( (Crono.minutos%10) + '0' ); Lcd_Chr_CP(':'); Lcd_Chr_CP( Crono.segundos/10 + '0' ); Lcd_Chr_CP( (Crono.segundos%10) + '0' ); Lcd_Chr_CP(':'); Lcd_Chr_CP( Crono.mSegundos/100 + '0' ); Lcd_Chr_CP( (Crono.mSegundos/10%10) + '0' ); Lcd_Chr_CP( (Crono.mSegundos%10) + '0' ); Lcd_Chr_CP(':'); Lcd_Chr_CP( MicroSegundos/100 + '0' ); Lcd_Chr_CP( (MicroSegundos/10%10) + '0' ); Lcd_Chr_CP( (MicroSegundos%10) + '0' ); } } OBS: ACHOOO nunca trabalhei com mikroc Mas a ideia é que ao pressionar, acione o timer e aguarde ser solta ( while (Zerar) ) e ao soltar, pare o timer e zere as variáveis. Mas olhei bem por cima, mas não é nada muito complicado. E já digo que essa não é uma maneira correta de se fazer (didaticamente até é aceitável) Abs
  14. No mplab acusa erro. Pois sempre que quero aproveitar o código de um uC para outro e tem algum registrador que tem em um e não tem no outro, na hora de mandar compilar ele acusa erro. No mais, o melhor é testar em simulador para ter certeza de que não há pullup
  15. Configure os registradores de pullup tanto para porta D como para b. Caso algum deles não exista, o compilador acusará erro (sendo assim, tu vai poder concluir se existe pull up em ambas ou não) Caso o compilador não acuse erro, é porque tem pullup para as portas Abs
  16. Olá amigo. Sem ler o datasheet inteiro é difícil, mas o melhor que tens a fazer é testar. Configura os registradores para ambas as portas e veja o que acontece Abs
  17. Pesquisa na internet meu caro, tem muita coisa pronta
  18. Não consigo entender...estudar um pic16f690 (8 bits que não deve ter 1 k de flash e que não tem serial e nem EEPROM) e estar preocupado com número de ciclos do cristal? Pega qualquer um de 16 bits pra cima e seja feliz hahaha
  19. @Isadora Ferraz Boa!! É só a situação do pull-up mesmo. Abraço
  20. @Anonymous Programmer Olá! Esse pino faz parte das portas analógicas. Tem que setar esse pino para digital i/o nós registradores analógicos. Se não me engano é ANSEL. Tem que ver no datasheet. E esse pino é coletor aberto, tem que colocar um resistor de pull up nele para utilizar como saída. Avise se deu certo. Abs [email protected]
  21. Utiliza a IDE mplab e o compilador XC8 (que é um "plugin" do MPLAB) Motivo 1: É da própria microchip Motivo 2: Não precisa de licença Motivo 3: É muito mais poderoso que o CCS Na minha experiência com o CCS, quando comecei a me aprofundar e fazer códigos mais sofisticados, tinha que fazer uma série de "gambiarras" para utilizar coisas como ponteiro para função, função em estrutura de dados e etc. Então migrei para o CCS e foi um parto até eu me adaptar. Sofra apenas uma vez hahaha Abs
  22. Com certeza. Existe uma infinidade de possibilidades. A mais fácil é por usart (comunicação serial), i2c , spi , usb, etc. Pesquise sobre esses assuntos e já terá com o que brincar por uns 6 meses Abraço
  23. Se você configurou seu modo CCP para interromper a cada subida de pulso sim. As renovações da variável do CCP (em um pic 16F) podem ser: Capture mode, every falling edge (a cada borda de descida) Capture mode, every rising edge (a cada borda de subida) Capture mode, every 4th rising edge (a cada 4 bordas de descida) Capture mode, every 16th rising edge (a cada 16 bordas de descida) Daí essa seleção é feita na função: setup_ccp1(CCP_CAPTURE_RE) DICA: Digita setup_ccp1 no help do ccs que ele explica direitinho o que faz (help do ccs é muito rico de informações) OBS: pelo que li um pouco, o trexo do código no ccs para entrar em uma interrupção é: #int_CCP1 void CCP1_isr(void) { sub=ccp_1; set_timer1; } abs
  24. Sim. Ele vai armazenar um valor. Você deverá converter esse valor Tire os ifs nesse bloco e veja se muda algo. o que me parece é que ele não está atribuindo os valores de ccp_1 à variável sub. Você está simulando no proteus? Se sim, rode no modo de depuração e veja se a cada volta no loop main o TMR1 está alterando e se a cada chamada da interrupção do CCP1 ele está atribuindo aquele valor ao sub. #INT_CCP1 void pulsos_encolder(){ sub=ccp_1; set_timer1(0); }
  25. Pelo pouco que lembro do CCP como capture, ele armazena o valor do timer em duas variáveis de 16 bits. (CCP1 high e CCP1 low). Utilizei ele uma vez para medir frequência. Tem que configurar um timer e a cada estouro do CCP, gera uma interrupção que salva o valor do tempo entre subidas, por exemplo. Abs

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

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!