Download - Programmable Controller Interfacing I2C
Faculdade de Engenharia da Universidade do Porto
I2C BUS
80C51
RTCIOExpander
IOExpander
Patrício Ferreira, José Borges.
Junho de 2010
Controlador Programável
Interface I2C
Controlador Programável
2
Conteúdo 1. Introdução............................................................................................................................. 3
2. Implementação ..................................................................................................................... 3
2.1. Métodos de comunicação ............................................................................................ 3
2.2. Esquemático do circuito ............................................................................................... 4
2.3. Configuração do sistema .............................................................................................. 4
2.3.1. Descrição dos comandos ...................................................................................... 5
2.3.2. Funcionamento interno ........................................................................................ 5
2.4. Interface RS-232............................................................................................................ 6
2.5. Análise funcional .......................................................................................................... 8
2.5.1. Módulo principal .................................................................................................. 9
2.5.2. Módulo I2C ............................................................................................................ 9
2.5.3. Módulo RTC......................................................................................................... 10
2.5.4. Módulo Sensor .................................................................................................... 10
2.5.5. Módulo LCD ......................................................................................................... 10
2.5.6. Módulo TASM ..................................................................................................... 10
2.5.7. Módulo Serial ...................................................................................................... 10
3. Resultados ........................................................................................................................... 11
4. Referências ......................................................................................................................... 12
Controlador Programável
3
1. Introdução No trabalho foi proposto desenvolver um sistema que permite controlar vários
dispositivos:
LCD 4*20 caracteres.
Saídas (ex: Luzes).
Real Time Clock.
Sensores de temperatura e humidade.
Leitura de entradas.
Estes dispositivos seriam ligados ao microcontrolador 8051 através da interface
I2C. O sistema deve permitir configurar todos os dispositivos e programar eventos
através de um ficheiro de configuração enviado através da porta serie. O RTC deve
fornecer a data e hora, o que permite a programação temporal de eventos (ex:
ligar a luz 5 as todos os dias as 7h20).
A configuração também deve permitir a activação de saídas dependendo das
entradas (Ex: Activar a saída 2 se a entrada 6 estiver activa). O ficheiro de
configuração deve ser desenvolvido na linguagem PL, que depois de convertida
para um código objecto seria enviado para o microcontrolador.
2. Implementação
2.1. Métodos de comunicação
Sabendo que no nosso sistema microcontrolador comunica com vários dispositivos,
seria necessário usar vários pinos para fazer esta comunicação e tendo um número
de pinos limitados, suportaria um número muito limitado de dispositivos. Esta
barreira foi ultrapassada com uso da interface I2C que basicamente utiliza dois pinos
para controlar qualquer dispositivo que seja compatível com o mesmo. O
barramento I2C é formado por pino que gera o sinal de relógio e o outro pino para
os dados. A recepção e o envio de dados são feitos em serie. Os dispositivos que
não são compatíveis com o I2C foram ligados a dispositivos intermédios que
convertem os dados em serie em dados em paralelo. O protocolo I2C e constituído
por quatro comandos:
Iniciar comunicação.
Escrever dados.
Ler dados.
Parar comunicação.
Cada dispositivo com interface I2C é identificado com um endereço que permite a
comunicação com um dispositivo de cada vez.
Controlador Programável
4
2.2. Esquemático do circuito
O circuito completo do nosso sistema é constituído pelos seguintes dispositivos:
Um LCD Display de 4*20 caracteres.
Um Real Time Clock.
8 Interruptores
8 Saídas ligados a leds.
1 Sensor de temperatura e humidade.
O LCD as saídas ligadas a Leds e os interruptores não são compatíveis com I2C por isso
estão ligados ao IOExpander que faz a conversão acima descrito.
I2C BUS
80C51
RTCIOExpander
IOExpander
LCD
Sensor
IOExpander
IOExpander
IOExpander
IOExpander
Fig 1: Esquemático do circuito usado no sistema.
2.3. Configuração do sistema
Para tornar o sistema flexível, que forma a que o utilizador a configure a qualquer hora
foi desenvolvida uma interface com a porta serie, onde é enviado o ficheiro em forma
de texto. O código da configuração é feita na linguagem PL, esta é compilada e
convertida num código objecto que será enviado para o microcontrolador. O código
será armazenado na memória e depois será executada. O código é convertido de
acordo com uma tabela que indica as instruções os respectivos códigos de operação e
o número de bytes ocupados.
Controlador Programável
5
2.3.1. Descrição dos comandos
Comando Descrição
ONIF <oi> Liga a saída número 'o' se a entrada número 'i' está activa
OFFIF <oi> Desliga a saída número 'o' se a entrada número 'i' está activa
ONALL Liga todas as saídas
OFFALL Desliga todas as saídas
ON <o> Liga a saída número 'o'
OFF <o> Desliga a saída número 'o'
ONAT <mho> Liga a saida número 'o' todos os dias na hora 'h' e no minito 'm'
OFFAT <mho> Desliga a saida número 'o' todos os dias na hora 'h' e no minito 'm'
JUMP <adr> Salta para o endereço 'adr' Tabela 1: Comandos suportados pelo nosso sistema.
2.3.2. Funcionamento interno
O ficheiro configura as variáveis do sistema, e as operações são definidas por um loop
que fica sempre a testar as variáveis. Na memória contem o código que será testado e
de acordo com ela o código faz determinadas acções.
0 .org 30h
1 start:
2 ONIFF $25
3 ONAT $02 $00 $04
4 OFFAT $01 $00 $04
5 OFFIF $34
6 JUMP start
7 .end
8
0 Inicia no endereço 30h
1 label(30h)
2 liga a saída 2 se a entrada 5 está activa
3 liga as 00h2min a saída 4
4 desliga as 00h1min a saída 4
5 desliga a saída 3 caso a 4 estiver active.
6 salta para o label start(30h)
7
8
Controlador Programável
6
Iniciação das
variaveis
Loop de execução de
comandos
Fig 2: Funcionamento interno do sistema
2.4. Interface RS-232
O ficheiro de configuração é enviado através da ligação RS-232. Para ter uma interface
mais interactiva com o utilizador foi desenvolvido uma aplicação em java que além de
enviar o ficheiro de configuração também envia outros comandos para o
microcontrolador. Os comandos enviados para o microcontrolador seguem um
protocolo simples:
Comando Descrição
<T> Inicio de envio de ficheiro de configuração
<C> Pedido de temperatura
<E> Envio de mensagem de erro
<L> Envio de logs
<D> Sincronização da data e hora do RTC com a do computador Tabela 2: Protocolo de comunicação entre o computador e microcontrolador
A comunicação é feita com os comandos acima descritos, para cada comando enviado
ao microcontrolador esta confirma a recepção a sua recepção, fazendo um eco do
mesmo comando, caso não receba num intervalo de tempo estipulado é enviado uma
mensagem para o editor da aplicação.
Controlador Programável
7
Uma outra funcionalidade do programa é o pedido de informações sobre a
temperatura e visualização da mesma num gráfico.
Fig 3: Interface com o utilizador
Controlador Programável
8
2.5. Análise funcional
O projecto foi subdividido em blocos de forma a ficar mais organizado e mais fácil de
implementar. O diagrama em baixo mostra a relação entre os diferentes módulos.
MAIN
Serial
I2C
RTC
TASM
RUN
LCD
SENSOR
Fig 4: Dependência dos módulos do projecto
Controlador Programável
9
2.5.1. Módulo principal
O funcionamento do sistema é ditado pelo módulo
principal, que interliga a todos os módulos. Esta inicia
o LCD, o RTC e o Sensor de temperatura, depois fica a
espera do ficheiro de configuração. Enquanto não
receber o ficheiro de configuração o programa
principal fica num loop que actualiza a temperatura e
a data do LCD.
2.5.2. Módulo I2C
É um dos módulos mais importantes do projecto, pois
através dela o microcontrolador comunica com todos
os dispositivos. Este módulo é constituído por 4
funções básicas:
startI2C – inicia a comunicação entre o
microcontrolador e os respectivos dispositivos.
writeI2C – envia mensagens (dados
endereços) para os dispositivos. Depois da
escrita de dados o microcontrolador espera
por uma confirmação do dispositivo a quem
estava a enviar dados.
readackI2C – lê dados de um
determinado dispositivo. Depois de ler os
dados é enviada uma confirmação ao
dispositivo que o micro recebeu os dados.
stopI2C – termina a comunicação com o
dispositivo a quem estava ligado.
Fig 5: Funcionamento do programa principal.
START RTC
Start LCD
Send Time to
LCD
Read
Temperature
Send
temperature to
LCD
Configured File
Received ?
RUN
Configurations
YES
NO
Configuration
Error ?
NO
Send Error
Report
Controlador Programável
10
2.5.3. Módulo RTC
Este módulo e responsável para fornecer os
dados sobre a data e sobre a hora. Esta é
responsável para actualizar a data e hora do
LCD. Também com ajuda dela é possível a
programação de eventos temporais.
2.5.4. Módulo Sensor
Responsável pela leitura dos valores de
temperatura e de humidade. Também é
responsável para actualizar os dados do LCD. O
módulo principal usa-o para ler e enviar a
temperatura através da porta serie, que é
mostrado em forma de gráfico no computador.
2.5.5. Módulo LCD
Este é responsável para iniciar, enviar dados,
enviar comandos para o display. È responsável
para configurar o display, para escrever nas
linhas da mesma. Sendo a primeira linha
reservada para a data e hora, na segunda linha
a temperatura, na terceira para a humidade e
na quarta para outras mensagens.
2.5.6. Módulo TASM
Contem as funções que correm o programa de
acordo com o ficheiro de configuração. Esta
corre o loop de comandos descritos na tabela 2,
faz as leituras das entradas, actualiza as saídas,
repara se há eventos temporais. Na figura ao
lado é mostrado um fluxograma do
funcionamento deste módulo.
2.5.7. Módulo Serial
É um dos módulo mais importantes do
projecto, pois ela é responsável por:
Receber o ficheiro de configuração.
Check next
command
ONIFF ?Do ONIF Yes
OFFIF?
ONALL?
OFFALL?
ON?
OFF?
ONAT?
OFFAT?
JUMP?
Start
Do OFFIF Yes
Do ONALL Yes
Do OFFALL Yes
Do ON Yes
Do OFF Yes
Do ONAT Yes
Do OFFAT Yes
Jump to the
adressYes
Send Error
Report
Controlador Programável
11
Receber comandos de acordo com o protocolo descrito na tabela 2.
Enviar confirmações de comandos recebidos.
Organizar os dados do ficheiro de configuração na memória do micro.
3. Resultados O programa foi testado no software ISIS e depois testado em laboratório, podendo
testar todas as especificações do guião, e constatar o correcto funcionamento de
todos os requisitos. O desenvolvimento de uma aplicação em java permitiu criar uma
melhor interface com o utilizador, onde foi possível enviar o ficheiro que programa o
core51, o ficheiro de configuração do sistema, sincronizar a data e hora do RTC com a
data e hora do computador, receber a temperatura e mostra-lo num gráfico.
Em baixo são mostrados algumas figuras das simulações.
Fig 6: Visualização da temperatura.
Controlador Programável
12
Fig 7: Visualização da data hora e temperatura.
4. Referências Sites:
http://www.8051projects.net/lcd-interfacing/lcd-4-bit.php
http://www.8051projects.net/i2c-twi-tutorial/introduction.php
http://www.robot-electronics.co.uk/htm/using_the_i2c_bus.htm
Software:
Uvision
ISIS Proteus
NetBeans
Note Pad ++