sexta-feira, 9 de setembro de 2016

Memória do PIC18F4550
































Programação Menus



Atividade:

O programa deve piscar um led com a opção de tempo selecionada.
Um menu com 4 opções de forma que apareça:
·        No programa (piscar o led):
o   1ª linha do LCD: Tempo selecionado
o   2ª linha do LCD: Opção para entrar no menu
·        No menu (trocar o tempo, LED apagado):
o   1ª linha do LCD: A opção corrente
o   2ª linha do LCD: As funções dos botões
Botões:
·        Up (+)                   Rola o menu para cima
·        Down (-)              Rola o menu para baixo
·        Menu/OK            Entra e sai do menu
Opções do menu:
·        Tempo = 1s (default = ao iniciar o programa)
·        Tempo = 2s
·        Tempo = 3s

·        Tempo = 4s


=====================================================

quarta-feira, 7 de setembro de 2016

Atividades com Conversor A/D

Utilizando como base o exemplo do conversor A/D onde é realizada a leitura de tensão da saída variável de um potenciômetro de 0 a +5V
Apresentar as tarefas no hardware.







Atividade 1 – Voltímetro de 5V

Implemente o hardware para funcionamento do programa de exemplo do conversor A/D















Atividade 2 – Voltímetro de 12V


Monte um voltímetro que meça uma tensão entre 0 e +12V.















Atividade 3 – Potenciômetro

Implemente o programa para informar o valor do potenciômetro em Ω

Escolha um potenciômetro de qualquer valor e ajuste para aparecer no LCD o valor correspondente









Atividade 4 – LDR



Pesquise o funcionamento do LDR

  • Ligue um divisor de tensão com um LDR
  • Faça a leitura do divisor através do conversor A/D
  • Crie 3 faixas de iluminação
    • Baixa
    • Média
    • Alta
  • Mostre o LCD o tipo de intensidade de acordo com a escala acima
 ou 






Atividade 5 – Termômetro

Implemente um termômetro, utilizando o sensor LM35.




Como o LM35 possui o limite de 150ºC (saída com 1,5V), modifique o a tensão de referência positiva (VREF+).

Mostra no LCD a temperatura do sensor.


Dica de implementação para modificar a tensão de referência positiva (VREF+):


  • Registrador ADCON1<4> (Bit 4)- VCFG2: seleção da +Vref
    • 1: +Vref = AN3
    • 0: +Vref = VDD
  • Definir A3 – RA3/AN3/+Vref  como entrada no registrador TRIS




Atividade 6 – Leitura de 2 temperaturas

Faça a leitura de 2 sensores LM35 (AN0 e AN1).





Dica de implementação:


  • Na função config_AD: Registrador ADCON1: AN0 -> AN0 + AN1
  • Registrador TRIS: AN0 -> AN0 + AN1
  • Laço while (1)
    • Seleção AN0 pelo registrador ADCON0
    • Leitura do A/D
    • Mostrar valor no LCD
    • Seleção AN1 pelo registrador ADCON0
    • Leitura do A/D
    • Mostrar valor no LCD




Atividade 7 – Controle de acionamento de ar condicionado em 2 pontos

Sensor 0 controla a saída Led 0 e uma carga (relé de +12V)

  • Liga em 35ºC
  • Desliga em 30ºC

Sensor 1 controla a saída Led 1 e uma carga (relé de +12V)

  • Liga em 32ºC
  • Desliga em 28ºC



Dica de implementação: faça os testes com a temperatura antes de mostrar ela no LCD.





Atividade - Questionário sobre Hardware

Fonte de Consulta:
  • ·        Datasheet
  • ·        Micontroladores PIC18 – Aprenda e Programe em Linguagem C – Alberto Noboru Miyadaira

  1. Explique para que servem os Special Function Register (SFR).
  2. Explique para que servem os General Porpouse Register (GPR).
  3. Explique para que servem a memória de programa, vetores e stack e onde estão localizados.
  4. Como pode ser configurado o oscilador do PIC18F4550?
  5. Quais as frequências possíveis no oscilador interno e em qual registrador/bits ele é configurado?
  6. Em que módulo/periférico do PIC18F4550 funciona o oscilador secundário e em que registrador/bits ele é configurado?
  7. Quais são os modos e frequências podemos configurar via oscilador externo?
  8. Monte uma tabela associando oscilador/cristal/capacitor para ser utilizado no oscilador externo.


  

Convertendo números decimais em binários

Para converte um número decimal existem várias formas. Uma delas consiste na diminuição de multiplos de 2 (2x). Basta saber os múltiplos, abaixo os múltiplos até 212 :
·        212 = 4096
·        211 = 2048
·        210 = 1024
·        29 = 512
·        28 = 256
·        27 = 128
·        26 = 64
·        25 = 32
·        24 = 16
·        23 = 8
·        22 = 4
·        21 = 2
·        20 = 1


  

Exemplo:

O processo consiste em começar subtraindo o maior valor múltiplo de 2 possível, e repetindo o processo parando somente quando chegar a zero.
Após o final marca-se com 1 os bits referentes aos múltiplos que foram subtraídos e com 0 os demais.

Vamos mostrar como converter um número, por exemplo 185.





  

Sugestão de fluxograma para 8 bits:

  1. ·        Crie inicialmente um vetor com o número de bits necessários a conversão (unsigned char binario[8];).
  2. ·        Guarde o valor utilizando uma variável auxiliar.
  3. ·        Teste se a variável auxiliar se ela é maior que 128, se for subtraia 128 do número e marque o bit 7 como 1 (binario[7]=1;) se não marque o bit 7 como 0 (binario[7]=0;).
  4. ·        Repita o processo para os outros múltiplos de 2 (64, 32, 16, 8, 4, 2, 1 e 0).




  

Tratamento de variáveis numéricas no LCD 2 x 16

A biblioteca, “biblioteca_lcd_2x16_48M_XC.h” não dispõe de funções para imprimir variáveis numéricas no LCD, e sim somente funções que imprimem caracteres no LCD.
Para imprimir variáveis numéricas é necessário converte-las para caracteres.

Segue abaixo um exemplo de impressão de uma variável numérica no LCD



Programa em linguagem C para o hardware descrito acima

  


#define _XTAL_FREQ 48000000

                #include <stdio.h>
#include <xc.h>
#include "c:\h\Config_PIC18F4550.h"
#include "c:\h\biblioteca_lcd_2x162_48M_XC.h"

void delay_ms(int i) {
    for (int x = 0; x < i; x++) {
        __delay_ms(1);
    }
}

void main(void) {
    char numero=0;
    char texto[16];
    TRISD = 0x00;
    LATD = 0;
    lcd_inicia(0x28, 0x0f, 0x06);
    lcd_LD_cursor(0);
    lcd_posicao(1, 1);
    imprime_string_lcd("Var num no LCD");
    while (1) {
        lcd_posicao(2, 1);
        sprintf(texto,"Numero = %3d ",numero);  // guarda na varável texto a string com o número com 3 dígitos
        imprime_buffer_lcd(texto, 15);          // imprime a variavel texto com 15 posições
        ++numero;
        delay_ms(1000);
    }
}


  

Atividade - Escrevendo variáveis numéricas no LCD 16x2







Tarefa 1:

Utilizando a ideia do contador binário com 4 teclas, implemente o programa para mostrando o valor da variável no LCD e modifique o seu valor de acordo com as teclas:
o   rst – Botão que inicializa o contador em 0
o   inc – Botão que incrementa o contador em 1 unidade
o   dec – Botão que decrementa o contador em 1 unidade
o   set – Botão que seta o contador para o número 128

Tarefa 2:

Modifique o programa para mostrar o valor em hexadecimal

Tarefa 3:

Modifique o programa para mostrar o valor nos formatos

  • decimal
  • hexadecimal
  • binário


Para a conversão em binário leia o post Convertendo números decimais em binários