Ir ao conteúdo
  • Cadastre-se

test man*~

Membro Pleno
  • Posts

    567
  • Cadastrado em

  • Última visita

Tudo que test man*~ postou

  1. Após escritas consecutivas na EEPROM é bom esperar o término da escrita anterior. while(EECON1.WR){} //PIC16F877A
  2. @_xyko_ Isso mesmo... quando eu estava lendo o tutorial do Paulo Aphawk isso deu um nó na minha cabeça HEHE!!! @fabiano aladin coloquei o CCS 4.78 para testar... Apesar de o PROTEUS mostrar um warning o circuito funcionou normalmente. Aparentemente o problema não está no CCS.
  3. Não, tipo 1=saída 0=entrada para os AVRs (ou eu estou errado?) nos PICs 1=entrada 0=saída...
  4. Você mudou o código ¬¬ Vê se iso resolve... Estou chutando!! =D Se resolver eu falo o que eu acho que está acontecendo... # INCLUDE <16f628a.h># USE DELAY (CLOCK=4000000)# FUSES XT ,NOWDT , PUT , BROWNOUT , NOLVP# USE FAST_IO( # BYTE TRISB = 0X86 // <<<--- Adicionado# BIT TRISB0 = TRISB.0 // <<<--- Adicionado# BIT TRISB7 = TRISB.7 // <<<--- Adicionado VOID MAIN (){ INT a = 0; //set_tris_b (0b00000001); // <<<--- Retirado TRISB0 = 1; // <<<--- Adicionado PINO B0 COMO ENTRADA TRISB7 = 0; // <<<--- Adicionado PINO B7 COMO SAÍDA WHILE (TRUE){ IF (input (pin_B0)==1) { delay_ms (300); a = a + 1; } IF (a == 1) { delay_ms (50); output_high (PIN_B7); } IF (a == 2) { delay_ms (50); output_low (PIN_B7); a = 0; } }} Edit: O # USE FAST_IO( B ) continua, erro meu!
  5. Já aconteceu isso umas três vezes comigo... Após quebrar a cabeça por uns 2 dois dias acabei descobrindo que o problema era no PROTEUS... Mas mesmo assim, ele é EXCELENTE
  6. O PIC é invertido se comparado aos AVR's Testei aqui e funcionou normalmente... A diferença é que a versão do CCS é a 5.046... Você pode postar o arquivo .lst? # INCLUDE <16f628a.h># USE DELAY (CLOCK=4000000)# FUSES XT ,NOWDT , PUT , BROWNOUT , NOLVP# USE FAST_IO( VOID MAIN (){ INT a = 0; set_tris_b (0b00000001); WHILE (TRUE){ IF (input (pin_B0)) { //IF (input (pin_B0)==1) { delay_ms (300); a = a + 1; } IF (a == 1) { delay_ms (50); output_high (PIN_B7); } IF (a == 2) { delay_ms (50); output_low (PIN_B7); a = 0; } }}
  7. É possível sim cara... Você adicionou a STDLIB #INCLUDE <STDLIB.H> Os PICs não fazem coisa alguma =D nem "if(X>0)" HEHE
  8. Lembrei do joguinho de cartas do FFIX HEHE! A função rand(); produzirá sempre uma mesma sequencia, para mudar deve ser usado srand(); (acho que é isso mesmo). Mas o esquema do Timer fica mais fácil... Tipo, o que determina que o número escolhido pode ser considerado aleatório? No caso do Timer como garantir que a leitura atual dele gere um número realmente aleatório? Só curiosidade mesmo!
  9. Se você estiver usando o CCS dê uma olhada na função rand(); no help. //#define RAND_MAX 2 #INCLUDE <STDLIB.H> : void main() { int I; I=rand(); // <--- I igual a um número aleatório (pseudo-random). :
  10. Em: void troca_posicao(void) { aux = V[p0]; V[p0] = V[p1]; V[p1] = aux; } Você usa o P1, mas em: for (K = 0; K < 7; K++) { for (p0 = 0; p0 < 7; p0++) if (V[p0] > V[p0+1]) troca_posicao(); mostra_posicao(); } Você não incrementa ele, tente algo do tipo: for (K = 0; K < 7; K++) { for (p0 = 0; p0 < 7; p0++) { if (V[p0] > V[p0+1]) troca_posicao(); p1++; // <<-- Incrementa o P1 } p1 = 1; // <<-- Inicializa o P1 com 1 novamente mostra_posicao(); } DICA: Carregue o PROTEUS com o arquivo .cof e em vez do .hex, aperte o pause para debugar... Daí vá fazendo o passo a passo (Step Over, Step Into) e olhando o que acontece com as variáveis K, G, P0, P1 e V[8]. õ/
  11. É... Ai fica osso, não sei coisa alguma de JAVA... E é perigoso você viu as fotos que o Isadora postou?? HAHAHAHAHAHAHAHAHAHAHA!!!!!
  12. Cara, você já ouviu falar do labVIEW (Os Os Mythbusters já usou ele)? Ele usa linguagem gráfica assim fica bem simples usá-lo. Dá uma olhada e vê o que você acha dele, se gostar... Off.: Conheço/Conheci o cara do vídeo que você postou, HEHE!
  13. Bacana, já deu para aprender um monte com esse projeto seu @aphawk
  14. Ou então você pode usar um PCA9685... Como a Adafruit vende uma plaquinha com o CI provavelmente eles também disponibilizam uma biblioteca para o Arduíno.
  15. A única coisa que posso pensar agora é o MCLR, você desabilitou ele? As páginas 39 e 41 do datasheet fala sobre o CMCON e como desligar o modulo comparador Agora que eu vi, o @Isadora Ferraz já tinha dado a solução HUAhuahuaHU inclusive para esta (FUSES).
  16. EDIT: @Ramiro Peralta Saquei cara... O PIC16F676 é inicializado (POR / BOR / BOD) com as portas analógicas e comparador ativado, assim é preciso desativá-los (o CCS C faz isso sozinho o MikroC e o MPLAB XC8 não) void main() { ANSEL = 0b00000000; // DESLIGA AS PORTAS ANALOGICAS =D CMCON = 0b00000111; // DESLIGA O COMPARADOR =) TRISA = 0b111111; TRISC = 0b000000; // PORTA = 0b000000; PORTC = 0b000000; while(1){ if(RA0_bit == 1){ RC5_bit = 1; } }} falou! õ/
  17. fiz um teste aqui... Usando o mikroC o código não funciona, deixei todos os fuses "Disabled" somente o master clear "Enabled". Usando o CCS o código funcionou normalmente então >>APARENTEMENTE/TALVEL/EUACHO<< o problema não é o PROTEUS... Código CCS: #include <16F676.h>#device ADC=10 #FUSES NOPUT //No Power Up Timer#FUSES MCLR //Master Clear pin enabled#FUSES NOBROWNOUT //No brownout reset#FUSES NOPROTECT //Code not protected from reading#FUSES NOCPD //No EE protection #use delay(internal=4MHz)#include <PIC16F676_registers.h> #bit LED = MCU_PORTC.5#bit botao = MCU_PORTA.0 void main() { MCU_TRISA = 0b111111; MCU_TRISC = 0b000000; MCU_PORTC = 0b00000000; while(1) { if(botao == 1) { LED = 1; } }} Nos dois circuitos usei "Logic state" e "Logic probe" para facilitar. Dei uma olhada no ASM gerado pelo MikroC (depois de ter alterado um pouco o seu código) e me pareceu tudo OK mas nada de funcionar ... Faz um teste com o circuito na prática... õ/
  18. Na aba projects (dentro do MPLAB) clique com o direito na pasta do projeto / Selecione Properties / Selecione o XC8 global options / em Output file format escolha COFF. O cof será salvo na pasta diretório do projeto > dist > default > production No proteus quando você carregar o PIC com o .cof clique em pause e a janela do código aparecerá (talvez em branco) então você clica na setinha "step in" / "step over" o código aparecerá daí é só ir fazendo os testes =D... Se você clicar duas vezes em uma linha de código qualquer uma bolinha vermelha aparecerá (breakpoint) daí dando o play ou clicando no símbolo com o homenzinho correndo a simulação pausará quando o PIC for executar aquela linha (dá para economizar um tempinho). Meu MPLAB XC8 demora 15 segundos para compilar um código (bem pequeno) para o 18F4550 =(
  19. Edit1: Para ativar a interrupção do TMR0 o bit PEIE (Peripheral Interrupt Enable bit) também deve ser setado, ou não? Edit2: Não, não precisa =) if(PORTAbits.RA4 == 1) { INTCONbits.TMR0IE = 0; PORTAbits.RA0 = 1; PORTAbits.RA1 = 1; PORTAbits.RA2 = 1; PORTAbits.RA3 = 1; if(PORTAbits.RA6 == 1) //incrementa minuto { minuto = minuto + 1; converte_valor(); } } else { INTCONbits.TMR0IE = 1; if (estouro == 15) { //contador do estouro. a cada 15 estouros temos 1 segundo led_seg = ~led_seg; //inverte estado do led segundo++; //incrementa segundos estouro = 0; //zera valor do estouro converte_valor(); if(segundo == 60) { minuto++; //incrementa minuto segundo = 0; //zera segundo converte_valor(); if (minuto == 60) { hora++; //incrementa horas minuto = 0; //zera minuto converte_valor(); if(hora == 24) { hora = 0; //zera hora } } } } } Se o pino RA4 e o RA6 estiverem em nível alto o PIC incrementa a variável minuto porém o incremento não é mostrado no display pois a interrupção está desativada e é lá que a atualização do display é feita; if(PORTAbits.RA4 == 1) { INTCONbits.TMR0IE = 0; o else também não é executado então o PIC incrementa a variável minuto fazendo com que ela passe de 60. Considerando que há botão conectado ao pino RA6, ao apertá-lo a variável minuto incrementará muitas vezes... os displays estão sendo multiplexados no tempo (eu acho xD) então não é possível você ligar todos eles no mesmo instante. //Todos os displays acesos PORTAbits.RA0 = 1; PORTAbits.RA1 = 1; PORTAbits.RA2 = 1; PORTAbits.RA3 = 1; Se você estiver usando o Proteus carregue o pic com o arquivo .cof e em vez de apertar play aperte pause e faça o passo a passo do código... Assim fica mais fácil encontrar erros.
  20. Já foi marcado como resolvido mas vou postar assim mesmo HEHE! Mestre @aphawk o PICKIT 2 também possui o in-circuit debugger... A diferença entre os dois é que o PICKIT 2 não suporta os chips mais novos com os PIC32MZ, ele foi descontinuado pela Microchip. Dê preferência a um PICKIT 3 original, a maioria dos PICKIT 2 falsificados (não sei se isso acontece com o 3) fornecem apenas 5V assim você não poderá gravar chips que operem com 3.3V, até poderá, mas usando "arranjos técnicos" =D. A Microchip não cobra frete para ferramentas de desenvolvimento e se você for estudante ainda conseguirá um desconto de 25%. http://www.microchipdirect.com/ProductSearch.aspx?Keywords=PG164130
  21. A função "kbhit();" na verdade retorna o estado do bit "RCIF" (que indica se a recepção de um dado terminou, informando assim se há um dado aguardando para ser lido no registrador de entrada)... Esse bit "RCIF" é zerado por hardware quando o dado é lido do registrador de entrada "RCREG". Assim não é preciso limpar a função "kbhit();" o hardware o faz... >>>>> Isso considerando USART por hardware . É possível postar o esquemático e o código completo?
  22. @aphawk, a compensação é feita dentro da função: "ler_temperatura_pressao_bmp180();" Voltei ao seu tutorial e vi que você usa variáveis float, cliquei no link que você indica e vi o arquivo ensinado a usar as variáveis float, o Interessante foi que eu estava procurando por algo assim e não tinha encontrado, você acabou tirando uma dúvida sem eu perguntar. Usando variáveis float a pressão lida vai para ~91524PA o que é ~890m (Pressão at sea level = 115700)... Até que ficou legal mas não perfeito... Vou deixar isso por aqui mesmo e partir para o próximo... É como você disse em um post anterior, seria bacana se o sensor fizesse a compensação internamente e entregasse a variável já no jeito... Mas pelo menos ele é barato . Vou ver se uso o módulo bússola agora (polos magnéticos/geométricos, declinação magnética ), vou esperar o 2560 chegar! Tomara que dessa vez não dê fronho! Não está resolvido por completo mas fazer o quê? HEHE!
  23. aphawk, em 04 Set 2015 - 13:31, disse: @aphawk Testei aqui mas não adiantou a diferença está muito grande agora, está lendo ~66440PA ~3421m sendo que deveria ser ~920m. Sei que a pressão no nível mar varia mas também não é para tanto HAHAHA... @Ivan (eletronic) O código que eu fiz está pronto, só não posso confirmar que está tudo ok pois o meu BMP180 está lendo a pressão incorretamente (EU ACHO!!). Se você quiser eu te passo ele. void main() { int32 pressao; float temperatura; : : ler_dados_calibracao(); // <-- Lê os dados de calibração da EEPROM do BMP // essa função deve ser usada uma única vez antes de // ler a emperatura e pressao. ler_temperatura_pressao_bmp180(temperatura, pressao, ULTRA_BAIXO_CONSUMO); // a função acima Lê a temperatura e a pressão // com modo ultra baixo consumo : :}--------Os modos podem ser:ULTRA_BAIXO_CONSUMO PADRAO ALTA_RESOLUCAO ULTRA_ALTA_RESOLUCAO Até bom que você testa o código HEHEH!!!

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

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!