Aula7.ppt [Modo de Compatibilidade]iris.sel.eesc.usp.br/sel433a/Aula7.pdf · 2013-05-03 · Ler um...

38
Aplicações: Aplicações: Aplicações: Aplicações: Conversão de Códigos e Conversão de Códigos e Conversão de Códigos e Conversão de Códigos e Controle de Motor Controle de Motor Controle de Motor Controle de Motor de Passo de Passo de Passo de Passo Prof. Adilson Gonzaga

Transcript of Aula7.ppt [Modo de Compatibilidade]iris.sel.eesc.usp.br/sel433a/Aula7.pdf · 2013-05-03 · Ler um...

Aplicações:Aplicações:Aplicações:Aplicações:

Conversão de Códigos e Conversão de Códigos e Conversão de Códigos e Conversão de Códigos e Controle de Motor Controle de Motor Controle de Motor Controle de Motor de Passode Passode Passode Passo

Prof. Adilson Gonzaga

Conversão de Código ASCII para HexadecimalConversão de Código ASCII para Hexadecimal

• Alguns periféricos, tais como Teclados Alfa-numéricos, Monitores de

Vídeo, Displays de Cristal Líquido, comunicam-se usando o código

ASCII (American Standard Code for Information Interchange)

Aplicação 1

• Como toda a operação (lógica ou aritmética) realizada pelo

Microcontrolador é feita em Binário, e nós utilizamos a representação

Hexadecimal para facilidade de interpretação, se for usado um

teclado ASCII para entrada dos dados deve-se proceder à conversão

de ASCII para Hexadecimal.

•Prof. Adilson Gonzaga

•2

• Inserir números Hexadecimais através do Teclado do PC conectado

via RS232 com um Microcontrolador 8051 e utilizar esses dados para

deslocar um Motor de passo de um número fixo de passos.

Aplicação 1

• Valores Hexadecimais possíveis: 00 a FF

• O Teclado gera códigos ASCII para todos

os números, letras, sinais gráficos e

comandos, de acordo com a Tabela ASCII.

•Prof. Adilson Gonzaga

•3

Teclado ASCII

Se o usuário quiser inserir em uma aplicação qualquer código Se o usuário quiser inserir em uma aplicação qualquer código

Hexadecimal (um byte), via Teclado ASCII.

• 3F (00111111) � Digita 3 �Teclado gera 33h (00110011), ASCII do dígito 3

� Digita F �Teclado gera 46h (01000110), ASCII do dígito F

Como transformar os dois códigos digitados (33h e 46h) em apenas um byte

Hexadecimal (3F) que é o correspondente ao valor digitado pelo usuário?

Por exemplo 3F

•Prof. Adilson Gonzaga

•4

• Duas possibilidades:

1. Ou o dígito é um número ( 0 a 9 )

2. Ou o dígito é uma letra (A a F)

0 1 2 3 4 5 6 7 8 9

| | | | | | | | | |

30h 31h 32h 33h 34h 35h 36h 37h 38h 39h

Número

30h 31h 32h 33h 34h 35h 36h 37h 38h 39h

A B C D E F

| | | | | |

41h 42h 43h 44h 45h 46h

Letra

•Prof. Adilson Gonzaga

•5

Digitado no Teclado

3 F

Códigos ASCII Gerados

33 46

• Logo,

3F

33 46

33h � para ser decodificado para seu valor 3h � 33h – 30h = 3h

• e,

46h � para ser decodificado para seu valor Fh � 46h – 37h = Fh

Ou seja, se o valor digitado for um número basta subtrair 30h do

código ASCII e, se o valor digitado for uma letra basta subtrair 37h do

código ASCII

•Prof. Adilson Gonzaga

•6

• O primeiro dígito é o MSB e seu resultado hexadecimal gerado é 03h

• O segundo dígito é o LSB e seu resultado hexadecimal gerado é 0Fh

• Logo, no exemplo, para montar o caractere (MSB LSB) deve-se

rotacionar o MSB de 4 posições e fundir (OU lógico) com o LSB.

03 � 30 MSB

0F LSB

3F

OR00110000

00001111

00111111

•Prof. Adilson Gonzaga

•7

Conversão ASCII-HEXA de um dígito

SubSub--rotina CONVrotina CONV

• O dígito ASCII entra

pelo Acumulador

•Prof. Adilson Gonzaga

•8

• Converte o MSB

• Troca os nibles

Conversão ASCII-HEXA de dois dígitos

• Converte o LSB

• Funde (OR) os dois bytes

gerando apenas um hexadecimal

•Prof. Adilson Gonzaga

•9

•Prof. Adilson Gonzaga

•10

•Prof. Adilson Gonzaga

•11

Aplicação 2

Conversão de Hexadecimal para Código ASCIIConversão de Hexadecimal para Código ASCII

Ler um código hexadecimal de um conversor Analógico/Digital (A/D)

de 8 bits (00 a FFh) e mostrar este valor em um monitor de vídeo

(ASCII)

• Como toda operação (lógica ou aritmética) realizada pelo

Microcontrolador é feita em Binário, e nós utilizamos a representação

Hexadecimal para facilidade de interpretação, se for usado um

Display ou um Monitor de Vídeo ASCII para saída dos dados deve-se

proceder à conversão de Hexadecimal para ASCII.

•Prof. Adilson Gonzaga

•12

ASCII

33 46

Microcontrolador

Aplicação 2

Hexadecimal 3F

(00111111)

Conversor A/D

•Prof. Adilson Gonzaga

•13

•Hexadecimais possíveis (8 bits): de 00 a FF

Se for um dígito numérico 0 ---- 9 ���� deve-se somar 30h para

se obter o ASCII equivalente entre 30h --- 39h

Se for uma letra A ---- F ���� deve-se somar 37h para se obter Se for uma letra A ---- F ���� deve-se somar 37h para se obter

o ASCII equivalente entre 41h --- 46h

Como não existem valores hexadecimais impossíveis de

serem representados em ASCII, não é necessário adicionar

nenhum filtro.

•Prof. Adilson Gonzaga

•14

SubSub--rotina CONV2rotina CONV2

Conversão HEXA-ASCII de um dígito

•Prof. Adilson Gonzaga

•15

Exemplo

• O conteúdo do Acumulador contém o código 3F Hexadecimal

(8 Bits) que deverá ser enviado para o monitor de vídeo em

ASCII, para ser visualizado.

• Logo,

3F ���� 03 + 30h ���� 33h

0F + 37h ���� 46h

• Deve-se, então, dividir o byte em dois com o valor dos

dois nibles posicionados na parte menos significativa de

cada um, zerando-se o nible mais significativo de cada

byte.

•Prof. Adilson Gonzaga

•16

O valor em Hexadecimal entra

pelo Acumulador. ���� Ex: A =

3Fh

Conversão HEXA-ASCII de dois dígitos

Os valores dos dois dígitos em

ASCII saem em:

R0 = LSB ���� Ex: R0 = 46h

A = MSB ���� Ex: A = 33h

•Prof. Adilson Gonzaga

•17

•Prof. Adilson Gonzaga

•18

•Prof. Adilson Gonzaga

•19

Aplicação 3

Conversão de

Hexadecimal para BCD

BCD – Decimal Codificado em Binário

•Prof. Adilson Gonzaga

•20

Neste exemplo será utilizado

sempre o BCD Packed (ou BCD

8421), cuja representação de 2

dígitos BCD é realizada com

apenas 1 Byte.

Conversão de Hexadecimal para BCD

Decimal Hexa

00 00

01 01

02 02

03 03

04 04

05 05

06 06

•Prof. Adilson Gonzaga

•21

06 06

07 07

08 08

09 09

10 0A

11 0B

12 0C

13 0D

14 0E

15 0F

16 10

0 0 0 0 1 0 0 1

0 0 0 1 0 0 0 0

0 0 0 0 1 0 0 1

0 0 0 1 0 0 0 0

•Logo, se o número Hexa

estiver entre 0A e 13,

soma-se 1x06

Decimal Hexa

17 11

18 12

19 13

20 14

21 15

22 16

23 17

24 18

25 19

26 1A

11+06=17

12+06=18

13+06=1914+06=1A+06=20

15+06=1B+06=21

16+06=1C+06=22

• Se o número hexa estiver entre 14 e 1D soma-se 2x06

• Se o número estiver

•Logo, se o número Hexa

estiver entre 0A e 13, soma-

se 1x06

•Prof. Adilson Gonzaga

•22

26 1A

27 1B

28 1C

29 1D

30 1E

31 1F

32 20

33 21

34 22

35 23

36 24

17+06=1D+06=23

18+06=1E+06=24

19+06=1F+06=25

1A+06=20+06=26

1B+06=21+06=27

1C+06=22+06=28

1D+06=23+06=29

1E+06+06+06=30

1F+06+06+06=31

20+06+06+06=32

21+06+06+06=33

22+06+06+06=34

• Se o número estiver

entre 1E e 27 soma-se

3x06

•O algoritmo pode ficar bastante complexo seguindo este raciocínio.

• O 8051 possui uma instrução que faz o Ajuste Decimal do Acumulador

DA A

• Esta instrução somente deve ser utilizada quando a operação realizada anteriormente foi com números BCD.

•Prof. Adilson Gonzaga

•23

com números BCD.

Exemplo:

19 + 1 = 1A � DA A � 20

•A instrução não opera corretamente onde isto não acontece.

Exemplo:

1F + 1 = 20 � DA A � 26

Algoritmos para conversão Hexa-BCD

Algoritmo_1:

1. Entrar com o número Hexadecimal a ser convertido em R0

2. Inicializar um contador BCD em Zero

3. Decrementar R0 até zero e simultaneamente incrementar o contador BCD

•Prof. Adilson Gonzaga

•24

O maior número hexadecimal de dois dígitos que pode ser convertido é o : 63h = 99 em BCD

contador BCD

4. Quando o valor do número Hexadecimal chegar em zero, o Acumulador terá realizado o mesmo número de contagens em BCD

•Prof. Adilson Gonzaga

•25

Este exemplo não testa se o número Hexadecimal a ser convertido é menor que 64h, o que deve ser feito externamente no programa principal.

Algoritmo_2:

1. Dividir o número Hexadecimal (8 BITS), a ser convertido, por 10 (0Ah)

2. O resultado da divisão gera um número BCD unpacked, com o MSB no Acumulador e o LSB no registrador B

3. Transformar o BCD unpacked para BCD packed(8421)

•Prof. Adilson Gonzaga

•26

(8421)

0 0 0 0 1 0 0 1 0 0 0 0 1 0 0 1

1 0 0 1 1 0 0 1

09 09

99

Exemplo: Programa que gera um Contador BCD na Porta P1, de 00 a 99, continuamente retornando a zero.

•Prof. Adilson Gonzaga

•27

Comando de MOTOR Comando de MOTOR

DE PASSODE PASSO

“Step Motor”“Step Motor”

Define-se MOTOR DE PASSO como um

“atuador incremental eletromagnético”.

Aplicação 4

•Prof. Adilson Gonzaga

•28

O Motor de Passo converte “pulsos digitais de entrada” em

movimentos angulares em seu eixo.

Definição prática:Definição prática:

•Prof. Adilson Gonzaga

•29

Características importantesCaracterísticas importantes

• Deslocamento angular diretamente proporcional ao

número de pulsos de entrada.

• Erro angular por passo pequeno ( 5% do passo) e

não acumulativo.não acumulativo.

• Possibilita trabalho em “malha aberta”.

• Capacidade de trabalho em baixíssimas

freqüências.

• Retenção de posição sem uso de freio, etc...

•Prof. Adilson Gonzaga

•30

Funcionamento do Funcionamento do StepStep MotorMotorFuncionamento do Funcionamento do StepStep MotorMotor

•Prof. Adilson Gonzaga

•31

Circuito de ControleCircuito de Controle

UNIPOLARUNIPOLAR simplificadosimplificado

•Prof. Adilson Gonzaga

•32

Comutação nas FasesComutação nas Fases

(excitação dupla)

•Prof. Adilson Gonzaga

•33

Sistema Típico de Controle com Sistema Típico de Controle com

Motor de PassoMotor de Passo

•Prof. Adilson Gonzaga

•34

Exemplo de Conexão de um Microcontrolador Exemplo de Conexão de um Microcontrolador Exemplo de Conexão de um Microcontrolador Exemplo de Conexão de um Microcontrolador 89S52 com um Driver/Indexador de Motor de Passo89S52 com um Driver/Indexador de Motor de Passo89S52 com um Driver/Indexador de Motor de Passo89S52 com um Driver/Indexador de Motor de Passo

Clock

Direção

Inibe

•Prof. Adilson Gonzaga

•35

Clock

Direção

Inibe

O Clock, na descida de borda, armazena a Direção (1 ou 0)

que o motor girará na próxima subida de borda.

• Direção = 0 � Horário

• Direção = 1 �Anti-horário

• Inibe = 1 � Operação Normal

• Inibe = 0 � Pára o Motor de Passo

• Frequência do clock (Hz) = Passos por Segundo (pps) no Motor

•Prof. Adilson Gonzaga

•36

Exemplo de Comando de um pulso em um Motor de Passo

(Usando subrotina de Atraso).

•Prof. Adilson Gonzaga

•37

Comando de Motor de Passo usando Timer e Interrupção

•Prof. Adilson Gonzaga

•38