Ir ao conteúdo

Felipe Electronic

Membro Pleno
  • Posts

    3.311
  • Cadastrado em

  • Última visita

Tudo que Felipe Electronic postou

  1. Pois é soschip Ja vi muita coisa parecida também, na epoca em que estava no técnico muitas vezes eu via e ouvia, "quando esse professor vai entrar na programação", tem muito "programador" que mal sabe pra que serve o cristal externo de um MCU, a unica coisa pra ele é que "Ah não funciona sem aquilo". Apoio a iniciativa de estudar por conta propria mesmo por que o proprio curso técnico ou nivel superior vão te ensinar o básico, a otimização as boas praticas de desenvolvimento de software e hardware, voce so pega estudando e fazendo especialização, mas é isso que falta a muitos paciência. Muitos são os casos do cara que não consegue acender um Led, mas pensa , "ah foi erro nessa linha de codigo" e ja passa pra fazer efeitos com varios leds! poxa errou? não funciona? não sabe por que não funciona, busque a origem do teu erro, o conceito mais básico que voce ignorou ou nem saiba da existencia, depois disso ai parta pra tirar duvidas de cunho avançado! novamente não me entendam mal! abs.
  2. Vou dizer uma coisa, a todos os programadores iniciantes com PIC ou qualquer outro microcontrolador, nao adiante simplesmente sair estudando programação sem sequer saber o que tem dentro do microcontrolador!, falo isso não pra constrager ninguem, o caso é nos aqui do forum (uns com mais e outros com menos experiencia) estamos sempre aqui pra ajudar, porém tem coisas que não podemos fazer pelo nosso amigo que esta em duvida que e perder um pouco de tempo estudando o datasheet e principalmente o basico de eletronica digital, pra saber o que é um regisstrador! O set de instruçções não são tudo a aprender em um MCU, mas o hardware tambem, recomendo mais uma vez e fortemente a todos que estão iniciando ao mundo dos microcontroladores, um apanhado geral de eletronica digital pra poder ter uma noção do que acontece "la dentro" do microcontrrolador, Idependente de terem 14, 15 ou 50 anos, sinceramente isso pra mim não é desculpa pois comecei a brincar com eletronica aos 10! , na época que PIC sso tinhamos aqueles programaveis uma unica vez! ou seja software errado pronto! perdia o MCU! então peço a todos um pouco de consciencia, e esforço , pois o que depender de mim e dos amigos do forum aqui estaremos sempre dispostos a ajudar! abraço a todos! e por favor não me interpretem mal!
  3. http://forum.clubedohardware.com.br/tudo-pics-postem/702272/4 abs
  4. Não querendo ser chato, mas voltemos ao assunto do tópico! Ainda está precisando de ajuda com projetos? abs.
  5. não recomendo projetos montados na protoboard que trabalhem acima de 1Khz, pois seu desempenho pode ser prejudicado, e pode não apresentar o funcionamento esperado! em todo o caso utilize transdutores de ultrassom, com um oscilador de base de 40Khz abs.
  6. Amigo Andre, é esse mesmo o principio, ao que entendi voce ira receber esse valor pela serial e passar para o controle do ciclo ativo não é? então se for isso so não esqueça de manter os bits 5 e 4 do registrador CCP1CON ssetados, ja que teu PWM so vai funcionar em 8 bits não é necessarios usar esses 2 bits! abs.
  7. Vamos la.... primeiro , esse Led é uma variavel, que pode ser verdadeira ou falsa, ou seja basta somente atribuir o nome a variável. segundo, sim voce devera fazer a conta de quanto tempo voce precisa pra gerar 100mS no TImer0, ai você tera de pensar um pouco e ler o datasheet. terceiro, não, pois voce eleiminou o problema do contador, mas e Led? quem garante que ele estava resetado hein? abs.
  8. Sim o numero de incrementos tem que ser mudado sim! Fala amigo, então posso afirma com toda a certeza que sim! o PWM opera paralelamente ao programa, vocwe não precisa ficar setando ou limpando porta, ele faz sozinho, a unica coisa que deve ser feita por software é a configuração para modo PWM e alteração do ciclo ativo , se voce quiser aumentar ou reduzir a velocidade! veja os registradores que voce dev estudar: CCP1CON / CCP2CON = registradores de controle do PWM, CCPR1L CCPR2L registradores com os 8 bits mais significativos do duty cycle rotina exemplo no MIKroC unsigned int ciclo; void PWM_init(void) { PR2 = 63; //PWM com 8 bits e freq de 31.25 Khz, se FOSC = 8MHZ TRISC = 0X00; //PORTC saida CCP1CON = 0x0F // configura CCP para PWM CCPR1L = 0; //ciclo ativo a 0% T2CON.TON = 1; //TMR2 com prescaler 1:1 } void muda_ciclo (void){ CCP1RL = ciclo // o valor do ciclo e repassado para o PWM } qualquer duvida perguntem! abs.
  9. E no proprio esquema esta o codigo dos transistores, são TIP 26! em todo o caso verfique a corrente de saida da tua fonte e ponha no lugar um TIP2955! abs.
  10. Vamos pensar, como ele faz esse um segundo? 1s = 1000ms -> 1 interrupção leva = 1000 % 125 = 8mS. ou seja cada vez que se passarem oito milissegundos 125 vezes, terao passados um segundo! segunda pergunta: bom pra ler 10 e so fazer o calculo, 1000 % 10 = 100mS, ou seja equivalente a voce usar o comando delay_ms(100) dez vezes. ou setar o timer para estourar a cada 100milissegundos! terceira, não ,pois beleza contador chegou a 125 ne? então ele vai e faz a rotina, mas uma coisa, então ele a pertir de então vai executar sempre a rotina (pois ele vai estar sempre em 125, ai ja viu a maracutaia ne? então dentro do IF ele zera o contador para poder gerar o 1 segundo!
  11. So não gostei muito do datasheet da zilog... são meio confusos! to louco pra bricar com eles =D abs.
  12. clica em mostrar! abs.
  13. Ha!! meus Z80 encore chegaram, eles me mandaram os e - mails de confirmação e tudo mais, consegui 3 amostras, agora é so aprender a mexer nesses meninos! abs.
  14. Um projeto bem legal, eu chamo de dimmerPIC, controlado a distancia por infravermelho, creio que o pessoal vai se divertir montando: os fontes: transmissor: ;Gera um codigo de 4 bits ao pressionamento de uma botao ;E o envia ao HT12E ;Autor: Felipe Neves ;Data: 06/04/09 ;Testado e inserido na placa final em 18/04/2009 ;============================================================================================== LIST P = PIC16F819 #INCLUDE "P16F819.INC" RADIX DEC __CONFIG _CP_ALL & _WDT_OFF & _MCLR_OFF & _BODEN_ON & _PWRTE_ON & _INTRC_IO & _LVP_OFF ERRORLEVEL -302 ERRORLEVEL -205 ;============================================================================================== #DEFINE DATABUS PORTA #DEFINE UPLAMP PORTB,0 #DEFINE DOWNLAMP PORTB,1 #DEFINE UPCOL PORTB,2 #DEFINE DOWNCOL PORTB,3 #DEFINE RELAY1 PORTB,4 #DEFINE RELAY2 PORTB,5 #DEFINE TE PORTB,6 #DEFINE Q1 D_REG,0 #DEFINE Q2 D_REG,1 #DEFINE SETF1 MOVLW 0Fh #DEFINE SETF MOVWF DATABUS ;============================================================================================== CBLOCK 0X20 CONT CONT2 VARTMP D_REG ENDC ;============================================================================================== ORG 0X00 GOTO OSC_CONFIG ORG 0X04 RETFIE ;============================================================================================== ;***PARAMETROS DE configuração*** ;-PORTA: SOMENTE SAIDAS ;-PORTB: PB0 ATE PB5 ENTRADAS, PB6:SAIDA ;-NAO USA TMR0 NEM INTERRUPÇOES ;-SEM CONVERSOR A/D OSC_CONFIG: BANKSEL OSCCON MOVLW 65h MOVWF OSCCON INIT_uC: BANKSEL PORTA CLRF PORTA CLRF PORTB BANKSEL ADCON1 MOVLW 06h MOVWF ADCON1 BANKSEL ADCON0 BCF ADCON0,ADON BANKSEL TRISA MOVLW 00h MOVWF TRISA BANKSEL TRISB MOVLW h'BF' MOVWF TRISB BANKSEL INTCON CLRF INTCON BANKSEL OPTION_REG MOVLW .128 MOVWF OPTION_REG BANKSEL CCP1CON CLRF CCP1CON BCF STATUS,RP0 BSF TE SETF1 SETF BCF Q1 BCF Q2 GOTO MAIN ;=============================================================================================== ;***ROTINA PRINCIPAL*** ;FUNCIONA ASSIM, O SOFTWARE LE O ESTADO DE TODOS OS botões(VARREDURA) E VERIFICA O PRESSIONAMENTO ;DEPENDENDO DO BOTAO, O SW IRA DIRECIONAR PARA A ROTINA DE CODIFICAÇAO CORRESPONDENTE ;SAO 4 ROTINAS IGUAIS(AUMENTA E DIMINUI LAMPADA, AUMENTA E DIMINUI VENTILADOR) ;E 2 PARA ATIVAÇAO E DESATIVAÇAO DAS CARGAS, ESSAS SAO UM POUCO DIFERENTES, JA QUE O MESMO BOTAO ;DE LIGA E O DE DESLIGA ;************************************************************************************************ MAIN: ;CLRF PORTB MAIN2: BSF TE BTFSC UPLAMP CALL SEND1 BSF TE BTFSC DOWNLAMP CALL SEND2 BSF TE BTFSC UPCOL CALL SEND3 BSF TE BTFSC DOWNCOL CALL SEND4 BSF TE BTFSC RELAY1 CALL SEND5 BSF TE BTFSC RELAY2 CALL SEND6 BSF TE GOTO MAIN2 ;************************************************************************************************* ;***ROTINAS DE CODIFICAÇAO*** ;EXPLICAREI APENAS UMA DAS QUATRO ;JA QUE SAO IGUAIS SEND1 CALL DELAY_BOUNCE MOVLW 00h ;ENVIA O CODIGO DO COMANDO MOVWF DATABUS ; E CARREGA NO BARRAMENTO DE DADOS BCF TE ;HABILITA A CODIFICAÇAOI CALL DELAY ;AGUARDA UM TEMPO BSF TE ;DESABILITA TE SETF1 SETF BCF TE CALL DELAY_BOUNCE BSF TE RETURN SEND2 CALL DELAY_BOUNCE MOVLW 01h MOVWF DATABUS BCF TE CALL DELAY BSF TE SETF1 SETF BCF TE CALL DELAY_BOUNCE BSF TE RETURN SEND3 CALL DELAY_BOUNCE MOVLW 02h MOVWF DATABUS BCF TE CALL DELAY BSF TE SETF1 SETF BCF TE CALL DELAY_BOUNCE BSF TE RETURN SEND4 CALL DELAY_BOUNCE MOVLW 03h MOVWF DATABUS BCF TE CALL DELAY BSF TE SETF1 SETF BCF TE CALL DELAY_BOUNCE BSF TE RETURN ;***ESSAS AQUI SAO UM POUCO DIFERENTE*** SEND5 CALL DELAY_BOUNCE BTFSC Q1 ;ESTADO DE Q1? (1 = LIGADO; 0 = DESLIGADO) GOTO SEND_A ;LIGADO, então VAI PRA CA GOTO SEND_B ;SENAO PRA CA EXT: SETF1 SETF BCF TE CALL DELAY_BOUNCE BSF TE RETURN SEND_A CALL DELAY_BOUNCE MOVLW 04h ;CARREGA O COMANDO MOVWF DATABUS ;EM DATABUS BCF TE ;HABILITA A CODIFICAÇAO CALL DELAY BSF TE BCF Q1 ;LIMPA Q1 GOTO EXT ;RETORNA SEND_B CALL DELAY_BOUNCE MOVLW 05h MOVWF DATABUS BCF TE CALL DELAY BSF TE BSF Q1 ;NESSE CASO, SETA Q1 GOTO EXT ; E DEPOIS RETORNA SEND6 CALL DELAY_BOUNCE BTFSC Q2 GOTO SEND_C GOTO SEND_D EXT2: SETF1 SETF BCF TE CALL DELAY_BOUNCE BSF TE RETURN SEND_C CALL DELAY_BOUNCE MOVLW 06h MOVWF DATABUS BCF TE CALL DELAY BSF TE BCF Q2 GOTO EXT2 SEND_D CALL DELAY_BOUNCE MOVLW 07h MOVWF DATABUS BCF TE CALL DELAY BSF TE BSF Q2 GOTO EXT2 ;******************************************************************************************************************************************************** ;***ROTINAS DE TEMPORIZAÇAO*** DELAY MOVLW .249 MOVWF CONT DL: NOP DECFSZ CONT,F GOTO DL RETURN DELAY_BOUNCE MOVLW .100 MOVWF CONT2 DL2:CALL DELAY1MS DECFSZ CONT2,F GOTO DL2 RETURN DELAY1MS MOVLW .249 MOVWF CONT NP: NOP DECFSZ CONT,F GOTO NP RETURN ;*********************************************************************************************************************************************************** ;***FIM DO CODIGO*** END ;codificador IR receptor: ;controla os pulsos ao fotoacoplador e interpreta os dados ;Data: 28/04/2209 ;Autor: Felipe Neves LIST P = PIC16F819 #INCLUDE "P16F819.INC" __CONFIG _CP_OFF & _BODEN_ON & _PWRTE_ON & _WDT_OFF & _MCLR_OFF & _INTRC_IO & _LVP_OFF ERRORLEVEL -302 ERRORLEVEL -205 ;DEFINIÇOES: #DEFINE T1 PORTB,1 #DEFINE T2 PORTB,2 #DEFINE REDE PORTB,0 #DEFINE DATABUS PORTA ;MINHAS VARIÁVEIS CBLOCK 0X20 DADOS C1 TIME1 TIME2 TIME3 C2 D_REG D_REG2 ENDC ;DIREÇOES DO PROGRAMA ORG 0X00 GOTO INIT ORG 0X04 ;INTERRUPÇOES BTFSS INTCON,TMR0IF GOTO $+2 GOTO T0_INT BTFSS PIR1,TMR2IF GOTO $+2 GOTO T2_INT BTFSS INTCON,INTF GOTO $+2 GOTO INT_REDE RETFIE T0_INT: BTFSS D_REG,0 GOTO FIM1 CLRF TMR0 BSF T1 ; CALL PULSE1 ; BCF T1 FIM1: BANKSEL INTCON BCF INTCON,TMR0IF BCF INTCON,TMR0IE BCF STATUS,RP0 RETFIE T2_INT: BTFSS D_REG2,0 GOTO FIM2 CLRF TMR2 BSF T2 ; CALL PULSE1 ; BCF T2 FIM2: BANKSEL PIR1 BCF PIR1,TMR2IF BANKSEL PIE1 BCF PIE1,TMR2IE BCF STATUS,RP0 RETFIE INT_REDE: CALL SHORT BCF T1 BCF T2 BANKSEL INTCON BCF INTCON,INTE BSF INTCON,TMR0IE BCF INTCON,TMR0IF BANKSEL PIR1 BCF PIR1,TMR2IF BANKSEL PIE1 BSF PIE1,TMR2IE BCF STATUS,RP0 MOVF C1,W MOVWF TMR0 MOVF C2,W MOVWF TMR2 BSF INTCON,INTE BCF INTCON,INTF RETFIE ;===================FIM DAS INTs=========================== INIT: BANKSEL OSCCON MOVLW 065H MOVWF OSCCON BANKSEL PORTA CLRF PORTA CLRF PORTB BANKSEL ADCON1 MOVLW 06H MOVWF ADCON1 BANKSEL ADCON0 CLRF ADCON0 BANKSEL TRISA MOVLW 0FFH MOVWF TRISA MOVLW 01H MOVWF TRISB BANKSEL OPTION_REG MOVLW 0C4H MOVWF OPTION_REG BANKSEL INTCON MOVLW 0F0H MOVWF INTCON BANKSEL PIE1 MOVLW 02H MOVWF PIE1 BANKSEL PIR1 CLRF PIR1 BANKSEL CCP1CON CLRF CCP1CON BANKSEL T2CON MOVLW 06H MOVWF T2CON BANKSEL PR2 MOVLW 0FFH MOVWF PR2 BCF STATUS,RP0 CLRF C1 CLRF C2 MOVLW 079H MOVWF C1 MOVLW 01H MOVWF C2 BCF T1 BCF T2 BSF D_REG,0 BSF D_REG2,0 BTFSS REDE GOTO $-1 GOTO LOOP LOOP: CALL DELAY3 MOVF DATABUS,W MOVWF DADOS CALL DECODIFICA GOTO LOOP DECODIFICA MOVF DADOS,W ADDWF PCL,F RETURN GOTO UP1 GOTO DOWN1 GOTO UP2 GOTO DOWN2 GOTO LIGA1 GOTO DESLIGA1 GOTO LIGA2 GOTO DESLIGA2 RETURN RETURN RETURN RETURN RETURN RETURN RETURN RET1: CLRF DADOS RETURN UP1: ; CALL DELAY CALL DELAY MOVF C1,W XORLW 0FDH BTFSC STATUS,Z GOTO RET1 INCF C1,1 GOTO RET1 DOWN1: ; CALL DELAY CALL DELAY MOVF C1,W XORLW 079H BTFSC STATUS,Z GOTO RET1 DECF C1,1 GOTO RET1 UP2: ; CALL DELAY CALL DELAY MOVF C2,W XORLW 0FBH BTFSC STATUS,Z GOTO RET1 INCF C2,1 GOTO RET1 DOWN2: ; CALL DELAY CALL DELAY MOVF C2,W XORLW 01H BTFSC STATUS,Z GOTO RET1 DECF C2,1 GOTO RET1 LIGA1: BSF D_REG,0 CALL DELAY2 GOTO RET1 DESLIGA1: BCF D_REG,0 CALL DELAY2 GOTO RET1 LIGA2: BSF D_REG2,0 CALL DELAY2 GOTO RET1 DESLIGA2: BCF D_REG2,0 CALL DELAY2 GOTO RET1 ;=========================================================================================================================================== PULSE1: MOVLW .200 MOVWF TIME1 REF1: NOP NOP DECFSZ TIME1,F GOTO REF1 RETURN DELAY DL2: MOVLW .10 MOVWF TIME1 DL1: NOP NOP DECFSZ TIME1,F GOTO DL1 DECFSZ TIME3,F GOTO DL2 RETURN DELAY2 DL4: MOVLW .200 MOVWF TIME1 DL3: NOP NOP DECFSZ TIME1,F GOTO DL3 DECFSZ TIME3,F GOTO DL4 RETURN SHORT MOVLW .125 MOVWF TIME1 DL5: NOP DECFSZ TIME1 GOTO DL5 RETURN DELAY3 DLB: MOVLW .5 MOVWF TIME1 DLA: NOP NOP DECFSZ TIME1,F GOTO DLA DECFSZ TIME3,F GOTO DLB RETURN ;========================================================================================================================================= END ;ATE QUE ENFIM ;D ;Software de controle da placa Dimmer esquemas abaixo, divirtam se! abs.
  15. fala amigo jorge, então aqui tenho um que nem de lente fresnel precisa! abs.
  16. Olha depois que conheci o sensor Piro, a tempos que não uso outro, para ajustar a sensibilidade basta mexer nos resistores do comparador de janela, dependendo do ajuste voce conseggue dispensar ate as lentes fresnel. ou então faça somente o amplificador e use o conversor A/D do pic comparando ele com dois valores (um alto e outro baixo) para identificar a presença, fiz um prototipo com pic12f675 e ganhei uma distancia legal e isenta de alarmes falsos! abs.
  17. Fala amigo, então porque voce não utiliza sensor PIRO? é muito mais simples, e basta regular o comparador de janela pra acertar a distancia! abs.
  18. cade o circuito? abs.
  19. Aqui, use o PIC16f877A se voce quiser testar isso na pratica um dia, esse ta compilado e testado e comentado Código: --------- #include <16f877A.h> #device adc=10; #fuses NOPUT,NOPROTECT,NOBROWNOUT,XT,NOWDT // fuses de configuração USE ESTES!! #use delay (clock = 4000000) int Ad_valor; void main(){ SET_TRIS_A(0b11111111); //configura IO do PORTA//RA0 a RA7 entradas SET_TRIS_C(0b00000000);// configura IO do PORTC//Rc0 a RC7 saidas SETUP_ADC_PORTS (AN0);//RA0 IO analógico SETUP_ADC(ADC_CLOCK_INTERNAL);//configura clock de conversão SET_ADC_CHANNEL(0);//Canal 0 para leitura do AD. while (1){ delay_us(100); Ad_valor=read_adc(); if (Ad_valor == 1023){ output_high(PIN_C1); output_low (PIN_C2); } if(Ad_valor < 1023) { output_low(PIN_C1); output_high(PIN_C2); } } } abs
  20. Ele compilando sem erros não significa que o código esta certo, modifique aquelas linhas que disse no post anterior! abs.
  21. Repito! Não é o código, é a configuração do processador, as vezes é muito melhor olhar o log de erro de compilação um pouco mais e entender qual foi seu erro! abs.
  22. lógico que está errado.... vamos por partes, voce esta usando a função use delay, sendo que voce ainda nem setou o oscilador do teu PIC...segundo se voce esta usando oscilador XT não precisa usar essa função... faça somente isso aqui: #include <16f676.h> [B]#FUSES NOPORTECT, NOPUT, NOMCLR, NOWDT, XT[/B] abs.
  23. Pera, pera, pera... você nem configorou o A/D, como espera que ele leia algo? primeiro configure o A/D com as funçoes, SETUP_ADC, SETUP_ADC_PORTS, SETUP_ADC_CHANNEL... depois voce usa o comando read_adc(), para ler o conteudo analógico do porta, ai DEPOIS voce faz o if com o valor da leiutura, exemplo if (read_adc() = 0b11111111)... entendeu? demais uma pesquisada! abs.
  24. a resposta : Não agora vamos ao porque, o conversor analogico / digital do PIC é de 8bits (modelos mais novos trabalham com 10 bits) ou seja, quando voce mandar ele ler a tensão ele vai te re tornar um valor de 0 a 255 ( 0 a 1023 para 10 bits) de acordo com a tensão lida, depois disso voce deve pegar esse valor e fazer uma regra de 3 para converter par um rage de 0 a 5 volts e depois fazer os if / else com os 5 volts. Caso contrario não vai rodar, um dos leds vai ficar sempre aceso e o outro nunca vai ligar! abs.
  25. Poxa realmente tem coisa errada.... vamos la, primeiro começemos pelos fuses: Se voce esta usando um 628A com o oscilador interno de 4MHz então deve colocar INTRC_IO, caso contrario não roda... ta errado, primeiro o 628A não possui conversor A/D ele so le niveis logicos, tipo '0' e '1' se voce colocar 5 ele simplesmente ira ignorar a instrução.... de uma lida no datasheet do PIC e veja o modulo comparador de tensão, e veja como ele pode ser configurado no CCS, abra o arquivo 16f628A.h para ver as opções de comparador! 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!