Como e por que ler planilhas de dados se microcontroladores são seu hobby

Como e por que ler planilhas de dados se microcontroladores são seu hobby

A microeletrônica é um hobby da moda nos últimos anos graças ao mágico Arduino. Mas aqui está o problema: com interesse suficiente, você pode rapidamente superar o DigitalWrite(), mas o que fazer a seguir não está totalmente claro. Os desenvolvedores do Arduino se esforçaram muito para diminuir a barreira de entrada em seu ecossistema, mas fora dele ainda existe uma floresta escura de circuitos agressivos que é inacessível ao amador.

Por exemplo, planilhas de dados. Parece que eles têm tudo, pegam e usam. Mas seus autores claramente não se propõem a popularizar os microcontroladores; Às vezes pareceque abusam deliberadamente de termos e abreviações incompreensíveis ao descrever coisas simples, a fim de confundir ao máximo os não iniciados. Mas nem tudo é tão ruim: se quiser, o caixão se abre.

Neste artigo compartilharei a experiência de um especialista em humanidades comunicando-se com planilhas de dados para fins de hobby. O texto é destinado a amadores que cresceram com as calças Arduino e pressupõe alguma compreensão dos princípios de funcionamento dos microcontroladores.

Vou começar com o tradicional

Piscando um LED no Arduino

E imediatamente o código:

void setup() {
DDRB |= (1<<5);
}

void loop() {
PINB = (1<<5);
for (volatile uint32_t k=0; k<100000; k++);
}

"O que é isso? – perguntará um leitor sofisticado. – Por que você está escrevendo algo no registro de entrada PINB? É apenas para leitura!” Realmente, Documentação do Arduino, como a maioria dos artigos educacionais na Internet, afirma que este registro é somente leitura. Eu mesmo pensei isso até reler Ficha de dados para Atmega328p, preparando este artigo. E lá:

Como e por que ler planilhas de dados se microcontroladores são seu hobby

Esta é uma funcionalidade relativamente nova, não estava no Atmega8, nem todo mundo sabe dela ou não é mencionada por motivos de compatibilidade com versões anteriores. Mas é bastante adequado para demonstrar a ideia de que vale a pena ler as fichas técnicas para aproveitar todas as capacidades do chip, inclusive as pouco conhecidas. E esta não é a única razão.

Por que mais ler planilhas de dados?

Normalmente, os engenheiros do Arduino, depois de brincar bastante com LEDs e AnalogWrites, começam a conectar todos os tipos de módulos e chips à placa, para os quais já existem bibliotecas escritas. Mais cedo ou mais tarde, aparece uma biblioteca que não funciona como deveria. Aí o amador começa a mexer nele para consertar, e então...

E algo completamente incompreensível acontece lá, então você tem que ir ao Google, ler vários tutoriais, extrair partes do código adequado de alguém e finalmente atingir seu objetivo. Isso dá uma poderosa sensação de realização, mas na realidade o processo é como reinventar a roda por meio da engenharia reversa de uma motocicleta. Além disso, a compreensão de como esta bicicleta funciona não aumenta. Eu sei, porque eu mesmo fiz isso por muito tempo.

Se em vez desta atividade emocionante eu tivesse passado alguns dias estudando a documentação do Atmega328, teria economizado muito tempo. Afinal, este é um microcontrolador bastante simples.

Assim, você precisa ler as fichas técnicas pelo menos para imaginar como o microcontrolador geralmente funciona e o que ele pode fazer. E mais:

  • para verificar e otimizar as bibliotecas de outras pessoas. Muitas vezes são escritos pelos mesmos amadores que reinventam a roda; ou, pelo contrário, os autores deliberadamente os tornam excessivamente infalíveis. Que seja três vezes maior e mais lento, mas com certeza funcionará;

  • poder usar chips em um projeto para o qual ninguém escreveu uma biblioteca;

  • para facilitar a migração de uma linha MK para outra;

  • para finalmente otimizar seu código antigo, que não cabia no Arduino;

  • aprender a controlar qualquer chip diretamente através de seus registradores, sem se preocupar em estudar a estrutura de suas bibliotecas, se houver.

Por que escrever diretamente nos registradores quando há HAL e LL?

Glossário
HAL, camada de alta abstração – uma biblioteca para controlar um microcontrolador com alto nível de abstração. Se você precisar usar a interface SPI1, basta configurar e habilitar o SPI1 sem pensar em quais registros são responsáveis ​​por quê.
LL, API de baixo nível – uma biblioteca contendo macros ou estruturas com endereços de registradores, permitindo acessá-los por nome. DDRx, PORTx, PINx no Atmega são LL.

Disputas sobre o tema “HAL, LL ou registros” ocorrem regularmente em comentários no Habré. Sem reivindicar acesso ao conhecimento astral, simplesmente compartilharei minha experiência e pensamentos amadores.

Tendo mais ou menos descoberto o Atmega e lido artigos sobre as maravilhas do STM32, comprei meia dúzia de placas diferentes - Discovery e Blue Pills, e até apenas chips para meus produtos caseiros. Todos acumularam poeira em uma caixa durante dois anos. Às vezes eu dizia para mim mesmo: “É isso, estou dominando o STM neste fim de semana”, lancei o CubeMX, gerei uma configuração para o SPI, olhei para a parede de texto resultante, generosamente temperada com direitos autorais do STM, e decidi que isso era de alguma forma demais .

Como e por que ler planilhas de dados se microcontroladores são seu hobby

Claro, você pode descobrir o que CubeMX escreveu aqui. Mas, ao mesmo tempo, é claro que lembrar todas as palavras e depois escrevê-las à mão não é realista. E para depurar isso, se eu acidentalmente esquecer de marcar uma caixa no Cubo, tudo bem.

Dois anos se passaram, ainda estou lambendo os lábios Localizador ST MCU para todos os tipos de batatas fritas saborosas, mas além da minha compreensão, e acidentalmente me deparei artigo maravilhoso, embora sobre STM8. E de repente Percebi que todo esse tempo estava batendo em uma porta aberta: os registros do STM estão dispostos da mesma forma que os de qualquer outro MK, e o Cubo não é necessário para trabalhar com eles. Seria mesmo possível?..

HAL e especificamente STM32CubeMX é uma ferramenta para engenheiros profissionais que trabalham em estreita colaboração com chips STM32. A principal característica é o alto nível de abstração, a capacidade de migrar rapidamente de um MCU para outro e até mesmo de um núcleo para outro, permanecendo dentro da linha STM32. Os amadores raramente encontram tais problemas - nossa escolha de microcontroladores, via de regra, é limitada à variedade do AliExpress, e muitas vezes migramos entre chips radicalmente diferentes - passamos de Atmega para STM, de STM para ESP, ou qualquer coisa nova que nossos amigos chineses jogue em nós. HAL não vai ajudar aqui, e estudá-lo vai consumir muito tempo.

LL permanece - mas dele até os registros há meio passo. Pessoalmente, acho útil escrever minhas macros com endereços de registro: estudo a ficha técnica com mais atenção, penso no que vou precisar no futuro e no que definitivamente não vou, estruturo melhor meus programas e, em geral, a superação ajuda a memorizar .

Além disso, há uma nuance com o popular STM32F103 - existem duas versões LL incompatíveis para ele, uma oficial da STM, a segunda da Leaf Labs, usada no projeto STM32duino. Se você escreve uma biblioteca de código aberto (e eu tinha exatamente uma tarefa dessas), você deve fazer duas versões ou acessar os registros diretamente.

Por fim, eliminar o LL, na minha opinião, simplifica a migração, principalmente se você planejar isso desde o início do projeto. Exemplo exagerado: vamos escrever Arduino Blink no Atmel Studio sem LL:

#include <stdint.h>

#define _REG(addr) (*(volatile uint8_t*)(addr))

#define DDR_B 0x24
#define OUT_B 0x25

int main(void)
{
    volatile uint32_t k;

    _REG(DDR_B) |= (1<<5);

    while(1)
    {
        _REG(OUT_B) |= (1<<5);
        for (k=0; k<50000; k++);
        _REG(OUT_B) &= ~(1<<5);
        for (k=0; k<50000; k++);
    } 
}

Para que este código pisque o LED de uma placa chinesa com STM8 (do ST Visual Desktop), basta alterar dois endereços nela:

#define DDR_B 0x5007
#define OUT_B 0x5005

Sim, eu utilizo um recurso de conectar o LED em uma placa específica, ele vai piscar bem devagar, mas vai acontecer!

Que tipos de fichas técnicas existem?

Em artigos e fóruns, tanto em russo quanto em inglês, “folhas de dados” significam qualquer documentação técnica para chips, e faço o mesmo neste texto. Formalmente, eles são apenas um tipo de documentação:

Ficha de dados – Características de desempenho, características táticas e técnicas. Obrigatório para qualquer componente eletrônico. É útil manter informações básicas à mão, mas não há muito para ler nelas com atenção. No entanto, chips mais simples são muitas vezes limitados a uma folha de dados para não produzir documentos desnecessários; nesse caso Manual de referencia está incluído aqui.

Manual de referencia – as próprias instruções, um livro saudável com mais de 1000 páginas. O trabalho de tudo o que está inserido no chip é descrito em detalhes. O principal documento para dominar o microcontrolador. Diferente folha de dados, as instruções foram escritas para uma ampla variedade de MKs; elas contêm muitas informações sobre periféricos que não estão disponíveis em seu modelo específico.

Manual de Programação ou Manual do conjunto de instruções – instruções para comandos exclusivos do microcontrolador. Projetado para quem programa em linguagem Assembly. Os autores do compilador o utilizam ativamente para otimizar o código, portanto, no caso geral, não precisaremos dele. Mas olhar aqui é útil para um entendimento geral, para alguns comandos específicos, como sair de uma interrupção, bem como para usar ativamente o depurador.

Nota de aplicação – dicas úteis para resolver problemas específicos, geralmente com exemplos de código.

Folha de Errata – descrição de casos de comportamento fora do padrão do chip com opções de solução alternativa, se houver.

O que há nas fichas técnicas

Diretamente a Ficha de dados podemos precisar das seguintes seções:

Resumo do dispositivo – a primeira página da ficha técnica descreve brevemente o dispositivo. Muito útil em situações em que você encontrou um chip em algum lugar (viu em uma loja, soldou, encontrou uma menção) e quer entender o que é.

Descrição geral – uma descrição mais detalhada das capacidades dos chips da linha.

Pinouts – diagramas de pinagem para todos os pacotes de chips possíveis (qual pino está em qual perna).

Descrição do pino – descrição da finalidade e capacidades de cada pino.

Mapa de Memória – é improvável que precisemos de um mapa de endereços na memória, mas às vezes ele também inclui uma tabela de endereços de blocos de registradores.

Cadastre-se Mapa – a tabela de endereços dos blocos de registros, via de regra, está localizada na ficha técnica, e em Manual de referência – apenas turnos (deslocamentos de endereço).

Características elétricas – nesta seção estamos principalmente interessados ​​em classificações máximas absolutas, listando as cargas máximas por chip. Ao contrário do indestrutível Atmega328p, a maioria dos MKs não permite conectar cargas pesadas aos pinos, o que se torna uma surpresa desagradável para os Arduinistas.

Informações do pacote – desenhos de cases disponíveis, úteis na hora de projetar suas pranchas.

Manual de referencia consiste estruturalmente em seções dedicadas a periféricos específicos indicados em seu título. Cada capítulo pode ser dividido em três partes:

Visão geral, Introdução , Funcionalidades – visão geral das capacidades periféricas;

Descrição Funcional, Guia de uso ou simplesmente o bloco principal da seção - uma descrição detalhada dos princípios do dispositivo periférico e como usá-lo;

Registra – descrição dos registradores de controle. Em casos simples como GPIO ou SPI, isso pode ser suficiente para começar a usar os periféricos, mas muitas vezes ainda é necessário ler as partes anteriores.

Como ler planilhas de dados

As fichas técnicas, por hábito, assustam com o volume e a abundância de palavras incompreensíveis. Na verdade, nem tudo é tão assustador se você conhece alguns hacks de vida.

Conjunto bom leitor de PDF. As folhas de dados são escritas na gloriosa tradição das instruções em papel; são ótimas para imprimir, inserir marcadores de plástico e costurar. O hipertexto neles é observado em pequenas quantidades. Felizmente, pelo menos a estrutura do documento é desenhada com marcadores, por isso é muito necessário um leitor adequado e de fácil navegação.

A folha de dados não é o livro de Stroustrup; ela contém não há necessidade de ler tudo. Se você seguiu o conselho anterior, basta encontrar a seção desejada na barra de favoritos.

Folhas de dados, especialmente Manuais de Referência, pode descrever as capacidades não de um chip específico, mas toda a linha. Isso significa que metade ou até dois terços das informações não estão relacionadas ao seu chip. Antes de estudar os registros do TIM7, verifique Descrição geral, você tem?

Saber английский suficiente para nível básico. As planilhas de dados consistem metade em termos desconhecidos para o falante nativo médio e metade em estruturas de conexão simples. Existem também excelentes planilhas de dados em chinês em inglês chinês, onde metade também são termos e a segunda metade é um conjunto aleatório de palavras.

Se você conhecer palavra desconhecida, não tente traduzi-lo usando um dicionário Inglês-Russo. Se você está confuso histerese, então a tradução “histerese” não o deixará mais aquecido. Use Google, Stack Overflow, Wikipedia, fóruns, onde o conceito necessário estará explicado em palavras simples com exemplos.

A melhor maneira de entender o que você lê é verifique em ação. Portanto, tenha em mãos o quadro de depuração com o qual você está se familiarizando, ou melhor ainda, dois, caso ainda tenha entendido mal alguma coisa e visto uma fumaça mágica.

É um bom hábito manter sua planilha de dados à mão quando você lendo o tutorial de alguém ou estudando a biblioteca de outra pessoa. É bem possível que você encontre nele uma solução mais ideal para o seu problema. E vice-versa - se você não consegue entender na folha de dados como o registro realmente funciona, pesquise no Google: provavelmente alguém já descreveu tudo em palavras simples ou deixou um código claro no GitHub.

Glossário

Algumas palavras e símbolos úteis para ajudá-lo a se acostumar rapidamente com as planilhas de dados. O que lembrei nos últimos dias, acréscimos e correções são bem-vindos.

Eletricidade
Vcc, Vdd – “mais”, comida
vs, Vee – “menos”, terra
atual - atual
Voltagem - tensão
afundar a corrente – funciona como “aterramento” para carga externa
para fonte de corrente – alimentar carga externa
pino coletor/fonte alto – pino com maior “tolerância” à carga

IO
H, alto – no pino Vcc
G, Baixo – no pino Vss
Alta impedância, Olá-Z, flutuante – não há nada no pino, “alta resistência”, é praticamente invisível para o mundo exterior.
puxar fraco para cima, fraco puxar para baixo – resistor pull-up/pull-down integrado, aproximadamente equivalente a 50 kOhm (ver folha de dados). É usado, por exemplo, para evitar que o pino de entrada fique pendurado no ar, causando falsos positivos. Fraco - porque é fácil “interrompê-lo”.
empurrar puxar – modo de saída do pino, no qual alterna entre Alta и Baixo – SAÍDA regular do Arduino.
dreno aberto – designação do modo de saída no qual o pino pode ser BaixoOu Alta Impedância/Flutuante. Além disso, quase sempre este não é um dreno aberto “real”; existem diodos de proteção, resistores e outros enfeites. Esta é simplesmente uma designação para o modo terra/nenhum.
dreno aberto verdadeiro - mas este é um verdadeiro dreno aberto: o pino leva diretamente ao solo se estiver aberto, ou permanece no limbo se estiver fechado. Isso significa que, se necessário, uma tensão maior que Vcc pode passar por ele, mas o máximo ainda está especificado na folha de dados na seção Classificações/tensão máximas absolutas.

Interfaces
em série – conectado em série
acorrentar – montar chips em uma cadeia usando uma conexão serial, aumentando o número de saídas.
mudança – mudança, geralmente denota uma pequena mudança. Respectivamente, para mudar и mudar – receber e transmitir dados bit a bit.
trinco – uma trava que cobre o buffer enquanto os bits são deslocados através dele. Quando a transferência for concluída, a válvula se abre e as brocas começam a funcionar.
marcar hora – realize uma transferência bit a bit, desloque todos os bits para os lugares certos.
buffer duplo, registro de sombra, registro de pré-carga – designações de histórico, quando o registro deve ser capaz de aceitar novos dados, mas mantê-los até certo ponto. Por exemplo, para que o PWM funcione corretamente, seus parâmetros (ciclo de trabalho, frequência) não devem mudar até que o ciclo atual termine, mas novos parâmetros já podem ser transferidos. Dessa forma, os atuais são mantidos em registro de sombra, e novos caem em registro de pré-carga, sendo gravado no registrador do chip correspondente.

Todo o tipo de coisas
pré-escalador – pré-escalador de frequência
para definir um pouco – definir o bit como 1
para limpar/redefinir um pouco – redefinir o bit para 0 (redefinir – Recurso de folha de dados STM)

Qual é o próximo

De forma geral, foi planejada aqui uma parte prática com demonstração de três projetos em STM32 e STM8, feitos especificamente para este artigo a partir de datasheets, com lâmpadas, SPI, temporizadores, PWM e interrupções:

Como e por que ler planilhas de dados se microcontroladores são seu hobby

Mas tem muito texto, então os projetos vão para a segunda parte.

A habilidade de ler planilhas de dados irá ajudá-lo em seu hobby, mas é improvável que substitua a comunicação ao vivo com outros hobbyistas em fóruns e bate-papos. Para isso, você ainda precisa primeiro melhorar seu inglês. Portanto, quem finalizar a leitura receberá um prêmio especial: duas aulas gratuitas de Skyeng com o primeiro pagamento por meio do código HABR2.

Fonte: habr.com

Adicionar um comentário