programmable controller interfacing i2c

12
Faculdade de Engenharia da Universidade do Porto I2C BUS 80C51 RTC IOExpander IOExpander Patrício Ferreira, José Borges. Junho de 2010 Controlador Programável Interface I2C

Upload: patricio-lima

Post on 20-Jun-2015

486 views

Category:

Documents


1 download

DESCRIPTION

Faculdade de Engenharia da Universidade do PortoControlador ProgramávelInterface I2CI2C BUSIOExpander IOExpander80C51RTCPatrício Ferreira, José Borges.Junho de 2010Controlador ProgramávelConteúdo1. 2. Introdução............................................................................................................................. 3 Implementação ..................................................................................................................... 3 2.1. 2.2

TRANSCRIPT

Page 1: 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

Page 2: Programmable Controller Interfacing 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

Page 3: Programmable Controller Interfacing I2C

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.

Page 4: Programmable Controller Interfacing I2C

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.

Page 5: Programmable Controller Interfacing I2C

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

Page 6: Programmable Controller Interfacing I2C

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.

Page 7: Programmable Controller Interfacing I2C

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

Page 8: Programmable Controller Interfacing I2C

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

Page 9: Programmable Controller Interfacing I2C

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

Page 10: Programmable Controller Interfacing I2C

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

Page 11: Programmable Controller Interfacing I2C

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.

Page 12: Programmable Controller Interfacing I2C

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 ++