Manual Básico de Operação do Microcontrolador - Intranet
Transcrição
Manual Básico de Operação do Microcontrolador - Intranet
Manual Básico de Operação do Microcontrolador MC68HCJK3 e MC68HCJK1 Disciplina: Microcontroladores “A” Professor Adjunto: Alexandre Campos ([email protected]) Mestrando: Alexandre Luís Michel 2 I. INTRODUÇÃO No passado as tecnologias existentes no mercado obrigavam a pequenos e médio industriais investir quantia razoável de dinheiro em equipamentos adicionais ao microcontrolador, como apagadores ultravioleta, programadores e em alguns casos softwares que permitisse editar, compilar, simular, realizar conexões e programa-los. Os novos microcontroladores e ferramentas de desenvolvimento disponíveis para os usuários de microcontroladores de 8 bits da Motorola possuem todas estas facilidades mediante um programa interno de fábrica, que permite começar projetos de forma muito simples, rápida e sem nenhum custo adicional. II. BREVE DESCRIÇÃO DO MICROCONTROLADOR MC68HC908JK3/JK1 O microcontrolador MC68HC909JK3 e todos os membros da família HC08 da Motorola, caracterizam-se por seu baixo custo e alto desempenho. Eles utilizam a unidade de processamento denominada CPU08 e estão disponíveis em diversas variedades de apresentação (20,28 e 40 pinos) e em diversos tamanhos de memória. (1.5K, 4K e 32K). Dentro das principais características destes microcontroladores é de possuírem memória flash (apagamento e gravação eletricamente), canais de conversores analógico/digital (ADC). Na Tab 1 podem ser observadas as características mais importantes da CPU08 e na Tab 2 as características do microcontrolador MC68HC908JK3 (simplificado para JK3). Tab 1. Características da cpu08 Características da CPU08 Conjunto de instruções amplo com vários modos de endereçamento Instruções de transferência de Memória para Memória Instrução de Multiplicação rápida 8x8 Instrução de Divisão rápida 16/8 Instruções de BCD (Binary Coded Decimal) Fácil suporte de linguagens de alto nível como C 3 Tab 2. Características do MC68HC908JK3 Características da JK3 CPU08 de 8 bits Freqüência de operação interna de 8 MHz 4K Bytes de memória de programa (FLASH) 128 bytes de memória RAM 12 canais de conversor analógico-digital (8 bits) 15 Entradas/Saídas 2 temporizadores (timers) de 16 bits (saída por comparação e/ou captura de entrada) Versões HC (cristal) e HRC (resistor e capacitor) Modos de baixo consumo (Stop e Wait) Watchdog (COP) 8 fontes de interrupção (por vetores) 4 LED drives III. DESCRIÇÃO DOS PINOS DO JK3 Na Fig 1 pode ser observado a distribuição dos pinos do microcontrolador JK3 e na Tab 3 as funções dos mesmos. Fig 1. pinagem do microcontrolador 4 Tab 3. pinagem do JK3 Nome do Pino Descrição Entrada/Saída Nível de Tensão VDD Alimentação Positiva Entrada 5 V ou 3V VSS Terra Saída 0V RST Reset (ativo baixo) Entrada VDD IRQ1 • Interrupção Externa • Define modo de inicialização Entrada VDD ou VHI (programação ou aplicação) OSC1 Entrada do Oscilador Entrada Analógico OSC2 Saída do Oscilador Saída Analógica PTB (0:7) • 8 Portas I/O de 8 bits • 8 Entradas analógicas do ADC Entrada/Saída VDD Entrada Analógica Entrada/Saída VDD Entrada Analógica Entrada/Saída VDD Saída VDD (0:7) PTD (2:7) • 6 Portas I/O de 8 bits • PTD (3:2) 2 Entradas analógicas do ADC (8:9) • PTD (4:5) 2 Pinos do Timer • PTD (6:7) 2 saídas em coletor aberto (25 mA) IV. ARQUITETURA INTERNA DO JK3 Na Fig 2 pode-se visualizar um diagrama interno do microcontrolador e na Fig 3 são mostrados os registradores internos da CPU08 mediantes os quais se processam as instruções, as operações e armazenam-se os resultados. A função de cada um deles será descrita a continuação. 5 Fig 2. Diagrama interno do Microcontrolador Acumulador (A): É um registrador de 8 bits de propósito geral usado nas operações lógicas e aritméticas Index Register (H:X): É um registrador de 16 bits utilizado como apontador no modo de direcionamento indexado. Program counter (PC): É um registrador de 16 bits que contem o endereço da próxima instrução. Apontador de Pilha (SP): É um registrado de 16 bits que contem o endereço de posição disponível na pilha. Conditon coder ou registrador de flags (CCR): É um registrador de 8 bits que contém o bit de mascaramento das interrupções e outras 5 flags de estado, as quais indicam certas condições originadas por instruções previamente executadas (por exemplo uma operação executada resulta um valor negativo, então será setado um bit deste registrador para indicar o resultado negativo). 6 Fig 3. Registradores internos da CPU08 V. MAPA DE MEMÓRIA Na Fig 4 é mostrado o mapa de memória completo do JK3, o qual é composto por: ª 64 bytes de Registradores I/O endereçado de $0000 a $003F (ver item VI). ª 128 bytes de memória RAM endereçado de $0080 a $00FF. ª 4096 byte de memória FLASH para o JK3 endereçado de $EC00 a $FBFF ou 1536 bytes para o JK1 (ver item VII). ª Registradores I/O adicionais (ver item VIII). ª 960 bytes do Monitor ROM endereçado de $FC00 a $FDFF e $FE10 a FFCF (ver item IX). ª 48 bytes para uso dos vetores de interrupção (ver item X). 7 Fig 4. Mapa da memória 8 No mapa de memória se encontram os endereços dos registradores internos, a posição que ocupam na RAM e a parte designada ao programa do usuário. De igual maneira, se observa uma zona na qual se concentram armazenado o programa de fabrica (Monitor ROM) pelo qual é permitido fazer simulações, debug e programações no microcontrolador. Na região mais alta da memória se encontram os vetores de interrupção. VI. REGISTRADORES I/O DE CONTROLE, STATUS E DADOS. Estes registradores controlam as diversas funções a serem executadas pelo microcontrolador. Estes registradores são usados para configurações de funções, para controlar o estado de alguma operação executada ou mesmo para o armazenamento temporário de um valor gerado por alguma instrução. Estes registradores como pode ser visto nas Fig 5, Fig 6, Fig 7, Fig 8 e Fig 9, se encontram no endereço de memória de $0000 a $003F, com exceção de alguns Registradores I/O adicionais. que serão tratados posteriormente. 9 Fig 5. Registradores I/O (folha 1 de 5) 10 Fig 6. Registradores I/O (folha 2 de 5) 11 Fig 7. Registradores I/O (folha 3 de 5) 12 Fig 8. Registradores I/O (folha 4 de 5) 13 Fig 9. Registradores I/O (folha 5 de 5) 14 VII. MEMÓRIA FLASH A memória flash é à parte da memória do microcontrolador onde é feita a gravação do programa pelo usuário, ela pode ser lida, programada e apagada. A memória flash consiste de um conjunto de 4096 bytes (JK3) ou 1536 bytes (JK1), juntamente com 48 bytes adicionais de uso dos vetores de interrupção (ver item X). Operações de programação ou apagamento da flash são controladas pelo Registrador de Controle da Flash (FLCR). Fig 10. Registrador FLCR Devido à característica de apagamento e programação da memória flash no próprio circuito de aplicação, existe uma proteção contra apagamentos ou programações não intencionais. Esta proteção é dada pelo registrador FLASH Block Protect (FLBPR). Fig 11. Registrador FLBPR Este registrador determina a faixa da memória que será protegida, conforme exemplos dados na Tab 4. Tab 4. Faixas de proteção da FLASH 15 VIII. REGISTRADORES I/O ADICIONAIS. A maioria dos registradores I/O localizam-se no endereço de memória de $0000 até $003F (vistos na seção VI). Registradores adicionais tem o seguinte endereçamento. IX. MONITOR ROM O Monitor ROM vem gravado de fabrica e é através do qual se estabelece comunicação entre o microcontrolador e um microcomputador permitindo então debug, programação, apagamento e testes da CPU. O monitor ROM recebe e executa comandos originados de um microcomputador. A Fig 12 mostra um exemplo de circuito utilizado para fazer o interfaceamento entre a CPU e um microcomputador utilizando-se da porta serial (RS-232). 16 Fig 12. Circuito de interfaceamento entre CPU08 E Microcomputador Para poder-se estabelecer comunicação entre o microcontrolador e o computador além do circuito de interfaceamento, é necessário que a CPU esteja no modo monitor. No modo monitor o JK3 esta rodando o código que foi permanentemente gravado na sua memória durante a fabricação, que consiste de rotinas para comunicação com o microcomputador, a qual uma vez estabelecida transfere o controle da CPU para o computador. O JK3 entra no modo monitor apos um reset e _______ ______ depende de níveis lógicos dos seguintes pinos: IRQ1 , RST , PTB0, PTB1 e PTB3. 17 Existem duas possibilidades de entrada no modo monitor: High Volt e Blank Vector. _______ Higt Volt: Se fornecido para o pino IRQ1 uma alta tensão (1,5 x VDD) durante um reset, força o microcontrolador a entrar no modo monitor, similarmente a maioria das CPUs da Motorola. Com este método a entrada de clock (OSC1) devera ser 4,9152 MHz ou 9.8304 MHz, conforme Tab 5. Outra condição importante para estabelecer comunicação através deste método é serem respeitadas as condições lógicas necessárias aos pinos PTB0, PTB1 e PTB3 (ver Tab 5). Blank Vector: Este método de comunicação só poderá ser estabelecido se o Reset Vector esteja limpo ou seja quando a memória Flash da CPU estiver totalmente limpa. O Reset Vector somente poderá ser limpo através de uma operação de apagamento total da memória. Este método não _______ necessita de alta tensão em IRQ1 e nem de níveis de tensão pré determinados em PTB0, PTB1 e PTB3. A freqüência de clock neste modo devera ser de 9,8304 MHz, conforme Tab 5. Como em destaque na Fig 12 o quadro indica chaves ou jumpers colocados na placa de implementação as quais possibilitarão fornecer os níveis certos de tensão nos pinos, necessários a entrada no modo monitor, para programação do microcontrolador. Obs: Uma alternativa para entrar no Modo Monitor, através do Blank Vector, com a memória flash programada, seria a gravação juntamente com o programa do usuário de uma rotina que a cada reset teste certos níveis de tensão em determinados pinos e caso todas condições fosse satisfeitas o programa executaria um apagamento total da memória (Mass_Erase), possibilitando assim ter-se então o Reset Vector branco. A única desvantagem deste método seria o apagamento total da memória. Tab 5. Condições de entrada no modo monitor 18 A definição do ”Baud Rate” que o microcomputador ira usar para estabelecer a comunicação com a CPU é dependente diretamente do nível de tensão em PTB3, no modo High Volt, conforme Tab 5. X. VETORES DE INTERRUPÇÃO Os vetores de interrupção ocupam 48 bytes na memória e é através destes que a CPU define qual a ação a ser tomada após a ocorrência de uma interrupção causada pelas diversas fontes descritas na Tab 6, levando-se em conta a sua prioridade. Tab 6. Vetores de interrupção Estas fontes de interrupção possuem os seus próprios registradores, os quais identificam a sua presença, são eles: Fig 13. Registrador INT1 Fig 14. Registrador INT2 19 Fig 15. Registrador INT3 XI. OSCILADOR (OSC) Existem duas possibilidades de prover a referencia de clock ao microcontrolador dependendo do tipo de CPU: ª MC68HC908JK3: Uso de cristal oscilador (Fig 16) ª MC68HRC908JK3: Uso de oscilador RC (Fig 17) Fig 16. Cristal oscilador Neste caso os pinos OSC1 e OSC2 do microcontrolador são usados. Os valores dos capacitores e resistores podem ser obtidos em [1]. Valores típicos para um cristal de 9.8304 MHz são: C1 e C2 de 20pF, RB de 10 MΩ e RS podendo ser suprimido. Fig 17. Oscilador RC Neste caso somente o pino OSC1 é utilizado, podendo então OSC2 ser usado como pino de uso geral (PTA6). 20 XII. PORTAS I/O Quinze entradas ou saídas bidirecionais formam as três portas paralelas componentes do microcontrolador. Todas os pinos I/O são programados como entradas ou saídas. Apenas deve-se levar em conta que a porta A, não esta disponível nos microcontroladores JK3 e JK1 (20 pinos) e apenas se encontra no JL3 (40 pinos), microcontrolador da mesma família. XIII. PORTA A A porta A é uma porta de 7-bits de função especial, pois é ela que permite todos os seus sete pinos serem divididos com o módulo de interrupção por teclado (KBI). Cada pino da porta A é configurado por software e poderá estar em coletor aberto caso esteja definido como entrada. PTB0 a PTB5 possuem capacidade de comandar diretamente um LED (diodo emissor de luz). O registrador de dados da porta a (PTA) contém um latch para cada um dos sete pinos da porta o qual armazenara os níveis lógicos em seus respectivos pinos caso seja definido como entrada ou conterá os dados escritos na porta caso de saída. Fig 18. Registrador PTA A porta A também poderá ser habilitada para funcionar como pino de entrada de interrupção externa para teclado, através do registrador especifico para esta função (KBAIER). Outra função especial da porta é ter os pinos configurados como entrada em coletor aberto, através do registrador PTAPUE. Cada um dos pinos é configurado individualmente e requer que sejam definidos como entrada para trabalhar neste modo. 21 Fig 19. Registrador PTAPUE PTA6EN – Configura a função do pino OSC2, pino o qual pode ser definido como I/O se for utilizado oscilador RC. 1 = Pino OSC2 configurado como I/O (PTA6) 0 = Pino OSC2 configurado como saída de clock do oscilador PTAPUE[6:0] – Pinos de habilitação da entrada em coletor aberto 1 = Pinos da porta A configurados para possuírem entrada em coletor aberto 0 = Entrada em coletor aberto desabilitada A porta A também possui um registrador (DDRA) que configura a direção dos dados (entrada ou saída). Fig 20. Registrador DDRA DDRA[6:0] – Registrador de direção de dados 1 = Pinos [6:0] da porta A configurados como saída. 0 = Pinos [6:0] da porta A configurados como entrada. Na Fig 21 pode ser visto o circuito da porta A. Pode-se notar que se DDRA esta com nível um a latch da saída é habilitada e os dados escritos em PTA aparecerão nos pinos do microcontrolador ao mesmo tempo que a latch de leitura de dados é desabilitada, não sendo então permitida a leitura de dados externos apenas dos próprios que foram escritos. Quando DDRA possui nível lógico zero a 22 latch de saída é desabilitada, ao mesmo tempo que a latch de entrada é habilitada permitindo então a leitura de dados externos aplicados nos pinos do microcontrolador. Fig 21. Diagrama de blocos da Porta A XIV. PORTA B A porta B é uma porta de 8-bits de função especial, pois é ela que permite todos os seus oito pinos sejam divididos com o Conversor Analógico/Digital. Cada pino da porta b é configurado por software e poderá ser uma entrada analógica de dados do conversor A/D. O registrador de dados da porta B (PTB) contém um latch para cada um dos oito pinos da porta o qual armazenara os níveis lógicos em seus respectivos pinos caso seja definido como entrada ou conterá os dados escritos na porta caso de saída. Fig 22. Registrador PTB A porta B também poderá ser habilitada para funcionar como entrada analógica do Conversor Analógico/Digital (ADC), através de registrador especifico. A porta B também possui um registrador (DDRB) que configura a direção dos dados (entrada 23 ou saída). Fig 23. Registrador DDRB DDRB[7:0] – Registrador de direção de dados 1 = Pinos [7:0] da porta B configurados como saída. 0 = Pinos [7:0] da porta A configurados como entrada (ADC). Na Fig 24 pode ser visto o circuito da porta B. Pode-se notar que se DDRB esta com nível lógico um, a latch da saída é habilitada e os dados escritos em PTB aparecerão nos pinos do microcontrolador ao mesmo tempo que a latch de leitura de dados é desabilitada, não sendo então permitida a leitura de dados externos apenas dos próprios que foram escritos. Quando DDRB possui nível lógico zero a latch de saída é desabilitada, ao mesmo tempo que a latch de entrada é habilitada permitindo então a leitura de dados externos aplicados nos pinos do microcontrolador. Fig 24. Diagrama de blocos da Porta B XV. PORTA D A porta D é uma porta de 8-bits de função especial, pois é ela que permite que dois pinos sejam divididos com o Modulo de Timer, quatro pinos com o Conversor Analógico/Digital (ADC). Os pinos PTD6 e PTD7 possuem alta capacidade de corrente (25 mA) e poderão ser programados 24 como entrada em coletor aberto. PTD2, PTD3, PTD6 e PTD7 possuem capacidade de comandar diretamente um LED (diodo emissor de luz). O registrador de dados da porta D (PTD) contém um latch para cada um dos oito pinos da porta o qual armazenara os níveis lógicos em seus respectivos pinos caso seja definido como entrada ou conterá os dados escritos na porta caso de saída. Fig 25. Registrador PTD A pinos da porta D, PTD0, PTD1, PTD2, PTD3, poderão ser habilitados para funcionar como entrada analógica do módulo de conversão ADC, através de registrador especifico. Os pinos PTD4 e PTD5 podem ser usados pelo módulo de Timer para geração de sinal PWM, Modulo de Saída comparada ou Modulo de captura de entrada, dependendo de registradores específicos. Outra função especial da porta D é ter os pinos PTD6 e PTD7 configurados como entrada em coletor aberto ou saída com alta capacidade de corrente, através do registrador PDCR. Fig 26. Registrador PDCR 25 SLOWD – Habilita os pinos PTD6 e PTD7 a operar com alta capacidade de corrente (25 mA) 1 = Pinos PTD6 e PTD7 configurado como saídas de alta corrente (dreno aberto). 0 = Pinos PTD6 e PTD7 com saída de alta corrente desabilitada PTDPU – Pinos de habilitação da entrada em coletor aberto 1 = Pinos PTD6 e PTD7 da porta D configurados para possuírem entrada em coletor aberto 0 = Entrada em coletor aberto desabilitada A porta D também possui um registrador (DDRD) que configura a direção dos dados (entrada ou saída). Fig 27. Registrador DDRD DDRD[7:0] – Registrador de direção de dados 1 = Pinos [7:0] da porta A configurados como saída. 0 = Pinos [7:0] da porta A configurados como entrada. Na Fig 28 pode ser visto o circuito da porta D. Pode-se notar que se DDRD esta com nível um a latch da saída é habilitada e os dados escritos em PTD aparecerão nos pinos do microcontrolador ao mesmo tempo que a latch de leitura de dados é desabilitada, não sendo então permitida a leitura de dados externos apenas dos próprios que foram escritos. Quando DDRD possui nível lógico zero a latch de saída é desabilitada, ao mesmo tempo que a latch de entrada é habilitada permitindo então a leitura de dados externos aplicados nos pinos do microcontrolador. 26 Fig 28. Diagrama de blocos da Porta D XVI. EXEMPLO DE PROGRAMAÇÃO E CONFIGURAÇÃO DAS PORTAS I/O Na programação e uso das portas I/O deve-se primeiramente configurar o registrador que define se a mesma terá a função de entrada ou saída (Fig 20, Fig 23 e Fig 27). Basicamente pode-se usar o comando “mov” para escrever nos registradores que configuram as portas. No exemplo abaixo são mostrados três comandos: mov #$ff,ddrd Ä Todos pinos da porta d configurados como saída mov #$00,ddra Ä Todos pinos da porta a configurados como entrada mov #$10,ddrb Ä PTB4 configurado como saída, os demais pinos entradas Deve-se notar nos exemplos que o número escrito nos registradores se encontram na notação hexadecimal. Para uma melhor visualização do efeito do ato de escrita nestes registradores, deve-se converter este numero em binário, onde então será visualizado o estado de cada um dos pinos em separado. Como visto no exemplo, a ação de escrita em um dos registradores DDR“x”, definira a direção de dados da porta pino a pino separadamente. Na Fig 29 é ilustrado o exemplo onde o número $10 foi escrito em ddrb. 27 Fig 29. Direção dos pinos da Portas B Quando é pretendido o uso das portas, pode-se proceder de maneira semelhante a anterior, escrevendo nos registradores PT“x” os dados os quais representarão o nível lógico da porta, caso esta esteja configurada como saída. mov #$ff,ptd Ä Todos pinos da porta d possuem nível alto mov #$00,pta Ä Todos pinos da porta a possuem nível baixo mov #$10,ptb Ä PTB4 possui nível alto, os demais níveis baixos Se os pinos da porta estão configurados como entrado o registrador PT“x” conterá o valor dos níveis lógicos existentes no momento da leitura. A mostra um exemplo em que alguns níveis lógicos estão aplicados na porta B. Fig 30. Níveis lógicos aplicados na Portas B Níveis na porta B Ä 10101010 Ä PTB contem o valor 10101010 bin ou AA hex XVII. CONVERSOR ANALÓGICO/DIGITAL O microcontrolador JK3 possui 12 canais de conversão analógica/digital, com resolução de 8 bits, conversão simples ou contínua, possui também um flag de conversão completa ou geração de interrupção e clock de conversão (tempo de conversão) selecionável (prescaler). 28 Os conversores A/D internos no JK3 podem ter suas entradas analógicas configuráveis através de registrador específico (ADSCR), podem as mesmas fazer o uso de pinos da porta B (PTB0 a PTB7) ou porta D (PTD0 a PTD3). A Fig 31 mostra o diagrama de blocos do conversor A/D. Fig 31. Diagrama de blocos do conversor A/D A configuração dos pinos das portas como entrada analógicas dos conversores, forçam com que os mesmos sejam usados como entradas ficando independentes dos registradores DDRx das portas (ver item XII). O restante dos canais do ADC/pinos das portas podem ser usados normalmente como pinos I/O de uso geral. XVIII. FAIXAS DE CONVERSÃO As referencias tomadas pelo conversor A/D para executar a conversão são VDD (valor máximo) e VSS (valor mínimo). Quando a tensão de entrada do conversor A/D (entrada analógica) for igual a VDD (ver Tab 3), o valor convertido será $FF (full scale) ao passo que se o valor de entrada igual a VSS (ver Tab 3), o valor convertido será $00. Somente valores entre VDD e VSS resultarão em 29 conversões corretas, tensões maiores que VDD, resultarão em $FF e menores que VSS em $00. XIX. CONVERSÃO CONTINUA No modo de conversão continua, o ADC converte continuamente o valor no canal selecionado, escrevendo um novo dado no registrador de dados do conversor a cada conversão. O resultado da conversão anterior será sobrescrito se lido ou não o seu valor. Este modo de conversão continuara até que seja limpo o bit ADCO do registrador ADSCR. XX. REGISTRADORES I/O Estes registradores monitoram e controlam a operação do ADC. ª ADSCR –Registrador de estado e controle do ADC ª ADR – Registrador de dados do ADC ª ADICLK - Registrado do Clock XXI. REGISTRADOR DE ESTADO E CONTROLE DO ADC A seguir serão descritas as funções do registrador de estado e controle do ADC (ADSCR), que é mostrado na Fig 32. Fig 32. Registrador ADSCR COCO – Bit de conversão completada (somente se interrupção do A/D desabilitada (AIEN = 0)) 1 = Conversão A/D completada. 0 = conversão A/D não completada. AIEN – Bit de habilitação de interrupção (gera uma interrupção se quando uma conversão A/D é completada) 1 = Interrupção do ADC habilitada. 0 = Interrupção do ADC desabilitada. ADCO – Bit de habilitação de conversão continua 30 1 = Conversão continua. 0 = Apenas uma conversão. ADCH [4:0] – Bits de seleção de canal do ADC, conforme Tab 7. Tab 7. Seleção do Canal do ADC Obs: A conversão A/D é iniciada automaticamente após a primeira subida do clock depois de uma escrita no ADSCR. XXII. REGISTRADOR DE DADOS DO ADC No registrador de dados do ADC (ADR), é armazenado o resultado de uma conversão A/D. Este registrador é atualizado a cada nova conversão completada. Fig 33. Registrador ADR 31 XXIII. REGISTRADO DO CLOCK DO ADC Conforme Tab 8, é selecionada a freqüência de clock da conversão A/D, tomando como base o valor de clock interno do microcontrolador. Tab 8. Seleção do Canal do ADC Na Fig 34 é mostrado o registrador de clock do ADC (ADICLK). Fig 34. Registrador ADICLK XXIV. EXEMPLO DE PROGRAMAÇÃO E CONFIGURAÇÃO DO CONVERSOR A/D Na programação e uso das portas dos conversores A/D internos no microcontrolador deve-se primeiramente configurar os seus registradores registrador (Fig 32, Fig 33 e Fig 34). Basicamente pode-se usar o comando “mov” para escrever nestes registradores. No exemplo abaixo é mostrada a configuração do Registrador de estado e controle do ADC (ADSCR): mov #$06,adscr 06 hex = 000 00110 bin Ä Pino 0 porta B usado para canal do ADC (Tab 7) Ä Somente uma conversão Ä Interrupção no final da conversão desabilitada 32 Obs: para maiores detalhes sobre a configuração deste registrador deve-se consultar o item Registrador de estado e controle do ADC. Note que o bit 7 deste registrador é somente leitura, ele indica se a conversão já esta completa. Quando uma conversão esta completa, os dados convertidos são guardados no Registrador de dados do ADC (ADR) na Fig 33. Vale a pena lembrar que a conversão A/D é iniciada automaticamente após a primeira subida do clock depois de uma escrita em ADSCR. XXV. MODULO DE TIMER O módulo de interface de timer (TIM) é composto por dois canais que fornecem referencia de tempo, com funções de Modulo de captura de entrada, Modulo de Saída comparada e Modulo de geração de PWM (pulse-width-modulation). A Fig 35 mostra o diagrama de blocos do TIM. Fig 35. Diagrama de blocos do TIM 33 O principal componente de temporização do microcontrolador é o registrador TCNT, de 16 bits. O conteúdo de TCNT é incrementado continuamente a cada ciclo de clock a partir de $0000, no RESET, até $FFFF. Após $FFFF o registrador reinicia em $0000. Os pinos usados pelo módulo de timer são visto na Tab 9. Tab 9. Pinos do TIM XXVI. MODULO DE CAPTURA DE ENTRADA Com a função de captura de entrada, o TIM pode capturar o tempo com que um evento externo ocorre. Quando uma mudança ocorre em um dos pinos do módulo do canal, o TIM armazena o conteúdo do contador, dentro do registrador TIM channel (TCxH e TCHxL). O modulo de captura de entrada pode gerar interrupção, caso habilitada. A função de captura de entrada é um elemento fundamental da arquitetura de temporização do JK3. Para o microcontrolador, o tempo é representado pela contagem presente no registrador TCNT. As funções de captura de entrada, usadas para registrar o instante em que determinado evento externo ocorre, são executadas salvando o conteúdo de TCNT num registrador de 16 bits, quando uma borda de transição predefinida (subida, descida ou ambas) é detectada num dos pinos de captura. Registrando os instantes em que ocorrem sucessivas transições de um sinal em análise, um programa pode medir período ou largura de pulso do sinal. Para medir o período, os instantes em que ocorrem duas transições sucessivas da mesma polaridade são registrados. Para a medição de largura de pulso, registram-se os instantes de ocorrência de duas transições de polaridades alternadas. Subtraindo-se os valores registrados obtém-se o intervalo de tempo entre as transições. XXVII. MODULO DE SAÍDA COMPARADA Com a função de saída comparada, o TIM pode gerar um pulso periódico com polaridade, duração e freqüência programáveis. Quando o contador atinge o valor armazenado em um registrador especifico (TMODH e TMODL), o TIM pode setar, limpar ou mudar o sinal no pino do canal. O módulo de saída comparada pode gera interrupção, caso habilitada. Para este elemento funcional faz-se necessário também o uso do TCNT. As funções de comparação de saída permitem gerar um evento em instantes de tempo predefinidos correspondentes a valores armazenados em registradores específicos. A cada um dos pinos de comparação de saída corresponde um registrador de comparação e um comparador dedicado, de 16 34 bits. Quando o valor armazenado no registrador de comparação é alcançado pelo TCNT, uma saída é gerada ativando o flag de status correspondente ao registrador e iniciando as ações automáticas definidas para aquele pino. Um dos usos mais simples da comparação de saída é a produção de pulsos com duração específica. A comparação de saída é configurada para automaticamente impor um nível alto ou baixo no pino associado, dependendo da polaridade do pulso que está sendo gerado. Após esta operação a comparação de saída é reprogramada para restaurar o nível inativo do pino na próxima comparação. XXVIII. MODULO DE GERAÇÃO DE PWM Com a função PWM, o TIM pode gerar uma onda quadrado modulada por largura de pulso, conforme visto na Fig 36. Fig 36. Sinal PWM No modulo de PWM, é possível gerar um sinal com forma de onda quadrada onde são configuráveis o período (freqüência) e largura de pulso (tempo dentro do valor de um período em que a saída ficara setada e o restante de tempo resetada ou vice-versa). O período ou freqüência do sinal PWM é dado através do overflow do timer ou seja o contador chegar ao final da contagem, valor este configurável nos registradores TMODL e TMODH. O tempo entre o overflow do timer e uma saída comparada (visto em XXVII) é o tamanho da largura do pulso, valor este configurável nos registradores TCHxH e TCHxL. Obs: Para um correto funcionamento do modulo de geração de PWM, nunca se deve configurar os registradores que informam o tamanho do pulso (TCHxH e TCHxL), com valor maior do que o registrador do período do PWM (TMODL e TMODH). 35 XXIX. REGISTRADORES I/O Os seguintes registradores I/O controlam e monitoram a operação doTIM. ª TSC - Registrador de estado e controle do TIM ª TCNTH e TCNTL – Registrador do contador do TIM (16 bits) ª TMODH e TMODL – Registrador do modulo do contador do TIM (16 bits) ª TSC0 e TSC1 – Registrador de estado e controle dos canais do TIM ª TCH0H, TCH0L, TCH1H e TCH1L – RegistradoR dos canais do TIM (16 bits) XXX. REGISTRADOR DE ESTADO E CONTROLE DO TIM O registrador de estado e controle do TIM é visto na Fig 37. Fig 37. Registrador TSC TOF – Bit de overflow do TIM, este bit é setado quando o contador reseta, após alcançar o valor programado no registrador do modulo do contador do TIM (TMODL e TMODH). 1 = Contador alcançou o valor do modulo. 0 = Contador não alcançou o valor do modulo. TOIE – Bit de habilitação da interrupção de overflow do TIM 1 = Interrupção habilitada no overflow do contador. 0 = Interrupção não habilitada. TSTOP – Bit de stop do TIM 1 = Contador parado. 0 = Contador ativo. TRST – Bit de reset do TIM 1 = Prescaler e contador limpos. 0 = Sem efeito. 36 PS[2:0] – Bits de seleção do Prescaler do TIM Tab 10. Seleção do prescaler do TIM XXXI. REGISTRADOR DO CONTADOR DO TIM Este registrador de 16 bits contém o valor alto (8 bits) e o valor baixo (8 bits) do contador do TIM (TCNTH e TCNTL), este registrador é incrementado a cada ciclo de clock. Fig 38. Registrador TCNTH Fig 39. Registrador TCNTL 37 XXXII. REGISTRADOR DO MODULO DO CONTADOR DO TIM Este registrador de 16 bits contém o valor alto (8 bits) e o valor baixo (8 bits) do registrador do modulo do contador do TIM (TMODH e TMODL), este registrador armazena o valor do modulo (numero de contagens ou ciclos de clock) que o contador ira executar antes do overflow. Fig 40. Registrador TMODH Fig 41. Registrador TMODL Obs: Como regra deve-se primeiro escrever TMODH, para um correto funcionamento do módulo. XXXIII. REGISTRADOR DE ESTADO E CONTROLE DOS CANAIS DO TIM O registrador de estado e controle dos canais do TIM é visto nas Fig 42 e Fig 43. Fig 42. Registrador TSC0 38 Fig 43. Registrador TSC1 CH0F e CH1F – Quando o canal 0 ou 1 do TIM é usado como Modulo de captura de entrada, este bit é setado a cada mudança de estado no pino. Quando usado como Modulo de Saída comparada, este bit é setado no overflow do contador. 1 = Captura de entrada ou saída comparada no pino do canal 0 ou 1 do timer. 0 = Não ocorreu captura de entrada ou saída comparada no pino do canal 0 ou 1 do timer. CH0IE e CH1IE – Bit de habilitação de interrupção do canal 0 ou 1 do TIM, interrupção gerada se ocorrer uma Modulo de captura de entrada ou Modulo de Saída comparada. 1 = Interrupção habilitada. 0 = Interrupção não habilitada. Obs: A habilitação das interrupções faz com que os bits CH0F e CH1F sejam limpos. MS0B, MS0A, MS1A, ELS0B, ELS1B, ELS0A e ELS1AH0IE – Bits de seleção de modo, tipo de borda e nível inicial do canal 0 e 1 do TIM, conforme Tab 11. Tab 11. Bits de seleção de modo, tipo de borda e nível inicial dos canais do TIM 39 TVO0 e TOV1E – Bit de controle do comportamento do canal 0 ou 1 do TIM, quando ocorre overflow do counter, se o canal é configurado como saída comparada. 1 = Pino do canal 0 ou 1 do TIM, muda no overflow do timer. 0 = Pino do canal 0 ou 1 do TIM, não muda no overflow do timer. Obs: Se canal configurado como captura de entrada este bit não terá efeito. CH0MAX e CH1MAX – Bit de seleção de máxima razão cíclica do modulo de geração de sinal PWM. A saída de um sinal PWM, fica com razão cíclica máxima até um ciclo após o bit ser limpo. 1 = Razão cíclica 100% ou 1. 0 = Razão cíclica controlada pelo módulo PWM (ver item XXVIII). XXXIV. REGISTRADOR DOS CANAIS DO TIM Este registrador de 16 bits contém o valor alto (8 bits) e o valor baixo (8 bits) do registrador dos canais do TIM. Quando usado como Modulo de captura de entrada de entrada este registrador armazenara o valor de cada captura. Se usado como Modulo de Saída comparada ele armazenara o valor, o qual será a referencia para ser executada uma comparação. Fig 44. Registrador TCH0H Fig 45. Registrador TCH0L 40 Fig 46. Registrador TCH1H Fig 47. Registrador TCH1L XXXV. EXEMPLO DE PROGRAMAÇÃO E CONFIGURAÇÃO DO TIM Para exemplificar a programação do TIM, será dado um exemplo onde então serão demonstradas as configurações de alguns registradores. O exemplo se baseia no Modulo de geração de PWM. Primeiramente deve-se configurar o Registrador de estado e controle do TIM (TSC). mov #$f0,TSC f0 hex = 11110 000 bin Ä Prescaler 0 (Tab 10) Ä Reset do Tim (sem efeito) Ä Contador do TIM parado Ä Interrupção no overflow do Contador habilitado Deve-se notar que o bit 7 deste registrador é somente leitura, ele indica que o contador alcançou o valor do módulo ou seja ocorreu um overflow do timer. Primeiramente para a configuração do registrador o timer deve estar parado como demonstra o exemplo acima. Com o Registrador de estado e controle do TIM (TSC) configurado deve-se partir para a configuração do Registrador do modulo do contador do TIM (TMODH e TMODL), que nada mais é do que um registrador de 16 bits que armazena o valor do modulo (numero de contagens ou ciclos de clock) que o contador ira executar antes do overflow. 41 mov #$05,TMODH Ä Bit alto do registrador com valor 05 mov #$ff,TMODL Ä Bit baixo do registrador com valor ff No exemplo seriam necessários que o contador contasse 5 vezes até ff para ocorrer um overflow no timer. Em outras palavras o valor armazenado no bit alto seria quantas vezes o bit baixo teria que contar o valor nele armazenado, para então o timer ter um overflow. Configurado o Registrador do modulo do contador do TIM o qual define o período do PWM, deve-se então configurar a razão cíclica que é o tempo em que a saída ficara com nível 1 e o restante do tempo 0. O registrador que define a razão é o RegistradoR dos canais do TIM (TCH0H e TCH0L). Este registrador define com qual valor de cada contagem será executada uma comparação e então mudado o estado lógico do PWM gerado. mov #$00,TCH0H Ä Bit alto do registrador com valor 00 mov #$05,TCH0L Ä Bit baixo do registrador com valor 05 Obs: este registrador deve ter um valor menor que o anterior que define o período do PWM. Neste exemplo a razão cíclica definida para o PWM será de apenas 5 ciclos de clock. Outro registrador a ser configurado é o Registrador de estado e controle dos canais do TIM (TSC0). mov #$1a,TSC0 1a hex = 00 0110 10 bin Ä Razão cíclica 100% ou 1 (desabilitada) Ä PWM muda no overflow do timer (troca de estado) Ä A saída do canal do TIM é PWM e na comparação a saída é colocada em nível baixo (Tab 11) Ä Desabilitada a interrupção do TIM (não usada com o módulo PWM) Obs: O bit 7 do registrador é somente leitura não usado com o módulo de PWM. Depois de configurados todos os registradores do módulo PWM, apenas deve ser lembrado de liga-lo, através da resetagem do bit 5 do registrador TSC. bclr 5,tsc Ä Bit 5 do TSC é resetado, ligando o módulo PWM 42 XXXVI. CONJUNTO DE INSTRUÇÕES DO MICROCONTROLADOR As Fig 48, Fig 49, Fig 50, Fig 51, Fig 52, Fig 53, Fig 54, Fig 55, mostram o conjunto de instruções, as quais são usadas na programação do microcontrolador. Fig 48. Conjunto de Instruções (folha 1 de 8) 43 Fig 49. Conjunto de Instruções (folha 2 de 8) 44 Fig 50. Conjunto de Instruções (folha 3 de 8) 45 Fig 51. Conjunto de Instruções (folha 4 de 8) 46 Fig 52. Conjunto de Instruções (folha 5 de 8) 47 Fig 53. Conjunto de Instruções (folha 6 de 8) 48 Fig 54. Conjunto de Instruções (folha 7 de 8) 49 Fig 55. Conjunto de Instruções (folha 8 de 8) XXXVII. EXEMPLO GERAL SOBRE PROGRAMAÇÃO DO MICROCONTROLADOR A partir de agora será visto um exemplo sobre programação do microcontrolador em assembly, onde é lido um valor de tensão através de um conversor A/D e de posse deste dado, é escolhida um valor de freqüência e razão cíclica para a operação do módulo de PWM. É executada também uma temporização através da qual será mantida a mesma freqüência e razão cíclica do PWM. Com o tempo esgotado é então executado um novo ciclo do programa. ;Start Program RAMStart EQU $0080 RomStart EQU $F600 VectorStart EQU $FFDE $Include 'jl3regs.inc' org ;Definição do endereço de Memória para JL3, JK3 e JK1 ;Arquivo que interpreta os minemônicos ramstart ;definição das variáveis na ram e o seu tamanho caso necessário tam ds 1 50 tam1 ds cont_1 ds cont_2 ds cont_3 ds 1 1 1 1 ;PROGRAMA org romstart ;começo do programa memória rom ou flash intini ; definição de uma subrotina, que termina quando começa a próxima ;Inicialização das portas, interrupções, variáveis e etc... rsp clra clrx clr clr clr cont_1 cont_2 cont_3 mov mov mov mov #$00,tam #$10,ddrb #$ff,ddrd #$ff,ddra adcini ; Rotinas de Inicialização do Conversor ADC mov #$06,adscr esperaconv ;pino 0 portb como canal adc ;somente uma conversão ;interrupção no final da conv. desabilitada ;Rotina para Espera da Conversão AD ser Completada lda and cmp bne adscr #$80 #$80 esperaconv ;compare com 80 ;se bit 7 (adscr) 0, volta para esperaconv ;a rotina faz um AND lógico entre o registrador ADSCR e o número $80 hex o que ;mostra que somente o valor do bit 7 deste registrador não terá seu valor zerado. Como já foi o bit 7 deste registrador é o qual avisa se a conversão AD ;já esta completa. Ao passo de que se comparada com $80 o resultado desta ;operação indicara se a conversão foi ou não completada caso não completada a ;rotina volta para o inicio e executa um novo teste comparação ;Comparação o valor convertido e desvia a rotina pra uma função especifica ;dependendo do valor da conversão, na verdade são 15 faixas de valores que ;indicam 15 valores de razão cíclica e freqüência do módulo de PWM lda cmp bls cmp bls cmp bls adr #$0f luz15 #$1e luz14 #$2d luz13 51 luz15 luz14 luz13 luz12 luz11 luz10 luz9 luz8 cmp bls cmp bls cmp bls cmp bls cmp bls cmp bls cmp bls cmp bls cmp bls cmp bls cmp bls cmp bls #$3c luz12 #$4b luz11 #$5a luz10 #$69 luz9 #$78 luz8 #$87 luz7 #$96 luz6 #$a5 luz5 #$b4 luz4 #$c3 luz3 #$d2 luz2 #$ff luz1 mov mov jmp #$34,tam #$1A,tam1 pwm1 mov mov jmp #$30,tam #$18,tam1 pwm1 mov mov jmp #$2C,tam #$16,tam1 pwm1 mov mov jmp #$2C,tam #$16,tam1 pwm1 mov mov jmp #$28,tam #$14,tam1 pwm1 mov mov jmp #$24,tam #$12,tam1 pwm1 mov mov jmp #$22,tam #$11,tam1 pwm1 mov mov jmp #$1E,tam #$0F,tam1 pwm1 52 luz7 luz6 luz5 luz4 luz3 luz2 luz1 mov mov jmp #$1C,tam #$0E,tam1 pwm1 mov mov jmp #$18,tam #$0C,tam1 pwm1 mov mov jmp #$16,tam #$0B,tam1 pwm1 mov mov jmp #$12,tam #$09,tam1 pwm1 mov mov jmp #$10,tam #$08,tam1 pwm1 mov mov jmp #$0E,tam #$07,tam1 pwm1 mov mov jmp #$0A,tam #$05,tam1 pwm1 pwm1 ;PWM Inicialização e configuração (configuração já detalhada no item XXXV) sta copctl ;clear whatchdog mov #$f0,TSC ;interrupção do overflow habilitada ;contador parado ;prescaler 000 mov #$00,TCH0H mov tam1,TCH0L mov #$00,TMODH mov tam,TMODL mov #$1a,tsc0 bclr cli 5,tsc ;valor da razão cíclica do PWM (alto) ;valor da razão cíclica do PWM (baixo) ;conforme valor convertido ;valor do bit alto do counter ;valor do bit baixo do counter ;conforme valor convertido ;interrupção desabilitada ;unbuffered PWM ;PWM na mudança ;liga o counter 53 tempo ;Rotina de tempo infinita, apenas sai por interrupção bra bra tempo tempo cont1 ;a cada overflow que ocorrer no timer é acionada esta subrotina ;caso esta subrotina chegue no final da contagem o programa retorna para o ;inicio ;Vetor de Interrupção por Overflow de Timer canal 0 ;Cada interrupção incrementa 1 no cont_x ;como mostrado anteriormente existe uma rotina de loop infinto, a qual somente é ;interrompida caso ocorra um overflow no timer que esta configurado para a ;geração de uma interrupção neste caso, onde então o processamento é desviado ;para esta subrotina, a qual conta um determinado tempo tempocont_1 tempocont_2 volta sta lda adc sta bcs bclr rti mov lda adc sta bcs bclr cli bclr rti copctl cont_1 #$1 cont_1 tempocont_2 7,tsc ;clear whatchdog #$00,cont_1 cont_2 #$1 cont_2 volta 7,tsc 4,portb ;Se encerrado o timer, o programa volta fazendo nova leitura do ADC bset jmp 4,portb adcini nothing rti org VectorStart ;neste ponto do programa são definidos os vetores de interrupção ou seja é definida qual a subrotina que cada fonte de interrupção ira executar dw dw dw dw dw nothing nothing nothing nothing nothing ; ; ; ; ; Conversão completa do ADC Keyboard Vector (No Vector Assigned $FFE2-$FFE3) (No Vector Assigned $FFE4-$FFE5) (No Vector Assigned $FFE6-$FFE7) 54 dw dw dw dw dw dw dw dw dw dw dw dw nothing nothing nothing nothing nothing cont1 nothing nothing nothing nothing nothing romstart ; ; ; ; ; ; ; ; ; ; ; ; (No Vector Assigned $FFE8-$FFE9) (No Vector Assigned $FFEA-$FFEB) (No Vector Assigned $FFEC-$FFED) (No Vector Assigned $FFEE-$FFEF) (No Vector Assigned $FFF0-$FFF1) Overflow do TIM Overflow do canal 0 do TIM Overflow do canal 1 do TIM (No Vector Assigned $FFF8-$FFF9) ~IRQ1 (por pino externo) SWI Vector Reset ;obs: esta ordem não pode ser trocada nem suprimida uma fonte de interrupção, mesmo algumas ;delas não sendo usadas é importante que as mesmas estejam presentes nesta tabela. XXXVIII. ATIVIDADES PRATICAS Faça a programação, monte o protótipo e teste: ATIVIDADE 1 (programação, configuração e uso das portas): . Programa que leia se uma chave (NA ou NF) foi pressionada e caso afirmativo piscar um LED. . Fazer um seqüencial de Leds (mínimo de 4 leds) . Adicionando ao circuito da atividade anterior 3 chaves (NA ou NF) e apartir da Tab 12, fazer um programa que identifique a seqüência em que foram pressionadas as chaves e execute o que se pede. Tab 12. pinagem do JK3 CH1 CH2 CH3 TAREFA 1º 2º 3º Seqüencial para direita 1º 3º 2º Seqüencial para esquerda 2º 1º 3º Piscar todos 2º 3º 1º Seqüencial “Vai e Volta” 3º 1º 2º Piscar apenas 1º,3º... 3º 2º 1º Piscar apenas 2º,4º... Obs: O programa não deve aceitar que a mesma tecla seja pressionada mais de uma vez a cada ciclo de programa. Para a conexão dos LEDS ao microcontrolador, pode-se usar os 4 pinos da porta 55 D que tem capacidade de corrente para tal ou senão usar circuito integrado do tipo buffer, optoacoplador ou latch. ATIVIDADE 2 (programação, uso do conversor A/D, configuração e uso das portas): . Programa que converta um valor de tensão variável (0 a 5V) e apartir deste indicar o valor convertido em binário, em um display de 8 leds, atualizando o mesmo de tempo em tempo, conforme exemplo na Tab 13. Tab 13. pinagem do JK3 Display Número Convertido (hexadecimal) 00 55 FF Obs: Como no microcontrolador JK3 e seus derivados de 20 pinos não possua mais de 4 pinos com capacidade de corrente suficiente para conexão de LEDS, deve-se fazer uso de circuito integrado do tipo buffer, optoacoplador ou latch para realização desta atividade, respeitando os limites de dreno de corrente dos respectivos pinos usados. . Partindo da atividade anterior, mostrar os dados convertidos em dois displays de 7 segmentos em hexadecimal, atualizando o mesmo de tempo em tempo. A Fig 56.a mostra o display de sete segmentos e suas conexões e a Fig 56.b ilustra as conexões do display com o microcontrolador. Notar que o barramento de dados dos dois displays é o mesmo apenas lembrar de atualizar os dados e habilitar um de cada vez. 56 (a) (b) Fig 56. (a) Display de 7 segmentos (b) Conexão do display com o microcontrolador Tab 14. tabela de conversão de dados em código de 7 seg. Caractere A b c d e F g 0 0 0 0 0 0 0 1 1 1 0 0 1 1 1 1 2 0 0 1 0 0 1 0 3 0 0 0 0 1 1 0 4 1 0 0 1 1 0 0 5 0 1 0 0 1 0 0 6 0 1 0 0 0 0 0 7 0 0 0 1 1 1 1 8 0 0 0 0 0 0 0 9 0 0 0 0 1 0 0 57 ATIVIDADE 3 (programação, captura de entrada, configuração e uso das portas): . Programa que leia uma chave (NA ou NF), e apartir da captura dos tempos de toque na chave (mínimo 5 toques), ligar um led nos mesmos intervalos de tempo capturados. ATIVIDADE 4 (programação, geração de PWM, configuração e uso das portas): . Programa que gere um sinal de PWM com freqüência e razão cíclica variáveis. O valor destas duas grandezas depende de valores digitados em duas teclas do tipo + ou -, as freqüências são entre 1 e 60 KHz (o passo poderá ser variável, mas de preferência de 1 em 1 KHz) e razão cíclica para estes valores entre 0 e 1 (0 e 100%). Poderão ser usadas mais que 2 chaves. Lembrando que o valor da razão cíclica é dependente do valor da freqüência então ao mudar o valor da freqüência devera ser calculado um novo valor de razão cíclica. 58 ANEXO ÚNICO !!! 59 CARACTERÍSTICAS ELÉTRICAS DO MICROCONTROLADOR A Tab 15 mostra algumas características elétricas (máximas) do microcontrolador. Tab 15. Caracteristicas elétricas 60 A Tab 16 mostra as especificações elétricas do microcontrolador para uma tensão de alimentação de 5V. Tab 16. Caracteristicas elétricas 61 A Tab 17 mostra as especificações elétricas do microcontrolador para uma tensão de alimentação de 3V. Tab 17. Caracteristicas elétricas