Atmel

Microcontrolador AVR Atmel de 8 bits com flash programável no sistema de 2/4/8K byteslasca

 

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 Configuração

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 Diagrama de blocos

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 Arquitetura

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. Uso geral

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.

Registrar

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

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

Figura 4.5

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 Mapa de memória

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 Mapa de memória 2

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

Distribuição de relógio

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. 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. Sistema de cronometragem

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

Figura 6.4

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 “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 “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 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 Figura 8.4

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. Figura 8.5

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 Cão de guarda

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

Figura 10

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)

Figura 10

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

RSTDISBL(1) • DWEN(1)

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
CHUVA Resistência de entrada analógica 100
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
CHUVA Resistência de entrada analógica 100
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
CHUVA Resistência de entrada analógica 100
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.

Referências

Deixe um comentário

Seu endereço de e-mail não será publicado. Os campos obrigatórios estão marcados *