Índice:

Reutilização do pino da interface ATtiny84 / 85 SPI: 6 etapas
Reutilização do pino da interface ATtiny84 / 85 SPI: 6 etapas

Vídeo: Reutilização do pino da interface ATtiny84 / 85 SPI: 6 etapas

Vídeo: Reutilização do pino da interface ATtiny84 / 85 SPI: 6 etapas
Vídeo: DIY Portable Monitor made of an old Laptop screen 2024, Novembro
Anonim
Reutilização de pinos de interface ATtiny84 / 85 SPI
Reutilização de pinos de interface ATtiny84 / 85 SPI

Esta instrução é uma continuação do "ATtiny84 / 85 In-circuit Debugging with Serial Output" instrutível e estende essa configuração de hardware e software para resolver o problema de reutilização dos pinos de download de programação pelo programa aplicativo. Ao todo, entre esta e a parte 1 instrutível, os seguintes tópicos são discutidos / demonstrados:

Tema ATtiny84 ATtiny85
Comunicação serial usando a classe SoftwareSerial X X
Compartilhando pinos de dispositivo entre o aplicativo e o download X X
Interrupção de mudança de PIN X
Interrupção externa X
Dormir no modo POWER_DOWN; acordar na interrupção X
Solução alternativa para o erro de link de vetor de interrupção "multiplamente definido" relacionado a SoftwareSerial X
Modificação no circuito, download, depuração, … ciclo de desenvolvimento para os dispositivos ATtiny X X

Adicionar um componente de E / S de hardware a um dos pinos dedicados à interface de programação SPI às vezes é OK, às vezes não. Por exemplo, adicionar um LED ao MISO apenas faz com que o LED pisque durante o download e, em seguida, fique disponível para o aplicativo. No entanto, adicionar uma campainha piezoelétrica ao MISO resultará em um som estridente horrível seguido de falha no download.

Este manual explica como usar um multiplexador 4x2: 1 para "recuperar" o uso dos pinos atribuídos aos sinais de interface SPI MISO, MOSI e SCK, protegendo-os durante o download. A reutilização do pino RESET requer uma troca de fusível e não é coberta por esta abordagem. A atribuição dupla dos pinos é realizada usando o multiplexador para alternar entre o aplicativo e as entradas de programação, dependendo se o download está em andamento. Código e esquemas estão incluídos para o ATtiny84 e ATtiny85. A configuração do ATiny84 é abordada primeiro, pois tem duas portas de E / S e pode ser usada para ilustrar alguns problemas / soluções adicionais. Após a discussão do tiny84, os mesmos cenários são discutidos para o ATtiny85.

Etapa 1: Hardware necessário

Imagem
Imagem

A maior parte do hardware necessário foi listado na parte 1 instrutível, portanto, apenas o novo hardware está listado abaixo.

Nome Possível Fonte Como é usado
Multiplexador 4x2: 1 Mouser Contém quatro interruptores de 2 entradas e 1 saída que são o mecanismo pelo qual os sinais da interface SPI e E / S do aplicativo são compartilhados.
Interruptor SPST Qualquer tipo de switch (momentâneo ou travado) funcionará. A opção é usada para ilustrar o compartilhamento de pinos para uma entrada de aplicativo.
Resistor de 10K Resistor pull-down para a chave SPST para evitar uma entrada flutuante
Imagem
Imagem
Imagem
Imagem

O multiplexador é a chave para isolar o uso de download de pinos do uso de aplicativos. A funcionalidade geral do multiplexador 4x2: 1 é bastante simples, consistindo em 2 sinais de controle e 4 interruptores de funcionamento idêntico. O comportamento de cada pino do multiplexador é discutido abaixo:

Alfinete Nome Função
15 G Conforme indicado na tabela verdade, o multiplexador só funciona quando o pino de habilitação G está baixo. Como nunca queremos desabilitar totalmente o multiplexador, o pino 15 será conectado diretamente ao terra.
2-4; 5-7; 9-11;12-14 A (entrada), B (entrada), Y (saída) Existem quatro entradas de 2; 1-saída muda com cada grupo de 3 pinos numerados consecutivamente na ordem A (entrada), B (entrada), Y (saída) e. para o switch 1; pino 2 = 1A; pino 3 = 1B; pino 4 = 1Y.
1 Selecione Quando Select está baixo, a entrada do switch A é conectada ao pino de saída do switch associado, Y. Quando o select está alto, a entrada do switch B é conectada à saída. Os interruptores são controlados simultaneamente pelo sinal Select e funcionam de forma idêntica.
8 GND multiplexer IC aterrado
16 VCC multiplexer IC power

Etapa 2: Visão geral dos casos de teste

Imagem
Imagem
Imagem
Imagem

Os dois cenários para reutilização de pinos são baseados em se o pino é uma entrada ou saída do aplicativo. O procedimento para lidar com qualquer entrada é sempre o mesmo; além disso, o procedimento para saídas de aplicativos é idêntico, independentemente do componente de hardware. Mesmo assim, a explicação é mais fácil, e espero que mais clara, se exemplos específicos forem dados. Layouts minimalistas para os dois casos são mostrados acima. Para as configurações detalhadas mais tarde, as conexões se tornam um pouco como um ninho de esquilos, portanto, pode ser útil consultar esses diagramas de limpeza.

RESET é a escolha perfeita para o sinal Select do multiplexador, uma vez que é baixo durante o download, mas volta alto quando o download é concluído. Observe que qualquer uma das opções do multiplexador pode ser usada para ambos os casos, uma vez que todas as opções se comportam de forma idêntica. Além disso, nenhum dos exemplos é "realista"; eles foram escolhidos como a maneira mais direta de ilustrar as técnicas de isolamento

  1. Caixa de saída: a saída do LED do ATtiny84 pino 4 (SCK) é isolada usando o interruptor do multiplexador 2

    • conecte o pino 2A do multiplexador ao aterramento
    • conecte o pino 2B do multiplexador ao pino 4 ATtiny85
    • conecte a saída 2Y ao ânodo LED

      • Resultados esperados:

        • LED está desligado durante o download desde conectado a 2A, aterramento
        • LED conectado ao pino de saída do aplicativo 4 após o download via 2B e começa a piscar
  2. Caso de entrada: a entrada do interruptor SPST para ATtiny84 pino 6 (MOSI) é isolada usando o interruptor do multiplexador 3

    • O fio condutor MOSI do cabeçalho do programador AVR é movido para 3A
    • interruptor de entrada 3B está conectado à saída SPST
    • saída 3Y está conectada a ATtiny84 pino 6

      • 3A, MOSI, é conectado ao pino 6 durante o download
      • 3B, saída SPST, é conectado ao pino 6 após o download

O caso 1 é bem-sucedido se o LED não piscar durante o download do programa e, em seguida, piscar a cada dois segundos após o download, conforme esperado sob o controle do programa. Sem isolamento, o LED piscaria durante o download, pois está conectado diretamente ao sinal SCK, que muda de estado para recepção / transmissão de dados do relógio.

O caso 2 é bem-sucedido se o sinal MOSI é encaminhado para o ATtiny84 durante o download, ou seja, o download não falha e o LED responde ao SPST ligar / desligar após o download. O caso 2 evita uma falha de download improvável. Sem isolamento, a chave SPST causará falha se 1) uma chave travada for usada e 2) a chave for deixada na posição ligada durante o download. Quando isolado pelo multiplexador, o switch não pode causar falha no download em nenhuma circunstância. Um pouco exagerado, mas reconfortante para nós, velhos.

Uma consequência do uso do multiplexador é que o componente de hardware não pode mais ser conectado diretamente ao pino de E / S do microcontrolador. Isso é um tanto inconveniente, mas permite que o componente permaneça na placa de ensaio durante o teste junto com o outro hardware do aplicativo e pode ser movido de volta para seu local correto quando o teste for concluído.

Etapa 3: ATtiny84 Caso 1 - Isole a saída do aplicativo

Imagem
Imagem

Esta etapa descreve a configuração para compartilhamento de um pino de saída do aplicativo com um sinal de download. O exemplo usado é o LED conectado ao pino 4 (SCK). Usar o LED existente como exemplo permite enfatizar a adição do multiplexador ao ambiente de hardware e software da parte 1.

  • Hardware

    • Adicione o multiplexador ao breadboard no local relativo mostrado no diagrama acima. O multiplexador é posicionado em direção ao centro para permitir espaço para o switch SPST necessário no Caso 2.
    • Estenda o sinal RESET para o multiplexador adicionando um fio condutor (sugiro amarelo) do pino 11 do ATtiny84 ao pino 1 do multiplexador.
    • A configuração de hardware restante é fornecida na Etapa 2

      • conecte o pino 2A do multiplexador diretamente ao aterramento
      • conecte o pino 2B a ATtiny84 pino 4
      • conecte a saída 2Y ao ânodo LED

        • Resultados esperados:

          • durante o download, 2Y é conectado ao aterramento (2A), então o LED permanece apagado
          • Após o download, 2Y é conectado a ATtiny84 pino 4 - controle de LED do aplicativo
  • Programas

    • O código da parte 1 é reutilizado; disponível na parte 1 instrutível em vez de duplicado aqui
    • Carregue e compile o programa da parte 1 no Arduino IDE
    • Conecte o programador Tiny AVR a uma porta USB do PC
    • Conecte o cabo Adafruit USB para serial a uma segunda porta USB

      • Uma porta COM é criada e automaticamente disponibilizada na lista de portas IDE
      • Abra a janela COM
    • Baixe o código compilado para o ATtiny84

Os resultados do programa de aplicação são os mesmos da parte 1, uma vez que a única alteração foi mover o LED para um local "protegido": O LED pisca em intervalos de 2 segundos; a saída serial é a mesma. A única diferença que deve ocorrer é que o LED não pisca mais durante o download, pois, durante esse tempo, está conectado ao terra através do pino 2A do multiplexador.

Imagem
Imagem

Etapa 4: ATtiny84 Caso 2 - Isolar a entrada do aplicativo

Imagem
Imagem

Esta etapa se baseia na configuração do caso de isolamento de saída anterior. As alterações de hardware consistem em conectar uma chave SPST ao pino 6 do ATtiny84 (MOSI) por meio do multiplexador. Portanto, as alterações de hardware são mínimas, mas há várias alterações de software para permitir que o switch SPST controle o LED usando uma interrupção de troca de pino. O código atualizado está incluído na parte inferior desta seção. O código deve ser copiado para o IDE do Arduino; sugiro salvá-lo com o nome Multiplexer_Input. (Peço desculpas pela extensão desta seção, mas é o cerne da finalidade do instrutível e acho que é melhor como um monólito em vez de inserir intervalos artificiais.)

Atualizar Localização Propósito
inclui a classe SoftwareSerial "hackeada" incluir seção O LED agora é controlado pelo interruptor SPST por meio de uma interrupção de mudança de pino. A classe SoftwareSerial deve ser modificada, caso contrário, ela aloca TODOS os vetores de interrupção de mudança de pino. Isso causa um erro de link de "definição múltipla" para o vetor (porta 0) atribuído ao switch SPST. A versão serial do software hackeado deve ser colocada no mesmo diretório do programa para que afete apenas este aplicativo.
Definição de pino de entrada SPST incluir / seção de definição atribuição de entrada SPST a um pino de dispositivo. O pino é específico do dispositivo, portanto, é adicionado à (s) seção (ões) #ifdef ATtiny8x.
Modo de pino de entrada SPST função de configuração O pino SPST é configurado como um INPUT
Configure a interrupção do pino SPST função de configuração O vetor de interrupção é atribuído ao pino de entrada SPST para que uma mudança de estado da chave cause uma interrupção. Os registros de configuração e o tipo de interrupção são específicos do dispositivo. Para tornar o código o mais simples possível, as diferenças são tratadas em uma seção #if definida
Configuração de mensagem serial completa função de configuração A mensagem de saída serial de configuração completa é alterada para refletir o aplicativo de entrada do multiplexador
Adicionar função ISR do interruptor SPST seção de código O ISR para a interrupção de mudança de pino SPST é adicionado. O código é comum, mas o vetor usado é específico do dispositivo e é definido nas seções dependentes do dispositivo na parte superior do programa. Para verificar se o ISR está ativado, o estado do LED é alterado. Embora um não-não em um aplicativo real, uma mensagem de saída serial é gerada refletindo o novo estado do LED.
Modificar o processamento do loop função de loop O ISR agora controla ligar e desligar o LED para que a funcionalidade seja removida da rotina de loop. Uma chamada para a rotina de sono é adicionada para ATtiny84 como uma espécie de "extra". Para esta aplicação, ATtiny85 sleep não funciona; talvez devido à interferência da classe Software Serial, uma vez que ela funciona com SoftwareSerial removido.
Adicionar rotina de sono seção de código A funcionalidade de suspensão não é necessária para demonstrar o uso do multiplexador. Apenas adicionado porque normalmente desejaria esperar por uma entrada no modo POWER_DOWN para economizar energia em vez de continuar a executar o loop do programa sem fazer nada até que uma entrada ocorra.

Modifique o código da classe SoftwareSerial

A classe SoftwareSerial precisa ser alterada para que não monopolize todas as portas de interrupção de alteração de pino. O código da classe SoftwareSerial está localizado em

C: / Arquivos de programas (x86) Arduino / hardware / arduino / avr / libraries / SoftwareSerial / src

Faça uma localização em PCINT0_vect em SoftwareSerial.cpp para encontrar o local de início para as alterações de código. Adicione o seguinte código imediatamente anterior à instrução #if definido (PCINT0_vect) existente.

#if definido (_ AVR_ATtiny84_)

#define MYPORT PCINT1_vect #elif defined (_ AVR_ATtiny85_) #define MYPORT PCINT0_vect #endif ISR (MYPORT) {SoftwareSerial:: handle_interrupt (); }

Agora comente o bloco de código existente que aloca os vetores de interrupção da porta conforme indicado abaixo (basta adicionar os símbolos de comentário de bloco inicial e final / * e * /):

/*

# se definido (PCINT0_vect) ISR (PCINT0_vect) {SoftwareSerial:: handle_interrupt (); } #endif #if defined (PCINT1_vect) ISR (PCINT1_vect) {// SoftwareSerial:: handle_interrupt (); ISR (PCINT1_vect, ISR_ALIASOF (PCINT0_vect)); } #endif #se definido (PCINT2_vect) ISR (PCINT2_vect, ISR_ALIASOF (PCINT0_vect)); #endif #if definido (PCINT3_vect) ISR (PCINT3_vect, ISR_ALIASOF (PCINT0_vect)); #fim se */

Configure o Hardware

A chave SPST é conectada ao pino 6 do ATtiny84 (MOSI) conforme descrito na Etapa 2. O procedimento é duplicado aqui por conveniência.

  • conecte a entrada da chave 3A ao cabo MOSI do cabeçalho do programador Tiny AVR
  • conecte 3B ao pino de saída ON do interruptor SPST
  • conecte 3Y a ATtiny84 pino 6

    • RESULTADOS:

      • 3A, MOSI, será transferido para ATtiny84 pino 6 durante o download
      • 3B, saída SPST, será conectado ao pino 6 após o download

Execute o programa

Antes de correr, coloque o interruptor SPST na posição desligado. Caso contrário, o LED acenderá quando a chave for desligada e vice-versa. Siga o procedimento da etapa 3 para carregar, compilar e baixar o programa de entrada do aplicativo usando o IDE do Arduino. Como antes, o LED não deve piscar durante o download, então a única indicação de que o programa está instalado e funcionando será a mensagem serial no final da rotina de configuração: CONFIGURAÇÃO concluída - Exemplo de entrada

Neste ponto, o programa está aguardando uma entrada do switch SPST. Colocar a chave na posição ON fará com que o LED acenda; mudar de volta para a posição desligada desliga o LED. As mensagens de saída verificam se o ISR foi invocado (ISR: Led HIGH, ISR: Led LOW). Observe que a ordem das mensagens seriais é GO TO SLEEP primeiro, aguardando uma mudança de estado da chave; ao obter uma entrada de switch, o ISR é invocado, alterna o LED e documenta a alteração; então, o processamento é retomado após a chamada dormir, já que a interrupção desperta o processador.

Imagem
Imagem

PROGRAMA PARA ESTE INSTRUÍVEL:

//************************************************************************

// PARTE 2: Compartilhamento de pin de dispositivo de download / aplicativo //. Modifica o código da Parte 1 para suportar a reutilização do aplicativo dos pinos // atribuídos à interface de programação do SPI //. Código "Comon" para ATtiny85 e ATtiny84 // **************************************** ********************************** #include "SoftwareSerial.h" // Modified Arduino SoftwareSerial class #include // While o código de processamento é comum, os pinos usados são específicos do dispositivo #if definidos (_ AVR_ATtiny84_) || definido (_ AVR_ATtiny84A_) #define ledPin 4 // Alternado para ligar / desligar o Led conectado #define rxPin 9 // Pino usado para recepção serial #define txPin 10 // Pino usado para transmissão serial #define SpstPin 6 // Entrada do interruptor SPST (MOSI) #define ISR_VECT PCINT0_vect // Interruptor SPST vetor de interrupção de mudança de pino #elif definido (_ AVR_ATtiny85_) #define ledPin 1 #define rxPin 4 #define txPin 3 #define SpstPin 2 // Entrada do interruptor ISPST_de_de_Int0_define (INT0) // Chave SPST Vetor de interrupção de mudança de pino #else #error Apenas ATiny84 e ATtiny85 são suportados por este projeto #endif // Criar instância da classe de software serial especificando quais // pinos de dispositivo devem ser usados para receber e transmitir SoftwareSerial mySerial (rxPin, txPin); // ------------------------------------------------ ------------------------ // Inicializar recursos de processamento // ------------------- -------------------------------------------------- --- void setup () {mySerial.begin (9600); // Iniciar atraso de processamento serial (2000); // Dê tempo para a comunicação serial para concluir a inicialização. // caso contrário, a primeira saída provavelmente está ausente ou truncada pinMode (ledPin, OUTPUT); // Configure o pino do led para OUTPUT pinMode (SpstPin, INPUT); // Configure o pino da chave SPST como INPUT #if definido (_ AVR_ATtiny84_) || (_AVR_ATtiny84A_) // configurar a interrupção de mudança de pino para lidar com a entrada da chave no pino 6 (MOSI) GIMSK | = (1 <

Etapa 5: ATtiny85 Caso 1 - Isole a saída do aplicativo

Imagem
Imagem

Em vez de construir uma configuração de hardware duplicada para o ATtiny85, é provavelmente mais fácil começar com a configuração finalizada para o ATtiny84 da Etapa 4 e substituir o chip tiny84 pelo tiny85. Todo o hardware necessário já está disponível. Se estiver usando essa abordagem, localize o tiny85 de forma que os pinos 3 e 4 se alinhem com o cabo serial tx e recebam os fios. É então apenas uma questão de realocar os fios condutores da interface SPI para que correspondam aos locais necessários para o ATtiny85.

Se estiver começando do zero, basta seguir as etapas gerais da Etapa 3 e o diagrama franzido acima. O código é o mesmo usado para o ATtiny84 na Etapa 3 com os mesmos resultados esperados - sem oscilação durante o download; durante a execução, o LED pisca em intervalos de 2 segundos e as mensagens de saída serial seguem o estado do LED.

Imagem
Imagem

Etapa 6: ATtiny85 Caso 2 - Isolar a entrada do aplicativo

Imagem
Imagem

Para configuração de hardware, comece com a configuração da Etapa 5 e adicione a chave SPST conforme indicado no diagrama fritzing acima. Na verdade, usei um interruptor momentâneo para a versão tiny85 e isso torna a verificação um pouco mais fácil. Observe que a saída do switch é girada 180 graus a partir da configuração ATtiny84. Essa alteração torna mais fácil rotear os fios de conexão, uma vez que todos os 3 sinais SPI estão no mesmo lado para o ATtiny85.

Use o mesmo programa do ATtiny84 Etapa 4. Os mesmos resultados gerais são esperados - o LED muda de estado quando a chave SPST é ligada / desligada e as mensagens de saída serial documentam as mudanças. As mensagens GO TO SLEEP estão faltando porque a funcionalidade de suspensão não é chamada para o ATtiny85. Mesmo que o mesmo programa seja usado, existem diferenças significativas na implementação para explicar o fato de que o ATtiny85 tem apenas um registro de porta (Porta 0):

  1. SoftwareSerial agora aloca a interrupção de alteração do pino da porta 0 para comunicação serial (lembre-se de que pudemos usar a porta 1 para o ATtiny84.)
  2. A interrupção de chave SPST deve ser implementada com interrupção externa 0 (INT0), uma vez que a única interrupção de mudança de pino é alocada por SoftwareSerial. Isso ilustra o ponto em que as interrupções de mudança de pino e as interrupções externas são logicamente independentes e podem ser usadas no mesmo registro de porta.
  3. Nada se ganha usando uma versão modificada do SoftwareSerial - há apenas uma porta e a classe SoftwareSerial A pegará. No entanto, a classe modificada ainda foi usada apenas para evitar uma mudança não diretamente relacionada ao objetivo desta etapa.

Recomendado: