Microcontrolador AVR Atmel de 8 bits com flash programável no sistema de 2/4/8K bytes
Características
- Microcontrolador AVR® de 8 bits de alto desempenho e baixo consumo de energia
- Arquitetura RISC Avançada
- 120 Instruções poderosas - Maior execução de ciclo de clock único
- 32 x 8 Registros de Trabalho de Uso Geral
- Operação totalmente estática
- Programa não volátil e memórias de dados
- 2/4/8K bytes de memória flash de programa programável no sistema
- Resistência: 10,000 ciclos de gravação/apagamento
- EEPROM programável no sistema de 128/256/512 bytes
- Resistência: 100,000 ciclos de gravação/apagamento
- SRAM interna de 128/256/512 bytes
- Bloqueio de programação para programa Flash de autoprogramação e segurança de dados EEPROM
Recursos Periféricos
- Temporizador/contador de 8 bits com pré-escalador e dois canais PWM
- Temporizador/contador de alta velocidade de 8 bits com pré-escala separado
- 2 saídas PWM de alta frequência com registros de comparação de saída separados
- Gerador de tempo morto programável
- USI – Interface serial universal com detector de condição inicial
- ADC de 10 bits
4 canais de terminação única
2 pares de canais ADC diferenciais com ganho programável (1x, 20x)
Medição de temperatura
Cronômetro de watchdog programável com oscilador separado no chip
Comparador Analógico On-Chip
Recursos especiais do microcontrolador
debugWIRE Sistema de depuração no chip
Programável no sistema via porta SPI
Fontes de interrupção externas e internas
Modos de baixo consumo de energia, redução de ruído ADC e desligamento
Circuito de reinicialização de inicialização aprimorado
Circuito de detecção de queda de energia programável
Oscilador Calibrado Interno
I / O e pacotes
Seis linhas de E/S programáveis
PDIP de 8 pinos, SOIC de 8 pinos, QFN/MLF de 20 pads e TSSOP de 8 pinos (somente ATtiny45/V)
Vol operacionaltage
– 1.8 – 5.5 V para ATtiny25V/45V/85V
– 2.7 – 5.5 V para ATtiny25/45/85
Grau de velocidade
– ATtiny25V/45V/85V: 0 – 4 MHz @ 1.8 – 5.5 V, 0 – 10 MHz @ 2.7 – 5.5 V
– ATtiny25/45/85: 0 – 10 MHz @ 2.7 – 5.5 V, 0 – 20 MHz @ 4.5 – 5.5 V
Faixa de temperatura industrial
Baixo consumo de energia
Modo ativo:
1 MHz, 1.8 V: 300 µA
Modo de desligamento:
Configurações de pinos
Pinagem ATtiny25/45/85
Descrições dos Pinos
VCC: Volume de fornecimentotage.
GND: Terra.
Porta B (PB5:PB0): A porta B é uma porta de E/S bidirecional de 6 bits com resistores pull-up internos (selecionados para cada bit). Os buffers de saída da Porta B possuem características de unidade simétricas com alta capacidade de dissipador e fonte. Como entradas, os pinos da Porta B que são puxados externamente para baixo fornecerão corrente se os resistores pull-up estiverem ativados. Os pinos da Porta B recebem três estados quando uma condição de reinicialização se torna ativa, mesmo se o relógio não estiver funcionando.
A porta B também atende às funções de vários recursos especiais do ATtiny25/45/85 conforme listado
No ATtiny25, as portas de E/S programáveis PB3 e PB4 (pinos 2 e 3) são trocadas no modo de compatibilidade ATtiny15 para suportar compatibilidade retroativa com ATtiny15.
RESET: redefine a entrada. Um nível baixo neste pino por mais tempo que o comprimento mínimo do pulso gerará um reset, mesmo se o relógio não estiver funcionando e desde que o pino de reset não tenha sido desabilitado. O comprimento mínimo do pulso é dado em Tabela 21-4 na página 165. Não é garantido que pulsos mais curtos gerem uma reinicialização.
O pino de reinicialização também pode ser usado como um pino de E/S (fraco).
Sobreview
O ATtiny25/45/85 é um microcontrolador CMOS de 8 bits de baixo consumo baseado na arquitetura RISC aprimorada AVR. Ao executar instruções poderosas em um único ciclo de clock, o ATtiny25/45/85 atinge taxas de transferência próximas de 1 MIPS por MHz, permitindo ao projetista do sistema otimizar o consumo de energia em relação à velocidade de processamento.
Diagrama de bloco
O núcleo do AVR combina um rico conjunto de instruções com 32 registros de trabalho de propósito geral. Todos os 32 registros são conectados diretamente à Unidade Lógica Aritmética (ALU), permitindo que dois registros independentes sejam acessados em uma única instrução executada em um ciclo de clock. A arquitetura resultante é mais eficiente em termos de código, ao mesmo tempo em que alcança taxas de transferência até dez vezes mais rápidas do que os microcontroladores CISC convencionais.
O ATtiny25/45/85 fornece os seguintes recursos: 2/4/8K bytes de Flash Programável no Sistema, 128/256/512 bytes EEPROM, 128/256/256 bytes SRAM, 6 linhas de E/S de uso geral, 32 linhas gerais registradores de trabalho de propósito específico, um temporizador/contador de 8 bits com modos de comparação, um temporizador/contador de alta velocidade de 8 bits, interface serial universal, interrupções internas e externas, um ADC de 4 canais e 10 bits, um temporizador Watchdog programável com controle interno Oscilador e três modos de economia de energia selecionáveis por software. O modo inativo para a CPU enquanto permite que o sistema SRAM, temporizador/contador, ADC, comparador analógico e interrupção continuem funcionando. O modo Power-down salva o conteúdo do registro, desativando todas as funções do chip até a próxima interrupção ou reinicialização do hardware. O modo de redução de ruído ADC interrompe a CPU e todos os módulos de E/S, exceto ADC, para minimizar o ruído de comutação durante as conversões ADC.
O dispositivo é fabricado com tecnologia de memória não volátil de alta densidade da Atmel. O Flash ISP no chip permite que a memória do programa seja reprogramada no sistema através de uma interface serial SPI, por um programador de memória não volátil convencional ou por um código de inicialização no chip executado no núcleo do AVR.
O ATtiny25/45/85 AVR é suportado por um conjunto completo de ferramentas de desenvolvimento de programas e sistemas, incluindo: Compiladores C, Macro Assemblers, Depuradores/Simuladores de Programas e kits de avaliação.
Sobre Recursos
Um conjunto abrangente de ferramentas de desenvolvimento, notas de aplicação e planilhas estão disponíveis para download em http://www.atmel.com/avr.
Código Exampos
Esta documentação contém código simples examparquivos que mostram resumidamente como usar várias partes do dispositivo. Este código exampnós assumimos que o cabeçalho específico da parte file é incluído antes da compilação. Esteja ciente de que nem todos os fornecedores de compiladores C incluem definições de bits no cabeçalho filese o tratamento de interrupções em C depende do compilador. Por favor, confirme com a documentação do compilador C para mais detalhes.
Para registros de E/S localizados no mapa de E/S estendido, as instruções “IN”, “OUT”, “SBIS”, “SBIC”, “CBI” e “SBI” devem ser substituídas por instruções que permitam acesso ao I/O estendido. /O. Normalmente, isso significa “LDS” e “STS” combinados com “SBRS”, “SBRC”, “SBR” e “CBR”. Observe que nem todos os dispositivos AVR incluem um mapa de E/S estendido.
Detecção de toque capacitivo
A biblioteca Atmel QTouch fornece uma solução simples de usar para interfaces sensíveis ao toque em microcontroladores Atmel AVR. A biblioteca QTouch inclui suporte para métodos de aquisição QTouch® e QMatrix®.
A detecção de toque é facilmente adicionada a qualquer aplicativo vinculando a Biblioteca QTouch e usando a Interface de Programação de Aplicativo (API) da biblioteca para definir os canais de toque e sensores. O aplicativo então chama a API para recuperar informações do canal e determinar o estado do sensor de toque.
A biblioteca QTouch é gratuita e pode ser baixada no Atmel website. Para obter mais informações e detalhes de implementação, consulte o Guia do usuário da biblioteca QTouch – também disponível no Atmel website.
Retenção de dados
Os resultados da qualificação de confiabilidade mostram que a taxa de falha de retenção de dados projetada é muito menor do que 1 PPM em 20 anos a 85 ° C ou 100 anos a 25 ° C.
Núcleo CPU AVR
Introdução
Esta seção discute a arquitetura central do AVR em geral. A principal função do núcleo da CPU é garantir a execução correta do programa. A CPU deve, portanto, ser capaz de acessar memórias, realizar cálculos, controlar periféricos e lidar com interrupções.
Acabamento arquitetônicoview
Para maximizar o desempenho e o paralelismo, o AVR utiliza uma arquitetura Harvard – com memórias e barramentos separados para programas e dados. As instruções na memória do programa são executadas com um pipeline de nível único. Enquanto uma instrução está sendo executada, a próxima instrução é pré-buscada da memória do programa. Este conceito permite que instruções sejam executadas em cada ciclo de clock. A memória do programa é uma memória Flash reprogramável no sistema.
O registro de acesso rápido File contém registros de trabalho de uso geral de 32 x 8 bits com um único tempo de acesso ao ciclo de clock. Isso permite a operação da Unidade Lógica Aritmética (ALU) de ciclo único. Em uma operação típica da ALU, dois operandos são emitidos do registrador File, a operação é executada e o resultado é armazenado de volta no Registrador File– em um ciclo de clock.
Seis dos 32 registros podem ser usados como três ponteiros de registro de endereço indireto de 16 bits para endereçamento de espaço de dados – permitindo cálculos de endereço eficientes. Um desses ponteiros de endereço também pode ser usado como ponteiro de endereço para consultar tabelas na memória do programa Flash. Esses registradores de função adicionados são os registradores X, Y e Z de 16 bits, descritos posteriormente nesta seção.
A ALU suporta operações aritméticas e lógicas entre registradores ou entre uma constante e um registrador. Operações de registro único também podem ser executadas na ALU. Após uma operação aritmética, o Registro de Status é atualizado para refletir informações sobre o resultado da operação.
O fluxo do programa é fornecido por instruções de salto e chamada condicionais e incondicionais, capazes de endereçar diretamente todo o espaço de endereço. A maioria das instruções AVR possui um único formato de palavra de 16 bits, mas também existem instruções de 32 bits.
Durante interrupções e chamadas de sub-rotina, o endereço de retorno Contador de Programa (PC) é armazenado na Pilha. A pilha é efetivamente alocada na SRAM de dados geral e, conseqüentemente, o tamanho da pilha é limitado apenas pelo tamanho total da SRAM e pelo uso da SRAM. Todos os programas do usuário devem inicializar o SP na rotina Reset (antes que sub-rotinas ou interrupções sejam executadas). O Stack Pointer (SP) é acessível para leitura/gravação no espaço de E/S. A SRAM de dados pode ser facilmente acessada através dos cinco modos de endereçamento diferentes suportados na arquitetura AVR.
Os espaços de memória na arquitetura AVR são todos mapas de memória lineares e regulares.
Um módulo de interrupção flexível tem seus registradores de controle no espaço de E/S com um bit adicional de habilitação de interrupção global no registrador de status. Todas as interrupções possuem um vetor de interrupção separado na tabela de vetores de interrupção. As interrupções têm prioridade de acordo com a posição do seu Vetor de Interrupção. Quanto menor o endereço do vetor de interrupção, maior será a prioridade.
O espaço de memória de E/S contém 64 endereços para funções periféricas da CPU como Registradores de Controle, SPI e outras funções de E/S. A memória de E/S pode ser acessada diretamente, ou como locais de Espaço de Dados seguindo aqueles do Registro File, 0x20 – 0x5F.
ALU - Unidade Lógica Aritmética
O AVR ALU de alto desempenho opera em conexão direta com todos os 32 registros de trabalho de uso geral. Dentro de um único ciclo de clock, são executadas operações aritméticas entre registradores de uso geral ou entre um registrador e um imediato. As operações da ALU são divididas em três categorias principais – funções aritméticas, lógicas e de bits. Algumas implementações da arquitetura também fornecem um multiplicador poderoso que suporta multiplicação assinada/não assinada e formato fracionário. Consulte a seção “Conjunto de instruções” para obter uma descrição detalhada.
Registro de status
O registrador de status contém informações sobre o resultado da instrução aritmética executada mais recentemente. Essas informações podem ser usadas para alterar o fluxo do programa para realizar operações condicionais. Observe que o registrador de status é atualizado após todas as operações da ALU, conforme especificado na referência do conjunto de instruções. Em muitos casos, isso eliminará a necessidade de usar instruções de comparação dedicadas, resultando em um código mais rápido e compacto.
O registrador de status não é armazenado automaticamente ao entrar em uma rotina de interrupção e restaurado ao retornar de uma interrupção. Isso deve ser tratado por software.
SREG – Registro de status AVR
O Registro de Status AVR – SREG – é definido como:
Pedaço | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x3F | I | T | H | S | V | N | Z | C | SREG |
Ler/Escrever | Direito/Esquerdo | Direito/Esquerdo | Direito/Esquerdo | Direito/Esquerdo | Direito/Esquerdo | Direito/Esquerdo | Direito/Esquerdo | Direito/Esquerdo | |
Valor Inicial | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Bit 7 – I: Habilitação de interrupção global
O bit Global Interrupt Enable deve ser definido para que as interrupções sejam habilitadas. O controle individual de habilitação de interrupção é então executado em registros de controle separados. Se o registro global de habilitação de interrupção for limpo, nenhuma das interrupções será habilitada independentemente das configurações individuais de habilitação de interrupção. O bit I é limpo pelo hardware após a ocorrência de uma interrupção e é definido pela instrução RETI para permitir interrupções subsequentes. O bit I também pode ser definido e apagado pela aplicação com as instruções SEI e CLI, conforme descrito na referência do conjunto de instruções.
Bit 6 – T: Armazenamento de cópias de bits
As instruções Bit Copy BLD (Bit LoaD) e BST (Bit STore) utilizam o bit T como origem ou destino do bit operado. Um pouco de um registro no Register File pode ser copiado em T pela instrução BST, e um bit em T pode ser copiado em um bit em um registrador no Registrador File pela instrução BLD.
Bit 5 – H: Bandeira de meio transporte
O Half Carry Flag H indica Half Carry em algumas operações aritméticas. Half Carry é útil na aritmética BCD. Consulte a “Descrição do conjunto de instruções” para obter informações detalhadas.
Bit 4 – S: Bit de sinal, S = N ⊕ V
O bit S é sempre um ou exclusivo entre o Flag Negativo N e o Flag Overflow de Complemento de Dois V. Consulte a “Descrição do Conjunto de Instruções” para obter informações detalhadas.
Bit 3 – V: Sinalizador de estouro de complemento de dois
O Flag Overflow de Complemento de Dois V suporta aritmética de complemento de dois. Consulte a “Descrição do conjunto de instruções” para obter informações detalhadas.
Bit 2 – N: Sinalizador Negativo
O Sinalizador Negativo N indica um resultado negativo em uma operação aritmética ou lógica. Consulte a “Descrição do conjunto de instruções” para obter informações detalhadas.
Bit 1 – Z: Sinalizador Zero
O Zero Flag Z indica um resultado zero em uma operação aritmética ou lógica. Consulte a “Descrição do conjunto de instruções” para obter informações detalhadas.
Bit 0 – C: Bandeira de Transporte
O Carry Flag C indica um carry em uma operação aritmética ou lógica. Consulte a “Descrição do conjunto de instruções” para obter informações detalhadas.
Registro de uso geral File
O Registro File é otimizado para o conjunto de instruções AVR Enhanced RISC. Para alcançar o desempenho e a flexibilidade exigidos, os seguintes esquemas de entrada/saída são apoiados pelo Registro File:
Um operando de saída de 8 bits e uma entrada de resultado de 8 bits
Dois operandos de saída de 8 bits e uma entrada de resultado de 8 bits
Dois operandos de saída de 8 bits e uma entrada de resultado de 16 bits
Um operando de saída de 16 bits e uma entrada de resultado de 16 bits
Figura 4-2 mostra a estrutura dos 32 registros de trabalho de uso geral na CPU.
Como mostrado em Figura 4-2, cada registro também recebe um endereço de memória de dados, mapeando-os diretamente nos primeiros 32 locais do espaço de dados do usuário. Embora não seja fisicamente implementada como localizações SRAM, esta organização de memória proporciona grande flexibilidade no acesso aos registradores, já que os registradores dos ponteiros X, Y e Z podem ser configurados para indexar qualquer registrador no file.A maioria das instruções operando no Registro File têm acesso direto a todos os registradores, e a maioria deles são instruções de ciclo único.
O registro X, registro Y e registro Z
Os registradores R26..R31 possuem algumas funções adicionais ao seu uso de uso geral. Esses registradores são ponteiros de endereço de 16 bits para endereçamento indireto do espaço de dados. Os três registradores de endereços indiretos X, Y e Z são definidos conforme descrito em Figura 4-3.
Nos diferentes modos de endereçamento estes registradores de endereço possuem funções como deslocamento fixo, incremento automático e decremento automático (veja a referência do conjunto de instruções para detalhes).
Ponteiro de pilha
A pilha é usada principalmente para armazenar dados temporários, para armazenar variáveis locais e para armazenar endereços de retorno após interrupções e chamadas de sub-rotinas. O Stack Pointer Register sempre aponta para o topo da pilha. Observe que a pilha é implementada crescendo de locais de memória mais altos para locais de memória mais baixos. Isso implica que um comando Stack PUSH diminui o Stack Pointer.
O Stack Pointer aponta para a área da pilha SRAM de dados onde as pilhas de sub-rotina e de interrupção estão localizadas. Este espaço de pilha na SRAM de dados deve ser definido pelo programa antes de qualquer chamada de sub-rotina ser executada ou interrupções serem habilitadas. O Stack Pointer deve ser definido para apontar acima de 0x60. O Stack Pointer é decrementado em um quando os dados são colocados na pilha com a instrução PUSH, e é decrementado em dois quando o endereço de retorno é colocado na pilha com chamada de sub-rotina ou interrupção. O Stack Pointer é incrementado em um quando os dados são retirados da pilha com a instrução POP, e é incrementado em dois quando os dados são retirados da pilha com retorno da sub-rotina RET ou retorno da interrupção RETI.
O Stack Pointer AVR é implementado como dois registradores de 8 bits no espaço de E/S. O número de bits realmente usados depende da implementação. Observe que o espaço para dados em algumas implementações da arquitetura AVR é tão pequeno que apenas o SPL é necessário. Neste caso, o Cadastro SPH não estará presente.
SPH e SPL – Registro de ponteiro de pilha
Pedaço | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | |
0x3E | SP15 | SP14 | SP13 | SP12 | SP11 | SP10 | SP9 | SP8 | SPH |
0x3D | SP7 | SP6 | SP5 | SP4 | SP3 | SP2 | SP1 | SP0 | SPL |
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | ||
Ler/Escrever | Direito/Esquerdo | Direito/Esquerdo | Direito/Esquerdo | Direito/Esquerdo | Direito/Esquerdo | Direito/Esquerdo | Direito/Esquerdo | Direito/Esquerdo | |
Ler/Escrever | Direito/Esquerdo | Direito/Esquerdo | Direito/Esquerdo | Direito/Esquerdo | Direito/Esquerdo | Direito/Esquerdo | Direito/Esquerdo | Direito/Esquerdo | |
Valor Inicial | RAMENDO | RAMENDO | RAMENDO | RAMENDO | RAMENDO | RAMENDO | RAMENDO | RAMENDO | |
Valor Inicial | RAMENDO | RAMENDO | RAMENDO | RAMENDO | RAMENDO | RAMENDO | RAMENDO | RAMENDO |
Tempo de execução da instrução
Esta seção descreve os conceitos gerais de temporização de acesso para execução de instruções. A CPU do AVR é acionada pelo clock da CPU clkCPU, gerado diretamente a partir da fonte de clock selecionada para o chip. Nenhuma divisão de relógio interno é usada.
Figura 4-4 mostra as buscas paralelas de instruções e execuções de instruções habilitadas pela arquitetura Harvard e pelo registro de acesso rápido File conceito. Este é o conceito básico de pipeline para obter até 1 MIPS por MHz com os resultados exclusivos correspondentes para funções por custo, funções por clock e funções por unidade de potência.
Figura 4-5. Operação ALU de ciclo único
Tratamento de reinicialização e interrupção
O AVR fornece diversas fontes de interrupção diferentes. Essas interrupções e o vetor de reinicialização separado possuem, cada um, um vetor de programa separado no espaço de memória do programa. Todas as interrupções recebem bits de habilitação individuais que devem ser escritos na lógica um junto com o bit de habilitação de interrupção global no registrador de status para habilitar a interrupção.
Os endereços mais baixos no espaço de memória do programa são definidos por padrão como vetores de reinicialização e interrupção. A lista completa de vetores é mostrada em “Interrupções” na página 48. A lista também determina os níveis de prioridade das diferentes interrupções. Quanto menor o endereço, maior é o nível de prioridade. RESET tem a prioridade mais alta e o próximo é INT0 – a Solicitação de Interrupção Externa 0.
Quando ocorre uma interrupção, o bit I de ativação de interrupção global é limpo e todas as interrupções são desativadas. O software do usuário pode escrever a lógica um no bit I para permitir interrupções aninhadas. Todas as interrupções habilitadas podem então interromper a rotina de interrupção atual. O bit I é definido automaticamente quando uma instrução Return from Interrupt – RETI – é executada.
Existem basicamente dois tipos de interrupções. O primeiro tipo é acionado por um evento que define o sinalizador de interrupção. Para essas interrupções, o contador do programa é vetorizado para o vetor de interrupção real para executar a rotina de tratamento de interrupções e o hardware limpa o sinalizador de interrupção correspondente. Os sinalizadores de interrupção também podem ser apagados escrevendo um sinal lógico na(s) posição(ões) do bit do sinalizador a serem apagados. Se ocorrer uma condição de interrupção enquanto o bit de habilitação de interrupção correspondente estiver limpo, o sinalizador de interrupção será definido e lembrado até que a interrupção seja habilitada ou o sinalizador seja apagado pelo software. Da mesma forma, se uma ou mais condições de interrupção ocorrerem enquanto o bit de habilitação de interrupção global estiver limpo, os sinalizadores de interrupção correspondentes serão definidos e lembrados até que o bit de habilitação de interrupção global seja definido e serão então executados por ordem de prioridade.
O segundo tipo de interrupção será acionado enquanto a condição de interrupção estiver presente. Essas interrupções não possuem necessariamente Flags de Interrupção. Se a condição de interrupção desaparecer antes de a interrupção ser habilitada, a interrupção não será acionada.
Quando o AVR sai de uma interrupção, ele sempre retornará ao programa principal e executará mais uma instrução antes que qualquer interrupção pendente seja atendida.
Observe que o registrador de status não é armazenado automaticamente ao entrar em uma rotina de interrupção, nem restaurado ao retornar de uma rotina de interrupção. Isso deve ser tratado por software.
Ao usar a instrução CLI para desabilitar interrupções, as interrupções serão desabilitadas imediatamente. Nenhuma interrupção será executada após a instrução CLI, mesmo que ocorra simultaneamente com a instrução CLI. O seguinte exampO arquivo mostra como isso pode ser usado para evitar interrupções durante a sequência de gravação temporizada da EEPROM.
Código de montagem Example |
em r16, SREG ; armazenar valor SREG
clique ; desativar interrupções durante a sequência cronometrada sbi EECR, EEMPE ; iniciar gravação EEPROM sbi EECR, EEPE out SREG, r16 ; restaurar o valor SREG (I-bit) |
Código C Example |
char cSREG;
cSREG = SREG; /* armazena valor SREG */ /* desativa interrupções durante a sequência cronometrada */ _CLI (); EECR |= (1<<EEMPE); /* inicia gravação na EEPROM */ EECR |= (1< SREG = cSREG; /* restaura o valor SREG (I-bit) */ |
Ao usar a instrução SEI para habilitar interrupções, a instrução seguinte a SEI será executada antes de qualquer interrupção pendente, conforme mostrado neste exemplo.ampeu.
Código de montagem Example |
sei ; definir Habilitação de interrupção global
dorme; entrar no modo de suspensão, aguardando interrupção ; nota: entrará em suspensão antes de qualquer pendência ; interrupção(ões) |
Código C Example |
_SEI(); /* define a ativação de interrupção global */
_DORMIR(); /* entra em suspensão, aguardando interrupção */ / * nota: entrará em hibernação antes de qualquer interrupção pendente * / |
Tempo de resposta de interrupção
A resposta de execução de interrupção para todas as interrupções do AVR habilitadas é de no mínimo quatro ciclos de clock. Após quatro ciclos de clock, o endereço do vetor de programa para a rotina real de tratamento de interrupções é executado. Durante este período de quatro ciclos de clock, o contador do programa é colocado na pilha. O vetor normalmente é um salto para a rotina de interrupção e esse salto leva três ciclos de clock. Se ocorrer uma interrupção durante a execução de uma instrução multiciclo, esta instrução será concluída antes que a interrupção seja atendida. Se ocorrer uma interrupção quando o MCU estiver no modo de suspensão, o tempo de resposta da execução da interrupção será aumentado em quatro ciclos de clock. Este aumento é adicionado ao tempo de inicialização do modo de suspensão selecionado.
O retorno de uma rotina de tratamento de interrupções leva quatro ciclos de clock. Durante esses quatro ciclos de clock, o contador do programa (dois bytes) é retirado da pilha, o ponteiro da pilha é incrementado em dois e o bit I no SREG é definido.
Memórias AVR
Esta seção descreve as diferentes memórias do ATtiny25/45/85. A arquitetura AVR possui dois espaços de memória principais, a memória de dados e o espaço de memória de programa. Além disso, o ATtiny25/45/85 possui uma memória EEPROM para armazenamento de dados. Todos os três espaços de memória são lineares e regulares.
Memória de programa flash reprogramável no sistema
O ATtiny25/45/85 contém 2/4/8K bytes de memória Flash reprogramável no sistema no chip para armazenamento de programas. Como todas as instruções do AVR têm 16 ou 32 bits de largura, o Flash é organizado como 1024/2048/4096 x 16.
A memória Flash suporta pelo menos 10,000 ciclos de gravação/apagamento. O contador de programa (PC) ATtiny25/45/85 tem largura de 10/11/12 bits, endereçando assim os locais de memória de programa 1024/2048/4096. “Programa de Memória- ming” na página 147 contém uma descrição detalhada sobre o download serial de dados Flash usando os pinos SPI.
Tabelas constantes podem ser alocadas dentro de todo o espaço de endereço da memória do programa (veja a descrição da instrução LPM – Load Program Memory).
Figura 5-1. Mapa de memória do programa
Memória de dados SRAM
Figura 5-2 mostra como a memória SRAM ATtiny25/45/85 está organizada.
Os locais inferiores da memória de dados 224/352/607 endereçam tanto o registro File, a memória de E/S e a SRAM de dados internos. As primeiras 32 localidades abordam o Cadastro File, os próximos 64 locais são a memória de E/S padrão e os últimos 128/256/512 locais endereçam a SRAM de dados internos.
Os cinco diferentes modos de endereçamento para a memória de dados abrangem: Direto, Indireto com Deslocamento, Indireto, Indireto com Pré-decremento e Indireto com Pós-incremento. No registro File, os registros R26 a R31 apresentam os registros de ponteiro de endereçamento indireto.
O endereçamento direto atinge todo o espaço de dados.
O modo Indireto com Deslocamento atinge 63 localizações de endereço a partir do endereço base fornecido pelo registrador Y ou Z.
Ao usar modos de endereçamento indireto de registro com pré-decremento e pós-incremento automáticos, os registros de endereço X, Y e Z são decrementados ou incrementados.
Os 32 registros de trabalho de uso geral, 64 registros de E/S e os 128/256/512 bytes de SRAM de dados internos no ATtiny25/45/85 são todos acessíveis através de todos esses modos de endereçamento. O registro File é descrito em “Gen- Registro de Finalidade Geral File”Na página 10.
Figura 5-2. Mapa de memória de dados
Acesso à memória de dados Tempos
Esta seção descreve os conceitos gerais de temporização de acesso para acesso à memória interna. O acesso aos dados internos da SRAM é realizado em dois ciclos clkCPU conforme descrito em Figura 5-3.
Figura 5-3. Ciclos de acesso SRAM de dados no chip Memória de dados EEPROM
O ATtiny25/45/85 contém 128/256/512 bytes de memória EEPROM de dados. É organizado como um espaço de dados separado, no qual bytes únicos podem ser lidos e gravados. A EEPROM tem uma resistência de pelo menos 100,000 ciclos de gravação/apagamento. O acesso entre a EEPROM e a CPU é descrito a seguir, especificando os Registradores de Endereço EEPROM, o Registrador de Dados EEPROM e o Registrador de Controle EEPROM. Para detalhes veja “Download serial” na página 151.
Acesso de leitura/gravação EEPROM
Os registros de acesso EEPROM são acessíveis no espaço de E/S.
Os tempos de acesso de gravação para a EEPROM são dados em Tabela 5-1 na página 21. Uma função de temporização automática, entretanto, permite que o software do usuário detecte quando o próximo byte pode ser gravado. Se o código do usuário contém instruções que escrevem a EEPROM, alguns cuidados devem ser tomados. Em fontes de alimentação fortemente filtradas, o VCC provavelmente aumentará ou diminuirá lentamente
Ligar/desligar. Isso faz com que o dispositivo por algum período de tempo funcione a um volumetage inferior ao especificado como mínimo para a frequência de clock utilizada. Ver “Prevenindo a corrupção da EEPROM” na página 19 para obter detalhes sobre como evitar problemas nessas situações.
Para evitar gravações não intencionais na EEPROM, um procedimento de gravação específico deve ser seguido. Referir-se “Atômico Programação de bytes” na página 17 e “Programação de Split Byte” na página 17 para obter detalhes sobre isso.
Quando a EEPROM é lida, a CPU é parada por quatro ciclos de clock antes da próxima instrução ser executada. Quando a EEPROM é escrita, a CPU é parada por dois ciclos de clock antes da próxima instrução ser executada.
Programação de bytes atômicos
Usar a Programação de Bytes Atômicos é o modo mais simples. Ao escrever um byte na EEPROM, o usuário deve escrever o endereço no registro EEAR e os dados no registro EEDR. Se os bits EEPMn forem zero, a gravação de EEPE (dentro de quatro ciclos após a gravação de EEMPE) acionará a operação de apagamento/gravação. Tanto o ciclo de apagamento quanto o de gravação são feitos em uma operação e o tempo total de programação é dado em Tabela 5-1 na página 21. O bit EEPE permanece definido até que as operações de apagamento e gravação sejam concluídas. Enquanto o dispositivo estiver ocupado com a programação, não será possível realizar nenhuma outra operação na EEPROM.
Programação de bytes divididos
É possível dividir o ciclo de apagamento e gravação em duas operações diferentes. Isto pode ser útil se o sistema exigir um tempo de acesso curto por um período limitado de tempo (normalmente se a fonte de alimentação voltage cai). Para aproveitar tagNeste método, é necessário que os locais a serem escritos tenham sido apagados antes da operação de escrita. Mas como as operações de apagamento e gravação são divididas, é possível realizar as operações de apagamento quando o sistema permite a realização de operações críticas em termos de tempo (normalmente após a inicialização).
Apagar
Para apagar um byte, o endereço deve ser escrito em EEAR. Se os bits EEPMn forem 0b01, a gravação do EEPE (dentro de quatro ciclos após a gravação do EEMPE) acionará apenas a operação de apagamento (o tempo de programação é dado em Tabela 5-1 em página 21). O bit EEPE permanece definido até que a operação de apagamento seja concluída. Enquanto o dispositivo estiver ocupado programando, não será possível realizar nenhuma outra operação na EEPROM.
Escrever
Para escrever uma localização, o usuário deve escrever o endereço no EEAR e os dados no EEDR. Se os bits EEPMn forem 0b10, a gravação do EEPE (dentro de quatro ciclos após a gravação do EEMPE) acionará apenas a operação de gravação (o tempo de programação é dado em Tabela 5-1 na página 21). O bit EEPE permanece definido até que a operação de gravação seja concluída. Se o local a ser gravado não tiver sido apagado antes da gravação, os dados armazenados deverão ser considerados perdidos. Enquanto o dispositivo estiver ocupado com a programação, não será possível realizar nenhuma outra operação na EEPROM.
O Oscilador calibrado é utilizado para cronometrar os acessos à EEPROM. Certifique-se de que a frequência do oscilador esteja dentro dos requisitos descritos em “OSCCAL – Registro de Calibração do Oscilador” na página 31.
O seguinte código exampOs arquivos mostram um assembly e uma função C para apagar, gravar ou gravar atômica da EEPROM. O exampVamos assumir que as interrupções são controladas (por exemplo, desativando as interrupções globalmente) para que nenhuma interrupção ocorra durante a execução dessas funções.
Código de montagem Example |
EEPROM_gravação:
; Aguarde a conclusão da gravação anterior sbic EECR,EEPE rjmp EEPROM_write ; Definir modo de programação ldi r16, (0<<EEPM1)|(0<<EEPM0) fora EECR, r16 ; Configure o endereço (r18:r17) no registro de endereço fora EEARH, r18 fora EEARL, r17 ; Gravar dados (r19) no registro de dados fora EEDR, r19 ; Escreva um lógico para EEMPE sbi EECR,EEMPE ; Inicie a gravação do eeprom configurando EEPE sbi EECR,EEPE ret |
Código C Example |
void EEPROM_write(caractere não assinado ucAddress, caractere não assinado ucData)
{ /* Aguarde a conclusão da gravação anterior */ while(EECR & (1< ; /* Definir modo de programação */ EECR = (0< /* Configura registros de endereço e dados */ EEAR = ucAddress; EEDR = ucDados; /* Escreve um lógico para EEMPE */ EECR |= (1< /* Inicia a gravação do eeprom configurando EEPE */ EECR |= (1< } |
O próximo código exampOs arquivos mostram funções assembly e C para leitura da EEPROM. O exampVamos assumir que as interrupções são controladas para que nenhuma interrupção ocorra durante a execução dessas funções.
Código de montagem Example |
EEPROM_leitura:
; Aguarde a conclusão da gravação anterior sbic EECR,EEPE rjmp EEPROM_read ; Configure o endereço (r18:r17) no registro de endereço fora EEARH, r18 fora EEARL, r17 ; Comece a leitura do eeprom escrevendo EERE sbi EECR,EERE ; Ler dados do registro de dados em r16,EEDR ret |
Código C Example |
caractere não assinado EEPROM_read(caractere não assinado ucAddress)
{ /* Aguarda a conclusão da gravação anterior */ enquanto(EECR & (1< ; /* Configura o registro de endereço */ EEAR = ucAddress; /* Inicie a leitura do eeprom escrevendo EERE */ EECR |= (1< /* Retorna dados do registrador de dados */ retornar EEDR; } |
Prevenindo a corrupção da EEPROM
Durante períodos de baixo VCC, os dados da EEPROM podem ser corrompidos porque o volume de alimentaçãotage é muito baixo para que a CPU e a EEPROM funcionem corretamente. Esses problemas são os mesmos dos sistemas de nível de placa que usam EEPROM, e as mesmas soluções de projeto devem ser aplicadas.
Uma corrupção de dados da EEPROM pode ser causada por duas situações quando o volumetage é muito baixo. Primeiro, uma sequência regular de gravação na EEPROM requer um volume mínimotage para funcionar corretamente. Em segundo lugar, a própria CPU pode executar instruções incorretamente, se o volume de alimentaçãotage é muito baixo.
A corrupção de dados EEPROM pode ser facilmente evitada seguindo esta recomendação de design:
Mantenha o AVR RESET ativo (baixo) durante períodos de fornecimento de energia insuficiente voltage. Isso pode ser feito ativando o Detector de Brown-out (BOD) interno. Se o nível de detecção do DBO interno não corresponder ao
nível de detecção necessário, um circuito externo de proteção de redefinição de VCC baixo pode ser usado. Se ocorrer um reset enquanto uma operação de gravação estiver em andamento, a operação de gravação será concluída desde que a fonte de alimentação voltage é suficiente.
Memória de E/S
A definição do espaço de E/S do ATtiny25/45/85 é mostrada em “Resumo do Registro” na página 200.
Todas as E/S e periféricos ATtiny25/45/85 são colocadas no espaço de E/S. Todos os locais de E/S podem ser acessados pelas instruções LD/LDS/LDD e ST/STS/STD, transferindo dados entre os 32 registradores de trabalho de uso geral e o espaço de E/S. Os registros de E/S dentro do intervalo de endereços 0x00 – 0x1F são diretamente acessíveis por bits usando as instruções SBI e CBI. Nestes registradores, o valor de bits únicos pode ser verificado usando as instruções SBIS e SBIC. Consulte a seção do conjunto de instruções para obter mais detalhes. Ao usar os comandos específicos de E/S IN e OUT, os endereços de E/S 0x00 – 0x3F devem ser usados. Ao endereçar registros de E/S como espaço de dados usando instruções LD e ST, 0x20 deve ser adicionado a esses endereços.
Para compatibilidade com dispositivos futuros, os bits reservados devem ser reduzidos a zero se acessados. Os endereços de memória de E / S reservados nunca devem ser gravados.
Alguns dos sinalizadores de status são apagados escrevendo um sinalizador lógico para eles. Observe que as instruções CBI e SBI operarão apenas no bit especificado e podem, portanto, ser usadas em registradores contendo tais sinalizadores de status. As instruções CBI e SBI funcionam apenas com registradores 0x00 a 0x1F.
Os registros de controle de E/S e periféricos são explicados em seções posteriores.
Descrição do Registro
EEARH – Registro de endereço EEPROM
Pedaço | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x1F | – | – | – | – | – | – | – | EEAR8 | EARH |
Ler/Escrever | R | R | R | R | R | R | R | Direito/Esquerdo | |
Valor Inicial | 0 | 0 | 0 | 0 | 0 | 0 | 0 | X/0 |
Bits 7:1 – Res: Bits Reservados
Esses bits são reservados para uso futuro e sempre serão lidos como zero.
Bits 0 – EEAR8: Endereço EEPROM
Este é o bit de endereço EEPROM mais significativo do ATtiny85. Em dispositivos com menos EEPROM, ou seja, ATtiny25/ATtiny45, este bit é reservado e sempre lerá zero. O valor inicial do Registro de Endereço EEPROM (EEAR) é indefinido e um valor adequado deve, portanto, ser escrito antes que a EEPROM seja acessada.
EEARL – Registro de endereço EEPROM
Pedaço
0x1E | EEAR7 | EEAR6 | EEAR5 | EEAR4 | EEAR3 | EEAR2 | EEAR1 | EEAR0 | EEARL |
Traseira/Escrita | Direito/Esquerdo | Direito/Esquerdo | Direito/Esquerdo | Direito/Esquerdo | Direito/Esquerdo | Direito/Esquerdo | Direito/Esquerdo | Direito/Esquerdo | |
Valor Inicial | X | X | X | X | X | X | X | X |
Bit 7 – EEAR7: Endereço EEPROM
Este é o bit de endereço EEPROM mais significativo do ATtiny45. Em dispositivos com menos EEPROM, ou seja, ATtiny25, este bit é reservado e sempre indicará zero. O valor inicial do EEPROM Address Register (EEAR) é indefinido e um valor adequado deve, portanto, ser escrito antes que a EEPROM seja acessada.
Bits 6:0 – EEAR[6:0]: Endereço EEPROM
Estes são os bits (baixos) do registrador de endereços EEPROM. Os bytes de dados EEPROM são endereçados linearmente no intervalo 0…(128/256/512-1). O valor inicial de EEAR é indefinido e, portanto, um valor adequado deve ser escrito antes que a EEPROM possa ser acessada.
EEDR – Registro de Dados EEPROM
Pedaço | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x1D | EEDR7 | EEDR6 | EEDR5 | EEDR4 | EEDR3 | EEDR2 | EEDR1 | EEDR0 | EEDR |
Ler/Escrever | Direito/Esquerdo | Direito/Esquerdo | Direito/Esquerdo | Direito/Esquerdo | Direito/Esquerdo | Direito/Esquerdo | Direito/Esquerdo | Direito/Esquerdo | |
Valor Inicial | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Para a operação de gravação na EEPROM, o Registrador EEDR contém os dados a serem gravados na EEPROM no endereço fornecido pelo Registrador EEAR. Para a operação de leitura da EEPROM, o EEDR contém os dados lidos do
EEPROM no endereço fornecido pela EEAR.
5.5.4 EECR – Registro de Controle EEPROM |
|||||||||
Bit 7 6 5 | 4 | 3 | 2 | 1 | 0 | ||||
0x1C – | – | EPPM1 | EPPM0 | ASSUSTADOR | EEMPE | EEPE | AQUI | EECR | |
Ler/Escrever R R R/W | Direito/Esquerdo | Direito/Esquerdo | Direito/Esquerdo | Direito/Esquerdo | Direito/Esquerdo | ||||
Valor inicial 0 0 X | X | 0 | 0 | X | 0 |
Bit 7 – Res: Bit Reservado
Este bit é reservado para uso futuro e sempre será lido como 0 em ATtiny25/45/85. Para compatibilidade com futuros dispositivos AVR, sempre escreva este bit como zero. Depois de ler, mascare essa parte.
Bit 6 – Res: Bit Reservado
Este bit é reservado no ATtiny25/45/85 e sempre será lido como zero.
Bits 5:4 – EEPM[1:0]: Bits do modo de programação EEPROM
A configuração dos bits do modo de programação EEPROM define qual ação de programação será acionada ao escrever EEPE. É possível programar dados em uma operação atômica (apagar o valor antigo e programar o novo valor) ou dividir as operações Apagar e Escrever em duas operações diferentes. Os tempos de programação para os diferentes modos são mostrados em Tabela 5-1. Enquanto o EEPE estiver definido, qualquer gravação no EEPMn será ignorada. Durante a reinicialização, os bits EEPMn serão redefinidos para 0b00, a menos que a EEPROM esteja ocupada com programação.
Tabela 5-1. Bits de modo EEPROM
EPPM1 | EPPM0 | Tempo de programação | Operação |
0 | 0 | 3.4ms | Apagar e escrever em uma operação (operação atômica) |
0 | 1 | 1.8ms | Apagar apenas |
1 | 0 | 1.8ms | Somente escrita |
1 | 1 | – | Reservado para uso futuro |
Bit 3 – EERIE: Habilitação de interrupção pronta para EEPROM
Escrever EERIE em um habilita a interrupção pronta da EEPROM se o bit I no SREG estiver definido. Escrever EERIE em zero desativa a interrupção. A EEPROM Ready Interrupt gera uma interrupção constante quando a memória não volátil está pronta para programação.
Bit 2 – EEMPE: Habilitação do Programa Mestre EEPROM
O bit EEMPE determina se a gravação de EEPE em um terá efeito ou não.
Quando o EEMPE é definido, definir o EEPE dentro de quatro ciclos de clock programará a EEPROM no endereço selecionado. Se EEMPE for zero, definir EEPE não terá efeito. Quando o EEMPE é gravado em um por software, o hardware zera o bit após quatro ciclos de clock.
Bit 1 – EEPE: Habilitação do Programa EEPROM
O sinal de habilitação do programa EEPROM EEPE é o sinal de habilitação de programação para a EEPROM. Quando o EEPE é escrito, a EEPROM será programada de acordo com a configuração dos bits EEPMn. O bit EEMPE deve ser gravado em um antes que um bit lógico seja gravado no EEPE, caso contrário, nenhuma gravação na EEPROM ocorrerá. Quando o tempo de acesso de gravação tiver decorrido, o bit EEPE é apagado pelo hardware. Quando o EEPE é definido, a CPU é parada por dois ciclos antes da próxima instrução ser executada.
Bit 0 – EERE: Habilitação de leitura de EEPROM
O sinal de habilitação de leitura da EEPROM – EERE – é o estroboscópio de leitura da EEPROM. Quando o endereço correto é configurado no registro EEAR, o bit EERE deve ser escrito em um para acionar a leitura da EEPROM. O acesso de leitura da EEPROM requer uma instrução e os dados solicitados ficam disponíveis imediatamente. Quando a EEPROM é lida, a CPU é parada por quatro ciclos antes da próxima instrução ser executada. O usuário deve pesquisar o bit EEPE antes de iniciar a operação de leitura. Se uma operação de escrita estiver em andamento, não é possível ler a EEPROM, nem alterar o registro EEAR.
Relógio do sistema e opções de relógio
Sistemas de relógio e sua distribuição
CPU Clock
O clock da CPU é roteado para partes do sistema relacionadas à operação do núcleo do AVR. ExampOs arquivos de tais módulos são o Registro de Uso Geral File, o registrador de status e a memória de dados que contém o Stack Pointer. Interromper o clock da CPU inibe o núcleo de realizar operações e cálculos gerais.
Relógio de E/S – clkI/O
O relógio de E/S é usado pela maioria dos módulos de E/S, como Timer/Counter. O relógio de E/S também é usado pelo módulo de interrupção externa, mas observe que algumas interrupções externas são detectadas pela lógica assíncrona, permitindo que tais interrupções sejam detectadas mesmo se o relógio de E/S for interrompido.
Relógio Flash – clkFLASH
O relógio Flash controla a operação da interface Flash. O clock do Flash geralmente está ativo simultaneamente com o clock da CPU.
Relógio ADC – clkADC
O ADC é fornecido com um domínio de relógio dedicado. Isso permite interromper os relógios da CPU e de E/S para reduzir o ruído gerado pelos circuitos digitais. Isso fornece resultados de conversão ADC mais precisos.
PLL interno para geração rápida de relógio periférico – clkPCK
O PLL interno em ATtiny25/45/85 gera uma frequência de clock que é 8x multiplicada a partir de uma entrada de fonte. Por padrão, o PLL usa a saída do oscilador RC interno de 8.0 MHz como fonte. Alternativamente, se o bit LSM do PLLCSR estiver definido, o PLL usará a saída do oscilador RC dividida por dois. Assim na saída do PLL, o clock periférico rápido é de 64 MHz. O relógio periférico rápido, ou um relógio pré-escalado a partir dele, pode ser selecionado como fonte de relógio para Timer/Counter1 ou como relógio do sistema. Ver Figura 6-2. A frequência do clock periférico rápido é dividida por dois quando o LSM do PLLCSR é definido, resultando em uma frequência de clock de 32 MHz. Observe que o LSM não pode ser definido se PLLCLK for usado como relógio do sistema.
Figura 6-2. Sistema de relógio PCK.
O PLL está travado no oscilador RC e ajustar o oscilador RC via registro OSCCAL ajustará o relógio periférico rápido ao mesmo tempo. Contudo, mesmo que o oscilador RC seja levado a uma frequência superior a 8 MHz, a frequência rápida do relógio periférico satura a 85 MHz (pior caso) e permanece oscilando na frequência máxima. Deve-se notar que o PLL neste caso não está mais travado com o relógio do oscilador RC. Portanto, recomenda-se não levar os ajustes do OSCCAL para uma frequência superior a 8 MHz para manter o PLL na faixa correta de operação.
O PLL interno é habilitado quando:
O bit PLLE no registrador PLLCSR é setado.
O fusível CKSEL está programado para ‘0001’.
O fusível CKSEL está programado para ‘0011’.
O bit PLLCSR PLOCK é definido quando o PLL está bloqueado. Tanto o oscilador RC interno quanto o PLL são desligados nos modos de desligamento e espera.
PLL interno no modo de compatibilidade ATtiny15
Como o ATtiny25/45/85 é um dispositivo de migração para usuários do ATtiny15, existe um modo de compatibilidade do ATtiny15 para compatibilidade com versões anteriores. O modo de compatibilidade ATtiny15 é selecionado programando os fusíveis CKSEL para '0011'.
No modo de compatibilidade ATtiny15, a frequência do oscilador RC interno é calibrada para 6.4 MHz e o fator de multiplicação do PLL é definido para 4x. Ver Figura 6-3. Com esses ajustes, o sistema de clock é compatível com ATtiny15 e o rápido clock periférico resultante tem uma frequência de 25.6 MHz (igual ao ATtiny15).
Figura 6-3. Sistema de clock PCK no modo de compatibilidade ATtiny15.
Fontes de relógio
O dispositivo possui as seguintes opções de fonte de clock, selecionáveis pelos bits Flash Fuse conforme mostrado abaixo. O relógio da fonte selecionada é inserido no gerador de relógio AVR e roteado para os módulos apropriados.
Tabela 6-1. Selecionar opções de relógio do dispositivo
Opção de relógio do dispositivo | CKSEL[3:0](1) |
Relógio externo (ver página 26) | 0000 |
Relógio PLL de alta frequência (ver página 26) | 0001 |
Oscilador interno calibrado (ver página 27) | 0010(2) |
Oscilador interno calibrado (ver página 27) | 0011(3) |
Oscilador interno de 128 kHz (ver página 28) | 0100 |
Oscilador de cristal de baixa frequência (ver página 29) | 0110 |
Oscilador de Cristal / Ressonador Cerâmico (ver página 29) | 1000 – 1111 |
Reservado | 0101, 0111 |
Para todos os fusíveis “1” significa não programado enquanto “0” significa programado.
O dispositivo é enviado com esta opção selecionada.
Isto selecionará o modo de compatibilidade ATtiny15, onde o clock do sistema é dividido por quatro, resultando em uma frequência de clock de 1.6 MHz. Para mais informações, consulte “Oscilador interno calibrado” na página 27.
As várias opções para cada opção de clock são fornecidas nas seções a seguir. Quando a CPU acorda do desligamento, a fonte de clock selecionada é usada para cronometrar a inicialização, garantindo a operação estável do oscilador antes do início da execução da instrução. Quando a CPU inicia a reinicialização, há um atraso adicional permitindo que a energia atinja um nível estável antes de iniciar a operação normal. O Watchdog Oscillator é usado para cronometrar esta parte em tempo real do tempo de inicialização. O número de ciclos do oscilador WDT usados para cada tempo limite é mostrado em Tabela 6-2.
Tabela 6-2. Número de ciclos do oscilador Watchdog
Digite Tempo Limite | Número de ciclos |
4ms | 512 |
64ms | 8K (8,192) |
Relógio externo
Para acionar o dispositivo a partir de uma fonte de relógio externa, o CLKI deve ser acionado conforme mostrado em Figura 6-4. Para operar o dispositivo em um relógio externo, os fusíveis CKSEL devem ser programados para “00”.
Figura 6-4. Configuração da unidade de relógio externo
Quando esta fonte de relógio é selecionada, os tempos de inicialização são determinados pelos fusíveis SUT, conforme mostrado em Tabela 6-3.
Tabela 6-3. Tempos de inicialização para seleção do relógio externo
SUT[1:0] | Tempo de inicialização após desligamento | Atraso adicional na reinicialização | Uso recomendado |
00 | 6 CK | 14CK | DBO ativado |
01 | 6 CK | 14CK + 4ms | Potência em rápido crescimento |
10 | 6 CK | 14CK + 64ms | Potência aumentando lentamente |
11 | Reservado |
Ao aplicar um relógio externo, é necessário evitar mudanças repentinas na frequência do relógio aplicada para garantir a operação estável do MCU. Uma variação na frequência de mais de 2% de um ciclo de clock para o próximo pode levar a um comportamento imprevisível. É necessário garantir que o MCU seja mantido em Reset durante tais alterações na frequência do clock.
Observe que a pré-venda do relógio do sistema pode ser usada para implementar alterações em tempo de execução da frequência do relógio interno, garantindo ao mesmo tempo uma operação estável. Referir-se “Pré-escala do relógio do sistema” na página 31 para mais detalhes.
Relógio PLL de alta frequência
Há um PLL interno que fornece clock nominal de 64 MHz bloqueado para o oscilador RC para uso do temporizador/contador periférico1 e para a fonte de clock do sistema. Quando selecionado como fonte de relógio do sistema, programando os fusíveis CKSEL para ‘0001’, ele é dividido por quatro como mostrado na Tabela 6-4.
Tabela 6-4. Modos de operação do relógio PLL de alta frequência
CKSEL[3:0] | Frequência Nominal |
0001 | 16 MHz |
Quando esta fonte de relógio é selecionada, os tempos de inicialização são determinados pelos fusíveis SUT, conforme mostrado na Tabela 6-5.
Tabela 6-5. Tempos de inicialização para o relógio PLL de alta frequência
SUT[1:0] | Tempo de inicialização após desligamento | Atraso adicional na reinicialização da inicialização (VCC = 5.0 V) | Uso recomendado |
00 | 14CK + 1K (1024) CK + 4ms | 4ms | DBO ativado |
Tabela 6-5. Tempos de inicialização para o relógio PLL de alta frequência
SUT[1:0] | Tempo de inicialização após desligamento | Atraso adicional na reinicialização da inicialização (VCC = 5.0 V) | Uso recomendado |
01 | 14CK + 16K (16384) CK + 4ms | 4ms | Potência em rápido crescimento |
10 | 14CK + 1K (1024) CK + 64ms | 4ms | Potência aumentando lentamente |
11 | 14CK + 16K (16384) CK + 64ms | 4ms | Potência aumentando lentamente |
Oscilador interno calibrado
Por padrão, o oscilador RC interno fornece um clock aproximado de 8.0 MHz. Embora vol.tagDependendo da temperatura, este relógio pode ser calibrado com muita precisão pelo usuário. Ver “Acumulação do Oscilador RC Interno Calibrado atrevido” na página 164 e “Velocidade do oscilador interno” na página 192 para mais detalhes. O dispositivo é enviado com o fusível CKDIV8 programado. Ver “Pré-escala do relógio do sistema” na página 31 para mais detalhes.
Este relógio pode ser selecionado como relógio do sistema programando os fusíveis CKSEL conforme mostrado na Tabela 6-6 na página
27. Se selecionado, funcionará sem componentes externos. Durante a reinicialização, o hardware carrega o valor de calibração pré-programado no registro OSCCAL e, assim, calibra automaticamente o oscilador RC. A precisão desta calibração é mostrada como calibração de fábrica em Tabela 21-2 na página 164.
Alterando o registro OSCCAL de SW, consulte “OSCCAL – Registro de Calibração do Oscilador” na página 31, é possível obter uma precisão de calibração maior do que usando a calibração de fábrica. A precisão desta calibração é mostrada como calibração do usuário em Tabela 21-2 na página 164.
Quando este oscilador é usado como clock do chip, o oscilador Watchdog ainda será usado para o Watchdog Timer e para o Reset Time-out. Para mais informações sobre o valor de calibração pré-programado, consulte a seção “Cali- Bytes de bração” na página 150.
O oscilador interno também pode ser configurado para fornecer um clock de 6.4 MHz gravando os fusíveis CKSEL em “0011”, conforme mostrado na Tabela 6-6 abaixo. Esta configuração é chamada de Modo de Compatibilidade ATtiny15 e tem como objetivo fornecer uma fonte de clock calibrada em 6.4 MHz, como em ATtiny15. No modo de compatibilidade ATtiny15, o PLL usa o oscilador interno rodando a 6.4 MHz para gerar um sinal de clock periférico de 25.6 MHz para o temporizador/contador1 (consulte “Temporizador/contador de 8 bits1 em Modo ATtiny15” na página 95). Observe que neste modo de operação o sinal de clock de 6.4 MHz é sempre dividido por quatro, proporcionando um clock de sistema de 1.6 MHz.
Tabela 6-6. Modos de operação do oscilador RC calibrado internamente
CKSEL[3:0] | Frequência Nominal |
0010(1) | 8.0 MHz |
0011(2) | 6.4 MHz |
O dispositivo é enviado com esta opção selecionada.
Esta configuração selecionará o modo de compatibilidade ATtiny15, onde o clock do sistema é dividido por quatro, resultando em uma frequência de clock de 1.6 MHz.
Quando o oscilador interno calibrado de 8 MHz é selecionado como fonte de clock, os tempos de inicialização são determinados pelos fusíveis SUT, conforme mostrado em Tabela 6-7 abaixo.
Tabela 6-7. Tempos de inicialização para relógio oscilador RC calibrado internamente
SUT[1:0] | Tempo de inicialização após desligamento | Atraso adicional na reinicialização (VCC = 5.0 V) | Uso recomendado |
00 | 6 CK | 14CK(1) | DBO ativado |
01 | 6 CK | 14CK + 4ms | Potência em rápido crescimento |
10(2) | 6 CK | 14CK + 64ms | Potência aumentando lentamente |
11 | Reservado |
1. Se o fusível RSTDISBL estiver programado, este tempo de inicialização será aumentado para 14CK + 4 ms para garantir que o modo de programação possa ser inserido.
2. O dispositivo é enviado com esta opção selecionada.
No modo de compatibilidade ATtiny15, os tempos de inicialização são determinados pelos fusíveis SUT, conforme mostrado em Tabela 6-8 abaixo.
Tabela 6-8. Tempos de inicialização para relógio oscilador RC calibrado internamente (no modo ATtiny15)
SUT[1:0] | Tempo de inicialização após desligamento | Atraso adicional na reinicialização (VCC = 5.0 V) | Uso recomendado |
00 | 6 CK | 14CK + 64ms | |
01 | 6 CK | 14CK + 64ms | |
10 | 6 CK | 14CK + 4ms | |
11 | 1 CK | 14CK(1) |
Observação: Se o fusível RSTDISBL estiver programado, esse tempo de inicialização será aumentado para 14CK + 4 ms para garantir que o modo de programação possa ser inserido.
Em resumo, mais informações sobre o modo de compatibilidade ATtiny15 podem ser encontradas nas seções “Porta B (PB5:PB0)” ligado página 2, “PLL interno no modo de compatibilidade ATtiny15” na página 24, “Temporizador/Contador8 de 1 bits no modo ATtiny15” ativado página 95, “Limitações do debugWIRE” na página 140, “Bytes de calibração” na página 150 e na mesa “Prescaler de relógio Selecione” na página 33.
Oscilador interno de 128 kHz
O oscilador interno de 128 kHz é um oscilador de baixa potência que fornece um clock de 128 kHz. A frequência é nominal em 3V e 25°C. Este relógio pode ser selecionado como relógio do sistema programando os fusíveis CKSEL para “0100”.
Quando esta fonte de relógio é selecionada, os tempos de inicialização são determinados pelos fusíveis SUT, conforme mostrado em Tabela 6-9.
Tabela 6-9. Tempos de inicialização para o oscilador interno de 128 kHz
SUT[1:0] | Tempo de inicialização após desligamento | Atraso adicional na reinicialização | Uso recomendado |
00 | 6 CK | 14CK(1) | DBO ativado |
01 | 6 CK | 14CK + 4ms | Potência em rápido crescimento |
10 | 6 CK | 14CK + 64ms | Potência aumentando lentamente |
11 | Reservado |
Observação: Se o fusível RSTDISBL estiver programado, esse tempo de inicialização será aumentado para 14CK + 4 ms para garantir que o modo de programação possa ser inserido.
Oscilador de cristal de baixa frequência
Para usar um cristal de relógio de 32.768 kHz como fonte de relógio para o dispositivo, o oscilador de cristal de baixa frequência deve ser selecionado configurando os fusíveis CKSEL para ‘0110’. O cristal deve ser conectado conforme mostrado em Figura 6-5. Para encontrar a capacitância de carga adequada para um cristal de 32.768 kHz, consulte a folha de dados do fabricante.
Quando este oscilador é selecionado, os tempos de inicialização são determinados pelos fusíveis do SUT, conforme mostrado na Tabela 6-10.
Tabela 6-10. Tempos de inicialização para seleção do relógio do oscilador de cristal de baixa frequência
SUT[1:0] | Tempo de inicialização após desligamento | Atraso adicional na reinicialização (VCC = 5.0 V) | Uso recomendado |
00 | 1K (1024) CC(1) | 4ms | Potência de aumento rápido ou BOD habilitado |
01 | 1K (1024) CC(1) | 64ms | Potência aumentando lentamente |
10 | 32K (32768) CC | 64ms | Frequência estável na inicialização |
11 | Reservado |
Nota: Estas opções devem ser usadas somente se a estabilidade da frequência na partida não for importante.
O oscilador de cristal de baixa frequência fornece uma capacitância de carga interna, consulte Tabela 6-11 em cada pino TOSC.
Tabela 6-11. Capacitância do oscilador de cristal de baixa frequência
Dispositivo | 32kHz Osc. Tipo | Tampa (Xtal1/Tosc1) | Tampa (Xtal2/Tosc2) |
ATtiny25/45/85 | Sistema Osc. | 16 pF | 6 pF |
Oscilador de Cristal / Ressonador Cerâmico
XTAL1 e XTAL2 são entrada e saída, respectivamente, de um inversor amplificador que pode ser configurado para uso como um oscilador no chip, conforme mostrado em Figura 6-5. Pode ser usado um cristal de quartzo ou um ressonador cerâmico.
C1 e C2 devem ser sempre iguais para cristais e ressonadores. O valor ideal dos capacitores depende do cristal ou ressonador em uso, da quantidade de capacitância parasita e do ruído eletromagnético do ambiente. Algumas orientações iniciais para a escolha de capacitores para uso com cristais são fornecidas em Tabela 6-12 abaixo. Para ressonadores cerâmicos, devem ser utilizados os valores dos capacitores fornecidos pelo fabricante.
Tabela 6-12. Modos de operação do oscilador de cristal
CKSEL[3:1] | Faixa de Freqüência (MHz) | Faixa Recomendada para Capacitores C1 e C2 para Uso com Cristais (pF) |
100(1) | 0.4 – 0.9 | – |
101 | 0.9 – 3.0 | 12 – 22 |
110 | 3.0 – 8.0 | 12 – 22 |
111 | 8.0 – | 12 – 22 |
Observações: Esta opção não deve ser usada com cristais, apenas com ressonadores cerâmicos.
O oscilador pode operar em três modos diferentes, cada um otimizado para uma faixa de frequência específica. O modo de operação é selecionado pelos fusíveis CKSEL[3:1] conforme mostrado na Tabela 6-12.
O fusível CKSEL0 junto com os fusíveis SUT[1:0] selecionam os tempos de inicialização conforme mostrado em Tabela 6-13.
Tabela 6-13. Tempos de inicialização para seleção do relógio do oscilador de cristal
CKSEL0 | SUT[1:0] | Tempo de inicialização após desligamento | Atraso adicional na reinicialização | Uso recomendado |
0 | 00 | 258 CK(1) | 14CK + 4ms | Ressonador cerâmico, potência de aumento rápido |
0 | 01 | 258 CK(1) | 14CK + 64ms | Ressonador cerâmico, aumentando lentamente a potência |
0 | 10 | 1K (1024) CC(2) | 14CK | Ressonador cerâmico, BOD habilitado |
0 | 11 | 1K (1024)CK(2) | 14CK + 4ms | Ressonador cerâmico, potência de aumento rápido |
1 | 00 | 1K (1024)CK(2) | 14CK + 64ms | Ressonador cerâmico, aumentando lentamente a potência |
1 | 01 | 16K (16384) CC | 14CK | Oscilador de cristal, BOD habilitado |
1 | 10 | 16K (16384) CC | 14CK + 4ms | Oscilador de cristal, potência de aumento rápido |
1 | 11 | 16K (16384) CC | 14CK + 64ms | Oscilador de cristal, aumentando lentamente a potência |
Notas
Essas opções só devem ser usadas quando não estiver operando próximo à frequência máxima do dispositivo e somente se a estabilidade da frequência na inicialização não for importante para a aplicação. Estas opções não são adequadas para cristais.
Estas opções destinam-se ao uso com ressonadores cerâmicos e garantirão a estabilidade da frequência na inicialização. Eles também podem ser usados com cristais quando não estiverem operando perto da frequência máxima do dispositivo e se a estabilidade da frequência na inicialização não for importante para a aplicação.
Fonte de relógio padrão
O dispositivo é enviado com CKSEL = “0010”, SUT = “10” e CKDIV8 programados. A configuração padrão da fonte de clock é, portanto, o oscilador RC interno rodando a 8 MHz com o tempo de inicialização mais longo e uma pré-escala do clock inicial do sistema de 8, resultando em clock do sistema de 1.0 MHz. Esta configuração padrão garante que todos os usuários possam fazer a configuração desejada da fonte de relógio usando um In-System ou High-vol.tage Programador.
Pré-escalador de relógio do sistema
O relógio do sistema ATtiny25/45/85 pode ser dividido configurando o “CLKPR – Registro de pré-escala de relógio” na página 32. Este recurso pode ser usado para diminuir o consumo de energia quando a necessidade de poder de processamento for baixa. Isso pode ser usado com todas as opções de fonte de clock e afetará a frequência de clock da CPU e de todos os periféricos síncronos. clkI/O, clkADC, clkCPU e clkFLASH são divididos por um fator, conforme mostrado em Tabela 6-15 na página 33.
Tempo de comutação
Ao alternar entre as configurações do prescaler, o System Clock Prescaler garante que nenhuma falha ocorra no sistema de relógio e que nenhuma frequência intermediária seja superior à frequência do clock correspondente à configuração anterior, nem à frequência do clock correspondente à nova configuração.
O contador de ondulação que implementa o prescaler funciona na frequência do clock indiviso, que pode ser mais rápida que a frequência do clock da CPU. Conseqüentemente, não é possível determinar o estado do prescaler – mesmo que fosse legível, e o tempo exato que leva para mudar de uma divisão de relógio para outra não pode ser previsto com exatidão.
A partir do momento em que os valores CLKPS são escritos, leva entre T1 + T2 e T1 + 2*T2 antes que a nova frequência de clock esteja ativa. Neste intervalo, são produzidas 2 arestas de clock ativas. Aqui, T1 é o período de clock anterior e T2 é o período correspondente à nova configuração do prescaler.
Buffer de saída de relógio
O dispositivo pode gerar o relógio do sistema no pino CLKO (quando não usado como pino XTAL2). Para habilitar a saída, o Fusível CKOUT deve ser programado. Este modo é adequado quando o clock do chip é usado para acionar outros circuitos no sistema. Observe que o relógio não será emitido durante o reset e que a operação normal do pino de E/S será anulada quando o fusível for programado. Oscilador RC interno, oscilador WDT, PLL e relógio externo (CLKI) podem ser selecionados quando o relógio é emitido em CLKO. Osciladores de cristal (XTAL1, XTAL2) não podem ser usados para saída de clock em CLKO. Se o System Clock Prescaler for usado, o clock do sistema dividido será gerado.
Descrição do Registro
OSCCAL – Registro de Calibração do Oscilador
Pedaço | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x31 | CAL7 | CAL6 | CAL5 | CAL4 | CAL3 | CAL2 | CAL1 | CAL0 | OSCCAL |
Ler/Escrever | Direito/Esquerdo | Direito/Esquerdo | Direito/Esquerdo | Direito/Esquerdo | Direito/Esquerdo | Direito/Esquerdo | Direito/Esquerdo | Direito/Esquerdo |
Bits 7:0 – CAL[7:0]: Valor de calibração do oscilador
O Registro de Calibração do Oscilador é usado para ajustar o Oscilador RC Interno Calibrado para remover variações do processo da frequência do oscilador. Um valor de calibração pré-programado é gravado automaticamente neste registro durante a reinicialização do chip, fornecendo a frequência calibrada de fábrica conforme especificado em Tabela 21-2 na página 164. O software aplicativo pode escrever este registro para alterar a frequência do oscilador. O oscilador pode ser calibrado para frequências conforme especificado em Tabela 21-2 na página 164. A calibração fora dessa faixa não é garantida.
Observe que este oscilador é usado para cronometrar acessos de gravação EEPROM e Flash, e esses tempos de gravação serão afetados de acordo. Se a EEPROM ou Flash estiver gravada, não calibre para mais de 8.8 MHz. Caso contrário, a gravação na EEPROM ou Flash poderá falhar.
O bit CAL7 determina a faixa de operação do oscilador. Definir este bit como 0 fornece a faixa de frequência mais baixa, definir este bit como 1 fornece a faixa de frequência mais alta. As duas faixas de frequência se sobrepõem, ou seja, um ajuste de OSCCAL = 0x7F fornece uma frequência mais alta que OSCCAL = 0x80.
Os bits CAL[6:0] são usados para sintonizar a frequência dentro da faixa selecionada. Uma configuração de 0x00 fornece a frequência mais baixa nessa faixa, e uma configuração de 0x7F fornece a frequência mais alta da faixa.
Para garantir a operação estável do MCU, o valor de calibração deve ser alterado em pequeno. Uma variação na frequência superior a 2% de um ciclo para o outro pode levar a um comportamento imprevisível. As alterações no OSCCAL não devem exceder 0x20 para cada calibração. É necessário garantir que o MCU seja mantido em Reset durante tais mudanças na frequência do clock
Tabela 6-14. Faixa de frequência do oscilador RC interno
Valor OSCCAL | Frequência mais baixa típica em relação à frequência nominal | Frequência mais alta típica em relação à frequência nominal |
0x00 | 50% | 100% |
0x3F | 75% | 150% |
0x7F | 100% | 200% |
CLKPR – Registro de pré-escala de relógio
Pedaço | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x26 | CLKPCE | – | – | – | CLKPS3 | CLKPS2 | CLKPS1 | CLKPS0 | CLKPR |
Ler/Escrever | Direito/Esquerdo | R | R | R | Direito/Esquerdo | Direito/Esquerdo | Direito/Esquerdo | Direito/Esquerdo |
Valor inicial 0 0 0 0 Ver descrição do bit
Bit 7 – CLKPCE: Habilitação de alteração do pré-escalador de relógio
O bit CLKPCE deve ser escrito na lógica um para permitir a alteração dos bits CLKPS. O bit CLKPCE só é atualizado quando os demais bits do CLKPR são escritos simultaneamente em zero. CLKPCE é limpo pelo hardware quatro ciclos após ser escrito ou quando os bits CLKPS são escritos. Reescrever o bit CLKPCE dentro deste período de tempo limite não estende o período de tempo limite nem limpa o bit CLKPCE.
Bits 6:4 – Res: Bits Reservados
Esses bits são bits reservados no ATtiny25/45/85 e sempre serão lidos como zero.
Bits 3:0 – CLKPS[3:0]: Bits de seleção do pré-escalador de relógio 3 – 0
Esses bits definem o fator de divisão entre a fonte de clock selecionada e o clock interno do sistema. Esses bits podem ser escritos em tempo de execução para variar a frequência do clock de acordo com os requisitos da aplicação. À medida que o divisor divide a entrada do clock mestre para o MCU, a velocidade de todos os periféricos síncronos é reduzida quando um fator de divisão é usado. Os fatores de divisão são dados em Tabela 6-15.
Para evitar alterações não intencionais na frequência do clock, um procedimento especial de gravação deve ser seguido para alterar os bits CLKPS:
Grave o bit Clock Prescaler Change Enable (CLKPCE) em um e todos os outros bits em CLKPR em zero.
Dentro de quatro ciclos, escreva o valor desejado em CLKPS enquanto escreve um zero em CLKPCE.
As interrupções devem ser desativadas ao alterar a configuração do prescaler para garantir que o procedimento de gravação não seja interrompido.
O fusível CKDIV8 determina o valor inicial dos bits CLKPS. Se CKDIV8 não for programado, os bits CLKPS serão redefinidos para “0000”. Se CKDIV8 for programado, os bits CLKPS serão redefinidos para “0011”, fornecendo um fator de divisão de oito na inicialização. Este recurso deve ser usado se a fonte de clock selecionada tiver uma frequência maior que a frequência máxima do dispositivo nas atuais condições de operação. Observe que qualquer valor pode ser gravado nos bits CLKPS, independentemente da configuração do fusível CKDIV8. O software aplicativo deve garantir que um fator de divisão suficiente seja
escolhido se a fonte de relógio selecionada tiver uma frequência maior que a frequência máxima do dispositivo nas atuais condições de operação. O dispositivo é enviado com o fusível CKDIV8 programado.
Tabela 6-15. Seleção do pré-escalador de relógio
CLKPS3 | CLKPS2 | CLKPS1 | CLKPS0 | Fator de Divisão do Relógio |
0 | 0 | 0 | 0 | 1 |
0 | 0 | 0 | 1 | 2 |
0 | 0 | 1 | 0 | 4 |
0 | 0 | 1 | 1 | 8 |
0 | 1 | 0 | 0 | 16 |
0 | 1 | 0 | 1 | 32 |
0 | 1 | 1 | 0 | 64 |
0 | 1 | 1 | 1 | 128 |
1 | 0 | 0 | 0 | 256 |
1 | 0 | 0 | 1 | Reservado |
1 | 0 | 1 | 0 | Reservado |
1 | 0 | 1 | 1 | Reservado |
1 | 1 | 0 | 0 | Reservado |
1 | 1 | 0 | 1 | Reservado |
1 | 1 | 1 | 0 | Reservado |
1 | 1 | 1 | 1 | Reservado |
Nota: O prescaler está desabilitado no modo de compatibilidade ATtiny15 e nem a gravação no CLKPR, nem a programação do fusível CKDIV8 têm qualquer efeito no clock do sistema (que será sempre 1.6 MHz).
Gerenciamento de energia e modos de suspensão
O alto desempenho e a eficiência de código líder do setor tornam os microcontroladores AVR a escolha ideal para aplicações de baixo consumo de energia. Além disso, os modos de suspensão permitem que o aplicativo desligue módulos não utilizados no MCU, economizando energia. O AVR oferece vários modos de suspensão que permitem ao usuário adaptar o consumo de energia aos requisitos da aplicação.
Modos de dormir
Figura 6-1 na página 23 apresenta os diferentes sistemas de relógio e sua distribuição em ATtiny25/45/85. A figura é útil na seleção de um modo de suspensão apropriado. Tabela 7-1 mostra os diferentes modos de suspensão e suas fontes de despertar.
Tabela 7-1. Domínios de relógio ativos e fontes de despertar nos diferentes modos de suspensão
Domínios de relógio ativos | Osciladores | Fontes de despertar | ||||||||||
Modo de suspensão | clkCPU | clkFLASH | clkIO | clkADC | clkPCK | Fonte do relógio principal habilitada | INT0 e mudança de pino | SPM/EEPROM
Preparar |
Condição inicial do USI |
ADC | Outras E/S | Cão de guarda Interromper |
Parado | X | X | X | X | X | X | X | X | X | X | ||
Redução de ruído ADC | X | X | X(1) | X | X | X | X | |||||
Desligar | X(1) | X | X |
Nota: Para INT0, somente interrupção de nível.
Para entrar em qualquer um dos três modos de suspensão, o bit SE no MCUCR deve ser escrito na lógica um e uma instrução SLEEP deve ser executada. Os bits SM[1:0] no registro MCUCR selecionam qual modo de suspensão (Idle, ADC Noise Reduction ou Power-down) será ativado pela instrução SLEEP. Ver Tabela 7-2 para um resumo.
Se ocorrer uma interrupção habilitada enquanto o MCU estiver no modo de suspensão, o MCU será ativado. O MCU é então interrompido por quatro ciclos além do tempo de inicialização, executa a rotina de interrupção e retoma a execução da instrução após SLEEP. O conteúdo do Registro File e SRAM permanecem inalterados quando o dispositivo sai do modo de suspensão. Se ocorrer uma redefinição durante o modo de suspensão, o MCU acorda e executa a partir do vetor de redefinição.
Nota: se uma interrupção acionada por nível for usada para ativação, o nível alterado deverá ser mantido por algum tempo para ativar o MCU (e para que o MCU entre na rotina de serviço de interrupção). Ver “Interrupções Externas” na página 49 para mais detalhes.
Modo Inativo
Quando os bits SM[1:0] são escritos em 00, a instrução SLEEP faz o MCU entrar no modo Idle, parando a CPU, mas permitindo que o Comparador Analógico, ADC, USI, Temporizador/Contador, Watchdog e o sistema de interrupção continuem operando. comendo. Esse modo de suspensão basicamente interrompe o clkCPU e o clkFLASH, enquanto permite a execução de outros relógios.
O modo inativo permite que o MCU acorde de interrupções acionadas externas, bem como de interrupções internas, como o Timer Overflow. Se a ativação da interrupção do Comparador Analógico não for necessária, o Comparador Analógico pode ser desligado configurando o bit ACD em “ACSR – Registro de Controle e Status do Comparador Analógico” na página 120. Isto reduzirá o consumo de energia no modo Inativo. Se o ADC estiver habilitado, uma conversão será iniciada automaticamente quando este modo for inserido.
Modo de redução de ruído ADC
Quando os bits SM[1:0] são gravados em 01, a instrução SLEEP faz o MCU entrar no modo de redução de ruído ADC, parando a CPU, mas permitindo que o ADC, as interrupções externas e o Watchdog continuem operando (se habilitado). Este modo de suspensão interrompe clkI/O, clkCPU e clkFLASH, enquanto permite que outros relógios sejam executados.
Isso melhora o ambiente de ruído para o ADC, permitindo medições de maior resolução. Se o ADC estiver habilitado, uma conversão será iniciada automaticamente quando este modo for inserido. Além da interrupção completa de conversão ADC, apenas uma reinicialização externa, uma reinicialização de watchdog, uma reinicialização de brown-out, uma interrupção pronta para SPM/EEPROM, uma interrupção de nível externo em INT0 ou uma interrupção de mudança de pino podem ativar o MCU da redução de ruído ADC modo.
Modo de desligamento
Quando os bits SM[1:0] são gravados em 10, a instrução SLEEP faz o MCU entrar no modo Power-down. Neste modo, o oscilador é parado, enquanto as interrupções externas, a detecção da condição de início do USI e o Watchdog continuam operando (se habilitado). Somente uma reinicialização externa, uma reinicialização de watchdog, uma reinicialização de brown-out, uma interrupção de condição de inicialização USI, uma interrupção de nível externo em INT0 ou uma interrupção de mudança de pino podem ativar o MCU. Este modo de suspensão interrompe todos os relógios gerados, permitindo apenas a operação de módulos assíncronos.
Desativação de BOD de software
Quando o Detector de Brown-out (BOD) é habilitado pelos fusíveis BODLEVEL (ver Tabela 20-4 na página 148), o BOD está monitorando ativamente o volume de fornecimentotage durante um período de sono. Em alguns dispositivos é possível economizar energia desativando o BOD por software no modo de suspensão Power-Down. O consumo de energia no modo de suspensão estará então no mesmo nível de quando o BOD é desabilitado globalmente por fusíveis.
Se o BOD for desativado por software, a função BOD será desativada imediatamente após entrar no modo de suspensão. Ao acordar do sono, o BOD é automaticamente ativado novamente. Isso garante uma operação segura caso o nível de VCC caia durante o período de suspensão.
Quando o BOD for desabilitado, o horário de despertar do modo sleep será o mesmo do despertar do RESET. O usuário deve configurar manualmente os horários de ativação para que a referência bandgap tenha tempo de iniciar e o BOD esteja funcionando corretamente antes que o MCU continue executando o código. Consulte os bits de fusíveis SUT[1:0] e CKSEL[3:0] na tabela “Byte baixo do fusível” na página 149
A desativação do BOD é controlada pelo bit BODS (BOD Sleep) do MCU Control Register, consulte “MCUCR – Controle MCU Cadastre-se” na página 37. Escrever este bit em um desativa o BOD no Power-Down, enquanto escrever um zero mantém o BOD ativo. A configuração padrão é zero, ou seja, BOD ativo.
A escrita no bit BODS é controlada por uma sequência temporizada e um bit de habilitação, consulte “MCUCR – Registro de Controle MCU ter” na página 37.
Limitações
A funcionalidade de desativação de BOD foi implementada apenas nos seguintes dispositivos:
ATtiny25, revisão E e mais recente
ATtiny45, revisão D e mais recente
ATtiny85, revisão C e mais recente
As revisões estão marcadas na embalagem do dispositivo e podem ser localizadas da seguinte forma:
Lado inferior dos pacotes 8P3 e 8S2
Parte superior da embalagem 20M1
Registro de redução de potência
O Registro de Redução de Potência (PRR), consulte “PRR – Registro de Redução de Potência” na página 38, fornece um método para reduzir o consumo de energia, parando o relógio de periféricos individuais. O estado atual do periférico está congelado e os registros de E/S não podem ser lidos ou gravados. Os recursos utilizados pelo periférico ao parar o relógio permanecerão ocupados, portanto, na maioria dos casos, o periférico deve ser desabilitado antes de parar o relógio. A ativação de um módulo, o que é feito limpando o bit em PRR, coloca o módulo no mesmo estado de antes do desligamento.
O desligamento do módulo pode ser usado no modo Inativo e no modo Ativo para reduzir significativamente o consumo geral de energia. Em todos os outros modos de suspensão, o relógio já está parado. Ver “Corrente de alimentação dos módulos de E/S” na página 177 por examples.
Minimizando o consumo de energia
Há diversas questões a serem consideradas ao tentar minimizar o consumo de energia em um sistema controlado por AVR. Em geral, os modos de suspensão devem ser usados tanto quanto possível, e o modo de suspensão deve ser selecionado de modo que o mínimo possível de funções do dispositivo estejam em operação. Todas as funções não necessárias devem ser desativadas. Em particular, os seguintes módulos podem necessitar de consideração especial ao tentar atingir o menor consumo de energia possível.
Conversor analógico para digital
Se habilitado, o ADC será habilitado em todos os modos de suspensão. Para economizar energia, o ADC deve ser desativado antes de entrar em qualquer modo de suspensão. Quando o ADC for desligado e ligado novamente, a próxima conversão será uma conversão estendida. Referir-se “Conversor Analógico para Digital” na página 122 para obter detalhes sobre a operação do ADC.
Comparador Analógico
Ao entrar no modo Idle, o Comparador Analógico deverá ser desabilitado se não for utilizado. Ao entrar no modo de redução de ruído ADC, o comparador analógico deve ser desabilitado. Nos demais modos sleep, o Comparador Analógico é automaticamente desabilitado. No entanto, se o Comparador Analógico estiver configurado para usar o Vol Internotage Referência como entrada, o Comparador Analógico deverá ser desabilitado em todos os modos sleep. Caso contrário, o Vol Internotage A referência será habilitada, independente do modo sleep. Referir-se “Comparador Analógico” na página 119 para obter detalhes sobre como configurar o Comparador Analógico.
Detector de queda de energia
Se o Detector de Brown-out não for necessário na aplicação, este módulo deverá ser desligado. Se o Detector de Brown-out for habilitado pelos fusíveis BODLEVEL, ele será habilitado em todos os modos de hibernação e, portanto, sempre consumirá energia. Nos modos de suspensão mais profundos, isto contribuirá significativamente para o consumo total de corrente. Ver “Detecção de escurecimento ção” na página 41 e “Desativação de BOD de software” na página 35 para obter detalhes sobre como configurar o Detector de Brown-out.
Vol internotage Referência
O volume internotagA Referência será habilitada quando necessária pela Detecção de Brown-out, pelo Comparador Analógico ou pelo ADC. Se esses módulos forem desabilitados conforme descrito nas seções acima, o volume internotagA referência será desabilitada e não consumirá energia. Quando ligado novamente, o usuário deve permitir que a referência seja iniciada antes que a saída seja usada. Se a referência for mantida no modo sleep, a saída poderá ser usada imediatamente. Referir-se “Vol. Internotage Referência” na página 42 para obter detalhes sobre o horário de inicialização.
Temporizador de cão de guarda
Caso o Watchdog Timer não seja necessário na aplicação, este módulo deverá ser desligado. Se o Watchdog Timer estiver ativado, ele será ativado em todos os modos de suspensão e, portanto, sempre consumirá energia. Nos modos de suspensão mais profundos, isto contribuirá significativamente para o consumo total de corrente. Referir-se “Temporizador Watchdog” na página 42 para obter detalhes sobre como configurar o Watchdog Timer.
Pinos de porta
Ao entrar no modo de suspensão, todos os pinos da porta devem ser configurados para usar energia mínima. O mais importante é garantir que nenhum pino acione cargas resistivas. Nos modos de suspensão onde tanto o relógio de E/S (clkI/O) quanto o relógio ADC (clkADC) estão parados, os buffers de entrada do dispositivo serão desabilitados. Isso garante que nenhuma energia seja consumida
pela lógica de entrada quando não for necessário. Em alguns casos, a lógica de entrada é necessária para detectar condições de despertar, e
ele será então habilitado. Consulte a seção “Ativação de entrada digital e modos de suspensão” na página 57 para obter detalhes sobre quais pinos estão habilitados. Se o buffer de entrada estiver habilitado e o sinal de entrada permanecer flutuante ou tiver um nível de sinal analógico próximo a VCC/2, o buffer de entrada usará energia excessiva.
Para pinos de entrada analógica, o buffer de entrada digital deve estar sempre desabilitado. Um nível de sinal analógico próximo a VCC/2 em um pino de entrada pode causar corrente significativa mesmo no modo ativo. Os buffers de entrada digital podem ser desabilitados gravando no Registro de Desativação de Entrada Digital (DIDR0). Referir-se “DIDR0 – Registro de desativação de entrada digital 0” na página 121 para mais detalhes.
Descrição do Registro
MCUCR – Registro de Controle MCU
O Registro de Controle MCU contém bits de controle para gerenciamento de energia.
Pedaço | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x35 | CORPOS | PUD | SE | SM1 | SM0 | BODS | ISC01 | ISC00 | MCUCR |
Ler/Escrever | R | Direito/Esquerdo | Direito/Esquerdo | Direito/Esquerdo | Direito/Esquerdo | R | Direito/Esquerdo | Direito/Esquerdo | |
Valor Inicial | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Bit 7 – BODS: BOD Sleep
A funcionalidade de desativação de BOD está disponível apenas em alguns dispositivos. Ver “Limitações” na página 36.
Para desativar a DBO durante o sono (consulte Tabela 7-1 na página 34) o bit BODS deve ser escrito na lógica um. Isso é controlado por uma sequência temporizada e pelo bit de habilitação, BODSE no MCUCR. Primeiro, BODS e BODSE devem ser definidos como um. Segundo, dentro de quatro ciclos de clock, o BODS deve ser definido como um e o BODSE deve ser definido como zero. O bit BODS fica ativo três ciclos de clock após ser definido. Uma instrução sleep deve ser executada enquanto o BODS estiver ativo para desligar o BOD para o modo sleep real. O bit BODS é automaticamente apagado após três ciclos de clock.
Em dispositivos onde o Sleeping BOD não foi implementado, este bit não é utilizado e sempre será lido como zero.
Bit 5 – SE: Habilitar Suspensão
O bit SE deve ser escrito no lógico um para fazer o MCU entrar no modo sleep quando a instrução SLEEP for executada. Para evitar que o MCU entre no modo sleep, a menos que seja o propósito do programador, é recomendado escrever o bit Sleep Enable (SE) em um logo antes da execução da instrução SLEEP e limpá-lo imediatamente após acordar.
Bits 4:3 – SM[1:0]: Seleção do modo Sleep Bits 1 e 0
Esses bits selecionam entre os três modos de suspensão disponíveis, conforme mostrado em Tabela 7-2.
Tabela 7-2. Seleção do modo de suspensão
SM1 | SM0 | Modo de suspensão |
0 | 0 | Parado |
0 | 1 | Redução de ruído ADC |
1 | 0 | Desligar |
1 | 1 | Reservado |
Bit 2 – BODSE: BOD Sleep ativado
A funcionalidade de desativação de BOD está disponível apenas em alguns dispositivos. Ver “Limitações” na página 36.
O bit BODSE permite a configuração do bit de controle BODS, conforme explicado na descrição do bit BODS. A desativação do BOD é controlada por uma sequência temporizada.
Este bit não é utilizado em dispositivos onde a desativação de BOD por software não foi implementada e será lido como zero nesses dispositivos.
PRR – Registro de Redução de Potência
O Power Reduction Register fornece um método para reduzir o consumo de energia, permitindo que os sinais do relógio periférico sejam desabilitados.
Pedaço | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x20 | – | – | – | – | PRTIM1 | PRTIM0 | PRUSI | PRADC | PRR |
Ler/Escrever | R | R | R | R | Direito/Esquerdo | Direito/Esquerdo | Direito/Esquerdo | Direito/Esquerdo | |
Valor Inicial | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Bits 7:4 – Res: Bits Reservados
Esses bits são bits reservados no ATtiny25/45/85 e sempre serão lidos como zero.
Bit 3 – PRTIM1: Temporizador/Contador de Redução de Potência1
Escrever um lógico neste bit desliga o módulo Timer/Counter1. Quando o Timer/Counter1 estiver habilitado, a operação continuará como antes do desligamento.
Bit 2 – PRTIM0: Temporizador/Contador de Redução de Potência0
Escrever um lógico neste bit desliga o módulo Timer/Counter0. Quando o Timer/Counter0 estiver habilitado, a operação continuará como antes do desligamento.
Bit 1 – PRUSI: Redução de potência USI
Escrever uma lógica neste bit desliga o USI, parando o relógio do módulo. Ao ativar novamente o USI, o USI deverá ser reinicializado para garantir a operação adequada.
Bit 0 – PRADC: ADC de redução de potência
Escrever uma lógica neste bit desliga o ADC. O ADC deve ser desativado antes de desligar. Observe que o clock ADC também é utilizado por algumas partes do comparador analógico, o que significa que o comparador analógico não pode ser utilizado quando este bit estiver alto.
Controle e reinicialização do sistema
Reinicializando o AVR
Durante o reset, todos os registradores de E/S são configurados com seus valores iniciais e o programa inicia a execução a partir do vetor de reset. A instrução colocada no Vetor de Reset deve ser uma instrução RJMP – Salto Relativo – para a rotina de tratamento de reset. Se o programa nunca ativar uma fonte de interrupção, os vetores de interrupção não serão usados e o código normal do programa poderá ser colocado nesses locais. O diagrama de circuito em Figura 8-1 mostra a lógica de reinicialização. Os parâmetros elétricos do circuito de reinicialização são fornecidos em “Características do sistema e de reinicialização” na página 165.
Figura 8-1 Lógica de reinicialização
As portas de E/S do AVR são imediatamente redefinidas para o seu estado inicial quando uma fonte de redefinição fica ativa. Isso não requer que nenhuma fonte de relógio esteja em execução.
Depois que todas as fontes de reinicialização ficarem inativas, um contador de atraso será invocado, ampliando a reinicialização interna. Isto permite que a potência atinja um nível estável antes do início da operação normal. O período de tempo limite do contador de atraso é definido pelo usuário através dos fusíveis SUT e CKSEL. As diferentes seleções para o período de atraso são apresentadas em "Relógio Fontes” na página 25.
Redefinir fontes
O ATtiny25/45/85 possui quatro fontes de reinicialização:
Redefinição de inicialização. O MCU é redefinido quando o volume de alimentaçãotage está abaixo do limite de reinicialização ao ligar (VPOT).
Reinicialização externa. O MCU é redefinido quando um nível baixo está presente no pino RESET por mais tempo que o comprimento mínimo do pulso.
Redefinição do cão de guarda. O MCU é redefinido quando o período do Watchdog Timer expira e o Watchdog é ativado.
Redefinição de brown-out. O MCU é redefinido quando o volume de alimentaçãotagO VCC está abaixo do limite de redefinição de queda de energia (VBOT) e o detector de queda de energia está ativado.
Reinicialização de inicialização
Um pulso Power-on Reset (POR) é gerado por um circuito de detecção no chip. O nível de detecção é definido em “Sistema- características do sistema e redefinição” na página 165. O POR é ativado sempre que o VCC está abaixo do nível de detecção. O circuito POR pode ser usado para acionar o Reset de Partida, bem como para detectar uma falha no volume de alimentação.tage.
Um circuito Power-on Reset (POR) garante que o dispositivo seja reinicializado após ser ligado. Atingindo o limite de redefinição de inicialização voltage invoca o contador de atraso, que determina quanto tempo o dispositivo é mantido em RESET após o aumento do VCC. O sinal RESET é ativado novamente, sem qualquer atraso, quando o VCC diminui abaixo do nível de detecção.
Figura 8-2. Inicialização do MCU, RESET vinculado ao VCC
REINICIALIZAÇÃO INTERNA
Figura 8-3. Inicialização do MCU, RESET estendido externamente
Reset externo
Uma reinicialização externa é gerada por um nível baixo no pino RESET, se habilitado. Pulsos de reset maiores que a largura mínima de pulso (veja “Características do sistema e de reinicialização” na página 165) gerará uma redefinição, mesmo que o relógio não esteja funcionando. Não é garantido que pulsos mais curtos gerem uma reinicialização. Quando o sinal aplicado atinge o Reset Threshold Voltage – VRST – em sua borda positiva, o contador de atraso inicia o MCU após o período de tempo limite ter expirado.
Figura 8-4. Reinicialização externa durante a operação
Detecção de queda de energia
ATtiny25/45/85 tem um circuito de detecção de queda de energia (BOD) no chip para monitorar o nível VCC durante a operação, comparando-o a um nível de disparo fixo. O nível de disparo para o BOD pode ser selecionado pelos fusíveis BODLEVEL. O nível de disparo possui uma histerese para garantir a detecção de queda de energia sem picos. A histerese no nível de detecção deve ser interpretada como VBOT+ = VBOT + VHYST/2 e VBOT- = VBOT – VHYST/2.
Quando o BOD está ativado e o VCC diminui para um valor abaixo do nível de acionamento (VBOT- em Figura 8-5), o Reset de Brownout é imediatamente ativado. Quando o VCC aumenta acima do nível de disparo (VBOT+ em Figura 8-5), o contador de atraso inicia o MCU depois que o período de tempo limite tTOUT expirou.
O circuito BOD só detectará uma queda no VCC se o voltage permanece abaixo do nível de gatilho por mais tempo do que tBOD dado em “Características do sistema e de reinicialização” na página 165.
Redefinição do cão de guarda
Quando o Watchdog expirar, ele gerará um pulso de reinicialização curto com a duração de um ciclo CK. Na borda descendente deste pulso, o temporizador de atraso inicia a contagem do período de Timeout tTOUT. Referir-se “Temporizador Watchdog” na página 42 para obter detalhes sobre a operação do Watchdog Timer.
Volumetage Referência de sinais de habilitação e tempo de inicialização
O voltagA referência possui um tempo de inicialização que pode influenciar a forma como deve ser utilizada. O tempo de inicialização é dado em “Características do sistema e de reinicialização” na página 165. Para economizar energia, a referência nem sempre está ligada. A referência está ligada nas seguintes situações:
Quando o BOD está habilitado (programando os Fuse Bits BODLEVEL[2:0]).
Quando a referência bandgap está conectada ao Comparador Analógico (definindo o bit ACBG no ACSR).
Quando o ADC está habilitado.
Assim, quando o BOD não estiver habilitado, após configurar o bit ACBG ou habilitar o ADC, o usuário deve sempre permitir a inicialização da referência antes que a saída do Comparador Analógico ou ADC seja utilizada. Para reduzir o consumo de energia no modo Power-down, o usuário pode evitar as três condições acima para garantir que a referência seja desligada antes de entrar no modo Power-down.
Temporizador de cão de guarda
O Watchdog Timer é sincronizado a partir de um oscilador no chip que funciona a 128 kHz. Ao controlar o pré-escalador do Watchdog Timer, o intervalo de reinicialização do Watchdog pode ser ajustado conforme mostrado em Tabela 8-3 na página 46. A instrução WDR – Watchdog Reset – zera o Watchdog Timer. O Watchdog Timer também é redefinido quando é desativado e quando ocorre uma reinicialização do chip. Dez períodos de ciclo de clock diferentes podem ser selecionados para determinar o período de reinicialização. Se o período de reinicialização expirar sem outra reinicialização do Watchdog, o ATtiny25/45/85 será redefinido e executado a partir do vetor de reinicialização. Para obter detalhes de tempo sobre a redefinição do Watchdog, consulte Tabela 8-3 na página 46.
O Watchdog Timer também pode ser configurado para gerar uma interrupção em vez de um reset. Isso pode ser muito útil ao usar o Watchdog para despertar após o desligamento.
Para evitar a desativação não intencional do Watchdog ou a alteração não intencional do período de tempo limite, dois níveis de segurança diferentes são selecionados pelo fusível WDTON, conforme mostrado na Tabela 8-1 Consulte “Sequências cronometradas para alterar as condições configuração do Watchdog Timer” na página 43 para mais detalhes.
Tabela 8-1. Configuração do WDT em função das configurações dos fusíveis do WDTON
WDTON | Nível de segurança | Estado inicial do WDT | Como desativar o WDT | Como alterar o tempo limite |
Não programado | 1 | Desabilitado | Sequência cronometrada | Sem limitações |
Programado | 2 | Habilitado | Sempre habilitado | Sequência cronometrada |
Figura 8-7. Temporizador de vigilância
Sequências cronometradas para alterar a configuração do temporizador Watchdog
A sequência para alterar a configuração difere ligeiramente entre os dois níveis de segurança. Procedimentos separados são descritos para cada nível.
Nível de segurança 1: Neste modo, o Watchdog Timer é inicialmente desabilitado, mas pode ser habilitado gravando o bit WDE em um sem qualquer restrição. Uma sequência cronometrada é necessária ao desabilitar um Watchdog Timer habilitado. Para desabilitar um Watchdog Timer habilitado, o seguinte procedimento deve ser seguido:
Na mesma operação, escreva uma lógica para WDCE e WDE. Um lógico deve ser escrito no WDE independentemente do valor anterior do bit WDE.
Nos próximos quatro ciclos de clock, na mesma operação, escreva os bits WDE e WDP conforme desejado, mas com o bit WDCE limpo.
Nível de segurança 2: neste modo, o Watchdog Timer está sempre ativado e o bit WDE sempre será lido como um. Uma sequência cronometrada é necessária ao alterar o período de tempo limite do Watchdog. Para alterar o Watchdog Time-out, deve-se seguir o seguinte procedimento:
Na mesma operação, escreva um lógico para WDCE e WDE. Mesmo que o WDE esteja sempre definido, o WDE deve ser gravado em um para iniciar a sequência temporizada.
Nos próximos quatro ciclos de clock, na mesma operação, escreva os bits WDP conforme desejado, mas com o bit WDCE limpo. O valor escrito no bit WDE é irrelevante.
Código Example
O seguinte código examparquivo mostra um assembly e uma função C para desligar o WDT. O example assume que as interrupções são controladas (por exemplo, desativando as interrupções globalmente) para que nenhuma interrupção ocorra durante a execução dessas funções.
Código de montagem Example(1) |
WDT_desligado:
wdr ; Limpar WDRF em MCUSR ldi r16, (0< fora MCUSR, r16 ; Escreva um lógico para WDCE e WDE ; Mantenha a configuração antiga do prescaler para evitar reinicialização não intencional do Watchdog em r16, WDTCR ori r16, (1< saída WDTCR, r16 ; Desligue o WDT ldi r16, (0< fora WDTCR, r16 ret |
Código C Example(1) |
vazio WDT_off(vazio)
{ _WDR(); /* Limpar WDRF em MCUSR */ MCUSR = 0x00 /* Escrever um lógico para WDCE e WDE */ WDTCR |= (1<<WDCE) | (1<<WDE); /* Desativa o WDT */ WDTCR = 0x00; } |
Nota: 1. Veja “Código Examples ”na página 6.
Descrição do Registro
MCUSR – Registro de status MCU
O registro de status do MCU fornece informações sobre qual fonte de reinicialização causou uma reinicialização do MCU.
Pedaço | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x34 | – | – | – | – | WDRF | BORF | EXTRF | PORF | MCUSR |
Ler/Escrever | R | R | R | R | Direito/Esquerdo | Direito/Esquerdo | Direito/Esquerdo | Direito/Esquerdo |
Valor inicial 0 0 0 0 Ver descrição do bit
Bits 7:4 – Res: Bits Reservados
Esses bits são bits reservados no ATtiny25/45/85 e sempre serão lidos como zero.
Bit 3 – WDRF: sinalizador de redefinição do watchdog
Este bit é ativado se ocorrer um Watchdog Reset. O bit é redefinido por um Power-on Reset ou pela escrita de um zero lógico no flag.
Bit 2 – BORF: Sinalizador de reinicialização de indisponibilidade
Este bit é ativado se ocorrer um Reset de Brown-out. O bit é redefinido por um Power-on Reset ou pela escrita de um zero lógico no flag.
Bit 1 – EXTRF: Sinalizador de Reset Externo
Este bit é ativado se ocorrer um Reset Externo. O bit é redefinido por um Power-on Reset ou pela escrita de um zero lógico no flag.
Bit 0 – PORF: Sinalizador de reinicialização de inicialização
Este bit é ativado se ocorrer um Power-on Reset. O bit é redefinido apenas escrevendo um zero lógico no flag.
Para utilizar os sinalizadores de reinicialização para identificar uma condição de reinicialização, o usuário deve ler e, em seguida, redefinir o MCUSR o mais cedo possível no programa. Se o registro for limpo antes que ocorra outro reset, a origem do reset pode ser encontrada examinando os Reset Flags.
WDTCR – Registro de controle de temporizador Watchdog
Pedaço | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x21 | WDIF | WDIE | WDP3 | WDCE | WDE | WDP2 | WDP1 | WDP0 | WDTCR |
Ler/Escrever | Direito/Esquerdo | Direito/Esquerdo | Direito/Esquerdo | Direito/Esquerdo | Direito/Esquerdo | Direito/Esquerdo | Direito/Esquerdo | Direito/Esquerdo | |
Valor Inicial | 0 | 0 | 0 | 0 | X | 0 | 0 | 0 |
Bit 7 – WDIF: Sinalizador de interrupção de tempo limite do Watchdog
Este bit é energizado quando ocorre um timeout no Watchdog Timer e o Watchdog Timer está configurado para interrupção. O WDIF é limpo pelo hardware ao executar o vetor de tratamento de interrupção correspondente. Alternativamente, o WDIF é limpo escrevendo um lógico no sinalizador. Quando o bit I em SREG e WDIE é definido, a interrupção de tempo limite do Watchdog é executada.
Bit 6 – WDIE: Habilitação de interrupção de tempo limite do Watchdog
Quando este bit é gravado em um, o WDE é limpo e o bit I no registrador de status é definido, a interrupção de tempo limite do Watchdog é habilitada. Neste modo, a interrupção correspondente é executada em vez de um reset se ocorrer um timeout no Watchdog Timer.
Se o WDE estiver definido, o WDIE será automaticamente apagado pelo hardware quando ocorrer um tempo limite. Isso é útil para manter a segurança do Watchdog Reset ao usar a interrupção. Depois que o bit WDIE for apagado, o próximo tempo limite gerará uma redefinição. Para evitar o Watchdog Reset, o WDIE deve ser configurado após cada interrupção.
Tabela 8-2. Configuração do temporizador Watchdog
WDE | WDIE | Estado do temporizador de vigilância | Ação no tempo limite |
0 | 0 | Parou | Nenhum |
0 | 1 | Correndo | Interromper |
1 | 0 | Correndo | Reiniciar |
1 | 1 | Correndo | Interromper |
Bit 4 – WDCE: Habilitação de alteração do Watchdog
Este bit deve ser setado quando o bit WDE for escrito no zero lógico. Caso contrário, o Watchdog não será desabilitado. Uma vez gravado em um, o hardware limpará esse bit após quatro ciclos de clock. Consulte a descrição do bit WDE para obter um procedimento de desabilitação do Watchdog. Este bit também deve ser definido ao alterar os bits do prescaler. Ver “Sequências cronometradas para alterar a configuração do temporizador Watchdog” na página 43.
Bit 3 – WDE: ativação do Watchdog
Quando o WDE é gravado na lógica um, o Watchdog Timer é habilitado, e se o WDE é gravado na lógica zero, a função Watchdog Timer é desabilitada. O WDE só pode ser apagado se o bit WDCE tiver nível lógico um. Para desabilitar um Watchdog Timer habilitado, o seguinte procedimento deve ser seguido:
Na mesma operação, escreva uma lógica para WDCE e WDE. Um lógico deve ser gravado no WDE, mesmo que esteja definido como um antes do início da operação de desativação.
Nos próximos quatro ciclos de clock, escreva um 0 lógico para WDE. Isso desativa o Watchdog.
No nível de segurança 2 não é possível desabilitar o Watchdog Timer, mesmo com o algoritmo descrito acima. Ver “Sequências temporizadas para alterar a configuração do temporizador Watchdog” na página 43.
No nível de segurança 1, o WDE é substituído pelo WDRF no MCUSR. Ver “MCUSR – Registro de status MCU” na página 44 para descrição do WDRF. Isso significa que o WDE é sempre definido quando o WDRF é definido. Para limpar o WDE, o WDRF deve ser limpo antes de desabilitar o Watchdog com o procedimento descrito acima. Este recurso garante múltiplas reinicializações durante condições que causam falha e uma inicialização segura após a falha.
Nota: Caso o temporizador watchdog não seja utilizado na aplicação, é importante passar por um procedimento de desabilitação do watchdog na inicialização do dispositivo. Se o Watchdog for ativado acidentalmente, por exemploampSe por um ponteiro descontrolado ou condição de queda de energia, o dispositivo será reinicializado, o que por sua vez levará a uma nova redefinição do watchdog. Para evitar esta situação, o software aplicativo deve sempre limpar o sinalizador WDRF e o bit de controle WDE na rotina de inicialização.
Bits 5, 2:0 – WDP[3:0]: Watchdog Timer Prescaler 3, 2, 1 e 0
Os bits WDP[3:0] determinam o pré-escalonamento do Watchdog Timer quando o Watchdog Timer está habilitado. Os diferentes valores de pré-escala e seus períodos de tempo limite correspondentes são mostrados em Tabela 8-3.
Tabela 8-3. Seleção de pré-escala do temporizador Watchdog
WDP3 | WDP2 | WDP1 | WDP0 | Número de ciclos do oscilador WDT | Tempo limite típico em VCC = 5.0V |
0 | 0 | 0 | 0 | Ciclos de 2K (2048) | 16ms |
0 | 0 | 0 | 1 | Ciclos de 4K (4096) | 32ms |
0 | 0 | 1 | 0 | Ciclos de 8K (8192) | 64ms |
0 | 0 | 1 | 1 | Ciclos de 16K (16384) | 0.125 segundos |
0 | 1 | 0 | 0 | Ciclos de 32K (32764) | 0.25 segundos |
0 | 1 | 0 | 1 | Ciclos de 64K (65536) | 0.5 segundos |
0 | 1 | 1 | 0 | Ciclos de 128K (131072) | 1.0 segundos |
0 | 1 | 1 | 1 | Ciclos de 256K (262144) | 2.0 segundos |
1 | 0 | 0 | 0 | Ciclos de 512K (524288) | 4.0 segundos |
1 | 0 | 0 | 1 | Ciclos de 1024K (1048576) | 8.0 segundos |
Tabela 8-3. Seleção de pré-escala do temporizador Watchdog (continuação)
WDP3 | WDP2 | WDP1 | WDP0 | Número de ciclos do oscilador WDT | Tempo limite típico em VCC = 5.0V |
1 | 0 | 1 | 0 | Reservado(1) | |
1 | 0 | 1 | 1 | ||
1 | 1 | 0 | 0 | ||
1 | 1 | 0 | 1 | ||
1 | 1 | 1 | 0 | ||
1 | 1 | 1 | 1 |
Observação: 1. Se selecionado, uma das configurações válidas abaixo de 0b1010 será usada.
Interrompe
Esta seção descreve as especificidades do tratamento de interrupções realizado em ATtiny25/45/85. Para uma explicação geral do tratamento de interrupções do AVR, consulte “Tratamento de reinicialização e interrupção” na página 12.
Vetores de interrupção em ATtiny25/45/85
Os vetores de interrupção de ATtiny25/45/85 são descritos em Tabela 9-1abaixo.
Tabela 9-1. Redefinir e interromper vetores
Vetor nº. | Endereço do programa | Fonte | Definição de interrupção |
1 | 0x0000 | REINICIAR | Pino externo, reinicialização de inicialização, reinicialização de brown-out, reinicialização de watchdog |
2 | 0x0001 | INT0 | Solicitação de interrupção externa 0 |
3 | 0x0002 | PCINT0 | Solicitação de interrupção de alteração de pino 0 |
4 | 0x0003 | TIMER1_COMPA | Temporizador/Contador1 Comparar Correspondência A |
5 | 0x0004 | TIMER1_OVF | Estouro do temporizador/contador1 |
6 | 0x0005 | TIMER0_OVF | Estouro do temporizador/contador0 |
7 | 0x0006 | EE_RDY | Pronto para EEPROM |
8 | 0x0007 | ANA_COMP | Comparador Analógico |
9 | 0x0008 | ADC | Conversão ADC concluída |
10 | 0x0009 | TIMER1_COMPB | Temporizador/Contador1 Comparar Correspondência B |
11 | 0x000A | TIMER0_COMPA | Temporizador/Contador0 Comparar Correspondência A |
12 | 0x000B | TIMER0_COMPB | Temporizador/Contador0 Comparar Correspondência B |
13 | 0x000C | WDT | Tempo limite do cão de guarda |
14 | 0x000D | USI_START | INICIAR USI |
15 | 0x000E | USI_OVF | Estouro de USI |
Se o programa nunca ativar uma fonte de interrupção, os vetores de interrupção não serão usados e o código normal do programa poderá ser colocado nesses locais.
Uma configuração típica e geral para endereços de vetores de interrupção em ATtiny25/45/85 é mostrada no programa exampabaixo.
Código de montagem Example | ||
.org0x0000 | ;Definir endereço do próximo | declaração |
rjmp REINICIAR | ; Endereço 0x0000 | |
rjmp INT0_ISR | ; Endereço 0x0001 | |
rjmpPCINT0_ISR | ; Endereço 0x0002 | |
rjmp TIM1_COMPA_ISR | ; Endereço 0x0003 | |
rjmp TIM1_OVF_ISR | ; Endereço 0x0004 | |
rjmp TIM0_OVF_ISR | ; Endereço 0x0005 | |
rjmpEE_RDY_ISR | ; Endereço 0x0006 | |
rjmpANA_COMP_ISR | ; Endereço 0x0007 | |
rjmp ADC_ISR | ; Endereço 0x0008 | |
rjmp TIM1_COMPB_ISR | ; Endereço 0x0009 | |
rjmp TIM0_COMPA_ISR | ; Endereço 0x000A | |
rjmp TIM0_COMPB_ISR | ; Endereço 0x000B | |
rjmp WDT_ISR | ; Endereço 0x000C | |
rjmpUSI_START_ISR | ; Endereço 0x000D | |
rjmpUSI_OVF_ISR | ; Endereço 0x000E | |
REDEFINIR: | ; Início do programa principal | |
; Endereço 0x000F | ||
… |
Nota: Veja “Código Examples ”na página 6.
Interrupções Externas
As interrupções externas são acionadas pelo pino INT0 ou qualquer um dos pinos PCINT[5:0]. Observe que, se habilitadas, as interrupções serão acionadas mesmo que os pinos INT0 ou PCINT[5:0] estejam configurados como saídas. Este recurso fornece uma maneira de gerar uma interrupção de software. Interrupções de mudança de pino O PCI será acionado se qualquer pino PCINT[5:0] habilitado for alternado. O registro PCMSK controla quais pinos contribuem para as interrupções de troca de pinos. As interrupções de troca de pinos em PCINT[5:0] são detectadas de forma assíncrona. Isto implica que essas interrupções podem ser usadas para despertar a peça também de modos de suspensão diferentes do modo Idle.
As interrupções INT0 podem ser acionadas por uma borda descendente ou ascendente ou por um nível baixo. Isso é configurado conforme indicado na especificação do MCU Control Register – MCUCR. Quando a interrupção INT0 está habilitada e configurada como acionada por nível, a interrupção será acionada enquanto o pino for mantido baixo. Observe que o reconhecimento de interrupções de borda descendente ou ascendente em INT0 requer a presença de um relógio de E/S, descrito em “Sistemas de Relógio e sua Distribuição” em página 23.
Interrupção de baixo nível
Uma interrupção de baixo nível em INT0 é detectada de forma assíncrona. Isto implica que esta interrupção pode ser usada para despertar a peça também de modos de suspensão diferentes do modo Idle. O relógio de E/S é interrompido em todos os modos de suspensão, exceto no modo Idle.
Observe que se uma interrupção acionada por nível for usada para despertar após o desligamento, o nível necessário deverá ser mantido por tempo suficiente para que o MCU conclua a ativação para acionar a interrupção de nível. Se o nível desaparecer antes do final do tempo de inicialização, o MCU ainda irá acordar, mas nenhuma interrupção será gerada. O tempo de inicialização é definido pelos fusíveis SUT e CKSEL conforme descrito em “Relógio do sistema e opções de relógio” na página 23.
Se o nível baixo no pino de interrupção for removido antes do dispositivo ter despertado, a execução do programa não será desviada para a rotina de serviço de interrupção, mas continuará a partir da instrução seguinte ao comando SLEEP.
Tempo de interrupção de mudança de pino
Um exampO tempo de uma interrupção de troca de pino é mostrado em Figura 9-1.
Descrição do Registro
MCUCR – Registro de Controle MCU
O Registro de Controle de Interrupção Externa A contém bits de controle para controle de detecção de interrupção.
Pedaço | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x35 | CORPOS | PUD | SE | SM1 | SM0 | BODS | ISC01 | ISC00 | MCUCR |
Ler/Escrever | R | Direito/Esquerdo | Direito/Esquerdo | Direito/Esquerdo | Direito/Esquerdo | R | Direito/Esquerdo | Direito/Esquerdo | |
Valor Inicial | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Bits 1:0 – ISC0[1:0]: Controle de Detecção de Interrupção 0 Bit 1 e Bit 0
A interrupção externa 0 é ativada pelo pino externo INT0 se o sinalizador SREG I e a máscara de interrupção correspondente estiverem definidos. O nível e as bordas do pino INT0 externo que ativam a interrupção são definidos em Tabela 9-2. O valor no pino INT0 é sampLED antes de detectar bordas. Se a interrupção de borda ou alternância for selecionada, os pulsos que duram mais de um período de clock gerarão uma interrupção. Não é garantido que pulsos mais curtos gerem uma interrupção. Se a interrupção de nível baixo for selecionada, o nível baixo deverá ser mantido até a conclusão da instrução atualmente em execução para gerar uma interrupção.
Tabela 9-2. Interromper controle de sentido 0
ISC01 | ISC00 | Descrição |
0 | 0 | O nível baixo de INT0 gera uma solicitação de interrupção. |
0 | 1 | Qualquer alteração lógica em INT0 gera uma solicitação de interrupção. |
1 | 0 | A borda descendente de INT0 gera uma solicitação de interrupção. |
1 | 1 | A borda ascendente de INT0 gera uma solicitação de interrupção. |
GIMSK – Registro Geral de Máscara de Interrupção
Pedaço | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x3B | – | INT0 | PCIE | – | – | – | – | – | GIMSK |
Ler/Escrever | R | Direito/Esquerdo | Direito/Esquerdo | R | R | R | R | R | |
Valor Inicial | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Bits 7, 4:0 – Res: Bits Reservados
Esses bits são bits reservados no ATtiny25/45/85 e sempre serão lidos como zero.
Bit 6 – INT0: Solicitação de interrupção externa 0 habilitada
Quando o bit INT0 é definido (um) e o bit I no registrador de status (SREG) é definido (um), a interrupção do pino externo é habilitada. Os bits 0/1 do Interrupt Sense Control0 (ISC01 e ISC00) no MCU Control Register (MCUCR) definem se a interrupção externa é ativada na borda de subida e/ou descida do pino INT0 ou nível detectado. A atividade no pino causará uma solicitação de interrupção mesmo se INT0 estiver configurado como saída. A interrupção correspondente da Solicitação de Interrupção Externa 0 é executada a partir do Vetor de Interrupção INT0.
Bit 5 – PCIE: Habilitação de interrupção de mudança de pino
Quando o bit PCIE está definido (um) e o bit I no registrador de status (SREG) está definido (um), a interrupção de mudança de pino é habilitada. Qualquer alteração em qualquer pino PCINT[5:0] habilitado causará uma interrupção. A interrupção correspondente da solicitação de interrupção de mudança de pino é executada a partir do vetor de interrupção PCI. Os pinos PCINT[5:0] são habilitados individualmente pelo registro PCMSK0.
GIFR – Registro Geral de Sinalizadores de Interrupção
Pedaço | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x3A | – | INTF0 | PCIF | – | – | – | – | – | GIFR |
Ler/Escrever | R | Direito/Esquerdo | Direito/Esquerdo | R | R | R | R | R | |
Valor Inicial | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Bits 7, 4:0 – Res: Bits Reservados
Esses bits são bits reservados no ATtiny25/45/85 e sempre serão lidos como zero.
Bit 6 – INTF0: Flag de interrupção externa 0
Quando uma mudança de borda ou lógica no pino INT0 aciona uma solicitação de interrupção, INTF0 torna-se definido (um). Se o bit I em SREG e o bit INT0 em GIMSK estiverem definidos (um), o MCU saltará para o vetor de interrupção correspondente. O sinalizador é apagado quando a rotina de interrupção é executada. Alternativamente, o sinalizador pode ser apagado escrevendo um sinalizador lógico nele. Este sinalizador é sempre limpo quando INT0 é configurado como interrupção de nível.
Bit 5 – PCIF: Sinalizador de interrupção de alteração de pino
Quando uma mudança lógica em qualquer pino PCINT[5:0] aciona uma solicitação de interrupção, o PCIF fica definido (um). Se o bit I em SREG e o bit PCIE em GIMSK estiverem definidos (um), o MCU saltará para o vetor de interrupção correspondente. O sinalizador é apagado quando a rotina de interrupção é executada. Alternativamente, o sinalizador pode ser apagado escrevendo um sinalizador lógico nele.
PCMSK – Registro de máscara de mudança de pino
Pedaço | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x15 | – | – | PCINT5 | PCINT4 | PCINT3 | PCINT2 | PCINT1 | PCINT0 | PCMSK |
Ler/Escrever | R | R | Direito/Esquerdo | Direito/Esquerdo | Direito/Esquerdo | Direito/Esquerdo | Direito/Esquerdo | Direito/Esquerdo | |
Valor Inicial | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Bits 7:6 – Res: Bits Reservados
Esses bits são bits reservados no ATtiny25/45/85 e sempre serão lidos como zero.
Bits 5:0 – PCINT[5:0]: Máscara de habilitação de mudança de pino 5:0
Cada bit PCINT[5:0] seleciona se a interrupção de mudança de pino está habilitada no pino de E/S correspondente. Se PCINT[5:0] estiver definido e o bit PCIE em GIMSK estiver definido, a interrupção de mudança de pino será habilitada no pino de E/S correspondente. Se PCINT[5:0] for desmarcado, a interrupção de mudança de pino no pino de E/S correspondente será desabilitada.
Portas de E/S
Introdução
Todas as portas AVR possuem verdadeira funcionalidade de leitura-modificação-gravação quando usadas como portas de E/S digitais gerais. Isso significa que a direção de um pino da porta pode ser alterada sem alterar involuntariamente a direção de qualquer outro pino com as instruções SBI e CBI. O mesmo se aplica ao alterar o valor do inversor (se configurado como saída) ou ativar/desativar resistores pull-up (se configurado como entrada). Cada buffer de saída possui características de unidade simétricas com alta capacidade de dissipador e fonte. O driver de pino é forte o suficiente para acionar telas LED diretamente. Todos os pinos da porta possuem resistores pull-up selecionáveis individualmente com um volume de alimentaçãotage resistência invariante. Todos os pinos de E/S possuem diodos de proteção para VCC e aterramento, conforme indicado em Figura 10-1. Consulte “Características Elétricas” na página 161 para obter uma lista completa de parâmetros.
Figura 10-1. Esquema equivalente do pino de E/S
Todos os registradores e referências de bits nesta seção são escritos de forma geral. Um “x” minúsculo representa a letra de numeração da porta e um “n” minúsculo representa o número do bit. Entretanto, ao usar o registro ou definição de bits em um programa, a forma precisa deve ser usada. Para example, PORTB3 para o bit no. 3 na Porta B, aqui documentado geralmente como PORTxn. Os registradores físicos de E/S e as localizações dos bits estão listados em “Descrição do Cadastro” em página 64.
Três locais de endereço de memória de E/S são alocados para cada porta, um para o registro de dados – PORTx, o registro de direção de dados – DDRx e os pinos de entrada da porta – PINx. A localização de E/S dos pinos de entrada da porta é somente leitura, enquanto o registro de dados e o registro de direção de dados são de leitura/gravação. Entretanto, escrever um bit lógico em um bit no registrador PINx resultará em uma alternância no bit correspondente no registrador de dados. Além disso, o bit Pull-up Disable – PUD no MCUCR desativa a função pull-up para todos os pinos em todas as portas quando definido.
O uso da porta de E/S como E/S digital geral é descrito em “Portas como E/S digital geral” na página 53. A maioria dos pinos das portas são multiplexados com funções alternativas para os recursos periféricos do dispositivo. Como cada função alternativa interfere no pino da porta é descrita em “Funções de porta alternativas” na página 57. Consulte as seções individuais do módulo para obter uma descrição completa das funções alternativas.
Observe que habilitar a função alternativa de alguns pinos da porta não afeta o uso dos outros pinos da porta como E/S digital geral.
Portas como E/S Digital Geral
As portas são portas de E/S bidirecionais com pull-ups internos opcionais. Figura 10-2 mostra uma descrição funcional de um pino da porta de E/S, aqui genericamente chamado de Pxn.
Figura 10-2. E/S digital geral(1)
Configurando o PIN
Cada pino da porta consiste em três bits de registro: DDxn, PORTxn e PINxn. Como mostrado em “Descrição do Cadastro” em página 64, os bits DDxn são acessados no endereço de E/S DDRx, os bits PORTxn no endereço de E/S PORTx e os bits PINxn no endereço de E/S PINx.
O bit DDxn no registrador DDRx seleciona a direção deste pino. Se DDxn for escrito como lógico um, Pxn será configurado como um pino de saída. Se DDxn for escrito zero lógico, Pxn será configurado como um pino de entrada.
Se PORTxn for escrito como lógico um quando o pino estiver configurado como pino de entrada, o resistor pull-up será ativado. Para desligar o resistor pull-up, PORTxn deve ser escrito como zero lógico ou o pino deve ser configurado como um pino de saída. Os pinos da porta recebem três estados quando a condição de reinicialização se torna ativa, mesmo que nenhum relógio esteja funcionando.
Se PORTxn for escrito como lógico um quando o pino estiver configurado como um pino de saída, o pino da porta será elevado (um). Se PORTxn for escrito como zero lógico quando o pino estiver configurado como um pino de saída, o pino da porta será acionado em nível baixo (zero).
Alternando o alfinete
Escrever um lógico em PINxn alterna o valor de PORTxn, independente do valor de DDRxn. Observe que a instrução SBI pode ser usada para alternar um único bit em uma porta.
Alternando entre entrada e saída
Ao alternar entre estado triplo ({DDxn, PORTxn} = 0b00) e saída alta ({DDxn, PORTxn} = 0b11), um estado intermediário com pull-up ativado {DDxn, PORTxn} = 0b01) ou saída baixa ({DDxn, PORTxn} = 0b10) deve ocorrer. Normalmente, o estado habilitado para pull-up é totalmente aceitável, pois um ambiente de alta impedância não notará a diferença entre um driver forte e alto e um pull-up. Se este não for o caso, o bit PUD no registro MCUCR pode ser configurado para desabilitar todos os pull-ups em todas as portas.
Alternar entre entrada com pull-up e saída baixa gera o mesmo problema. O usuário deve usar o estado triplo ({DDxn, PORTxn} = 0b00) ou o estado alto de saída ({DDxn, PORTxn} = 0b10) como uma etapa intermediária.
Tabela 10-1 resume os sinais de controle para o valor do pino.
Tabela 10-1. Configurações de pinos de porta
DDxn | PORTxn | PUD
(em MCUCR) |
E/S | Puxar para cima | Comentário |
0 | 0 | X | Entrada | Não | Tri-estado (Hi-Z) |
0 | 1 | 0 | Entrada | Sim | Pxn fornecerá corrente se ext. puxado para baixo. |
0 | 1 | 1 | Entrada | Não | Tri-estado (Hi-Z) |
1 | 0 | X | Saída | Não | Saída baixa (dissipador) |
1 | 1 | X | Saída | Não | Saída alta (fonte) |
Lendo o valor do pino
Independentemente da configuração do bit de direção de dados DDxn, o pino da porta pode ser lido através do bit de registro PINxn. Como mostrado em Figura 10-2, o bit de registro PINxn e a trava anterior constituem um sincronizador. Isso é necessário para evitar a metaestabilidade se o pino físico alterar o valor próximo ao limite do clock interno, mas também introduz um atraso. Figura 10-3 mostra um diagrama de temporização da sincronização ao ler um valor de pino aplicado externamente. Os atrasos de propagação máximo e mínimo são indicados como tpd,max e tpd,min respectivamente.
Considere o período do relógio começando logo após a primeira borda descendente do relógio do sistema. A trava é fechada quando o clock está baixo e fica transparente quando o clock está alto, conforme indicado pela região sombreada do sinal “SYNC LATCH”. O valor do sinal é travado quando o clock do sistema fica baixo. Ele é cronometrado no registro PINxn na transição de clock positiva seguinte. Conforme indicado pelas duas setas tpd,max e tpd,min, uma única transição de sinal no pino será atrasada entre ½ e 1½ período de clock do sistema, dependendo do tempo de asserção.
Ao ler um valor de pino atribuído pelo software, uma instrução nop deve ser inserida conforme indicado em Figura 10-4. A instrução out define o sinal “SYNC LATCH” na borda positiva do clock. Neste caso, o atraso tpd através do sincronizador é um período de clock do sistema.
O seguinte código exampO arquivo mostra como definir os pinos 0 e 1 da porta B como altos, 2 e 3 como baixos e definir os pinos da porta de 4 a 5 como entrada com um pull-up atribuído ao pino 4 da porta. conforme discutido anteriormente, uma instrução nop é incluída para poder ler o valor recentemente atribuído a alguns dos pinos.
Código de montagem Example(1) |
…
; Defina pull-ups e defina saídas altas ; Definir direções para pinos de porta ldi r16,(1<<PB4)|(1<<PB1)|(1<<PB0) ldi r17,(1<<DDB3)|(1<<DDB2)|(1<<DDB1)|(1<<DDB0) saída PORTB,r16 saída DDRB,r17 ; Insira nop para sincronização não ; Leia os pinos da porta em r16, PINB … |
Nota: Para o programa assembly, dois registradores temporários são usados para minimizar o tempo desde que os pull-ups são configurados nos pinos 0, 1 e 4, até que os bits de direção sejam configurados corretamente, definindo os bits 2 e 3 como baixos e redefinindo os bits 0 e 1 como fortes condutores altos.
Código C Example |
caractere não assinado i;
… /* Definir pull-ups e definir saídas altas */ /* Definir direções para pinos de porta */ PORTB = (1<<PB4)|(1<<PB1)|(1<<PB0); DDRB = (1<<DDB3)|(1<<DDB2)|(1<<DDB1)|(1<<DDB0); /* Inserir nop para sincronização*/ _NOP(); /* Ler os pinos da porta */ i = PINB; … |
Habilitação de entrada digital e modos de suspensão
Como mostrado em Figura 10-2, o sinal de entrada digital pode ser clampaterrado na entrada do gatilho Schmitt. O sinal indicado como SLEEP na figura é definido pelo MCU Sleep Controller no modo Power-down para evitar alto consumo de energia se alguns sinais de entrada permanecerem flutuantes ou tiverem um nível de sinal analógico próximo a VCC/2.
SLEEP é substituído por pinos de porta habilitados como pinos de interrupção externa. Se a solicitação de interrupção externa não estiver habilitada, SLEEP estará ativo também para estes pinos. SLEEP também é substituído por várias outras funções alternativas, conforme descrito em “Funções de porta alternativas” na página 57.
Se um nível lógico alto (“um”) estiver presente em um pino de interrupção externa assíncrona configurado como “Interrupção na borda ascendente, borda descendente ou qualquer mudança lógica no pino” enquanto a interrupção externa não estiver habilitada, o sinalizador de interrupção externa correspondente será ser definido ao retornar do modo Sleep mencionado acima, como o clampentrar neste modo de suspensão produz a mudança lógica solicitada.
Pinos desconectados
Caso alguns pinos não sejam utilizados, recomenda-se garantir que esses pinos tenham um nível definido. Embora a maioria das entradas digitais estejam desabilitadas nos modos de hibernação profundo conforme descrito acima, as entradas flutuantes devem ser evitadas para reduzir o consumo de corrente em todos os outros modos onde as entradas digitais estão habilitadas (Reset, modo Ativo e modo Idle).
O método mais simples para garantir um nível definido de um pino não utilizado é ativar o pull-up interno. Neste caso, o pull-up será desabilitado durante o reset. Se o baixo consumo de energia durante a reinicialização for importante, é recomendado usar um pull-up ou pulldown externo. Não é recomendado conectar pinos não utilizados diretamente ao VCC ou GND, pois isso pode causar correntes excessivas se o pino for configurado acidentalmente como uma saída.
Funções de porta alternativas
A maioria dos pinos das portas possui funções alternativas, além de serem E/S digitais gerais. Figura 10-5 mostra como os sinais de controle do pino da porta do simplificado Figura 10-2 pode ser substituído por funções alternativas. Os sinais de substituição podem não estar presentes em todos os pinos das portas, mas a figura serve como uma descrição genérica aplicável a todos os pinos das portas da família de microcontroladores AVR.
Tabela 10-2. Descrição genérica de sinais de substituição para funções alternativas
Nome do sinal | Nome completo | Descrição |
PUOE | Ativar substituição de pull-up | Se este sinal estiver definido, a habilitação do pull-up é controlada pelo sinal PUOV. Se este sinal for apagado, o pull-up será habilitado quando
{DDxn, PORTxn, PUD} = 0b010. |
PUOV | Valor de substituição pull-up | Se PUOE estiver definido, o pull-up será ativado/desativado quando PUOV for definido/limpo, independentemente da configuração dos bits de registro DDxn, PORTxn e PUD. |
DDOE | Ativar substituição de direção de dados | Se este sinal estiver definido, a habilitação do driver de saída é controlada pelo sinal DDOV. Se este sinal for apagado, o driver de saída é habilitado pelo bit DDxn Register. |
DDOV | Valor de substituição da direção dos dados | Se DDOE estiver definido, o driver de saída será ativado/desativado quando DDOV for definido/limpo, independentemente da configuração do bit de registro DDxn. |
PVOE | Habilitar substituição de valor de porta | Se este sinal estiver definido e o driver de saída estiver habilitado, o valor da porta é controlado pelo sinal PVOV. Se o PVOE estiver desmarcado e o driver de saída estiver habilitado, o valor da porta será controlado pelo bit do registro PORTxn. |
PVOV | Valor de substituição do valor da porta | Se PVOE estiver definido, o valor da porta será definido como PVOV, independentemente da configuração do bit de registro PORTxn. |
tomada de força | Ativar substituição de alternância de porta | Se PTOE estiver definido, o bit do registro PORTxn será invertido. |
DIEOE | Ativação de substituição de habilitação de entrada digital | Se este bit estiver ativado, a Habilitação da Entrada Digital é controlada pelo sinal DIEOV. Se este sinal for apagado, a ativação da entrada digital será determinada pelo estado do MCU (modo normal, modo de suspensão). |
DIEOV | Valor de substituição de habilitação de entrada digital | Se DIEOE estiver definido, a entrada digital será ativada/desativada quando DIEOV for definido/desativado, independentemente do estado do MCU (modo normal, modo de suspensão). |
DI | Entrada digital | Esta é a Entrada Digital para funções alternativas. Na figura, o sinal está conectado à saída do gatilho Schmitt, mas antes do sincronizador. A menos que a Entrada Digital seja utilizada como fonte de relógio, o módulo com função alternativa utilizará seu próprio sincronizador. |
AIO | Entrada / Saída Analógica | Esta é a entrada/saída analógica de/para funções alternativas. O sinal é conectado diretamente ao pad e pode ser usado bidirecionalmente. |
As subseções a seguir descrevem resumidamente as funções alternativas para cada porta e relacionam os sinais de substituição à função alternativa. Consulte a descrição da função alternativa para obter mais detalhes.
Funções alternativas da porta B
Os pinos da Porta B com função alternativa são mostrados em Tabela 10-3.
Tabela 10-3. Funções alternativas dos pinos da porta B
Pino de porta | Função alternativa |
PB5 | ![]() REINICIAR: Redefinir pino dW: debugWIRE I/O ADC0: Canal de entrada ADC 0 PCINT5: Interrupção de mudança de pino, fonte 5 |
PB4 | XTAL2: Saída do oscilador de cristal CLKO: Saída do relógio do sistema ADC2: Canal de entrada ADC 2
OC1B: Temporizador/Contador1 Compare Correspondência B Saída PCINT4: Interrupção de mudança de pino 0, Fonte 4 |
PB3 | XTAL1: Entrada do oscilador de cristal CLKI: Entrada de relógio externo ADC3: Canal de entrada ADC 3
OC1B: Temporizador/Contador Complementar1 Comparação Correspondência B Saída PCINT3: Interrupção de mudança de pino 0, Fonte 3 |
PB2 | SCK: Entrada de relógio serial ADC1: Canal de entrada ADC 1
T0: Fonte do relógio do temporizador/contador0 USCK: Relógio USI (modo de três fios) SCL: Relógio USI (modo de dois fios) INT0: Interrupção externa 0 Entrada PCINT2: Interrupção de mudança de pino 0, fonte 2 |
PB1 | MISO: SPI Entrada de dados mestre/Saída de dados escravo AIN1: Comparador analógico, entrada negativa OC0B: Temporizador/Contador0 Comparar correspondência B Saída OC1A: Temporizador/Contador1 Comparar correspondência A Saída DO: Saída de dados USI (modo de três fios) PCINT1: Interrupção de mudança de pino 0, Fonte 1 |
PB0 | MOSI:: Saída de dados mestre SPI / entrada de dados escravo AIN0: Comparador analógico, entrada positiva
OC0A: Saída de comparação do temporizador/contador0 A OC1A: Temporizador/Contador Complementar1 Comparação Correspondência A Saída DI: Entrada de dados USI (modo três fios) SDA: Entrada de dados USI (modo de dois fios) AREF: Referência analógica externa PCINT0: Interrupção de mudança de pino 0, Fonte 0 |
Porta B, Bit 5 – RESET/dW/ADC0/PCINT5
RESET: A entrada de reinicialização externa está ativa em nível baixo e habilitada pela desprogramação (“1”) do fusível RSTDISBL. Pullup é ativado e o driver de saída e a entrada digital são desativados quando o pino é usado como pino RESET.
dW: Quando o fusível debugWIRE Enable (DWEN) é programado e os bits de bloqueio não são programados, o sistema debugWIRE dentro do dispositivo de destino é ativado. O pino da porta RESET é configurado como um pino de E/S bidirecional wire-AND (open-drain) com pull-up habilitado e se torna o gateway de comunicação entre o destino e o emulador.
ADC0: Conversor Analógico para Digital, Canal 0.
PCINT5: Fonte de interrupção de mudança de pino 5.
Porta B, Bit 4 – XTAL2/CLKO/ADC2/OC1B/PCINT4
XTAL2: Pino 2 do oscilador de clock do chip. Usado como pino de clock para todas as fontes de clock do chip, exceto oscilador RC calibrável interno e relógio externo. Quando usado como pino de clock, o pino não pode ser usado como pino de E/S. Ao usar o oscilador RC calibrável interno ou o relógio externo como fontes de clock do chip, o PB4 serve como um pino de E/S comum.
CLKO: O relógio do sistema dividido pode ser emitido no pino PB4. O relógio do sistema dividido será emitido se o Fusível CKOUT estiver programado, independentemente das configurações de PORTB4 e DDB4. Também será emitido durante a reinicialização.
ADC2: Conversor Analógico para Digital, Canal 2.
OC1B: Saída Output Compare Match: O pino PB4 pode servir como uma saída externa para o Timer/Counter1 Compare Match B quando configurado como uma saída (conjunto DDB4). O pino OC1B também é o pino de saída para a função de temporizador do modo PWM.
PCINT4: Fonte de interrupção de mudança de pino 4.
Porta B, Bit 3 – XTAL1/CLKI/ADC3/OC1B/PCINT3
XTAL1: Pino 1 do oscilador de clock de chip. Usado para todas as fontes de clock de chip, exceto oscilador RC calibrável interno. Quando usado como pino de clock, o pino não pode ser usado como pino de E/S.
CLKI: Entrada de relógio de uma fonte de relógio externa, consulte “Relógio externo” na página 26.
ADC3: Conversor Analógico para Digital, Canal 3.
OC1B: Saída Inverted Output Compare Match: O pino PB3 pode servir como uma saída externa para o Timer/Counter1 Compare Match B quando configurado como uma saída (conjunto DDB3). O pino OC1B também é o pino de saída invertido para a função de temporizador do modo PWM.
PCINT3: Fonte de interrupção de mudança de pino 3.
Porta B, Bit 2 – SCK/ADC1/T0/USCK/SCL/INT0/PCINT2
SCK: saída Master Clock, pino de entrada Slave Clock para canal SPI. Quando o SPI está habilitado como Slave, este pino é configurado como entrada independente da configuração de DDB2. Quando o SPI está habilitado como Master, a direção dos dados deste pino é controlada pelo DDPB2. Quando o pino é forçado pelo SPI a ser uma entrada, o pull-up ainda pode ser controlado pelo bit PORTB2.
ADC1: Conversor Analógico para Digital, Canal 1.
T0: Fonte do contador Timer/Counter0.
USCK: Relógio de interface serial universal de modo de três fios.
SCL: Relógio serial de modo de dois fios para modo USI de dois fios.
INT0: Fonte de interrupção externa 0.
PCINT2: Fonte de interrupção de mudança de pino 2.
Porta B, Bit 1 – MISO/AIN1/OC0B/OC1A/DO/PCINT1
MISO: entrada de dados mestre, pino de saída de dados escravo para canal SPI. Quando o SPI está habilitado como Master, este pino é configurado como entrada independente da configuração de DDB1. Quando o SPI está habilitado como Slave, a direção dos dados deste pino é controlada pelo DDB1. Quando o pino é forçado pelo SPI a ser uma entrada, o pull-up ainda pode ser controlado pelo bit PORTB1.
AIN1: Entrada Negativa do Comparador Analógico. Configure o pino da porta como entrada com o pull-up interno desligado para evitar que a função da porta digital interfira na função do Comparador Analógico.
OC0B: Saída de comparação de correspondência de saída. O pino PB1 pode servir como uma saída externa para o Timer/Counter0 Compare Match B. O pino PB1 deve ser configurado como uma saída (conjunto DDB1 (um)) para cumprir esta função. O pino OC0B também é o pino de saída para a função de temporizador do modo PWM.
OC1A: Saída Output Compare Match: O pino PB1 pode servir como uma saída externa para o Timer/Counter1 Compare Match B quando configurado como uma saída (conjunto DDB1). O pino OC1A também é o pino de saída para a função de temporizador do modo PWM.
DO: Saída de dados de interface serial universal em modo de três fios. Modo de três fios A saída de dados substitui o valor PORTB1 e é direcionada para a porta quando o bit de direção de dados DDB1 é definido (um). PORTB1 ainda habilita o pull-up, se a direção for inserida e PORTB1 estiver definido (um).
PCINT1: Fonte de interrupção de mudança de pino 1.
Porta B, Bit 0 – MOSI/AIN0/OC0A/OC1A/DI/SDA/AREF/PCINT0
MOSI: Saída de dados mestre SPI, entrada de dados escravo para canal SPI. Quando o SPI está habilitado como Slave, este pino é configurado como entrada independente da configuração de DDB0. Quando o SPI está habilitado como Master, a direção dos dados deste pino é controlada por DDB0. Quando o pino é forçado pelo SPI a ser uma entrada, o pull-up ainda pode ser controlado pelo bit PORTB0.
AIN0: Entrada Positiva do Comparador Analógico. Configure o pino da porta como entrada com o pull-up interno desligado para evitar que a função da porta digital interfira na função do Comparador Analógico.
OC0A: Saída de comparação de correspondência de saída. O pino PB0 pode servir como uma saída externa para o Timer/Counter0 Compare Match A quando configurado como uma saída (conjunto DDB0 (um)). O pino OC0A também é o pino de saída para a função de temporizador do modo PWM.
OC1A: Saída Inverted Output Compare Match: O pino PB0 pode servir como uma saída externa para o Timer/Counter1 Compare Match B quando configurado como uma saída (conjunto DDB0). O pino OC1A também é o pino de saída invertido para a função de temporizador do modo PWM.
SDA: Dados de interface serial em modo de dois fios.
AREF: Referência Analógica Externa para ADC. Pullup e driver de saída são desabilitados em PB0 quando o pino é usado como referência externa ou Vol Internotage Referência com capacitor externo no pino AREF.
DI: Entrada de dados no modo USI Três fios. O modo USI de três fios não substitui as funções normais da porta, portanto o pino deve ser configurado como uma entrada para a função DI.
PCINT0: Fonte de interrupção de mudança de pino 0.
Tabela 10-4 e Tabela 10-5 relacionar as funções alternativas da Porta B aos sinais de substituição mostrados em Figura 10-5 em página 58.
Tabela 10-4. Substituindo Sinais para Funções Alternativas em PB[5:3]
Nome do sinal | PB5/RESET/ADC0/PCINT5 | PB4/ADC2/XTAL2/ OC1B/PCINT4 | PB3/ADC3/XTAL1/ OC1B/PCINT3 |
PUOE | ![]() |
0 | 0 |
PUOV | 1 | 0 | 0 |
DDOE | RSTDISBL(1) • DWEN(1) | 0 | 0 |
DDOV | transmissão debugWire | 0 | 0 |
PVOE | 0 | Habilitar OC1B | ![]() Habilitar OC1B |
PVOV | 0 | OC1B | OC1B |
tomada de força | 0 | 0 | 0 |
DIEOE | ![]() RSTDISBL(1) + (PCINT5 • PCIE + ADC0D) |
PCINT4 • PCIE + ADC2D | PCINT3 • PCIE + ADC3D |
DIEOV | ADC0D | ADC2D | ADC3D |
DI | Entrada PCINT5 | Entrada PCINT4 | Entrada PCINT3 |
AIO | Entrada RESET, entrada ADC0 | Entrada ADC2 | Entrada ADC3 |
Nota: quando o Fusível estiver “0” (Programado).
Tabela 10-5. Substituindo Sinais para Funções Alternativas em PB[2:0]
Nome do sinal | PB2/SCK/ADC1/T0/ USCK/SCL/INT0/PCINT2 | PB1/MISO/DO/AIN1/ OC1A/OC0B/PCINT1 | PB0/MOSI/DI/SDA/AIN0/AR EF/OC1A/OC0A/
PCINT0 |
PUOE | USI_TWO_WIRE | 0 | USI_TWO_WIRE |
PUOV | 0 | 0 | 0 |
DDOE | USI_TWO_WIRE | 0 | USI_TWO_WIRE |
DDOV | (USI_SCL_HOLD + PORTB2) • DDB2 | 0 | ![]() ![]() (SDA + PORTB0) • DDB0 |
PVOE | USI_TWO_WIRE • DDB2 | Habilitar OC0B + Habilitar OC1A + USI_THREE_WIRE | ![]() Habilitar OC0A + Habilitar OC1A + (USI_TWO_WIRE DDB0) |
PVOV | 0 | OC0B + OC1A + DO | ![]() OC0A + OC1A |
tomada de força | USITC | 0 | 0 |
DIEOE | PCINT2 • PCIE + ADC1D + USISIE | PCINT1 • PCIE + AIN1D | PCINT0 • PCIE + AIN0D + USISIE |
DIEOV | ADC1D | AIN1D | AIN0D |
DI | T0/USCK/SCL/INT0/
Entrada PCINT2 |
Entrada PCINT1 | Entrada DI/SDA/PCINT0 |
AIO | Entrada ADC1 | Entrada negativa do comparador analógico | Entrada Positiva do Comparador Analógico |
Descrição do Registro
MCUCR – Registro de Controle MCU
Pedaço | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x35 | CORPOS | PUD | SE | SM1 | SM0 | BODS | ISC01 | ISC00 | MCUCR |
Ler/Escrever | R | Direito/Esquerdo | Direito/Esquerdo | Direito/Esquerdo | Direito/Esquerdo | R | Direito/Esquerdo | Direito/Esquerdo | |
Valor Inicial | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Bit 6 – PUD: Desativação de pull-up
Quando este bit é escrito em um, os pull-ups nas portas de E/S são desabilitados mesmo que os registradores DDxn e PORTxn estejam configurados para habilitar os pull-ups ({DDxn, PORTxn} = 0b01). Ver “Configurando o PIN” na página 54 para obter mais detalhes sobre esse recurso.
PORTB – Registro de Dados da Porta B
Pedaço | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x18 | – | – | PORTA B5 | PORTA B4 | PORTA B3 | PORTA B2 | PORTA B1 | PORTA B0 | PORTOB |
Ler/Escrever | R | R | Direito/Esquerdo | Direito/Esquerdo | Direito/Esquerdo | Direito/Esquerdo | Direito/Esquerdo | Direito/Esquerdo | |
Valor Inicial | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
DDRB – Registro de direção de dados da porta B
Pedaço | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x17 | – | – | DDB5 | DDB4 | DDB3 | DDB2 | DDB1 | DDB0 | DDRB |
Ler/Escrever | R | R | Direito/Esquerdo | Direito/Esquerdo | Direito/Esquerdo | Direito/Esquerdo | Direito/Esquerdo | Direito/Esquerdo | |
Valor Inicial | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
PINB – Endereço dos pinos de entrada da porta B
Pedaço | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x16 | – | – | PINB5 | PINB4 | PINB3 | PINB2 | PINB1 | PINB0 | PIN |
Ler/Escrever | R | R | Direito/Esquerdo | Direito/Esquerdo | Direito/Esquerdo | Direito/Esquerdo | Direito/Esquerdo | Direito/Esquerdo | |
Valor Inicial | 0 | 0 | N / D | N / D | N / D | N / D | N / D | N / D |
Temporizador/contador8 de 0 bits com PWM
Características
Duas unidades de comparação de saída independentes
Registros de comparação de saída com buffer duplo
Limpar temporizador na comparação de correspondência (recarga automática)
Modulador de largura de pulso (PWM) sem falhas e com correção de fase
Período PWM variável
Gerador de frequência
Três fontes de interrupção independentes (TOV0, OCF0A e OCF0B)
Sobreview
Timer/Counter0 é um módulo temporizador/contador de 8 bits de uso geral, com duas unidades de comparação de saída independentes e com suporte PWM. Ele permite um tempo preciso de execução do programa (gerenciamento de eventos) e geração de ondas.
Um diagrama de blocos simplificado do temporizador/contador de 8 bits é mostrado em Figura 11-1. Para o posicionamento real dos pinos de E/S, consulte “Pinagem ATtiny25/45/85” na página 2. Os registros de E/S acessíveis pela CPU, incluindo bits de E/S e pinos de E/S, são mostrados em negrito. O registro de E/S específico do dispositivo e as localizações dos bits estão listados no “Descrição do registro” na página 77.
O temporizador/contador (TCNT0) e os registros de comparação de saída (OCR0A e OCR0B) são registros de 8 bits. Os sinais de solicitação de interrupção (abreviados como Int.Req. na figura) são todos visíveis no Timer Interrupt Flag Register (TIFR). Todas as interrupções são mascaradas individualmente com o Timer Interrupt Mask Register (TIMSK). TIFR e TIMSK não são mostrados na figura.
O temporizador/contador pode ser cronometrado internamente, através do prescaler, ou por uma fonte de clock externa no pino T0. O bloco lógico Clock Select controla qual fonte e borda do relógio o Timer/Contador usa para aumentar (ou diminuir) seu valor. O temporizador/contador fica inativo quando nenhuma fonte de relógio é selecionada. A saída da lógica Clock Select é chamada de relógio temporizador (clkT0).
Os registros de comparação de saída com buffer duplo (OCR0A e OCR0B) são comparados com o valor do temporizador/contador em todos os momentos. O resultado da comparação pode ser usado pelo Gerador de Forma de Onda para gerar um PWM ou saída de frequência variável nos pinos de Comparação de Saída (OC0A e OC0B). Consulte “Unidade de comparação de saída” na página 69. para detalhes. O evento Compare Match também definirá o Compare Flag (OCF0A ou OCF0B) que pode ser usado para gerar uma solicitação de interrupção Output Compare.
Definições
Muitas referências de registradores e bits nesta seção são escritas de forma geral. Um “n” minúsculo substitui o número do temporizador/contador, neste caso 0. Um “x” minúsculo substitui a unidade de comparação de saída, neste caso a unidade de comparação A ou a unidade de comparação B. No entanto, ao usar o registro ou bit define em um programa, a forma precisa deve ser usada, ou seja, TCNT0 para acessar o valor do contador Timer/Counter0 e assim por diante.
As definições em Tabela 11-1 também são usados extensivamente em todo o documento.
Tabela 11-1. Definições
Constante | Descrição |
FUNDO | O contador atinge BOTTOM quando chega a 0x00 |
MÁXIMO | O contador atinge seu MAXimum quando se torna 0xFF (decimal 255) |
PRINCIPAL | O contador atinge o TOPO quando se torna igual ao valor mais alto na sequência de contagem. O valor TOP pode ser atribuído como o valor fixo 0xFF (MAX) ou o valor armazenado no registro OCR0A. A atribuição depende do modo de operação |
Prescaler de temporizador/contador e fontes de relógio
O temporizador/contador pode ser cronometrado por uma fonte de relógio interna ou externa. A fonte do clock é selecionada pela lógica Clock Select que é controlada pelos bits Clock Select (c) localizados no Timer/Counter0 Control Register (TCCR0B).
Fonte de relógio interno com Prescaler
O Timer/Counter0 pode ser cronometrado diretamente pelo relógio do sistema (definindo CS0[2:0] = 1). Isso fornece a operação mais rápida, com uma frequência máxima de clock do temporizador/contador igual à frequência do clock do sistema (fCLK_I/O). Alternativamente, uma das quatro torneiras do prescaler pode ser usada como fonte de relógio. O relógio pré-escalado tem uma frequência de
Redefinição do pré-escalador
O prescaler funciona livremente, ou seja, opera independentemente da lógica Clock Select do Timer/Counter0. Como o prescaler não é afetado pela seleção do relógio do temporizador/contador, o estado do prescaler terá implicações em situações onde um relógio pré-escalado é usado. Um exampO arquivo de um artefato de pré-escala ocorre quando o temporizador/contador é ativado e cronometrado pelo pré-escalador (6 > CS0[2:0] > 1). O número de ciclos de clock do sistema desde o momento em que o temporizador é habilitado até a primeira contagem pode ser de 1 a N+1 ciclos de clock do sistema, onde N é igual ao divisor do pré-escalador (8, 64, 256 ou 1024).
É possível utilizar o Prescaler Reset para sincronizar o Timer/Contador com a execução do programa.
Fonte de relógio externo
Uma fonte de clock externa aplicada ao pino T0 pode ser usada como temporizador/contador (clkT0). O pino T0 é sampconduzido uma vez a cada ciclo de clock do sistema pela lógica de sincronização de pinos. O sincronizado (sampled) o sinal é então passado
através do detector de borda. Figura 11-2 mostra um diagrama de blocos equivalente funcional da sincronização T0 e lógica do detector de borda. Os registradores são sincronizados na borda positiva do clock interno do sistema (clkI/O). A trava é transparente no período alto do relógio interno do sistema.
O detector de borda gera um pulso clkT0 para cada borda positiva (CS0[2:0] = 7) ou negativa (CS0[2:0] = 6) que detecta.
Os registros OCR0x têm buffer duplo ao usar qualquer um dos modos de modulação por largura de pulso (PWM). Para os modos de operação normal e Clear Timer on Compare (CTC), o buffer duplo está desabilitado. O buffer duplo sincroniza a atualização dos registros de comparação OCR0x para o topo ou para o final da sequência de contagem. A sincronização evita a ocorrência de pulsos PWM não simétricos e de comprimento ímpar, tornando a saída livre de falhas.
O acesso ao Registro OCR0x pode parecer complexo, mas não é o caso. Quando o buffer duplo estiver habilitado, a CPU terá acesso ao Registro de Buffer OCR0x, e se o buffer duplo estiver desabilitado a CPU acessará o OCR0x diretamente.
Forçar comparação de saída
Nos modos de geração de forma de onda não PWM, a saída de correspondência do comparador pode ser forçada gravando um no bit Force Output Compare (FOC0x). Forçar Compare Match não definirá o sinalizador OCF0x nem recarregará/limpará o temporizador, mas o pino OC0x será atualizado como se um Compare Match real tivesse ocorrido (as configurações de bits COM0x[1:0] definem se o pino OC0x está definido, limpo ou alternado).
Compare o bloqueio de correspondência por gravação TCNT0
Todas as operações de gravação da CPU no registrador TCNT0 bloquearão qualquer Compare Match que ocorrer no próximo ciclo de clock do cronômetro, mesmo quando o cronômetro estiver parado. Este recurso permite que OCR0x seja inicializado com o mesmo valor que TCNT0 sem disparar uma interrupção quando o relógio do temporizador/contador estiver habilitado.
Usando a unidade de comparação de saída
Como escrever TCNT0 em qualquer modo de operação bloqueará todas as correspondências de comparação para um ciclo de relógio do temporizador, há riscos envolvidos ao alterar TCNT0 ao usar a unidade de comparação de saída, independentemente de o temporizador/contador estar em execução ou não. Se o valor gravado em TCNT0 for igual ao valor OCR0x, o Compare Match será perdido, resultando na geração incorreta da forma de onda. Da mesma forma, não escreva o valor TCNT0 igual a BOTTOM quando o contador estiver em contagem regressiva.
A configuração do OC0x deve ser realizada antes de configurar o Registro de Direção de Dados para o pino da porta de saída. A maneira mais fácil de definir o valor OC0x é usar os bits estroboscópicos Force Output Compare (FOC0x) no modo Normal. Os registros OC0x mantêm seus valores mesmo quando alternam entre os modos de geração de forma de onda.
Esteja ciente de que os bits COM0x[1:0] não têm buffer duplo junto com o valor de comparação. A alteração dos bits COM0x[1:0] terá efeito imediato.
Comparar unidade de saída de correspondência
Os bits do modo Compare Output (COM0x[1:0]) têm duas funções. O Waveform Generator usa os bits COM0x[1:0] para definir o estado Output Compare (OC0x) na próxima Compare Match. Além disso, os bits COM0x[1:0] controlam a fonte de saída do pino OC0x. Figura 11-6 mostra um esquema simplificado da lógica afetada pela configuração do bit COM0x[1:0]. Os registradores de E/S, bits de E/S e pinos de E/S na figura são mostrados em negrito. Somente as partes dos registros gerais de controle de porta de E/S (DDR e PORT) que são afetadas pelos bits COM0x[1:0] são mostradas. Ao se referir ao estado OC0x, a referência é para o registro OC0x interno, não para o pino OC0x. Se ocorrer uma reinicialização do sistema, o registro OC0x será redefinido para “0”.
Quando OC0A/OC0B está conectado ao pino de E/S, a função dos bits COM0A[1:0]/COM0B[1:0] depende da configuração do bit WGM0[2:0]. Tabela 11-2 mostra a funcionalidade do bit COM0x[1:0] quando os bits WGM0[2:0] são definidos para um modo normal ou CTC (não-PWM).
Tabela 11-2. Compare o modo de saída, modo não PWM
COM0A1 COM0B1 | COM0A0 COM0B0 | Descrição |
0 | 0 | Operação normal da porta, OC0A/OC0B desconectado. |
0 | 1 | Alternar OC0A/OC0B na comparação de correspondência |
1 | 0 | Limpar OC0A/OC0B na comparação de correspondência |
1 | 1 | Definir OC0A/OC0B na comparação de correspondência |
Tabela 11-3 mostra a funcionalidade do bit COM0x[1:0] quando os bits WGM0[2:0] estão definidos para o modo PWM rápido.
Tabela 11-3. Compare o modo de saída, modo PWM rápido(1)
COM0A1 COM0B1 | COM0A0 COM0B0 | Descrição |
0 | 0 | Operação normal da porta, OC0A/OC0B desconectado. |
0 | 1 | Reservado |
1 | 0 | Limpe OC0A/OC0B em Compare Match, defina OC0A/OC0B em BOTTOM (modo sem inversão) |
1 | 1 | Defina OC0A/OC0B em Compare Match, limpe OC0A/OC0B em INFERIOR (modo de inversão) |
Nota: Um caso especial ocorre quando OCR0A ou OCR0B é igual a TOP e COM0A1/COM0B1 está definido. Neste caso, a correspondência de comparação é ignorada, mas o set ou clear é feito em BOTTOM. Ver “Modo PWM rápido” na página 73 para mais detalhes.
Tabela 11-4 mostra a funcionalidade do bit COM0x[1:0] quando os bits WGM0[2:0] são definidos para o modo PWM de correção de fase.
Tabela 11-4. Compare o modo de saída, modo PWM com correção de fase(1)
COM0A1 COM0B1 | COM0A0 COM0B0 | Descrição |
0 | 0 | Operação normal da porta, OC0A/OC0B desconectado. |
0 | 1 | Reservado |
1 | 0 | Limpe OC0A/OC0B em Compare Match durante a contagem crescente. Defina OC0A/OC0B em Compare Match durante a contagem regressiva. |
1 | 1 | Defina OC0A/OC0B em Compare Match durante a contagem crescente. Limpe OC0A/OC0B em Compare Match durante a contagem regressiva. |
Nota: 1. Um caso especial ocorre quando OCR0A ou OCR0B é igual a TOP e COM0A1/COM0B1 está definido. Neste caso, o Compare Match é ignorado, mas o set ou clear é feito em TOP. Ver “Modo PWM com correção de fase” na página 74 para mais detalhes.
Bits 3:2 – Res: Bits Reservados
Esses bits são bits reservados no ATtiny25/45/85 e sempre serão lidos como zero.
Bits 1:0 – WGM0[1:0]: Modo de geração de forma de onda
Combinados com o bit WGM02 encontrado no Registrador TCCR0B, esses bits controlam a sequência de contagem do contador, a fonte do valor máximo (TOP) do contador e que tipo de geração de forma de onda a ser usada, consulte Tabela 11-5. Os modos de operação suportados pela unidade de temporizador/contador são: modo normal (contador), modo Clear Timer on Compare Match (CTC) e dois tipos de modos de modulação por largura de pulso (PWM) (consulte "Modos de operação" na página 71).
Tabela 11-5. Descrição do bit do modo de geração de forma de onda
Modo | WGM 02 | WGM 01 | WGM 00 | Modo de operação temporizador/contador | PRINCIPAL | Atualização do OCRx em | Sinalizador TOV ativado |
0 | 0 | 0 | 0 | Normal | 0xFF | Imediato | MÁXIMO(1) |
1 | 0 | 0 | 1 | PWM, correção de fase | 0xFF | PRINCIPAL | FUNDO(2) |
2 | 0 | 1 | 0 | CTC | OCRA | Imediato | MÁXIMO(1) |
3 | 0 | 1 | 1 | PWM rápido | 0xFF | FUNDO(2) | MÁXIMO(1) |
4 | 1 | 0 | 0 | Reservado | – | – | – |
5 | 1 | 0 | 1 | PWM, correção de fase | OCRA | PRINCIPAL | FUNDO(2) |
6 | 1 | 1 | 0 | Reservado | – | – | – |
7 | 1 | 1 | 1 | PWM rápido | OCRA | FUNDO(2) | PRINCIPAL |
Bit 7 – FOC0A: Forçar comparação de saída A
O bit FOC0A só está ativo quando os bits WGM especificam um modo não-PWM.
Porém, para garantir a compatibilidade com dispositivos futuros, este bit deve ser definido como zero quando TCCR0B for escrito ao operar no modo PWM. Ao escrever um lógico no bit FOC0A, um Compare Match imediato é forçado na unidade de geração de forma de onda. A saída OC0A é alterada de acordo com sua configuração de bits COM0A[1:0]. Observe que o bit FOC0A é implementado como um estroboscópio. Portanto é o valor presente nos bits COM0A[1:0] que determina o efeito da comparação forçada.
Um estroboscópio FOC0A não gerará nenhuma interrupção, nem limpará o temporizador no modo CTC usando OCR0A como TOP. O bit FOC0A é sempre lido como zero.
Bit 6 – FOC0B: Forçar Comparação de Saída B
O bit FOC0B só está ativo quando os bits WGM especificam um modo não-PWM.
Porém, para garantir a compatibilidade com dispositivos futuros, este bit deve ser definido como zero quando TCCR0B for escrito ao operar no modo PWM. Ao escrever um bit lógico no bit FOC0B, um Compare Match imediato é forçado na unidade de geração de forma de onda. A saída OC0B é alterada de acordo com sua configuração de bits COM0B[1:0]. Observe que o bit FOC0B é implementado como um estroboscópio. Portanto é o valor presente nos bits COM0B[1:0] que determina o efeito da comparação forçada.
Um estroboscópio FOC0B não gerará nenhuma interrupção, nem limpará o temporizador no modo CTC usando OCR0B como TOP.
O bit FOC0B é sempre lido como zero.
Bits 5:4 – Res: Bits Reservados
Esses bits são bits reservados no ATtiny25/45/85 e sempre serão lidos como zero.
Bit 3 – WGM02: Modo de geração de forma de onda
Veja a descrição no “TCCR0A – Registro A de controle de temporizador/contador” na página 77.
Bits 2:0 – CS0[2:0]: Seleção do Relógio
Os três bits de seleção de relógio selecionam a fonte de relógio a ser usada pelo temporizador/contador.
Tabela 11-6. Descrição do bit de seleção do relógio
CS02 | CS01 | CS00 | Descrição |
0 | 0 | 0 | Nenhuma fonte de relógio (Temporizador/Contador parado) |
0 | 0 | 1 | clkI/O/(Sem pré-escalonamento) |
0 | 1 | 0 | clkI/O/8 (do pré-escalador) |
0 | 1 | 1 | clkI/O/64 (do pré-escalador) |
1 | 0 | 0 | clkI/O/256 (do pré-escalador) |
1 | 0 | 1 | clkI/O/1024 (do pré-escalador) |
1 | 1 | 0 | Fonte de clock externa no pino T0. Relógio na borda de queda. |
1 | 1 | 1 | Fonte de clock externa no pino T0. Relógio na borda ascendente. |
Se modos de pinos externos forem usados para o Timer/Counter0, as transições no pino T0 cronometrarão o contador mesmo se o pino estiver configurado como uma saída. Este recurso permite o controle da contagem por software.
Contar e comparar unidades
O funcionamento geral do Timer/Counter1 é descrito no modo assíncrono e o funcionamento no modo síncrono é mencionado apenas se houver diferenças entre estes dois modos. Figura 12-2 mostra o diagrama de blocos do registro de sincronização do Timer/Contador 1 e os atrasos de sincronização entre os registros. Observe que todos os detalhes do clock não são mostrados na figura. Os valores dos registros Timer/Counter1 passam pelos registros internos de sincronização, que causam o atraso na sincronização da entrada, antes de afetar a operação do contador. Os registradores TCCR1, GTCCR, OCR1A, OCR1B e OCR1C podem ser lidos logo após a gravação do registrador. Os valores de leitura são atrasados para o registro Timer/Counter1 (TCNT1) e sinalizadores (OCF1A, OCF1B e TOV1), devido à sincronização de entrada e saída.
O Timer/Counter1 apresenta alta resolução e uso de alta precisão com menores oportunidades de pré-escala. Ele também pode suportar dois moduladores de largura de pulso precisos e de alta velocidade de 8 bits usando velocidades de clock de até 64 MHz (ou 32 MHz no modo de baixa velocidade). Neste modo, o Timer/Counter1 e os registros de comparação de saída servem como PWMs duplos independentes com saídas não sobrepostas, não invertidas e invertidas. Referir-se página 86 para obter uma descrição detalhada desta função. Da mesma forma, as altas oportunidades de pré-escala tornam esta unidade útil para funções de velocidade mais baixa ou funções de temporização exata com ações pouco frequentes.
Figura 12-2. Diagrama de blocos do registro de sincronização do temporizador/contador 1.
O Timer/Counter1 e o prescaler permitem executar a CPU a partir de qualquer fonte de clock enquanto o prescaler está operando no rápido clock PCK de 64 MHz (ou 32 MHz no modo de baixa velocidade) no modo assíncrono.
Observe que a frequência do clock do sistema deve ser inferior a um terço da frequência PCK. O mecanismo de sincronização do Timer/Counter1 assíncrono precisa de pelo menos duas bordas do PCK quando o clock do sistema está alto. Se a frequência do relógio do sistema for muito alta, existe o risco de perda de dados ou valores de controle.
A seguir Figura 12-3 mostra o diagrama de blocos para Timer/Counter1.
Tabela 12-1. Comparar seleção de modo no modo PWM
COM1x1 | COM1x0 | Efeito nos pinos de comparação de saída |
0 | 0 | OC1x não conectado. OC1x não conectado. |
0 | 1 | OC1x foi limpo na comparação. Defina quandoTCNT1 = $00. OC1x definido na correspondência de comparação. Limpo quando TCNT1 = $00. |
1 | 0 | OC1x foi limpo na comparação. Definido quando TCNT1 = $00. OC1x não conectado. |
1 | 1 | OC1x Definido na correspondência de comparação. Limpo quando TCNT1= $00. OC1x não conectado. |
Características ADC
Tabela 21-8. Características ADC, canais de terminação única. AT = -40°C a +85°C
Símbolo | Parâmetro | Doença | Mínimo | Tipo | Máx. | Unidades |
Resolução | 10 | Pedaços | ||||
Precisão absoluta (incluindo erros de INL, DNL e quantização, ganho e deslocamento) | VREF = 4V, VCC = 4V,
Relógio ADC = 200 kHz |
2 | LSB | |||
VREF = 4V, VCC = 4V,
Relógio ADC = 1 MHz |
3 | LSB | ||||
VREF = 4V, VCC = 4V,
Relógio ADC = 200 kHz Modo de redução de ruído |
1.5 | LSB | ||||
VREF = 4V, VCC = 4V,
Relógio ADC = 1 MHz Modo de redução de ruído |
2.5 | LSB | ||||
Não linearidade integral (INL) (Precisão após compensação e calibração de ganho) | VREF = 4V, VCC = 4V,
Relógio ADC = 200 kHz |
1 | LSB | |||
Não linearidade diferencial (DNL) | VREF = 4V, VCC = 4V,
Relógio ADC = 200 kHz |
0.5 | LSB | |||
Erro de ganho | VREF = 4V, VCC = 4V,
Relógio ADC = 200 kHz |
2.5 | LSB | |||
Erro de deslocamento | VREF = 4V, VCC = 4V,
Relógio ADC = 200 kHz |
1.5 | LSB | |||
Tempo de conversão | Conversão de corrida grátis | 14 | 280 | µs | ||
Freqüência do relógio | 50 | 1000 | kHz | |||
Número de chassi | Vol de entradatage | Terra | VREF | V | ||
Largura de Banda de Entrada | 38.4 | kHz | ||||
AREF | Referência Externa Vol.tage | 2.0 | VCC | V | ||
Vint | Vol internotage Referência | 1.0 | 1.1 | 1.2 | V | |
Referência interna de 2.56V (1) | VCC > 3.0V | 2.3 | 2.56 | 2.8 | V | |
REF | 32 | kΩ | ||||
CHUVA | Resistência de entrada analógica | 100 | MΩ | |||
Saída ADC | 0 | 1023 | LSB |
Nota: 1. Os valores são apenas orientações.
Tabela 21-9. Características ADC, Canais Diferenciais (Modo Unipolar). AT = -40°C a +85°C
Símbolo | Parâmetro | Doença | Mínimo | Tipo | Máx. | Unidades |
Resolução | Ganho = 1x | 10 | Pedaços | |||
Ganho = 20x | 10 | Pedaços | ||||
Precisão absoluta (incluindo INL, DNL e
Erros de quantização, ganho e deslocamento) |
Ganho = 1x
VREF = 4V, VCC = 5V Relógio ADC = 50 – 200 kHz |
10.0 | LSB | |||
Ganho = 20x
VREF = 4V, VCC = 5V Relógio ADC = 50 – 200 kHz |
20.0 | LSB | ||||
Não Linearidade Integral (INL) (Precisão após Offset e Calibração de Ganho) | Ganho = 1x
VREF = 4V, VCC = 5V Relógio ADC = 50 – 200 kHz |
4.0 | LSB | |||
Ganho = 20x
VREF = 4V, VCC = 5V Relógio ADC = 50 – 200 kHz |
10.0 | LSB | ||||
Erro de ganho | Ganho = 1x | 10.0 | LSB | |||
Ganho = 20x | 15.0 | LSB | ||||
Erro de deslocamento | Ganho = 1x
VREF = 4V, VCC = 5V Relógio ADC = 50 – 200 kHz |
3.0 | LSB | |||
Ganho = 20x
VREF = 4V, VCC = 5V Relógio ADC = 50 – 200 kHz |
4.0 | LSB | ||||
Tempo de conversão | Conversão de corrida grátis | 70 | 280 | µs | ||
Freqüência do relógio | 50 | 200 | kHz | |||
Número de chassi | Vol de entradatage | Terra | VCC | V | ||
VDIFF | Vol Diferencial de Entradatage | VREF/Ganho | V | |||
Largura de Banda de Entrada | 4 | kHz | ||||
AREF | Referência Externa Vol.tage | 2.0 | CCV – 1.0 | V | ||
Vint | Vol internotage Referência | 1.0 | 1.1 | 1.2 | V | |
Referência interna de 2.56V (1) | VCC > 3.0V | 2.3 | 2.56 | 2.8 | V | |
REF | Resistência de entrada de referência | 32 | kΩ | |||
CHUVA | Resistência de entrada analógica | 100 | MΩ | |||
Saída de conversão ADC | 0 | 1023 | LSB |
Nota: Os valores são apenas orientações.
Tabela 21-10. Características ADC, Canais Diferenciais (Modo Bipolar). AT = -40°C a +85°C
Símbolo | Parâmetro | Doença | Mínimo | Tipo | Máx. | Unidades |
Resolução | Ganho = 1x | 10 | Pedaços | |||
Ganho = 20x | 10 | Pedaços | ||||
Precisão absoluta (incluindo INL, DNL e
Erros de quantização, ganho e deslocamento) |
Ganho = 1x
VREF = 4V, VCC = 5V Relógio ADC = 50 – 200 kHz |
8.0 | LSB | |||
Ganho = 20x
VREF = 4V, VCC = 5V Relógio ADC = 50 – 200 kHz |
8.0 | LSB | ||||
Não Linearidade Integral (INL) (Precisão após Offset e Calibração de Ganho) | Ganho = 1x
VREF = 4V, VCC = 5V Relógio ADC = 50 – 200 kHz |
4.0 | LSB | |||
Ganho = 20x
VREF = 4V, VCC = 5V Relógio ADC = 50 – 200 kHz |
5.0 | LSB | ||||
Erro de ganho | Ganho = 1x | 4.0 | LSB | |||
Ganho = 20x | 5.0 | LSB | ||||
Erro de deslocamento | Ganho = 1x
VREF = 4V, VCC = 5V Relógio ADC = 50 – 200 kHz |
3.0 | LSB | |||
Ganho = 20x
VREF = 4V, VCC = 5V Relógio ADC = 50 – 200 kHz |
4.0 | LSB | ||||
Tempo de conversão | Conversão de corrida grátis | 70 | 280 | µs | ||
Freqüência do relógio | 50 | 200 | kHz | |||
Número de chassi | Vol de entradatage | Terra | VCC | V | ||
VDIFF | Vol Diferencial de Entradatage | VREF/Ganho | V | |||
Largura de Banda de Entrada | 4 | kHz | ||||
AREF | Referência Externa Vol.tage | 2.0 | CCV – 1.0 | V | ||
Vint | Vol internotage Referência | 1.0 | 1.1 | 1.2 | V | |
Referência interna de 2.56V (1) | VCC > 3.0V | 2.3 | 2.56 | 2.8 | V | |
REF | Resistência de entrada de referência | 32 | kΩ | |||
CHUVA | Resistência de entrada analógica | 100 | MΩ | |||
Saída de conversão ADC | -512 | 511 | LSB |
Resumo do conjunto de instruções
Mnemônicos | Operandos | Descrição | Operação | Bandeiras | #Relógios |
INSTRUÇÕES DE ARITMÉTICA E LÓGICA | |||||
ADICIONAR | Rua, Rua | Adicionar dois registros | Rd ← Rd + Rr | Z, C, N, V, H | 1 |
ADC | Rua, Rua | Adicionar com Carregar dois registros | Rd ← Rd + Rr + C | Z, C, N, V, H | 1 |
ADIW | Rdl,K | Adicionar imediato ao Word | Rdh:Rdl ← Rdh:Rdl + K | Z,C,N,V,S | 2 |
SUB | Rua, Rua | Subtraia dois registros | Rd ← Rd – Rr | Z, C, N, V, H | 1 |
EU SUBI | Rua, K | Subtraia a constante do registro | Estrada ← Estrada – K | Z, C, N, V, H | 1 |
SBC | Rua, Rua | Subtrair com Carregar dois Registros | Estrada ← Estrada – Rr – C | Z, C, N, V, H | 1 |
SBCI | Rua, K | Subtraia com Carry Constant from Reg. | Estrada ← Estrada – K – C | Z, C, N, V, H | 1 |
SBIW | Rdl,K | Subtrair imediato do Word | Rdh:Rdl ← Rdh:Rdl – K | Z,C,N,V,S | 2 |
E | Rua, Rua | Registros lógicos AND | Rd ← Rd ∙ Rr | Z, N, V | 1 |
ENDI | Rua, K | Registro E Lógico e Constante | Rd ← Rd ∙ K | Z, N, V | 1 |
OR | Rua, Rua | Registros OR lógicos | Rd ← Rd v Rr | Z, N, V | 1 |
ORI | Rua, K | Registro OR lógico e constante | Rd ← Rd v K | Z, N, V | 1 |
EOR | Rua, Rua | Registros OR exclusivos | Rd ← Rd ⊕ Rr | Z, N, V | 1 |
COM | Rd | Complemento Um | Rd ← 0xFF − Rd | Z, C, N, V | 1 |
NEG | Rd | Complemento de dois | Estrada ← 0x00 − Estrada | Z, C, N, V, H | 1 |
SBR | Rd, K | Definir bit (s) no registro | Rd ← Rd v K | Z, N, V | 1 |
CBR | Rd, K | Bit (s) de limpeza no registro | Rd ← Rd ∙ (0xFF – K) | Z, N, V | 1 |
INC | Rd | Incremento | Estrada ← Estrada + 1 | Z, N, V | 1 |
DEZ | Rd | Decrementar | Estrada ← Estrada − 1 | Z, N, V | 1 |
TST | Rd | Teste para zero ou menos | Estrada ← Estrada ∙ Estrada | Z, N, V | 1 |
CLR | Rd | Registro limpo | Estrada ← Estrada ⊕ Estrada | Z, N, V | 1 |
SER | Rd | Definir registro | Rd ← 0xFF | Nenhum | 1 |
INSTRUÇÕES DE FILIAL | |||||
RJMP | k | Salto Relativo | PC ← PC + k + 1 | Nenhum | 2 |
IJMP | Salto indireto para (Z) | PC ← Z | Nenhum | 2 | |
RCALL | k | Chamada de subrotina relativa | PC ← PC + k + 1 | Nenhum | 3 |
EU CHAMO | Chamada indireta para (Z) | PC ← Z | Nenhum | 3 | |
RET | Retorno de subrotina | PC ← PILHA | Nenhum | 4 | |
REDES | Interromper Retorno | PC ← PILHA | I | 4 | |
CPSE | Rd, Rr | Compare, ignore se for igual | se (Rd = Rr) PC ← PC + 2 ou 3 | Nenhum | 1/2/3 |
CP | Rd, Rr | Comparar | Rd − Rr | Z, N, V, C, H | 1 |
PCC | Rd, Rr | Compare com Carry | Rd − Rr − C | Z, N, V, C, H | 1 |
IPC | Rd, K | Compare o registro com o imediato | Rd-K | Z, N, V, C, H | 1 |
SBRC | Rr, b | Pular se o bit no registro for apagado | se (Rr(b)=0) PC ← PC + 2 ou 3 | Nenhum | 1/2/3 |
SBRS | Rr, b | Pular se o bit no registro estiver definido | se (Rr(b)=1) PC ← PC + 2 ou 3 | Nenhum | 1/2/3 |
SBIC | P,b | Pular se o bit no registro de I / O for apagado | se (P(b)=0) PC ← PC + 2 ou 3 | Nenhum | 1/2/3 |
SBIS | P,b | Pular se o bit no registro I / O estiver definido | se (P(b)=1) PC ← PC + 2 ou 3 | Nenhum | 1/2/3 |
BRBS | s, k | Ramificação se a bandeira de status for definida | se (SREG(s) = 1) então PC←PC+k + 1 | Nenhum | 1/2 |
BRBC | s, k | Ramificação se a bandeira de status for apagada | se (SREG(s) = 0) então PC←PC+k + 1 | Nenhum | 1/2 |
BRQ | k | Ramificação se Igual | se (Z = 1) então PC ← PC + k + 1 | Nenhum | 1/2 |
BRNE | k | Ramificação se não for igual | se (Z = 0) então PC ← PC + k + 1 | Nenhum | 1/2 |
BRCS | k | Ramo se Carregar Conjunto | se (C = 1) então PC ← PC + k + 1 | Nenhum | 1/2 |
BRCC | k | Filial se Carregar Liberado | se (C = 0) então PC ← PC + k + 1 | Nenhum | 1/2 |
BRSH | k | Ramifique se igual ou superior | se (C = 0) então PC ← PC + k + 1 | Nenhum | 1/2 |
BRLO | k | Ramifique se inferior | se (C = 1) então PC ← PC + k + 1 | Nenhum | 1/2 |
BRMI | k | Ramificar se menos | se (N = 1) então PC ← PC + k + 1 | Nenhum | 1/2 |
BRPL | k | Filial se Plus | se (N = 0) então PC ← PC + k + 1 | Nenhum | 1/2 |
BRGE | k | Ramifique se maior ou igual, assinado | se (N ⊕ V= 0) então PC ← PC + k + 1 | Nenhum | 1/2 |
BRLT | k | Ramificação se for menor que zero, assinado | se (N ⊕ V= 1) então PC ← PC + k + 1 | Nenhum | 1/2 |
BRHS | k | Conjunto de galho se meio carregar bandeira | se (H = 1) então PC ← PC + k + 1 | Nenhum | 1/2 |
BRHC | k | Ramificar se a bandeira estiver meio carregada | se (H = 0) então PC ← PC + k + 1 | Nenhum | 1/2 |
BRTS | k | Ramificar se T sinalizador definido | se (T = 1) então PC ← PC + k + 1 | Nenhum | 1/2 |
BRTC | k | Ramificação se a bandeira T for apagada | se (T = 0) então PC ← PC + k + 1 | Nenhum | 1/2 |
BRVS | k | Ramificar se a bandeira de estouro estiver definida | se (V = 1) então PC ← PC + k + 1 | Nenhum | 1/2 |
BRVC | k | Ramificar se a bandeira de estouro for apagada | se (V = 0) então PC ← PC + k + 1 | Nenhum | 1/2 |
BREVE | k | Ramificação se a interrupção estiver habilitada | se (I = 1) então PC ← PC + k + 1 | Nenhum | 1/2 |
NOVIDADE | k | Ramificação se a interrupção estiver desativada | se (I = 0) então PC ← PC + k + 1 | Nenhum | 1/2 |
INSTRUÇÕES DE BIT E DE TESTE DE BIT | |||||
SBI | P, b | Definir bit no registro I / O | E/S(P,b) ← 1 | Nenhum | 2 |
CBI | P, b | Bit de limpeza no registro de E / S | E/S(P,b) ← 0 | Nenhum | 2 |
LSL | Rd | Deslocamento lógico para a esquerda | Rd(n+1) ← Rd(n), Rd(0) ← 0 | Z, C, N, V | 1 |
LSR | Rd | Deslocamento lógico para a direita | Rd(n) ← Rd(n+1), Rd(7) ← 0 | Z, C, N, V | 1 |
ROL | Rd | Girar para a esquerda pelo transporte | Rd(0)←C,Rd(n+1)← Rd(n),C←Rd(7) | Z, C, N, V | 1 |
ROR | Rd | Rodar para a direita e transportar | Rd(7)←C,Rd(n)← Rd(n+1),C←Rd(0) | Z, C, N, V | 1 |
RSA | Rd | Aritmética Shift Right | Rd(n) ← Rd(n+1), n=0..6 | Z, C, N, V | 1 |
Mnemônicos | Operandos | Descrição | Operação | Bandeiras | #Relógios |
TROCAR | Rd | Trocar Mordidelas | Rd(3..0)←Rd(7..4),Rd(7..4)←Rd(3..0) | Nenhum | 1 |
BSET | s | Conjunto de bandeiras | SREG(s) ← 1 | SREG (s) | 1 |
BCLR | s | Sinalizar claro | SREG(s) ← 0 | SREG (s) | 1 |
BST | Rr, b | Bit Store do Register para T | T ← Rr(b) | T | 1 |
Preto e branco | Rua, b | Carga de bits de T para registrar | Rd(b) ← T | Nenhum | 1 |
SEC | Definir transporte | C ← 1 | C | 1 | |
CLC | Limpar Carry | C ← 0 | C | 1 | |
SEN | Definir sinalizador negativo | N ← 1 | N | 1 | |
CLN | Limpar sinalizador negativo | N ← 0 | N | 1 | |
Zona Econômica Especial (ZEE) | Definir bandeira zero | Z ← 1 | Z | 1 | |
CLZ | Limpar sinalizador zero | Z ← 0 | Z | 1 | |
SEI | Habilitar interrupção global | Eu ← 1 | I | 1 | |
CLI | Desativar interrupção global | Eu ← 0 | I | 1 | |
SES | Definir sinalizador de teste assinado | S ← 1 | S | 1 | |
CLS | Sinalizador de teste com sinal de limpeza | S ← 0 | S | 1 | |
SEV | Defina o estouro do complemento de dois. | V ← 1 | V | 1 | |
CLV | Limpe o estouro de complemento de dois | V ← 0 | V | 1 | |
DEFINIR | Defina T em SREG | T ← 1 | T | 1 | |
CLT | Limpar T em SREG | T ← 0 | T | 1 | |
SEH | Definir bandeira de meio transporte em SREG | H ← 1 | H | 1 | |
CLH | Clear Half Carry Flag em SREG | H ← 0 | H | 1 | |
INSTRUÇÕES DE TRANSFERÊNCIA DE DADOS | |||||
MOV | Rua, Rua | Mover entre registros | Rd ← Rr | Nenhum | 1 |
MOVW | Rua, Rua | Copiar palavra de registro | Rd+1:Rd ← Rr+1:Rr | Nenhum | 1 |
LDI | Rua, K | Carga Imediata | Rd ← K | Nenhum | 1 |
LD | Rua, X | Carregar Indireto | Rd ← (X) | Nenhum | 2 |
LD | Estrada, X+ | Carga Indireta e Pós-Inc. | Rd ← (X), X ← X + 1 | Nenhum | 2 |
LD | Rua, –X | Carga Indireta e Pré-Dec. | X ← X – 1, Rd ← (X) | Nenhum | 2 |
LD | Rua, Y | Carregar Indireto | Estrada ← (Y) | Nenhum | 2 |
LD | Estrada, Y+ | Carga Indireta e Pós-Inc. | Rd ← (Y), Y ← Y + 1 | Nenhum | 2 |
LD | Estrada, – Y | Carga Indireta e Pré-Dec. | Y ← Y – 1, Rd ← (Y) | Nenhum | 2 |
LDD | Rd,Y+q | Carga Indireta com Deslocamento | Rd ← (Y + q) | Nenhum | 2 |
LD | Rua, Z | Carregar Indireto | Estrada ← (Z) | Nenhum | 2 |
LD | Estrada, Z+ | Carga Indireta e Pós-Inc. | Rd ← (Z), Z ← Z+1 | Nenhum | 2 |
LD | Rua, -Z | Carga Indireta e Pré-Dec. | Z ← Z – 1, Rd ← (Z) | Nenhum | 2 |
LDD | Rd, Z+q | Carga Indireta com Deslocamento | Rd ← (Z + q) | Nenhum | 2 |
SUD | Estrada, k | Carregar direto da SRAM | Rd ← (k) | Nenhum | 2 |
ST | X, Rr | Armazenar Indireto | (X) ← Rr | Nenhum | 2 |
ST | X+, Rr | Loja Indireta e Pós-Inc. | (X) ← Rr, X ← X + 1 | Nenhum | 2 |
ST | – X, Rr | Armazenar Indireto e Pré-Dez. | X ← X – 1, (X) ← Rr | Nenhum | 2 |
ST | S, Rr | Armazenar Indireto | (Y) ← Rr | Nenhum | 2 |
ST | Y+, Rr | Loja Indireta e Pós-Inc. | (Y) ← Rr, Y ← Y + 1 | Nenhum | 2 |
ST | – S, Rr | Armazenar Indireto e Pré-Dez. | Y ← Y – 1, (Y) ← Rr | Nenhum | 2 |
DST | Y+q,Rr | Armazenar Indireto com Deslocamento | (Y + q) ← Rr | Nenhum | 2 |
ST | Z, Rr | Armazenar Indireto | (Z) ← Rr | Nenhum | 2 |
ST | Z+, Rr | Loja Indireta e Pós-Inc. | (Z) ← Rr, Z ← Z + 1 | Nenhum | 2 |
ST | -Z, Rr | Armazenar Indireto e Pré-Dez. | Z ← Z – 1, (Z) ← Rr | Nenhum | 2 |
DST | Z+q,Rr | Armazenar Indireto com Deslocamento | (Z + q) ← Rr | Nenhum | 2 |
STS | k, Rr | Armazene direto na SRAM | (k) ← Rr | Nenhum | 2 |
LPM | Carregar memória de programa | R0 ← (Z) | Nenhum | 3 | |
LPM | Rua, Z | Carregar memória de programa | Estrada ← (Z) | Nenhum | 3 |
LPM | Estrada, Z+ | Carregar memória do programa e pós-inc. | Rd ← (Z), Z ← Z+1 | Nenhum | 3 |
SPM | Armazenar memória de programa | (z) ← R1:R0 | Nenhum | ||
IN | Rua, P | No porto | Rd ← P | Nenhum | 1 |
FORA | P, R | Porto de saída | P ← Rr | Nenhum | 1 |
EMPURRAR | Rr | Empurre o registro na pilha | PILHA ← Rr | Nenhum | 2 |
POP | Rd | Registro pop da pilha | Rd ← PILHA | Nenhum | 2 |
INSTRUÇÕES DE CONTROLE MCU | |||||
Não | Nenhuma operação | Nenhum | 1 | ||
DORMIR | Dormir | (ver descrição específica para a função Sleep) | Nenhum | 1 | |
RDM | Redefinição do cão de guarda | (veja a descrição específica para WDR/Timer) | Nenhum | 1 | |
QUEBRAR | Quebrar |
Velocidade (MHz) (1) | Abastecimento Voltage (V) | Faixa de temperatura | Pacote (2) | Código de pedido (3) |
10 | 1.8 – 5.5 | Industrial
(-40 ° C a + 85 ° C) (4) |
8P3 | ATtiny45V-10PU |
8S2 | ATtiny45V-10SU ATtiny45V-10SUR ATtiny45V-10SH ATtiny45V-10SHR | |||
8X | ATtiny45V-10XU ATtiny45V-10XUR | |||
20M1 | ATtiny45V-10MU ATtiny45V-10MUR | |||
20 | 2.7 – 5.5 | Industrial
(-40 ° C a + 85 ° C) (4) |
8P3 | ATtiny45-20PU |
8S2 | ATtiny45-20SU ATtiny45-20SUR
ATtiny45-20SH ATtiny45-20SHR |
|||
8X | ATtiny45-20XU ATtiny45-20XUR | |||
20M1 | ATtiny45-20MU ATtiny45-20MUR |
Notas: 1. Para velocidade versus volume de fornecimentotage, veja a seção 21.3 “Velocidade” na página 163.
Todas as embalagens são isentas de Pb, isentas de haleto e totalmente ecológicas e estão em conformidade com a diretiva europeia para restrição de substâncias perigosas (RoHS).
Indicadores de código
H: Acabamento de chumbo NiPdAu
U: estanho fosco
R: fita e carretel
Estes dispositivos também podem ser fornecidos em forma de wafer. Entre em contato com o escritório de vendas local da Atmel para obter informações detalhadas sobre pedidos e quantidades mínimas.
Errata
Errata ATtiny25
A carta de revisão nesta seção refere-se à revisão do dispositivo ATtiny25.
Rev D – F
Nenhuma errata conhecida.
Rev B-C
A leitura da EEPROM pode falhar com baixo volume de alimentaçãotage / baixa frequência de clock
A leitura da EEPROM pode falhar com baixo volume de alimentaçãotage / baixa frequência de clock
Tentando ler EEPROM em frequências de clock baixas e/ou baixo volume de alimentaçãotage pode resultar em dados inválidos.
Correção/solução alternativa do problema
Não use a EEPROM quando a frequência do clock estiver abaixo de 1 MHz e o volume de alimentaçãotage está abaixo de 2V. Se a frequência operacional não puder ser elevada acima de 1 MHz, então forneça voltage deve ser superior a 2V. Da mesma forma, se o volume de fornecimentotage não pode ser aumentado acima de 2 V, então a frequência de operação deve ser superior a 1 MHz.
Esta característica é conhecida por ser dependente da temperatura, mas não foi caracterizada. As orientações são fornecidas apenas para a temperatura ambiente.
Rev A
Não éampliderado.
Errata ATtiny45
A carta de revisão nesta seção refere-se à revisão do dispositivo ATtiny45.
Rev F-G
Nenhuma errata conhecida
Rev D – E
A leitura da EEPROM pode falhar com baixo volume de alimentaçãotage / baixa frequência de clock
A leitura da EEPROM pode falhar com baixo volume de alimentaçãotage / baixa frequência de clock
Tentando ler EEPROM em frequências de clock baixas e/ou baixo volume de alimentaçãotage pode resultar em dados inválidos.
Correção/solução alternativa do problema
Não use a EEPROM quando a frequência do clock estiver abaixo de 1 MHz e o volume de alimentaçãotage está abaixo de 2V. Se a frequência operacional não puder ser elevada acima de 1 MHz, então forneça voltage deve ser superior a 2V. Da mesma forma, se o volume de fornecimentotage não pode ser aumentado acima de 2 V, então a frequência de operação deve ser superior a 1 MHz.
Esta característica é conhecida por ser dependente da temperatura, mas não foi caracterizada. As orientações são fornecidas apenas para a temperatura ambiente.
Rev B-C
PLL não trava
A leitura da EEPROM do código do aplicativo não funciona no Lock Bit Mode 3
A leitura da EEPROM pode falhar com baixo volume de alimentaçãotage / baixa frequência de clock
A geração de saída PWM do contador 1 do temporizador em OC1B-XOC1B não funciona corretamente
PLL não trava
Quando em frequências abaixo de 6.0 MHz, o PLL não travará
Correção de problema/solução alternativa
Ao usar o PLL, execute a 6.0 MHz ou superior.
A leitura da EEPROM do código do aplicativo não funciona no Lock Bit Mode 3
Quando os bits de bloqueio de memória LB2 e LB1 são programados para o modo 3, a leitura da EEPROM não funciona a partir do código da aplicação.
Correção de problema/solução alternativa
Não defina o modo de proteção de bloqueio de bit 3 quando o código do aplicativo precisar ser lido na EEPROM.
A leitura da EEPROM pode falhar com baixo volume de alimentaçãotage / baixa frequência de clock
Tentando ler EEPROM em frequências de clock baixas e/ou baixo volume de alimentaçãotage pode resultar em dados inválidos.
Correção/solução alternativa do problema
Não use a EEPROM quando a frequência do clock estiver abaixo de 1 MHz e o volume de alimentaçãotage está abaixo de 2V. Se a frequência operacional não puder ser elevada acima de 1 MHz, então forneça voltage deve ser superior a 2V. Da mesma forma, se o volume de fornecimentotage não pode ser aumentado acima de 2 V, então a frequência de operação deve ser superior a 1 MHz.
Esta característica é conhecida por ser dependente da temperatura, mas não foi caracterizada. As orientações são fornecidas apenas para a temperatura ambiente.
Geração de saída PWM do contador do temporizador 1 em OC1B – XOC1B não funciona corretamente
A saída PWM do contador1 do temporizador OC1B-XOC1B não funciona corretamente. Somente no caso em que os bits de controle COM1B1 e COM1B0 estão no mesmo modo que COM1A1 e COM1A0, respectivamente, a saída OC1B-XOC1B funciona corretamente.
Correção de problema/solução alternativa
A única solução alternativa é usar a mesma configuração de controle nos bits de controle COM1A[1:0] e COM1B[1:0], consulte a tabela 14-4 na folha de dados. O problema foi corrigido para Tiny45 rev D.
Rev A
Consumo de energia de desligamento muito alto
DebugWIRE perde comunicação ao entrar em interrupções
PLL não trava
A leitura da EEPROM do código do aplicativo não funciona no Lock Bit Mode 3
A leitura da EEPROM pode falhar com baixo volume de alimentaçãotage / baixa frequência de clock
Consumo de energia de desligamento muito alto
Três situações levarão a um consumo de energia de desligamento muito alto. Estes são:
Um relógio externo é selecionado por fusíveis, mas a PORTA E/S ainda está habilitada como saída.
A EEPROM é lida antes de desligar.
VCC é de 4.5 volts ou superior.
Isenção de responsabilidade: As informações neste documento são fornecidas em relação aos produtos Atmel. Nenhuma licença, expressa ou implícita, por preclusão ou de outra forma, a qualquer direito de propriedade intelectual é concedida por este documento ou em conexão com a venda de produtos Atmel. EXCETO CONFORME ESTABELECIDO NOS TERMOS E CONDIÇÕES DE VENDA ATMEL LOCALIZADOS NO ATMEL WEBSITE, A ATMEL NÃO ASSUME NENHUMA RESPONSABILIDADE E RENUNCIA A QUALQUER GARANTIA EXPRESSA, IMPLÍCITA OU LEGAL RELACIONADA A SEUS PRODUTOS, INCLUINDO, SEM LIMITAÇÃO, A GARANTIA IMPLÍCITA DE COMERCIABILIDADE, ADEQUAÇÃO A UM DETERMINADO FIM OU NÃO VIOLAÇÃO. EM NENHUM CASO A ATMEL SERÁ RESPONSÁVEL POR QUAISQUER DANOS DIRETOS, INDIRETOS, CONSEQUENTES, PUNITIVOS, ESPECIAIS OU INCIDENTAIS (INCLUINDO, SEM LIMITAÇÃO, DANOS POR PERDAS E LUCROS, INTERRUPÇÃO DE NEGÓCIOS OU PERDA DE INFORMAÇÕES) DECORRENTES DO USO OU INCAPACIDADE DE USO ESTE DOCUMENTO, MESMO QUE A ATMEL TENHA SIDO AVISADA DA POSSIBILIDADE DE TAIS DANOS.
A Atmel não faz representações ou garantias com relação à precisão ou integridade do conteúdo deste documento e reserva-se o direito de fazer alterações nas especificações e descrições dos produtos a qualquer momento sem aviso prévio. A Atmel não se compromete a atualizar as informações aqui contidas. Salvo disposição em contrário, os produtos Atmel não são adequados e não devem ser usados em aplicações automotivas. Os produtos da Atmel não são destinados, autorizados ou garantidos para uso como componentes em aplicações destinadas a dar suporte ou sustentar a vida.