Prévia do material em texto
Sistemas Microprocessados / Ricardo Zelenovsky MSP430-1
MSP430 – LCD
1. Pinagem
2. Funcionamento
3. Instruções para o LCD
4. Sugestões de Operação
5. Interface
6. Sugestão de funções
Sistemas Microprocessados / Ricardo Zelenovsky MSP430-2
MSP430 – LCD
2 Linhas x 16 colunas
Sistemas Microprocessados / Ricardo Zelenovsky MSP430-3
MSP430 – LCD
4 Linhas x 16 colunas
Sistemas Microprocessados / Ricardo Zelenovsky MSP430-4
MSP430 – LCD
Gráfico 128 x 64 pontos
Sistemas Microprocessados / Ricardo Zelenovsky MSP430-5
MSP430 – LCD
Gráfico 128 x 64 pontos
Sistemas Microprocessados / Ricardo Zelenovsky MSP430-6
MSP430 – LCD
• Existe uma grande diversidade.
• Interfaces: Serial, I2C, SPI e Paralela.
• Vamos usar uma família muito popular,
construída com o HD 44780 (Hitachi).
• Será usada a versão
2 Linhas por 16
Colunas com
barramento paralelo.
Sistemas Microprocessados / Ricardo Zelenovsky MSP430-7
MSP430 – LCD – Formato
2 X 16
4 X 16
Sistemas Microprocessados / Ricardo Zelenovsky MSP430-8
MSP430 – LCD – Memórias
DDRAM Memória de 80 bytes: um byte para
cada posição do display.
Linha 1: 0x00 � 0x27
Linha 2: 0x40 � 0x67
CGROM Memória de 4 KB que indica a
matriz de pontos para cada caracter.
CGRAM Memória de 256 B com a matriz de pontos especificada pelo usuário
para os caracteres de 0 até 7
(repete para 8 até 15).
Sistemas Microprocessados / Ricardo Zelenovsky MSP430-9
MSP430 – LCD – Memórias
DDRAM
CGROM
00
01
...
40
41
...
41
42
61
02
...
...CGRAM
A B
a Ϡ
Sistemas Microprocessados / Ricardo Zelenovsky MSP430-10
MSP430 – LCD – Memórias
CGROM Matriz 5 X 8 pontos para cada
caracter.
A11 A10 A9 A8 A7 A6 A5 A4 A3 A2 A1 A0 D4 D3 D2 D1 D0
0 1 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0
0 1 0 0 0 0 0 1 0 0 0 1 0 1 0 1 0
0 1 0 0 0 0 0 1 0 0 1 0 1 0 0 0 1
0 1 0 0 0 0 0 1 0 0 1 1 1 0 0 0 1
0 1 0 0 0 0 0 1 0 1 0 0 1 1 1 1 1
0 1 0 0 0 0 0 1 0 1 0 1 1 0 0 0 1
0 1 0 0 0 0 0 1 0 1 1 0 1 0 0 0 1
0 1 0 0 0 0 0 1 0 1 1 1
04
0A
11
11
1F
11
11
0
41H
Endereços Dados
0 0 0 0 0
Cursor
Sistemas Microprocessados / Ricardo Zelenovsky MSP430-11
MSP430 – LCD – Memórias
CGRAM Matriz 5 X 8 pontos para cada
caracteres de 0 até 7.
A5 A4 A3 A2 A1 A0 D4 D3 D2 D1 D0
10 0 0 0 0 0 1 0 0
10 0 0 1 0 1 1 1 0
10 0 1 0 1 0 1 0 1
10 0 1 1 0 0 1 0 0
10 1 0 0 0 0 1 0 0
10 1 0 1 0 0 1 0 0
10 1 1 0 0 0 1 0 0
10 1 1 1
04
0E
15
04
04
04
04
04
05H
Endereços Dados
0 0 1 0 0
Cursor
1
1
1
1
1
1
1
1
28
29
2A
2B
2C
2D
2E
2F
Sistemas Microprocessados / Ricardo Zelenovsky MSP430-12
MSP430 – LCD – Registradores
IR Registrador de Instruções (WR)Recebe as instruções.
DR
Registrador de Dados (RD / WR)
Recebe o dado a ser escrito na DDRAM
ou CGRAM.
AC
Contador de Endereços (RD)
Indica onde o dado será escrito.
Incrementa a cada escrita.
Acessado indiretamente via instrução
Sistemas Microprocessados / Ricardo Zelenovsky MSP430-13
MSP430 – LCD – Registradores
RS R/W Reg. Operação
0 0 IR Escrever uma instrução em IR
1 0 DR Escrever no DR
(operação sobre DDRAM ou CGRAM)
0 1 AC Ler o bit de ocupado (b7) e
o valor de AC (b6 – b0)
1 1 DR Ler o DR
(operação sobre DDRAM ou CGRAM)
• LCD opera com 5 V.
• Muitos adotam solução com apenas escrita
• R/W = 0.
Sistemas Microprocessados / Ricardo Zelenovsky MSP430-14
MSP430 – LCD – Pinagem
Sobre a interface elétrica
Sistemas Microprocessados / Ricardo Zelenovsky MSP430-15
MSP430 – LCD – PinagemPino Nome Função
1 VSS Terra
2 VDD Alimentação
3 VEE Contraste
4 RS Seleciona Registrador
5 R/#W Leitura/Escrita
6 E Habilitação
7 D0 Dado, Bit 0
8 D1 Dado, Bit 1
9 D2 Dado, Bit 2
10 D3 Dado, Bit 3
11 D4 Dado, Bit 4
12 D5 Dado, Bit 5
13 D6 Dado, Bit 6
14 D7 Dado, Bit 7
15 A Anodo
16 K Catodo
16151413121110987654321
161514 13 121110 9 8 7 6 5 4 3 2 1
Não há disposição
padrão. Cuidado!
Sistemas Microprocessados / Ricardo Zelenovsky MSP430-16
MSP430 – LCD – Escrita em 8 bits
RS
D0, D1, D2, D3, D4, D5, D6, D7Dados
R/#W
E
Escrita
Sistemas Microprocessados / Ricardo Zelenovsky MSP430-17
MSP430 – LCD – Escrita em 4 bits
RS
D4, D5, D6, D7 D0, D1, D2, D3Dados
R/#W
E
Escrita
Sistemas Microprocessados / Ricardo Zelenovsky MSP430-18
MSP430 – LCD – Leitura em 8 bits
RS
D0, D1, D2, D3, D4, D5, D6, D7Dados
R/#W
E
Leitura
Sistemas Microprocessados / Ricardo Zelenovsky MSP430-19
MSP430 – LCD – Leitura em 4 bits
RS
D4, D5, D6, D7 D0, D1, D2, D3Dados
R/#W
E
Leitura
Sistemas Microprocessados / Ricardo Zelenovsky MSP430-20
MSP430 – LCD – Instruções
• Controle do LCD é feito com instruções (RS = 0)
• Instruções permitem:
• Limpar o LCD;
• Retornar para posição inicial;
• Definir modo de entrada;
• Ativar ou desativar display;
• Deslocar o cursor ou o mostrador;
• Definir condições;
• Especificar endereço da CGRAM
• Especificar endereço da DDRAM.
Sistemas Microprocessados / Ricardo Zelenovsky MSP430-21
MSP430 – LCD – Instruções (RS=0)
Abrev. Tempo Instrução D7 D6 D5 D4 D3 D2 D1 D0
CLR 1,52 ms Limpar mostrador 0 0 0 0 0 0 0 1
HOME 1,52 ms Retornar 0 0 0 0 0 0 1 -
EMS 37 µs Definir do modo de
entrada
0 0 0 0 0 1 I/D S
DEC 37 µs Ativar ou desativar
mostrador
0 0 0 0 1 D C B
CDS 37 µs Deslocar cursor ou
mostrador
0 0 0 1 S/C R/L - -
FS 37 µs Definir condições 0 0 1 DL N F - -
SCG 37 µs Especificar endereço
CGRAM
0 1 A5 A4 A3 A2 A1 A0
SDD 0 µs Especificar endereço
DDRAM
1 A6 A5 A4 A3 A2 A1 A0
Sistemas Microprocessados / Ricardo Zelenovsky MSP430-22
0123567 4
1
Limpar
0000000
MSP430 – LCD – Instruções (RS=0 e R/#W=0)
• Preenche toda DDRAM com “brancos” (0x20).
• AC = 0 � Leva cursor para 1ª linha 1ª coluna.
• I/D = 1 � incremento do AC.
• Anula os deslocamentos do passado.
• Pode demorar 1,5 ms.
Sistemas Microprocessados / Ricardo Zelenovsky MSP430-23
0123567 4
-
Retornar
1000000
• AC = 0 � Leva cursor para 1a linha 1a coluna.
• Anula os deslocamentos do passado.
• Pode demorar 1,5 ms.
MSP430 – LCD – Instruções (RS=0 e R/#W=0)
Sistemas Microprocessados / Ricardo Zelenovsky MSP430-24
0123567 4
S
Modo de Entrada
I/D100000
0 � Movimento do display desabilitado
(display parado e cursor anda)
1 � Movimento do display habilitado
(display anda e cursor parado)
0 � AC-- a cada escrita (cursor para esquerda)
1 � AC++ a cada escrita (cursor para direita)
MSP430 – LCD – Instruções (RS=0 e R/#W=0)
Sistemas Microprocessados / Ricardo Zelenovsky MSP430-25
0123567 4
B
Ativar ou Desativar Controles
CD10000
0 � Cursor desabilitado
1 � Cursor habilitado
0 � Display desativado
1 � Display ativado
0 � Cursor estático
1 � Cursor piscante
MSP430 – LCD – Instruções (RS=0 e R/#W=0)
Sistemas Microprocessados / Ricardo Zelenovsky MSP430-26
0123567 4
-
Deslocar Cursor ou Display
-R/LS/C1000
0 � Deslocamento para esquerda
1 � Deslocamento para direita
0 � Deslocar cursor 1 posição
AC é alterado
1 � Deslocar display 1 posição
AC inalterado
MSP430 – LCD – Instruções (RS=0 e R/#W=0)
Sistemas Microprocessados / Ricardo Zelenovsky MSP430-27
0123567 4
-
Definir Condições
-FNDL100
0 � Display com 1 linha
1 � Display com 2 linhas
0 � Bus de 4 bits
1 � Bus de 8 bits
0 � Caracter 5x8
1 � Caracter 5x10
Sequência para
Bus de 4 bits:
1) D7, D6, D5, D4
2) D3, D2, D1, D0
MSP430 – LCD – Instruções (RS=0 e R/#W=0)
Sistemas Microprocessados / Ricardo Zelenovsky MSP430-28
0123567 4
A0
Especificar Endereço da CGRAM
A1A2A3A4A510
Atualiza AC com os bits (A5 – A0) e
configura para que as próximas leituras
ou escritas aconteçam na CGRAMCGRAM memória para os 8 caracteres
que são configuráveis pelo usuário.
MSP430 – LCD – Instruções (RS=0 e R/#W=0)
Sistemas Microprocessados / Ricardo Zelenovsky MSP430-29
0123567 4
A0
Especificar Endereço da DDRAM
A1A2A3A4A5A61
Atualiza AC com os bits (A6 – A0) e configura
para que as próximas leituras ou escritas
aconteçam na DDRAM
Usado para especificar a nova posição
de entrada dos caracteres.
Cursor se move para essa nova posição.
MSP430 – LCD – Instruções (RS=0 e R/#W=0)
Sistemas Microprocessados / Ricardo Zelenovsky MSP430-30
MSP430 – LCD – Escrita (RS=1 e R/#W=0)
Escrever um dado no LCD
• A escrita acontece no DR.
• Depois o dado é copiado para a DDRAM.
• A escrita acontece no endereço especificado pelo
registrador AC.
• A cada escrita o AC é incrementado ou
decrementado, de acordo com o que foi programado.
• A instrução anterior define se a escrita acontece na
DDRAM ou na CGRAM.
Sistemas Microprocessados / Ricardo Zelenovsky MSP430-31
MSP430 – LCD – Leitura (RS=0 e R/#W=1)
0123567 4
A0
Ler conteúdo do AC e bit de ocupado (Busy)
A1A2A3A4A5A6B
Valor atual do AC
0 � Pode-se acessar o display
1 � Ocupado, não acessar o display
Vamos fazer essa leitura usando o
PCF8574 (quasi-bidirecional).
O LCD é
lento por
isso é
importante
o bit de
ocupado
Sistemas Microprocessados / Ricardo Zelenovsky MSP430-32
MSP430 – LCD – Escrita (RS=1 e R/#W=1)
Leitura de um dado do LCD
• O display retorna o conteúdo da posição apontada
pelo registrador AC.
• A instrução anterior define se a leitura acontece na
DDRAM ou na CGRAM.
• Permite ler o caracter presente numa determinada
posição do LCD (DDRAM).
• Permite ler o padrão especificado para um caracter
especial do LCD (CGRAM).
Leitura com o PCF8574.
Sistemas Microprocessados / Ricardo Zelenovsky MSP430-33
MSP430 – LCD – Tempo!
Abrev. Tempo Instrução D7 D6 D5 D4 D3 D2 D1 D0
CLR 1,52 ms Limpar mostrador 0 0 0 0 0 0 0 1
HOME 1,52 ms Retornar 0 0 0 0 0 0 1 -
EMS 37 µs Definir do modo de
entrada
0 0 0 0 0 1 I/D S
DEC 37 µs Ativar ou desativar
mostrador
0 0 0 0 1 D C B
CDS 37 µs Deslocar cursor ou
mostrador
0 0 0 1 S/C R/L - -
FS 37 µs Definir condições 0 0 1 DL N F - -
SCG 37 µs Especificar endereço
CGRAM
0 1 A5 A4 A3 A2 A1 A0
SDD 0 µs Especificar endereço
DDRAM
1 A6 A5 A4 A3 A2 A1 A0
Sistemas Microprocessados / Ricardo Zelenovsky MSP430-34
MSP430 – LCD – Inicialização 8 bits
Esperar 15ms
após Vcc>4,5V
Mostrador ligado
Instrução: 0011 xxxx
Esperar mais de 4,1ms
Instrução: 0011 xxxx
Esperar mais 100 µs
Instrução: 0011 xxxx
Instrução: 0011 NFxx
Instrução: 0000 1000
Instrução: 0000 0001
Instrução: 0000 01IS
Fim da inicialização
Bit de ocupado (B) não
pode ser consultado
durante esse período.
Definir Condições (8 bits)
Definir Condições (8 bits)
Definir Condições (8 bits)
Definir Condições (8 bits), N e F
Mostrador Desativado
Limpar Mostrador
Definir Modo de Entrada (I/D e S)
Sistemas Microprocessados / Ricardo Zelenovsky MSP430-35
MSP430 – LCD – Inicialização 4 bits
Sistemas Microprocessados / Ricardo Zelenovsky MSP430-36
MSP430 – LCD – Inicialização 8 bits
LCD ligado
Esperar 15 ms
após Vcc > 4,5 V
Instrução: 0011 xxxx
Esperar mais de 4,1 ms
Instrução: 0011 xxxx
Esperar mais de 100 µs
Instrução: 0011 xxxx
Instrução: 0011 NFxx
Instrução: 000 1000
Instrução: 0000 0001
Instrução: 0000 01IS
Def. Condições (8 bits)
Def. Condições (8 bits)
Def. Condições (8 bits)
Def. 8 bits, N e F
Desativar LCD
Limpar LCD
Modo de Entrada I/D e S
Instrução: 0000 11CB Ativar LCD e def. C e B
0x30
0x30
0x30
0x38
0x08
0x01
0x06
0x0F
FIM
1
2
3
4
5
6
7
8
N
ã
o
c
o
n
s
u
l
t
a
r
B
u
s
y
RS = 0
R/W = 0
Sistemas Microprocessados / Ricardo Zelenovsky MSP430-37
MSP430 – LCD – Inicialização 4 bits
LCD ligado
Esperar 15 ms
após Vcc > 4,5 V
Instrução: 0011
Esperar mais de 4,1 ms
Instrução: 0011
Esperar mais de 100 µs
Instrução: 0011
Instrução: 0010 NFxx
Instrução: 000 1000
Instrução: 0000 0001
Instrução: 0000 01IS
Def. Condições (8 bits)
Def. Condições (8 bits)
Def. Condições (8 bits)
Def. 8 bits, N e F
Desativar LCD
Limpar LCD
Modo de Entrada I/D e S
Instrução: 0000 11CB Ativar LCD e def. C e B
0x3
0x3
0x3
0x28
0x08
0x01
0x06
0x0F
FIM
1
2
3
5
6
7
8
9
N
ã
o
c
o
n
s
u
l
t
a
r
B
u
s
y
RS = 0
R/W = 0
Instrução: 0010 Def. Condições (4 bits)40x2
4
B
i
t
s
Sistemas Microprocessados / Ricardo Zelenovsky MSP430-38
MSP430 – LCD – Criar Caracter
Vamos definir o caracter 5 como seta para cima ↑
A5 A4 A3 A2 A1 A0 D4 D3 D2 D1 D0
10 0 0 0 0 0 1 0 0
10 0 0 1 0 1 1 1 0
10 0 1 0 1 0 1 0 1
10 0 1 1 0 0 1 0 0
10 1 0 0 0 0 1 0 0
10 1 0 1 0 0 1 0 0
10 1 1 0 0 0 1 0 0
10 1 1 1
04
0E
15
04
04
04
04
04
05H
Endereços Dados
0 0 1 0 0
Cursor
1
1
1
1
1
1
1
1
28
29
2A
2B
2C
2D
2E
2F
Sistemas Microprocessados / Ricardo Zelenovsky MSP430-39
0123567 4
A0
Especificar Endereço da CGRAM
A1A2A3A4A510
MSP430 – LCD – Instruções (RS=R/#W=0)
0001110 0
Enviar a instrução 0x68 e depois escrever os bytes:
0x04, 0x0E, 0X15, 0X04, 0X04, 0X04 , 0X04, 0X04.
Quando o usuário escrever o caracter 5, vai aparecer
no display a seta para cima.
0x28
Sistemas Microprocessados / Ricardo Zelenovsky MSP430-40
MSP430 – LCD – Escrita em 4 bits
RS
D4, D5, D6, D7 D0, D1, D2, D3Dados
R/#W
E
Escrita
Sistemas Microprocessados / Ricardo Zelenovsky MSP430-41
MSP430 – LCD – Pinagem
Sobre a interface elétrica
Sistemas Microprocessados / Ricardo Zelenovsky MSP430-42
MSP430 – LCD – PinagemPino Nome Função
1 VSS Terra
2 VDD Alimentação
3 VEE Contraste
4 RS Seleciona Registrador
5 R/#W Leitura/Escrita
6 E Habilitação
7 D0 Dado, Bit 0
8 D1 Dado, Bit 1
9 D2 Dado, Bit 2
10 D3 Dado, Bit 3
11 D4 Dado, Bit 4
12 D5 Dado, Bit 5
13 D6 Dado, Bit 6
14 D7 Dado, Bit 7
15 A Anodo
16 K Catodo
16151413121110987654321
161514 13 121110 9 8 7 6 5 4 3 2 1
Não há disposição
padrão. Cuidado!
Sistemas Microprocessados / Ricardo Zelenovsky MSP430-43
MSP430 – LCD – Pinagem
Note VEE (contraste)
ligado ao terra com
um resistor de 10 K.
É um remendo para
simplificar a
montagem em
laboratório.
Não é a solução
adotada neste
semestre!
Sistemas Microprocessados / Ricardo Zelenovsky MSP430-44
MSP430 – LCD – Pinagem
Correto controle do
contraste.
Sugestão para
controlar a luz de
fundo com uma
saída (pino) do
MSP.
Não é a solução adotada
neste semestre!
Sistemas Microprocessados / Ricardo Zelenovsky MSP430-45
MSP430 – LCD – Pinagem
Sistemas Microprocessados / Ricardo Zelenovsky MSP430-46
MSP430 – LCD – Pinagem
Sistemas Microprocessados / Ricardo Zelenovsky MSP430-47
MSP430 – Solução com I2C
MSP
SCL
PCF
8574
4
4
Controle
Dados LCDSDA
Vamos adotar uma solução usando um CI com porta
paralela bidirecional e barramento I2C.
Resolve o progblema da compatibilidade entre :
MSP (3,3 V) e o LCD (5 V)
3V3 5V0
Sistemas Microprocessados / Ricardo Zelenovsky MSP430-48
MSP430 – Solução com I2C
Sistemas Microprocessados / Ricardo Zelenovsky MSP430-49
Remover esse dois
resistores
MSP
Sistemas Microprocessados / Ricardo Zelenovsky MSP430-50
MSP430 – PCF8574
MSP
SCL
PCF
8574
4
4
Controle
Dados LCDSDA
• Porta paralela quase-bidirecional.
• Saída: escrever zero ou um em cada pino.
• Entrada: antes de ler, escrever um no pino.
• Endereços:• PCF8574T � 0x27
• PCF8574AT� 0x3F
Sistemas Microprocessados / Ricardo Zelenovsky MSP430-51
MSP430 – Solução com I2C
7 6 5 4 3 2 1 0
D7 D6 D5 D4 BL E R/W RS
Arrumação dos pinos do PCF8574 e do LCD
Sistemas Microprocessados / Ricardo Zelenovsky MSP430-52
MSP430 – Solução com I2C
0x3F Dado PS 0 ACK ACK Último Dado ACK
n repetições
EscravoMestre Mestre Mestre Escravo Mestre Escravo Mestre
0x7E
MSP enviando dados para o PCF8574
0x3F Dado PS 1 ACK ACK Último Dado NACK
n repetições
EscravoMestre Mestre MestreEscravo MestreEscravo Mestre
0x7F
MSP recebendo dados do PCF8574
Sistemas Microprocessados / Ricardo Zelenovsky MSP430-53
MSP430 – LCD – Escrita em 4 bits
RS
D4, D5, D6, D7 D0, D1, D2, D3Dados
R/#W
E
Escrita
Sistemas Microprocessados / Ricardo Zelenovsky MSP430-54
MSP430 – Launch Pad
Sistemas Microprocessados / Ricardo Zelenovsky MSP430-55
MSP430 – Programa Exemplo
// Piscar Back Light
#include <msp430.h>
#define TRUE 1
#define FALSE 0
#define LED1 BIT0
#define LED1_OUT P1OUT
#define LED2 BIT7
#define LED2_OUT P4OUT
1) Continua...
// I2C pins
#define SDA_SEL P3SEL
#define SDA_BIT BIT0
#define SDA_REN P3REN
#define SDA_OUT P3OUT
#define SCL_SEL P3SEL
#define SCL_BIT BIT1
#define SCL_REN P3REN
#define SCL_OUT P3OUT
#define BR100K 10 //100 kbps
#define BR50K 20 // 50 kbps
#define BR10K 100 // 10 kbps
/////////////////////////////////////////////
//#define PCF 0x3f //Endereço PCF8574AT
#define PCF 0x27 //Endereço PCF8574T
////////////////////////////////////////////
2) Continua...
Piscar Back Light
Sistemas Microprocessados / Ricardo Zelenovsky MSP430-56
MSP430 – Programa Exemplo
void config_pinos(void);
void config_I2C(void);
void LCD_BL_on(void);
void LCD_BL_off(void);
void LCD_00(void);
int PCF_read(void);
void PCF_write(char dado);
void delay(long limite);
int porta=0; //Úlitmo valor escrito na
porta
4) Continua...
// Bits para controle do LCD
#define BIT_RS BIT0
#define BIT_RW BIT1
#define BIT_E BIT2
#define BIT_BL BIT3
#define BIT_D4 BIT4
#define BIT_D5 BIT5
#define BIT_D6 BIT6
#define BIT_D7 BIT7
3) Continua...
b) Piscar Back Light
Sistemas Microprocessados / Ricardo Zelenovsky MSP430-57
MSP430 – Programa Exemplo
int main(void) {
volatile int zz=0;
WDTCTL = WDTPW | WDTHOLD;
config_pinos();
config_I2C();
LCD_00();
while(TRUE){
LCD_BL_on();
delay(10000);
LCD_BL_off();
delay(10000);
}
return 0;
}
5) Continua...
void delay(long limite){
volatile long cont=0;
while (cont++ < limite) ;
}
6) Continua...
// Ligar Back Light
void LCD_BL_on(void){
porta = porta | BIT_BL;
PCF_write(porta);
}
// Desligar Back Light
void LCD_BL_off(void){
porta = porta & ~BIT_BL;
PCF_write(porta);
}
7) Continua...
Sistemas Microprocessados / Ricardo Zelenovsky MSP430-58
MSP430 – Programa Exemplo
// Configurar Pinos I2C - UCSB0
// P3.0 --> DAS e P3.1 --> SCL
void config_I2C(void){
SDA_SEL |= SDA_BIT; // Usar módulo dedicado
SDA_REN |= SDA_BIT; // Habilitar resistor
SDA_OUT |= SDA_BIT; // Pull-up
SCL_SEL |= SCL_BIT; // Usar módulo dedicado
SCL_REN |= SCL_BIT; // Habilitar resistor
SCL_OUT |= SCL_BIT; // Pull-up
UCB0CTL1 |= UCSWRST; // UCSI B0 em ressete
UCB0CTL0 = UCSYNC | //Síncrono
UCMODE_3 | //Modo I2C
UCMST; //Mestre
//UCB0BRW = BR100K; //100 kbps
//UCB0BRW = BR20K; // 20 kbps
UCB0BRW = BR10K; // 10 kbps
UCB0CTL1 = UCSSEL_2; //SMCLK e remove ressete
}
8) Continua...
Sistemas Microprocessados / Ricardo Zelenovsky MSP430-59
UCB0CTL1 |= UCSWRST; // UCSI B0 em ressete
3
UCTXSTTUCTXNACK UCTXSTP
UCBxCTL1 ���� Controle 1 do USCI_Bx
STOP
0 = Nada
1 = STOP
Acknowledge
0 = ACK
1 = NACK
TX / RX
0 = RX
1 = TX
014
UCTR
5
START
0 = Nada
1 = START
2
UCSWRST
Reset
0 = Operando
1 = Reset
67
-UCSSELx
BRCLK
00=UCLKI
(pino)
01 = ACLK
10 = SMCLK
11 = SMCLK
1
Sistemas Microprocessados / Ricardo Zelenovsky MSP430-60
UCB0CTL0 = UCSYNC | //Síncrono
UCMODE_3 | //Modo I2C
UCMST; //Mestre
3
UCMODEX- UCMST
UCBxCTL0 ���� Controle 0 do USCI_Bx
Modo
0 = Escravo
1 = Mestre
Multi
Master?
0 = Simples
1 = Múltiplo
014
UCMM
5
Modo USCI
00 = SPI 3 pinos
01 = SPI 4 pinos (ver STE)
10 = SPI 4 pinos (ver STE)
11 = I2C
2
UCSYNC
Modo Síncrono
0 = Assíncrono
1 = Síncrono
67
UCSLA10UCA10
Modo
Endereço
Escravo
0 = 7 bits
1 = 8 bits
Modo
Endereço
Próprio
0 = 7 bits
1 = 8 bits
131
Sistemas Microprocessados / Ricardo Zelenovsky MSP430-61
UCB0BRW = BR100K; //100 kbps
//UCB0BRW = BR20K; // 20 kbps
//UCB0BRW = BR10K; // 10 kbps
Vamos usar SMCLK = 1 MHz = 106 Hz
BR100k = 106 / 105 = 10
BR20k = 106 / 2x104 = 50
BR10k = 106 / 104 = 100
//UCB0BRW = BR100K; //100 kbps
//UCB0BRW = BR20K; // 20 kbps
UCB0BRW = BR10K; // 10 kbps
Sistemas Microprocessados / Ricardo Zelenovsky MSP430-62
UCB0CTL1 = UCSSEL_2; //SMCLK e remove ressete
3
UCTXSTTUCTXNACK UCTXSTP
UCBxCTL1 ���� Controle 1 do USCI_Bx
STOP
0 = Nada
1 = STOP
Acknowledge
0 = ACK
1 = NACK
TX / RX
0 = RX
1 = TX
014
UCTR
5
START
0 = Nada
1 = START
2
UCSWRST
Reset
0 = Operando
1 = Reset
67
-UCSSELx
BRCLK
00=UCLKI
(pino)
01 = ACLK
10 = SMCLK
11 = SMCLK
02
Sistemas Microprocessados / Ricardo Zelenovsky MSP430-63
MSP430 – Programa Exemplo// Escrever dado na portavoid PCF_write(char dado){
UCB0I2CSA = PCF; //Endereço do Escravo
UCB0CTL1 |= UCTR | //Mestre transmissor
UCTXSTT; //Gerar START e envia endereço
while ( (UCB0IFG & UCTXIFG) == 0); //Esperar TXIFG (completar transm.)
if ( (UCB0IFG & UCNACKIFG) == UCNACKIFG){ //NACK?
LED1_OUT |= LED1; //Acender LED Vermelho
while(1); //Se NACK, prender
}
UCB0TXBUF = dado; //Dado a ser escrito
while ( (UCB0IFG & UCTXIFG) == 0); //Esperar Transmitir
UCB0CTL1 |= UCTXSTP; //Gerar STOP
while ( (UCB0CTL1 & UCTXSTP) == UCTXSTP); //Esperar STOP
delay(50); //Atraso p/ escravo perceber stop
}
Sistemas Microprocessados / Ricardo Zelenovsky MSP430-64
UCB0I2CSA = PCF; //Endereço do Escravo
UCB0CTL1 |= UCTR | //Mestre transmissor
UCTXSTT; //Gerar START e envia endereço
3
UCTXSTTUCTXNACK UCTXSTP
UCBxCTL1 ���� Controle 1 do USCI_Bx
STOP
0 = Nada
1 = STOP
Acknowledge
0 = ACK
1 = NACK
TX / RX
0 = RX
1 = TX
014
UCTR
5
START
0 = Nada
1 = START
2
UCSWRST
Reset
0 = Operando
1 = Reset
67
-UCSSELx
BRCLK
00=UCLKI
(pino)
01 = ACLK
10 = SMCLK
11 = SMCLK
11
Sistemas Microprocessados / Ricardo Zelenovsky MSP430-65
MSP430 – Registradores - USCI - I2C
UCTXIFGUCSTPIFG UCSTTIFG
UCBxIFG ���� Flags de Interrupções do USCI_Bx
START
0 = Nada
1 = Pendente
Perda
Arbitragem
0 = Nada
1 = Pendente
UCALIFG
Int TX
0 = Nada
1 = Pendente
UCRXIFG
Int RX
0 = Nada
1 = Pendente
UCNACKIFG-
NACK
0 = Nada
1 = Pendente
STOP
0 = Nada
1 = Pendente
3 0145 27 6
Sistemas Microprocessados / Ricardo Zelenovsky MSP430-66
MSP430 – Solução com I2C
0x3F Dado PS 0 ACK ACK Último Dado ACK
n repetições
EscravoMestre Mestre Mestre Escravo Mestre Escravo Mestre
0x7E
MSP enviando dados para o PCF8574
0x3F Dado PS 1 ACK ACK Último Dado NACK
n repetições
EscravoMestre Mestre MestreEscravo MestreEscravo Mestre
0x7F
MSP recebendo dadosdo PCF8574
Sistemas Microprocessados / Ricardo Zelenovsky MSP430-67
MSP430 – Programa Exemplo
// Ligar Back Light
void LCD_BL_on(void){
porta = porta | BIT_BL;
PCF_write(porta);
}
// Desligar Back Light
void LCD_BL_off(void){
porta = porta & ~BIT_BL;
PCF_write(porta);
}
// Zerar toda a porta
void LCD_00(void){
porta=0;
PCF_write(porta);
}
Sistemas Microprocessados / Ricardo Zelenovsky MSP430-68
MSP430 – LCD – Biblioteca
Sugestão de funções para a Biblioteca LCD
char PCF_read (void)� lê a porta da PCF.
void PCF_write (char dado)� escreve na PCF.
void lcd_bl_on (void)� liga o back light
void config_I2C (void)� configura os pinos e a porta
I2C. Usar P3.0=SDA e P3.1 = SCL.
void lcd_bl_off (void)� desliga o back light.
void lcd_00 (void)� PCF = 0
Sistemas Microprocessados / Ricardo Zelenovsky MSP430-69
MSP430 – LCD – Biblioteca
Sugestão de funções para a Biblioteca LCD
void lcd_rs_RW (void)� RS=0 e RW=1.
void lcd_rs_rw (void)� RS=0 e RW=0.
void lcd_RS_RW (void)� RS=1 e RW=1.
void lcd_RS_rw (void)� RS=1 e RW=0.
void lcd_E_high (void)� E=1.
void lcd_E_low (void)� E=0.
Sistemas Microprocessados / Ricardo Zelenovsky MSP430-70
MSP430 – LCD – Biblioteca
Sugestão de funções para a Biblioteca LCD
char lcd_rd_byte (void)� ler byte.
char lcd_rd_nib (void)� ler nibble (0000 xxxx)
void lcd_wr_byte (char byte) � escrever byte.
void lcd_wr_nib (char nib)� escr. nibble (0000 xxxx)
RS R/W Reg. Operação
0 0 IR Escrever uma instrução em IR
1 0 DR Escrever no DR (DDRAM ou CGRAM)
0 1 AC Ler o bit de ocupado (b7) e AC (b6 – b0)
1 1 DR Ler o DR (DDRAM ou CGRAM)
Sistemas Microprocessados / Ricardo Zelenovsky MSP430-71
MSP430 – LCD – Biblioteca
Sugestão de funções para a Biblioteca LCD
void lcd_cmdo (char cmdo)� Envia um comando
(instrução RS=RW=0).
void lcd_inic (void)� faz inicialização do LCD.
Ver fluxograma
char lcd_ocupado (void)� Retorna:
0 = livre e 1 = ocupado.
lcd_char (char dado)�imprime dado (RS=1 e RW=0).
void lcd_cursor (char pos)� posiciona cursor.
Sistemas Microprocessados / Ricardo Zelenovsky MSP430-72
MSP430 – LCD – Biblioteca
Sugestão de funções para a Biblioteca LCD
void lcd_str (char *pt)� imprime no LCD a string
apontada por pt até encontrar o ‘\0’.
void lcd_dec16 (int nr)� imprime em decimal o
número nr de 16 bits.
void lcd_dec8 (char nr)� imprime em decimal o
número nr de 8 bits.
void lcd_hex16 (int nr)� imprime em hexadecimal o
número nr de 16 bits.
void lcd_hex8 (char nr)� imprime em hexadecimal o
número nr de 8 bits.
Sistemas Microprocessados / Ricardo Zelenovsky MSP430-73
MSP430 – I2C + PCF
// Configurar Pinos I2C - UCSB0
// P3.0 --> SDA e P3.1 --> SCL
void config_I2C(void){
P3SEL |= BIT0; // Use dedicated module
P3REN |= BIT0; // Resistor enable
P3OUT |= BIT0; // Pull-up
P3SEL |= BIT1; // Use dedicated module
P3REN |= BIT1; // Resistor enable
P3OUT |= BIT1; // Pull-up
UCB0CTL1 |= UCSWRST; // UCSI B0 em ressete
UCB0CTL0 = UCSYNC | //Síncrono
UCMODE_3 | //Modo I2C
UCMST; //Mestre
UCB0BRW = 100; // 10 kbps
UCB0CTL1 = UCSSEL_2; //SMCLK e remove ressete
}
Sistemas Microprocessados / Ricardo Zelenovsky MSP430-74
MSP430 – Programa Exemplo// Escrever dado na portavoid PCF_write(char dado){
UCB0I2CSA = PCF; //Endereço do Escravo
UCB0CTL1 |= UCTR | //Mestre transmissor
UCTXSTT; //Gerar START e envia endereço
while ( (UCB0IFG & UCTXIFG) == 0); //Esperar TXIFG (completar transm.)
if ( (UCB0IFG & UCNACKIFG) == UCNACKIFG){ //NACK?
LED1_OUT |= LED1; //Acender LED Vermelho
while(1); //Se NACK, prender
}
UCB0TXBUF = dado; //Dado a ser escrito
while ( (UCB0IFG & UCTXIFG) == 0); //Esperar Transmitir
UCB0CTL1 |= UCTXSTP; //Gerar STOP
while ( (UCB0CTL1 & UCTXSTP) == UCTXSTP); //Esperar STOP
delay(50); //Atraso p/ escravo perceber stop
}
Sistemas Microprocessados / Ricardo Zelenovsky MSP430-75
MSP430 – Programa Exemplo// Ler a porta do PCF// Após STT=0 não deveria checar o NAK?
int PCF_read(void){
int dado;
UCB0CTL1 &= ~UCTR; //Mestre RX
UCB0CTL1 |= UCTXSTT; // Gerar START e envia endereço
while ( (UCB0CTL1 & UCTXSTT) == UCTXSTT); //Gerou START?
UCB0CTL1 |= UCTXSTP; //Gerar STOP + NACK
while ( (UCB0IFG & UCRXIFG) == 0) ; //Esperar RX
dado=UCB0RXBUF;
delay(50);
return dado;
}
Sistemas Microprocessados / Ricardo Zelenovsky MSP430-76
MSP430 – I2C e Pullup
SCL = 100 kHz e pullup de 4k7
Sistemas Microprocessados / Ricardo Zelenovsky MSP430-77
MSP430 – I2C e Pullup
SCL = 100 kHz e pullup interno do MSP (35kΩ)
Manual: 20 kΩ a 50 kΩ, típico = 35 kΩ.
Sistemas Microprocessados / Ricardo Zelenovsky MSP430-78
MSP430 – I2C e Pullup
SCL = 50 kHz e pullup interno do MSP (35kΩ)
Sistemas Microprocessados / Ricardo Zelenovsky MSP430-79
MSP430 – I2C e Pullup
SCL = 10 kHz e pullup interno do MSP (35kΩ)
Sistemas Microprocessados / Ricardo Zelenovsky MSP430-80
MSP430 – LCD
FIM