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:
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.
Unidade Lógica e Aritmética (ULA):
Realiza operações lógicas e aritméticas com os bits armazenados nos registradores.
Unidade de Controle e Sincronização (UCS):
µ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.
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.
Qualquer dúvida entrem em contato comigo, através de:
rafaelvarago@yahoo.com.br.

Obrigado pela atenção,
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 !