-
Posts
75 -
Cadastrado em
-
Última visita
Tipo de conteúdo
Artigos
Selos
Livros
Cursos
Análises
Fórum
Tudo que Lucas Pereira de Souza postou
-
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.
-
estou com problema na programação do pic 18f4520
Lucas Pereira de Souza respondeu ao tópico de Victor 222222 em Microcontroladores
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 -
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
-
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.
-
Trocar capacitor de placa mãe
Lucas Pereira de Souza respondeu ao tópico de Lucas Pereira de Souza em Eletrônica
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. -
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á.
-
Olá amigo, como você consegue deixar a placa azul ? e deixar a parte para o furo certinho para solda ?
-
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 ?
-
Ajude em circuito impresso
Lucas Pereira de Souza respondeu ao tópico de Lucas Pereira de Souza em Eletrônica
Maravilha camarada, não conhecia essa placa de composite valeu pela dica. -
Iniciando com os Microcontroladores (Ajuda para escolher um modelo)
Lucas Pereira de Souza respondeu ao tópico de densyy em Microcontroladores
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. -
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:
-
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.
-
Tutorial de PIC - Programação em Assembly
Lucas Pereira de Souza respondeu ao tópico de Mulder_Fox em Microcontroladores
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