Programando Attiny2313. Programando Attiny2313 Como escrever um programa para attiny2313

Arquitetura AVR RISC:

RISC (computador com conjunto de instruções reduzido). Esta arquitetura possui um grande conjunto de instruções, a maioria das quais executadas em 1 ciclo de máquina. Conclui-se que, em comparação com microcontroladores anteriores baseados na arquitetura CISC (por exemplo, MCS51), os microcontroladores RISC são 12 vezes mais rápidos.

Ou se tomarmos como base um certo nível de desempenho, então para cumprir esta condição, os microcontroladores baseados em RISC (Attiny2313) requerem 12 vezes menos frequência de clock do gerador, o que leva a uma redução significativa no consumo de energia. Neste sentido, torna-se possível projetar vários dispositivos no Attiny2313 utilizando energia da bateria.

Dispositivo de armazenamento operacional (RAM) e memória não volátil de dados e programas:

  • 2 KB de memória de programa Flash autoprogramável que pode fornecer 10.000 repetições de gravação/apagamento.
  • 128 bytes de memória de dados graváveis ​​EEPROM que pode fornecer 100.000 repetições de gravação/apagamento.
  • Memória SRAM de 128 bytes (RAM somente leitura).
  • É possível usar a função para proteger o código do programa e os dados da EEPROM.

Propriedades periféricas:

  1. Microcontrolador Attiny2313 equipado com um contador temporizador de oito bits com um pré-escalador instalado separadamente com um coeficiente máximo de 256.
  2. Há também um contador-temporizador de dezesseis bits com um pré-escalador separado, circuito de captura e comparação. O temporizador-contador pode ser cronometrado a partir de uma fonte de sinal externa ou interna.
  3. Dois canais. Existe um modo de operação de modulação PWM rápida e PWM com correção de fase.
  4. Comparador analógico interno.
  5. Temporizador Watchdog (programável) com oscilador interno.
  6. Interface serial universal (USI).

Indicadores técnicos especiais do Attiny2313:


  • Parado— Modo inativo. Neste caso, apenas o processador central para de funcionar. Ocioso não afeta a operação do SPI, comparador analógico, conversor A/D, contador temporizador, watchdog ou sistema de interrupção. Na verdade, tudo o que acontece é que a sincronização do núcleo da CPU e da memória flash é interrompida. O microcontrolador Attiny2313 retorna à operação normal do modo Idle por uma interrupção externa ou interna.
  • Desligar— O modo mais econômico, no qual o microcontrolador Attiny2313 é realmente desligado do consumo de energia. Neste estado, o gerador de clock para e todos os periféricos são desligados. Apenas o módulo de processamento de interrupções de uma fonte externa permanece ativo. Quando uma interrupção é detectada, o microcontrolador Attiny2313 sai do desligamento e retorna à operação normal.
  • Espera– o microcontrolador muda para este modo de espera de consumo de energia usando o comando SLEE. Isto é semelhante a desligar, a única diferença é que o relógio continua a funcionar.

Portas de entrada-saída do microcontrolador Attiny2313:

O microcontrolador está equipado com 18 pinos de E/S, que podem ser programados com base nas necessidades que surgem ao projetar um dispositivo específico. Os buffers de saída dessas portas podem suportar uma carga relativamente alta.

  • Porta A (PA2 - PA0) – 3 bits. Porta de E/S bidirecional com resistores pull-up programáveis.
  • Porta B (PB7 - PB0) – 8 bits. Porta de E/S bidirecional com resistores pull-up programáveis.
  • Porta D (PD6 - PD0) – 7 bits. Porta de E/S bidirecional com resistores pull-up programáveis.

Faixa de tensão de alimentação:

O microcontrolador opera com sucesso com uma tensão de alimentação de 1,8 a 5,5 volts. O consumo de corrente depende do modo de operação do controlador:

Modo ativo:

  • 20 µA a uma frequência de clock de 32 kHz e uma tensão de alimentação de 1,8 volts.
  • 300 µA a uma frequência de clock de 1 MHz e uma tensão de alimentação de 1,8 volts.

Modo de economia de energia:

  • 0,5 µA a uma tensão de alimentação de 1,8 volts.

(3,6 Mb, baixado: 5.958)

Microcontrolador AVR de 8 bits com 2 KB de memória Flash programável pelo sistema

Características:

  • Arquitetura AVR RISC
  • AVR - arquitetura RISC de alta qualidade e baixo consumo de energia
    120 instruções, a maioria das quais executadas em um ciclo de clock
    32 registros de trabalho de uso geral de 8 bits
    Arquitetura completamente estática
  • RAM e programa não volátil e memória de dados
    2 KB de memória de programa Flash autoprogramável capaz de suportar 10.000 ciclos de gravação/apagamento
    Memória de dados EEPROM programável pelo sistema de 128 bytes, capaz de suportar 100.000 ciclos de gravação/apagamento
    128 bytes de memória SRAM integrada (RAM estática)
    Proteção programável contra leitura de memória de programa Flash e memória de dados EEPROM
  • Características periféricas
    Um temporizador/contador de 8 bits com pré-escalador separado
    Um temporizador/contador de 16 bits com pré-escalador separado, circuito de comparação, circuito de captura e dois canais PWM
    Comparador analógico integrado
    Temporizador de watchdog programável com oscilador integrado
    USI - Interface Serial Universal
    UART duplex completo
  • Recursos especiais do microcontrolador
    Depurador debugWIRE integrado
    Programação no sistema via porta SPI
    Fontes de interrupção externas e internas
    Modos de baixo consumo Inativo, Desligado e Standby
    Circuito de reinicialização de inicialização aprimorado
    Circuito programável de detecção de falha de energia
    Gerador calibrado integrado
  • Portas de E/S e design de caixa
    18 linhas de E/S programáveis
    Pacotes PDIP de 20 pinos, SOIC de 20 pinos e MLF de 32 pinos
  • Faixa de tensão de alimentação
    de 1,8 a 5,5 V
  • Frequência de operação
    0 - 16 MHz
  • Consumo
    Modo ativo:
    300 µA a 1 MHz e tensão de alimentação de 1,8 V
    20 µA a 32 kHz e tensão de alimentação de 1,8 V
    Modo de baixo consumo
    0,5 µA com tensão de alimentação de 1,8 V

Diagrama de blocos ATtiny2313:


Descrição geral:

ATtiny2313 é um microcontrolador CMOS de 8 bits de baixo consumo com arquitetura AVR RISC. Ao executar instruções em um único ciclo, o ATtiny2313 atinge desempenho de 1 MIPS com velocidade de clock de 1 MHz, permitindo ao projetista otimizar a relação potência-desempenho.

O núcleo do AVR integra um rico conjunto de instruções e 32 registros de trabalho de uso geral. Todos os 32 registros estão diretamente conectados à Unidade Lógica Aritmética (ALU), permitindo acesso a dois registros independentes durante a execução de uma única instrução. Como resultado, esta arquitetura permite um desempenho dezenas de vezes maior do que a arquitetura CISC padrão.

ATtiny2313 tem as seguintes características: memória de programa programável Flash de 2 KB, memória de dados EEPROM de 128 bytes, SRAM (RAM estática) de 128 bytes, 18 linhas de E/S de uso geral, 32 registros de trabalho de uso geral, interface de um fio para o built-in depurador, dois temporizadores/contadores flexíveis com circuitos de comparação, fontes de interrupção internas e externas, USART serial programável, interface serial universal com detector de condição de partida, temporizador watchdog programável com oscilador integrado e três modos de baixa potência inicializados por software. No modo inativo, o núcleo para, mas a RAM, os temporizadores/contadores e o sistema de interrupção continuam a funcionar. No modo Power-down, os registros mantêm seus valores, mas o gerador para, desativando todas as funções do dispositivo até a próxima interrupção ou reinicialização do hardware. No modo Standby, o oscilador mestre funciona enquanto o restante do dispositivo está ocioso. Isso permite que o microprocessador inicialize muito rapidamente enquanto mantém a energia quando ocioso.

O dispositivo é fabricado com tecnologia de memória não volátil de alta densidade da Atmel. O ISP Flash integrado permite reprogramar a memória do programa no sistema por meio de uma interface serial SPI ou com um programador convencional de memória não volátil. Ao combinar um núcleo RISC de 8 bits com memória Flash autoprogramável em um único chip, o ATtiny2313 é um microcontrolador poderoso que oferece maior flexibilidade ao projetista do sistema microprocessador.

O microcontrolador ATTiny2313 é um renascimento em uma nova série do antigo microcontrolador AT90S2313, que fez bastante sucesso em sua época. ATTiny2313 é uma versão melhorada de seu ancestral. Mas ele também herdou uma periferia bastante modesta. Portanto, em termos de funcionalidade, o ATTiny2313 é modesto. O microcontrolador está disponível em duas versões - regular (ATTiny2313) e com potência reduzida (ATTiny2313) V). Para nutrição reduzida você tem que pagar com rebaixamento frequência do relógio microcontrolador (operação mais lenta).

Características gerais:

  • 120 instruções otimizadas para programação em linguagens de alto nível;
  • 32 registros de uso geral (adoro isso);
  • quase todas as instruções são executadas em 1 ciclo de clock do gerador, fazendo com que o desempenho chegue a 20 MIPS (20 milhões de operações por segundo);
  • 2 kilobytes de memória flash para programas. A memória flash pode ser programada diretamente do próprio controlador;
  • EEPROM (memória não volátil) de 128 bytes;
  • SRAM de 128 bytes (memória de acesso aleatório).

O que temos a bordo deste chip periférico?

  • um temporizador/contador de 8 bits;
  • um temporizador/contador de 16 bits;
  • quatro canais PWM;
  • comparador analógico;
  • Temporizador de vigilância;
  • Interface serial universal USI;
  • USART (este é um computador COM RS232).

Brindes especiais:

Potência, frequência:

1,8 – 5,5 V (para ATTiny2313V) até 10 MHz
2,7 – 5,5 V (para ATTiny2313) até 20 MHz
No modo de operação, consome 230 µA com alimentação de 1,8 V e frequência do oscilador mestre de 1 MHz. No modo de economia de energia, o desligamento consome menos de 1 µA a 1,8V

Programação

ATTiny2313 conseguiu sobreviver a outra revisão e adquiriu uma carta A no final. Dentre as inovações destacam-se:
— Interrupções externas apareceram em todas as pernas.
— A separação entre a fonte de alimentação normal e de baixa tensão foi removida. O ATTiny2313A pode ser alimentado de 1,8 a 5,5 V, sendo necessário apenas atender às restrições de frequência de 4 MHz (para 1,8 V) a 20 MHz.
— O consumo de corrente foi significativamente reduzido, tanto no modo normal como nos modos de poupança de energia - 190 µA e 0,1 µA, respetivamente.
Além disso, como resultado da última revisão, o ATTiny2313 adquiriu um irmão mais velho, o ATTiny4313 (sem a letra A). O irmão mais velho é semelhante ao ATTiny2313A, com exceção do dobro da memória (4 kB Flash, 256 bytes EEPROM, 256 bytes SRAM). Essas mudanças mostram as intenções da Atmel de continuar a oferecer suporte a este microcontrolador.

Devido à baixa disponibilidade e ao preço incompreensível das novas versões do ATTiny2313A e ATTiny4313, meus dispositivos serão desenvolvidos na versão antiga do ATTiny2313. Mas como as novas versões são compatíveis com as antigas, teoricamente o firmware deveria funcionar em novos microcontroladores.

Conclusões:

Como todos Microcontroladores AVR A série ATTiny2313 é produtiva e econômica. Possui um case SOIC que é conveniente para layout e soldagem da placa. As distâncias entre as pernas são relativamente grandes (você pode até colocar um traço na prancha entre as pernas adjacentes). Fácil de aprender. Há muita literatura em russo. Devido à grande popularidade de seu antecessor AT90S2313, muitos circuitos interessantes foram desenvolvidos na rede para repetição. Amplamente disponível comercialmente. Barato. Para começar a estudar microcontroladores, este é o lugar certo. Entre as deficiências, vale destacar os periféricos bastante modestos da atualidade. E como desvantagem, o caso SOIC é um pouco grande (embora eu já esteja criticando). Pequenas quantidades de memória não permitirão criar projetos de grande escala no ATTiny2313. Em geral, um bom controlador de alto desempenho para pequenos projetos que não requerem periféricos especiais. Pretendo utilizá-lo amplamente em meus dispositivos devido à melhor disponibilidade e baixo custo.

Hoje tentaremos usar um microcontrolador mais simples ATtiny2313 e conecte a ele um display LCD de caracteres contendo duas linhas de 16 caracteres.

Vamos conectar o display de maneira padrão Maneira de 4 bits.

Primeiro, vamos começar, é claro, pelo microcontrolador, pois já estamos bem familiarizados com o display das lições anteriores.

Vamos abrir a ficha técnica do controlador ATtiny2313 e vamos ver sua pinagem

Vemos que este controlador existe em dois tipos de gabinetes, mas como o obtive em um pacote DIP, consideraremos esta versão específica do gabinete e, em princípio, eles não diferem muito, exceto na aparência, então como o número de pernas é o mesmo - 20 cada.

Como existem 20 pernas em comparação com as 28 pernas do controlador ATMega8, nas quais temos trabalhado o tempo todo e continuaremos trabalhando, então, respectivamente, também haverá menos possibilidades.

Em princípio tudo o que o ATmega8 tinha está aqui, a única coisa é que tem menos garras de porta. Mas como a tarefa que temos pela frente é tentar conectá-lo através do barramento SPI a outro controlador, isso não nos deprime muito.

Existem algumas outras diferenças, mas são pequenas e iremos conhecê-las conforme necessário.

Vamos montar um circuito como este (clique na imagem para ampliar a imagem)

O display está conectado aos pinos da porta D. PD1 e PD2 estão nas entradas de controle e o restante está conectado aos pinos do módulo de display D4-D7.

Vamos criar um projeto com o nome TINY2313_LCD, transferir tudo para ele exceto o módulo principal do projeto para conectar o display ao Atmega8.

É claro que algumas coisas precisarão ser refeitas. Para fazer isso, você precisa estudar cuidadosamente qual perna está conectada a quê. O barramento E do display está conectado ao PD2, e o barramento RS está conectado ao PD1, então vamos fazer alterações no arquivo lcd.h

#definire1PORTD|=0b0000 01 00 //define a linha E como 1

#definire0PORTD&=0b1111 10 11 //define a linha E como 0

#definirrs1PORTD|=0b00000 01 0 //define a linha RS como 1 (dados)

#definirrs0PORTD&=0b11111 10 1 //define a linha RS como 0 (comando)

Como podemos ver pela fonte em negrito, não tivemos mudanças tão drásticas.

Agora entradas de informações. Aqui usamos as pernas PD3-PD6, ou seja, elas estão deslocadas em 1 ponto em relação à conexão com o Atmega8, então também vamos corrigir algo no arquivo lcd.c em função enviar meio byte

PORTD&=0b 1 0000 111; // apaga informações nas entradas DB4-DB7, deixa o resto em paz

Mas isso não é tudo. Anteriormente deslocamos os dados transmitidos em 4, mas agora, devido às alterações acima, só teremos que deslocá-los em 3. Portanto, na mesma função também corrigiremos a primeira linha

c<<=3 ;

Essas são todas as mudanças. Concordo, eles não são tão bons! Isso é conseguido pelo fato de sempre tentarmos escrever código universal e usar substituições de macro. Se não tivéssemos dedicado tempo a isso de uma só vez, teríamos que corrigir o código em quase todas as funções da nossa biblioteca.

No módulo principal, não tocamos na inicialização da porta D; deixamos todo o módulo entrar no estado de saída, como na lição 12.

Vamos tentar montar o projeto e primeiro ver o resultado no Proteus, já que também fiz um projeto para ele, que também estará no arquivo anexo com o projeto para Atmel Studio

Tudo funciona muito bem para nós! É assim que você pode refazer rapidamente um projeto de um controlador para outro.

Proteus é muito bom, mas é sempre melhor ver detalhes reais. Todo o circuito foi montado em uma protoboard, pois não fiz nem montei uma placa de depuração para este controlador. Conectaremos o programador através de um conector padrão como este

Aqui está o diagrama completo

Tudo é padrão aqui. Resistor de pull-up para RESET, etc.

Agora, antes de atualizar o controlador no Avrdude, precisamos selecionar o controlador e ler sua memória flash

Em seguida, vá para a guia FUSÍVEIS e configure os fusíveis corretamente. Como não temos ressonador de quartzo, instalamos os fusíveis desta forma


Principal