Olá pessoal
Depois de muito tempo parado estou de volta !!
Gostaria de divulgar meu novo portal web:
https://sites.google.com/site/varagoengenharia/
Irei em breve atualizar os projetos do EletronicaFFA, melhorar a qualidade do código, passar do compilador da CCS para o Hitech PIC C. Postar novos projetos utilizando recursos avançados da linguagem C (por exemplo, um pseudo kernel), etc. Além disso, neste novo portal, vocês encontraram materiais sobre diversos campos da Engenharia (controle, automação, elétrica, civil, etc), além de revisões de Matemática, Física, etc.
É isso ai !
Um grande abraço a todos, e até a próxima.
Rafael Varago
quarta-feira, 30 de outubro de 2013
sábado, 8 de janeiro de 2011
Relógio Calendário PIC16f628a e LCD
Lembrando que o código fonte foi elaborado em linguagem C, e compilado com o CCS, em breve estarei disponibilizando o mesmo feito com o MikroC.
O cerebro do projeto é o microcontrolador PIC16f628a, que é bastante conhecido, e creio que seja um dos mais utlizados atualmente.Ele fará o controle do display LCD 16x2 além de ler 4 teclas que farão o ajuste de:
Segundo;
Minuto;
Hora;
Dia da semana.
Quando pressionamos a tecla desejada, está irá incrementar 1 na variavel que desejamos modificar (sec,min...).
As teclas estão ligadas ao GND, e no outro terminal temos resistores de pull-up ligados ao Vcc, que irá impor nível lógico 1 no pino do PIC quando as teclas estiverem soltas.
Para inicializar o LCD foi usada a biblioteca do CCS 4.12, que contém todas sa funções necessárias para manusea-lo, entre as principais podemos destacar:
lcd_init(); // Inicializa LCD
lcd_putc('x'); // Imprime caractere em que x é o caractere a ser impresso
lcd_gotoxy(C,L); // Descola cursor, em que C = coluna, L = linha.
Como eu mencionei acima, para termos o clock necessário para o funcionamento do relógio, usamos o TIMER0, e para gerar a interrupção, aplicamos a técnica conhecida como acumulo de erros, em que uma variavel de 16bits com sinal (signed int16), é divida a cada interrupção.
Como o cristal usado é de 4MHz, e temos o clock dividido internamente por 4, com isso o que operará o PIC é de 1MHz.
Na diretiva setup_timer_0 ( RTCC_INTERNAL | RTCC_DIV_64 ); usaremos o clock interno (1MHz), e o prescaler para dividi-lo por 64 que é o maior valor que resultará em uma frequência inteira:
1MHz / 64 = 15625Hz.
Ou seja a interrupção será gerada a cada 15625Hz.
Esse valor será atribuido a uma variavel (no nosso caso t0_conta) e cada ciclo de interrupção iremos subtratir 256 (este valor é o fator natural de divisão do TIMER0 e nos PICs da serie 16 é 8bits) desta variavel, e quando seu valor for menor ou igual a 0, significa que se passou 1s.Daí executamos os comandos necessários.
Por favor, peço que comentem sobre o projeto e explicação para juntos fazermos o blog cada vez melhor.
Qualquer dúvida entrem em contato comigo:
rafaelvarago@yahoo.com.br
Os arquivos encontram-se no meu disco virtual com o seguinte nome:"Relógio Calendário Timer0.rar ", e devem ser descompactados com WinRar ou semelhante.
Download Relógio Calendário
Até a próxima !!
segunda-feira, 27 de dezembro de 2010
Microcontroladores Aula 1
Olá, como o prometido, irei neste artigo relatar algumas das principais características dos microcontroladores, usando como exemplo os da família PIC, e irei falar um pouco das principais diferenças entre os microcontroladores e os microprocessadores.
Me referirei a microcontroladores como µC e a microprocessadores como µP.
Quero lembrar que aqui irei descrever de maneira sucinta, e para maiores detalhes recomendo a seguinte leitura:
Microcontroladores PIC-Técnicas Avançadas, que explica de maneira bem didática como é o hardware dos µC PIC, e ensina a programar em Assembly (MPASM), que é a linguagem padrão dos µC da família PIC.
Microprocessadores:
Me referirei a microcontroladores como µC e a microprocessadores como µP.
Quero lembrar que aqui irei descrever de maneira sucinta, e para maiores detalhes recomendo a seguinte leitura:
Microcontroladores PIC-Técnicas Avançadas, que explica de maneira bem didática como é o hardware dos µC PIC, e ensina a programar em Assembly (MPASM), que é a linguagem padrão dos µC da família PIC.
Microprocessadores:
Um µP é basicamente constituido por três blocos funcionais:
Registradores e Contadores;
Unidade Lógica e Aritmética (ULA);
Unidade de Controle e Sincronização.
Registradores e Contadores:
São utilizados para o armazenamento temporário dos bits dentro do µP.
São utilizados para o armazenamento temporário dos bits dentro do µP.
Unidade Lógica e Aritmética (ULA):
Realiza operações lógicas e aritméticas com os bits armazenados nos registradores.
Realiza operações lógicas e aritméticas com os bits armazenados nos registradores.
Unidade de Controle e Sincronização (UCS):
O µP opera a partir de um trem de pulsos chamado clock (relógio em inglês), que coordena a execução de tarefas.Podemos fazer uma analogia com um semáforo que fecha uma via e abre outra evitando acidentes, o clock é coordenando pela UCS, fazendo com que as tarefas exercidas pelo µP sejam feitas de forma sincronizada, sem gerar conflitos entre operações.
O µP opera a partir de um trem de pulsos chamado clock (relógio em inglês), que coordena a execução de tarefas.Podemos fazer uma analogia com um semáforo que fecha uma via e abre outra evitando acidentes, o clock é coordenando pela UCS, fazendo com que as tarefas exercidas pelo µP sejam feitas de forma sincronizada, sem gerar conflitos entre operações.
Microcontroladores:
Os µC possuem em um único chip, uma larga integração entre diversos componentes, pois além de ter seu próprio processador interno, os µC possuem memória, que são dividas em dois tipos:
Dados;
Programa.
A memória de Dados têm a tarefa de armazenar os registradores de uso geral (GPRs) criados pelo programador e os literais.É nela que guardamos as variaveis e seus respectivos valores que criamos em nossos programadores como:
int8 x; // Cria variavel de 8bits x
x=10; // O valor de x (10) é guardado na memória de dados
Já a memória de Programa, fica encarregada de guardar a sequência de comandos que operarão o uC, ou seja é nesta memória em que guardaremos aquele nosso programa compilado e transformando em .HEX que contêm todas as instruções a serem tomadas pelo µC em linguagem de máquina (01011010...).
Além da memória, os µC possuem os mais diversos periféricos, que vão tornando-se mais sofisticados de acordo com a familia do PIC usado (10F,12F,16F,18F...).
Entre os periféricos do PIC podemos citar os Timers, ADC, PWM, Interrupções...
Explicar o funcionamento destes periféricos foge do escopo deste artigo, sendo que os explicarei futuramente.
Explicar o funcionamento destes periféricos foge do escopo deste artigo, sendo que os explicarei futuramente.
Microcontroladores PIC
Os µC PIC, são os microcontroladores da Microchip, e são os mais usados atualmente, tanto por engenheiros quanto por hobbystas, o PIC é constituido a partir da arquitetura Harvard, onde a CPU é interligada com a memória de dados (RAM) e a de programa (EEPROM) por um barramento especifico, isso proporciona maior velocidade na execução das tarefas.
Outra caracteristica do PIC, é o seu set reduzido de instruções (RISC), isso além de melhorar a optimização do µC pois libera mais espaço em memória já que são menos comandos para armazenar, além de apresentar maior facilidade para memorização de comandos, por outro lado exige mais da criatividade do programador, pois este terá menos comandos disponiveis.
Por fim falaremos do Pipeline, que também aumenta a velocidade na execução do firmware.O PIC trabalha a partir de um trem de pulsos (clock) este clock pode ser gerado internamente ou por um cristal oscilador, para exemplificar usaremos um cristal oscilador de 4MHz de frequência, ao injetar este sinal no PIC ele o divide internamente por 4 gerando quatro fases (Q1 Q2 Q3 Q4) cada uma com 1MHz, a maioria das instruções no PIC leva um ciclo de máquina para ser realizada com exeção das instruções GOTO e CALL que levão dois, com o clock divido em quatro fases, quando o PIC executa uma instrução por exemplo em Q2 a outra já está sendo buscada em Q1, isso como vocês podem ver aumenta consideravelmente o desempenho do µC.
Antes de aventurar-se no mundo dos µC aconselho vocês a lerem sobre circuitos digitais, pois estes são a base para os µC sejam eles PIC, AVR, ARM...
Se tudo correr bem, em breve pretendo formular um pequeno resumo sobre eletrônica digital.
Espero que com esta breve descrição, você tenha familiarizado-se mais com o mundo dos µC.
Antes de aventurar-se no mundo dos µC aconselho vocês a lerem sobre circuitos digitais, pois estes são a base para os µC sejam eles PIC, AVR, ARM...
Se tudo correr bem, em breve pretendo formular um pequeno resumo sobre eletrônica digital.
Espero que com esta breve descrição, você tenha familiarizado-se mais com o mundo dos µC.
Obrigado pela atenção,
Até a próxima.
Até a próxima.
segunda-feira, 20 de dezembro de 2010
Termometro LM35 com LCD
Olá a todos, após um período conturbado (devido aos vestibulares de final de ano) estou de volta, e com mais um projeto interessante, e de fácil montagem, em que novamente iremos utilizar um microcontrolador PIC da Microchip, e a linguagem C, e o compilador CCS.Trata-se de um termometro, que irá exibir a temperatura em graus Celsius em um display LCD 16x2.
O sensor utilizado para medir a temperatura foi o LM35, (clique para ver seu datasheet).
Nosso projeto exibe temperaturas de 0° a 150°C.
A novidade neste projeto é que o hardware/firmware foi desenvolvido para 3 microcontroladores diferentes:
PIC16f877a (figura acima)
PIC16f688
PIC16f819
Sendo que cabe a você leitor escolher o que for mais conveniente, o arquivo compactado (que encontra-se no final desta postagem), contêm 3 sub-diretorios contendo os arquivos, cada um desses diretorios têm o nome do PIC que foi usado.
O LM35 apresenta saída analógica, em que sua corrente varia correspondendo a variação de temperatura, para ler este sinal AD, utilizamos o ADC (Conversor Analógico Digital) interno do PIC, que irá converter está tensão AD em um nível binário correspondente.
Vamos trabalhar em cima do PIC16f877a.Ele possui um conversor AD de 10bits, estes bits representam a resolução do conversor, quanto mais bits, mais preciso será.
Nos ADC usamos uma tensão de referência (Vref) que servirá como escala, ou seja o as saídas do ADC estaram em 1 quando a tensão de entrada for maior ou igual a tensão Vref.
Mas como na saída do ADC temos um valor binario proporcional a tensão AD e não o próprio valor, usamos a técnica conhecida como escalonamento para encontrar o valor da saída do ADC.
Para exemplificar o funcionamento do ADC usarei a resolução do PIC16f877a (10bits), e a tensão de referência sendo os 5V da alimentação, com isso temos que:
Vsaída=Vref/resolução-1 == 5/2^10-1=4,887...mV.
Por exemplo para um valor de 200 em decimal, teremos 200 *4,887mV=0,9774V.
Quando desenvolvemos um firmware com ADC, devemos informar ao compilador qual é a resolução do PIC, fazemos isso através desta diretiva:
#device adc=10 // Configura conversor AD
Além disso, na função principal (main) devemos configurar o ADC, efetuando os seguintes comandos:
setup_adc_ports(ra0_analog); // Define pino a0 como entrada analógica
setup_adc(adc_clock_internal); // Usa clock interno
set_adc_channel(0); // Seleciona canal de 0
O primeiro define os pinos que serão usados como entradas analógicas, o segundo define o clock do ADC, e o terceiro seleciona o canal do ADC (no caso o 0, que corresponde ao pino A0 do PIC) que deve ser trocado caso deseje efetuar a leitura de outro sensor ligado a outro pino.
Para armazenar o valor analógico usamos neste caso variaveis de 16bits, já que o ADC é de 10bits de resolução.
int16 valor,temp; // Para guardar temperatura
A primeira irá armazenar o valor AD, e a segunda o valor AD convertido em graus Celsius.
Quando queremos ler o ADC devemos usar a seguinte diretiva, que irá passar o valor AD para a variavel "valor".
valor=read_adc(); // Guarda valor lido em valor
Lembrando que antes da leitura AD é necessário usar algum comando de atraso (delay), para estabilizar o ADC, no nosso caso 50ms, mas poderia ser menos, só que no nosso projeto o tempo não é primordial.
Por fim, falaremos dos comandos de conversão do valor AD para graus Celsius:
if(valor) valor+=1;
temp = valor*4 + (valor * 113)/128;
temp=temp/10;
Estes são os comandos usados para transformar a leitura AD em °C.
Após isso, o resto do programa não é segredo dos leitores do eletronicaffa, já que trata-se das rotinas para display LCD.
Junto com os anexos do projeto, encontra-se também o fluxograma resumido do projeto, feito com o Microsoft Visio.
Qualquer dúvida entrem em contato comigo:
rafaelvarago@yahoo.com.br
Os arquivos encontram-se no meu disco virtual com o seguinte nome:"Termometro LM35 (LCD).0.rar", e devem ser descompactados com WinRar ou semelhante.
Download Termometro LM35 e LCD
sexta-feira, 10 de dezembro de 2010
Ausente por um pequeno tempo.
Olá a todos,
Não sei se perceberam, mas já faz um tempo que não posto nada aqui no Eletronica Free For All, pois estou vivendo um mês um tanto conturbado devido aos vestibulares agora do fim do ano.
Só que devo avisar que em breve retornarei com mais projetos e agora também com tutorias e artigos variados sobre eletronica com enfoque maior nos microcontroladores.
Até lá quero desejar a todos um feliz natal e um belissímo e prospero ano novo.
E já aproveitando esta postagem, peço que vocês caros leitores, opinem sobre o que o eletronicaffa deverá ter em 2011.E juntos vamos torna-lo um blog realmente útil e de todos.
Boas Festas !
Não sei se perceberam, mas já faz um tempo que não posto nada aqui no Eletronica Free For All, pois estou vivendo um mês um tanto conturbado devido aos vestibulares agora do fim do ano.
Só que devo avisar que em breve retornarei com mais projetos e agora também com tutorias e artigos variados sobre eletronica com enfoque maior nos microcontroladores.
Até lá quero desejar a todos um feliz natal e um belissímo e prospero ano novo.
E já aproveitando esta postagem, peço que vocês caros leitores, opinem sobre o que o eletronicaffa deverá ter em 2011.E juntos vamos torna-lo um blog realmente útil e de todos.
Boas Festas !
sexta-feira, 26 de novembro de 2010
Orgão Eletrônico
Olá.Neste artigo irei apresentar um excelente projeto, um Orgão Musical Eletrônico, que irá emular o som de algumas notas musicais.Lembrando que não sou "expert" em música, e se caso algo estiver errado por favor comentem.
O software novamente foi escrito em linguagem C, e compilado pelo CCS.
A grande diferença deste projeto para os anteriores é que ao invés de usar display 7 segmentos como disposito de saída, usaremos o poderoso display LCD.
Se fizermos uma breve comparação entre os dois dispositivos logo notaremos que cada um apresenta vantagens e desvantagens que devem ser levadas em conta.
O grande chamativo dos displays 7 segmentos são: a facilidade de controle, e o preço, mas por outro lado apresentam desvantagens como o consumo de corrente (lembrando que são 7 segmentos mais o ponto, no total 8 LEDs), e pouca quantidade de caracteres a serem exibidos.Já o LCD apesar de seu preço ser maior, apresenta baixo consumo de corrente, e uma grande gama de caracteres para exibição, o problema do LCD é que sua inicialização é trabalhosa, e chega a assustar muitos iniciantes na área.
O controle do LCD que é do tipo 16x2 com backlight (16 colunas por 2 linhas, e iluminação externa a base de LEDs que devem ser correntamente polarizados com resistores limitadores de corrente) será feito pelo PIC16f877a, que lerá as informações de um conjunto de 9 botões ligados ao GND (novamente usaremos os resistores de pull-up do portb).Ao apertar um botão, o PIC verificará qual nota musical ele representa, e por meio de pulsos altos e baixos intercalados por delays irá gerar uma frequêcia próxima da nota em questão.
A seguir temos a descrição das notas com suas respectivas frequências:
DO 200Hz
RÉ 246Hz
MI 261Hz
FÁ 293Hz
SOL 329Hz
LÁ 349Hz
SI 392Hz
#DO 440Hz
#RÉ 493Hz
Tendo a frequência, e sabendo que está é inversamente proporcional ao período, podemos calcular este e usar delays (ms/us) para gerar a frequência desejada.
Devo lembrar que existem técnicas mais arrojadas do que está, mas devo avisar que apesar de ser mais simples, têm seu funcionamento comprovado, e resultados satisfatórios.
Espero sinceramente ter ajudado, e qualquer coisa entrem em contato comigo através:rafaelvarago@yahoo.com.br
Abaixo encontra-se o link do meu disco virtual com o projeto, que está com o seguinte nome:"Orgão Eletrônico.rar", e deve ser descompactado com WinRar ou semelhante.
Download Orgão Eletrônico
quinta-feira, 25 de novembro de 2010
Placar Eletrônico de Truco
Olá, mais uma vez, neste artigo apresentarei um de meus projetos favoritos o Placar Eletrônico de Truco.O software foi escrito em linguagem C, e compilado pelo CCS.
Antes de mais nada, darei uma breve noção (a necessaria para entender o projeto) sobre truco, o truco é um jogo de cartaz, muito difundido não só Brasil, mas como em todo mundo, neste jogo para vencer é necessário fazer 12 pontos, existem basicamente duas maneiras de se adquirir pontos: de 1 em 1, ou você tem a opção de pedir truco e se caso ganhe você acumalará 3 pontos no seu placar.
Neste projeto, o PIC16f877a, irá fazer o controle de 4 displays de 7 segmentos catodo comum,a partir da informação de 6 botões:
DW1 (decrementa 1 ponto no placar da equipe 1);
UP1 (incrementa 1 ponto no placar da equipe 1);
TR1 (incrementa 3 pontos no placar da equipe 1);
DW2 (decrementa 1 ponto no placar da equipe 2);
UP2 (incrementa 1 ponto no placar da equipe 2);
TR2 (incrementa 3 pontos no placar da equipe 2).
Os botões deste projeto não necessitam de resistores de pull-up, pois estes encontram-se internamente no portb do PIC.
Para controlar os 4 displays de uma só vez usamos novamente da técnica de multiplexação de displays, usada na Esteira Contadora de Objetos.
Lembrando que é necessário o uso de resistores limitadores de corrente nos pinos dos segmentos do display.
Qualquer dúvida entrem em contato comigo:
rafaelvarago@yahoo.com.br
Os arquivos encontram-se no meu disco virtual com o seguinte nome:"Placar de Truco v2.0.rar", e devem ser descompactados com WinRar ou semelhante.
Download Placar Eletrônico de Truco
Assinar:
Postagens (Atom)