Ir ao conteúdo

Lucas Pereira de Souza

Membro Pleno
  • Posts

    75
  • Cadastrado em

  • Última visita

Tudo que Lucas Pereira de Souza postou

  1. Amigo, eu fiz o procedimento que você falou o erro persistiu, não faço ideia o que seja o erro, estou montando o projeto físico para ver o que descubro.
  2. Eu concordo com você Paulo, entre tanto, a graça é você fazer o próprio instrumento. Estou desconfiado da eletrônica, acredito que o AD e o compilador esta normal, o voltímetro não tem esse problema, apenas com o ACS712 provavelmente pode ser ele, será que essa montagem que eu fiz no Proteus esta correta em relação a ele ? vou dar uma olhada na folha de dados dele.
  3. Amigo, primeiro coloque todo PORTB como digital, da uma olhada lá na folha de dados dele, onde fica o ADCON1 ou ADCON configura todos PORT como digital, depois faça o seguinte: int main() { TRISBbits.RB0 = 1; // RB0 como entrada TRISDbits.RD0 = 0;// RD0 como saída while(1) { if(!PORTBbits.RB0) // Verifica se o botão foi apertado { PORTDbits.RD0 = 1; } else { PORTDbits.RD0 = 0; } }//END WHILE }//END
  4. Olá pessoal, eu estou finalizando um projeto, entre tanto, está complicado de resolver o erro acumulativo que ocorre com o sensor ASC712, fora isso o projeto está pronto, gostaria de uma ajuda para resolver esse problema, eu utilizei o compilador XC8 para o projeto. Segue o código do projeto e o vídeo do mesmo. adicionado 2 minutos depois //INSTRUMENTO DE BANCADA BY (TERRIBLE_LAB) //AUTOR:LUCAS PEREIRA DE SOUZA PINTO //DATA:21/05/2015 //INCLUDES #include <stdlib.h> #include <stdio.h> #include <pic16f677.h> #include <xc.h> //******************************************************************************************************************************************************** //CONFIG #pragma config FOSC = HS // Oscillator Selection bits (INTOSC oscillator: I/O function on RA4/OSC2/CLKOUT pin, I/O function on RA5/OSC1/CLKIN) #pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT disabled) #pragma config PWRTE = OFF // Power-up Timer Enable bit (PWRT disabled) #pragma config MCLRE = ON // RESET ON #pragma config BOREN = OFF // Brown-out Detect Enable bit (BOD disabled) #pragma config CP = OFF // Code Protection bit (Program Memory code protection is disabled) #pragma config CPD = OFF // Data Code Protection bit (Data memory code protection is disabled) #pragma config IESO = OFF // Internal External Switchover bit (Internal External Switchover mode is disabled) #pragma config FCMEN = OFF // Fail-Safe Clock Monitor Enabled bit (Fail-Safe Clock Monitor is disabled) //******************************************************************************************************************************************************** //DEFINES #define _XTAL_FREQ 20000000 // cristal de 20 Mhz #define delay_us(x) _delay((unsigned long)((x)*(_XTAL_FREQ/4000000.0))) #define delay_ms(x) _delay((unsigned long)((x)*(_XTAL_FREQ/4000.0))) //Definição de linhas de endereço do display***************** #define T1 PORTCbits.RC4 //NPN1 #define T2 PORTCbits.RC5 //NPN2 #define T3 PORTCbits.RC6 //NPN3 #define T4 PORTCbits.RC7 //NPN4 //Definição linhas de dados do display ********************** #define A PORTCbits.RC0 //A #define B PORTCbits.RC1 //B #define C PORTCbits.RC2 //C #define D PORTCbits.RC3 //D //************************************************************ #define LAMP PORTAbits.RA2 //PISCA PISCA #define B_T PORTBbits.RB4 //tensão #define B_A PORTBbits.RB5 //AMPER #define tensão PORTBbits.RB6 //tensão/LED #define CORRENTE PORTBbits.RB7 //CORRENTE/LED //******************************************************************************************************************************************************** //**************************************************************************** //PROTOTIPO DE FUNÇÃO void pic_start(); void bank(char num); void aciona_display(int numero, int casa); void escrever_variavel(int valor); void escrever_unidade(int unidade); void escrever_dezena(int dezena); void escrever_centena(int centena); void escrever_milhar(int milhar); int read_AD(); //**************************************************************************** //PROGRAMA PRINCIPAL int main() { pic_start(); //START PIC float var = 0; //VARIAVEl GLOBAL while(1) { //START //ROTINA MODO NORMAL if(B_T == 0 && B_A == 0 || B_T == 1 && B_A == 1) { ADCON0bits.ADON = 0; tensão = 0; CORRENTE = 0; LAMP = !LAMP,delay_ms(200); A=1,B=1,C=1,D=1,T1=1,T2=1,T3=1,T4=1; } //ROTINA DO VOLTIMETRO else if(B_T == 1 && B_A == 0) { ADCON0bits.CHS0 = 0; ADCON0bits.CHS1 = 0; ADCON0bits.CHS2 = 0; ADCON0bits.CHS3 = 0; tensão = 1; CORRENTE = 0; LAMP = 0; ADCON0bits.ADON = 1; var = read_AD(); var = read_AD()*25.00; //Pega sinal do AD e multiplica pela tensão que você ira medir var = var/1024; //Divide por 1024 para achar volts/bits var = var * 100; //multiplica por 100 para aparecer no display de 7 segmentos, ja que a variavel esta framentada escrever_variavel(var); //Escreve variavel no display 7 Segmentos var = 0x00; //Limpa variavel } //ROTINA DO AMPERIMETRO else if(B_T == 0 && B_A == 1) { ADCON0bits.CHS0 = 1; ADCON0bits.CHS1 = 0; ADCON0bits.CHS2 = 0; ADCON0bits.CHS3 = 0; tensão = 0; CORRENTE = 1; LAMP = 0; ADCON0bits.ADON = 1; var = read_AD(); //Faz Leitura do converso AD e iguala a variavel a ser trabalhada var = var -512; //Faz subttação de 512 do sesor, devido ele trabalhar em -5 e +5 ou seja 512 = 2.5 V = 0A var = var*0.004882812; //Pega a variavel e multiplica pela divisão de 5/1024 para ad de 10 bits var = var/0.185; //Pega a resolção do sensor divide pela variavel var = var*1000; //multiplica por 1000 para aparecer no display de 7 segmentos, ja que a variavel esta framentada escrever_variavel(var); //Escreve variavel no display 7 Segmentos*/ var = 0x00; } //END } } //***************************************************************************** //TRATAMENTO DE PROTOTIPO void pic_start() { bank(1); //SELECT BANK ONE TRISC = 0b00000000; //ALL PORTC WITH OUT TRISA = 0b00111011; //VOLT,AMP,RESET,RA4,RA5 = IN , LAMP = OUT TRISB = 0b00110000; //ONLY RB4 e RB5 IN bank(0); //SELECT BANK ZERO CORRENTE = 0; tensão = 0; ADCON0bits.ADFM = 1; //Conversor justificado para direita ADCON0bits.VCFG = 0; //Tensão do microcontrolador //Conversor AD SELEÇÃO DO CANAL AN0 PARA TENSÃO PARA INICIO ADCON0bits.CHS0 = 0; ADCON0bits.CHS1 = 0; ADCON0bits.CHS2 = 0; ADCON0bits.CHS3 = 0; //Ligando conversor AD ADCON0bits.ADON = 1; //Ligado //Configurando fonte de clock para AD ADCON1bits.ADCS0 = 1; ADCON1bits.ADCS1 = 0; ADCON1bits.ADCS2 = 0; //Configurando se o pino é analógico ou digiral ANSEL = 0b00000011; ANSELH = 0b00000000; } void bank(char num) { //Banco 0 if(num == 0) { RP0 = 0, RP1 = 0; } //Banco 1 else if(num == 1) { RP0 = 0, RP1 = 1; } //Banco 2 else if(num == 2) { RP0 = 1, RP1 = 0; } //Banco 3 else if(num == 3) { RP0 = 1, RP1 = 1; } } void aciona_display(int numero, int casa) { if(casa == 1) { switch(numero) { case 0: A=0,B=0,C=0,D=0,T1=1,T2=0,T3=0,T4=0; break; case 1: A=1,B=0,C=0,D=0,T1=1,T2=0,T3=0,T4=0; break; case 2: A=0,B=1,C=0,D=0,T1=1,T2=0,T3=0,T4=0; break; case 3: A=1,B=1,C=0,D=0,T1=1,T2=0,T3=0,T4=0; break; case 4: A=0,B=0,C=1,D=0,T1=1,T2=0,T3=0,T4=0; break; case 5: A=1,B=0,C=1,D=0,T1=1,T2=0,T3=0,T4=0; break; case 6: A=0,B=1,C=1,D=0,T1=1,T2=0,T3=0,T4=0; break; case 7: A=1,B=1,C=1,D=0,T1=1,T2=0,T3=0,T4=0; break; case 8: A=0,B=0,C=0,D=1,T1=1,T2=0,T3=0,T4=0; break; case 9: A=1,B=0,C=0,D=1,T1=1,T2=0,T3=0,T4=0; break; } } if(casa == 2) { switch(numero) { case 0: A=0,B=0,C=0,D=0,T1=0,T2=1,T3=0,T4=0; break; case 1: A=1,B=0,C=0,D=0,T1=0,T2=1,T3=0,T4=0; break; case 2: A=0,B=1,C=0,D=0,T1=0,T2=1,T3=0,T4=0; break; case 3: A=1,B=1,C=0,D=0,T1=0,T2=1,T3=0,T4=0; break; case 4: A=0,B=0,C=1,D=0,T1=0,T2=1,T3=0,T4=0; break; case 5: A=1,B=0,C=1,D=0,T1=0,T2=1,T3=0,T4=0; break; case 6: A=0,B=1,C=1,D=0,T1=0,T2=1,T3=0,T4=0; break; case 7: A=1,B=1,C=1,D=0,T1=0,T2=1,T3=0,T4=0; break; case 8: A=0,B=0,C=0,D=1,T1=0,T2=1,T3=0,T4=0; break; case 9: A=1,B=0,C=0,D=1,T1=0,T2=1,T3=0,T4=0; break; } } if(casa == 3) { switch(numero) { case 0: A=0,B=0,C=0,D=0,T1=0,T2=0,T3=1,T4=0; break; case 1: A=1,B=0,C=0,D=0,T1=0,T2=0,T3=1,T4=0; break; case 2: A=0,B=1,C=0,D=0,T1=0,T2=0,T3=1,T4=0; break; case 3: A=1,B=1,C=0,D=0,T1=0,T2=0,T3=1,T4=0; break; case 4: A=0,B=0,C=1,D=0,T1=0,T2=0,T3=1,T4=0; break; case 5: A=1,B=0,C=1,D=0,T1=0,T2=0,T3=1,T4=0; break; case 6: A=0,B=1,C=1,D=0,T1=0,T2=0,T3=1,T4=0; break; case 7: A=1,B=1,C=1,D=0,T1=0,T2=0,T3=1,T4=0; break; case 8: A=0,B=0,C=0,D=1,T1=0,T2=0,T3=1,T4=0; break; case 9: A=1,B=0,C=0,D=1,T1=0,T2=0,T3=1,T4=0; break; } } if(casa == 4) { switch(numero) { case 0: A=0,B=0,C=0,D=0,T1=0,T2=0,T3=0,T4=1; break; case 1: A=1,B=0,C=0,D=0,T1=0,T2=0,T3=0,T4=1; break; case 2: A=0,B=1,C=0,D=0,T1=0,T2=0,T3=0,T4=1; break; case 3: A=1,B=1,C=0,D=0,T1=0,T2=0,T3=0,T4=1; break; case 4: A=0,B=0,C=1,D=0,T1=0,T2=0,T3=0,T4=1; break; case 5: A=1,B=0,C=1,D=0,T1=0,T2=0,T3=0,T4=1; break; case 6: A=0,B=1,C=1,D=0,T1=0,T2=0,T3=0,T4=1; break; case 7: A=1,B=1,C=1,D=0,T1=0,T2=0,T3=0,T4=1; break; case 8: A=0,B=0,C=0,D=1,T1=0,T2=0,T3=0,T4=1; break; case 9: A=1,B=0,C=0,D=1,T1=0,T2=0,T3=0,T4=1; break; } }//desabilita todos os 4511 } void escrever_variavel(int valor) { escrever_unidade(valor); escrever_dezena(valor); escrever_centena(valor); escrever_milhar(valor); if(valor >= 9999) { A=1,B=1,C=1,D=1,T1=1,T2=1,T3=1,T4=1; } else { valor = valor; } } void escrever_unidade(int unidade) { unidade = ((unidade/1000)%10);//Primeiro digito aciona_display(unidade,4),delay_ms(125); } void escrever_dezena(int dezena) { dezena = ((dezena/100)%10);//Segundo digito aciona_display(dezena,3),delay_ms(125); } void escrever_centena(int centena) { centena = ((centena/10)%10);//Terceiro digito aciona_display(centena,2),delay_ms(125); } void escrever_milhar(int milhar) { milhar = (milhar%10);//Quarto digito aciona_display(milhar,1),delay_ms(125); } int read_AD() { int result_AD; //Declaração variavel local ADCON0bits.GO = 1; //Inicia conversão while(ADCON0bits.GO); //aguarda conversão result_AD = (((int)ADRESH)<<8)|(ADRESL); //Obtem o valor da conversão return result_AD; //Retorna para result_AD } adicionado 19 minutos depois
  5. Olá amigos, gostaria de tirar uma duvida, atualmente estou tentando fazer um teclado matriz. Eu fiz o seguinte procedimento, configurei as coluna como saída e as linhas como entrada, sendo assim, logo em seguida coloquei a coluna 1 um em modo pulsante liguei direto na linha 1, porém o microcontrolador não reconhece essa transição, ele só reconhece quando deixo a coluna 1 ligada de forma direta. veja o exemplo: /* * File: Main.c * Author: lucas * * Created on 12 de Outubro de 2016, 17:40 */ #include <stdio.h> #include <stdlib.h> #include <pic16f628a.h> #include <xc.h> // PIC16F628A Configuration Bit Settings // 'C' source line config statements // CONFIG #pragma config FOSC = HS // Oscillator Selection bits (HS oscillator: High-speed crystal/resonator on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN) #pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT disabled) #pragma config PWRTE = ON // Power-up Timer Enable bit (PWRT enabled) #pragma config MCLRE = ON // RA5/MCLR/VPP Pin Function Select bit (RA5/MCLR/VPP pin function is MCLR) #pragma config BOREN = OFF // Brown-out Detect Enable bit (BOD enabled) #pragma config LVP = OFF // Low-Voltage Programming Enable bit (RB4/PGM pin has digital I/O function, HV on MCLR must be used for programming) #pragma config CPD = OFF // Data EE Memory Code Protection bit (Data memory code protection off) #pragma config CP = OFF // Flash Program Memory Code Protection bit (Code protection off) //Definição para tempo #define _XTAL_FREQ 4000000 // cristal de 4 Mhz #define delay_us(x) _delay((unsigned long)((x)*(_XTAL_FREQ/4000000.0))) #define delay_ms(x) _delay((unsigned long)((x)*(_XTAL_FREQ/4000.0))) //Definição para colunas do teclado #define X1 PORTAbits.RA0 #define X2 PORTAbits.RA1 #define X3 PORTAbits.RA2 #define X4 PORTAbits.RA3 //Definições para linha do teclado #define Y1 PORTBbits.RB4 #define Y2 PORTBbits.RB5 #define Y3 PORTBbits.RB6 #define Y4 PORTBbits.RB7 void bank(char num); int main() { bank(1); TRISA = 0x00; TRISB = 0b11110000; bank(0); CMCON = 0x07; //Desable CCP PORTB = 0x00; PORTA = 0x00; while(1) { X1 = 1; delay_ms(1000); X1 = 0; delay_ms(1000); if(X1 == 1 && Y1 == 1) { PORTBbits.RB0 = 1; } } } void bank(char num) { //Banco 0 if(num == 0) { RP0 = 0, RP1 = 0; } //Banco 1 else if(num == 1) { RP0 = 0, RP1 = 1; } //Banco 2 else if(num == 2) { RP0 = 1, RP1 = 0; } //Banco 3 else if(num == 3) { RP0 = 1, RP1 = 1; } } adicionado 48 minutos depois kkkkkkkkkk, descobri o erro, foi um coisa tão besta que fiquei com vontade de dar um tiro na minha cabeça.
  6. Então amigo, a placa se encontra em estado de funcionamento normal, entre tanto, a troca do capacitor eu mesmo iria substituir só queria saber se vale a pena trocar o capacitor já que ele esta estufado.
  7. Olá amigos do fórum, gostaria de saber se vale a pena trocar o capacitor estufado da minha placa mãe aparentemente a placa mãe funciona sem problemas alguns, será que vale a pena trocar ? Obs: ECS-GF8200A uma plaquinha bem antiga já.
  8. Olá amigo, como você consegue deixar a placa azul ? e deixar a parte para o furo certinho para solda ?
  9. Olá amigo, parabéns sua placa ficou ótima, queria saber se você conseguiu fazer a parte escrita em cima da placa, ou seja, o top silk. Você vai fazer tutorial desse metodo ?
  10. Maravilha camarada, não conhecia essa placa de composite valeu pela dica.
  11. Eu recomendo um PIC16F ou PIC18F ou ATMEGA 328, tanto a microchip e atmel são otimos frabricantes, eu atualmente estou focando nesses dois fabricantes de microcontroladores por causa que é mais fácil achar material, porém, também tem a Renesas que é muito boa também, resumindo tudo, a ATMEL E MICROCHIP são mais utilizadas nos crusos de eletrônica, entre tanto, isso não limita você ir para outros fabricantes.
  12. Olá amigos do forum, a um tempo venho estudando como construir minha PCB, entre tanto, eu consegui bons resultados usando o metodo de transfrerência térmica, porém, não obtive sucesso na parte superior da placa, ou seja, a descrição de VCC GND ETC... Queria saber, se alguem sabe algum metodo de transferir a partes escritas da minha placa em cima do fenolite, porém, na parte superior e não na parte de cobre. OBs: Ja tentei no método térmico fica toda falhada não pega direito. Veja a minha plaquinha que eu estava querendo transferir a parte de cima:
  13. Comprei esse binquedo, estou chorando de alegria para quem estava usando placa de som e sobrevivendo de laboratório do curso esse osciloscópio é uma coisa de outro mundo kkkkkk, sentei na graxa a pouco tempo também comprei um osciloscópio hantek 6022be da aliexpress e a porcaria do correios perdeu.

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!