Original Article: Beginning Embedded Electronics - 2
Author: Nate

Início da eletrônica embutida - 2

Palestra 2 - Como obter código em um microcontrolador

Você pode obter todas as peças para esta palestra aqui. Recomendamos também que você obtenha um multímetro com uma configuração de "continuidade". Um multímetro de boa qualidade com esta configuração vai para ~ $ 60 e tão alto quanto $ 300 para um espetacular. Nós gostamos de US $ 60 barato.

Desculpe pela confusão. Quando estes tutoriais foram escritos e fotografados, utilizamos o ATmega8. Agora, carregamos o ATmega328 mais novo. Você encontrará todas as informações ATmega328 nas páginas seguintes, mas as imagens mostrarão um ATmega8.

Estou assumindo que você obteve seu estoque de 5V testado e funcionando. Em seguida, precisamos inserir o ATmega na placa de circuito aberto e conectar a energia e a terra..

ATmega8 (funciona da mesma forma com ATmega168 e 328) que se encaixa na linha do meio do tablier

Você precisará dobrar ligeiramente as pernas do DIP (pacote inline duplo) para obter o ATmega para empurrar o centro de painéis. Seja cuidadoso! Não incline os pinos muito para dentro. Os pinos do ATmega devem inserir nas duas mais linhas internas na placa de pão. Eu acho melhor inserir um lado e, em seguida, empurre levemente o IC de lado até que o outro lado dos pinos possa inserir na linha oposta na placa de pão. Confuso, eu sei.

Nota: O 5V 'rail' é a linha horizontal de furos ao lado da linha vermelha. Você deve ter um fio que conecte seu circuito do regulador de potência 5V a um buraco no trilho de 5V. Isso energizará todos os furos ao lado da linha vermelha com 5V. Isso também é verdade sobre a linha azul. Todos os furos horizontais ao lado da linha azul estão conectados entre si. Um desses orifícios deve ser conectado ao pino de aterramento em seu regulador de tensão e à conexão à terra da verruga de parede. Você pode conectar os pinos do VCC no ATmega328 a todos os orifícios ao longo do trilho 5V e você conecta os pinos GND no ATmega328 a qualquer orifício ao longo do trilho GND azul.

Oh, ei! Se ninguém já lhe contou, existe uma maneira muito simples de descobrir onde o pin 1 está em um IC. O fabricante de qualquer coisa polarizada (tampas de tântalo, tampas eletrolíticas, LEDs, ICs, etc.) sempre colocará algum tipo de marcação no dispositivo para indicar como o dispositivo deve ser orientado. Para ICs, há uma pequena covinha em uma extremidade do IC. A flecha azul na imagem está apontando para essa covinha. A flecha de laranja aponta no pino 1 e as etiquetas azuis mostram como os números de pinos aumentam.

Etiquetagem de pinos em um IC

Contando a partir da covinha, o pino 1 está à esquerda e aumenta o lado esquerdo do IC. Os números dos pinos saltam para a linha lateral direita dos pinos e contagem. Veja a imagem da folha de dados ATmega328 abaixo.

O ATmega328 deve estar na placa de panela, o pino 7 (VCC) e o pino 20 (AVCC) devem ser conectados ao seu trilho 5V e os pinos 8 e 22 (GND) devem ser conectados ao GND em sua placa de pão. Se você ligar o seu circuito de alimentação, o ATmega328 está em execução, mas não tem nada para executar!

Na verdade, isso não é totalmente verdadeiro - há uma conexão mais que precisa ser feita antes que o ATmega328 comece a executar o código. O pino RESET no ATmega328 precisa ser conectado ao VCC. Você pode ligar o pino RESET diretamente a 5V ou pode "amarrá-lo" conectando o pino RESET ao VCC através de um resistor. Isso permitirá que você adicione um botão de reinicialização momentânea. O que é isso? A linha de redefinição no ATmega328 é exatamente o que parece: ele redefine o micro assim como o reset funciona em seu computador. Se você olhar para a folha de dados ATmega328, você verá que o rótulo RESET está escrito com uma linha acima. Esta é a nomenclatura que indica que o pino de reposição está ativo baixo. O que é "baixo ativo"? O pino RESET é uma entrada. Um nível baixo neste pino colocará o micro em reset - ou seja, o pino é ativado com uma baixa entrada, também conhecido como "baixo ativo". Então, a menos que você queira que seu ATmega328 permaneça no reset, você precisará puxar este pino.

Agora você precisa de um botão de reinicialização. Um interruptor momentâneo é um interruptor que está ativado (ou fechado) enquanto você o está tocando e abre quando soltar o botão. Muitas vezes, estes são chamados de "interruptores táteis" porque eles "clicam" quando você os pressiona, dando à pessoa pressionando o botão alguns comentários "táteis".

Esta é a aparência da parte esquemática. Os pinos de aviso 1 e 2 estão conectados entre si. 3 e 4 estão conectados entre si. E quando você pressiona o botão '' ', ele liga temporariamente 1/2 + 3/4 juntos.

Observe que este botão tem cinco pernas. Se o seu botão tiver cinco pernas, ignore a perna do meio - não está conectado a nada e pode ser cortado.

Para testar este botão, deslize o multímetro confiável e ajuste-o para a configuração de continuidade. Esta é a configuração em multímetros mais bonitos e de nível médio que são cruciais para a solução de problemas e a experimentação. Toque as sondas em conjunto - você deve ouvir um tom indicando que há uma continuidade ou um caminho de resistência (quase) zero entre as sondas. Insira o botão no tabuleiro e experimente os dois pinos de um lado do botão. Se você escolheu os pinos 1/2 ou 3/4, você deveria ouvir um tom. Estes pinos estão permanentemente conectados dentro da chave. Se você escolheu os pinos 1/3 ou 2/4, você não ouvirá um barulho - mas aperte o botão. Ao bater no botão você fará uma conexão elétrica entre os quatro pinos - e você deve ouvir o tom! Isso significa que você tem continuidade elétrica.

O esquema mostra os pinos 1 e 2 do interruptor de reinicialização conectados (conectados à terra) e os pinos 3/4 conectados (conectados a! RESET). Na prática, você só precisa da mudança para trabalhar. Jogue com o seu multímetro e encontre dois pinos que não fazem barulho quando o botão não é tocado e faça barulho quando o botão está pressionado. Use estes dois pinos.

O esquema mostrado acima é o que estamos procurando. O resistor 10K "puxa" o pino de reposição alto durante a atividade normal. Ao puxar o pino de reposição alto, o ATmega328 é executado normalmente. Quando você pressiona o interruptor de reposição (S2), o pino de reset vê uma ligação contínua ao solo. Uma vez que a resistência através do interruptor pressionado é quase zero, ganha (em comparação com a resistência do resistor 10K!) E o pino de reset é puxado para baixo, o RESET é ativado eo ATmega328 entra em reset. Solte o botão e o pino de reset puxa alto de novo e o ATmega328 sai fora da redefinição. Nifty!

ATmega328 pinout

Veja a covinha da folha de dados ATmega328? Olhando para o topo do IC (pernas para baixo), com a covinha na parte superior, os números de pinos aumentam a partir de 1 no canto superior esquerdo. É assim que cada pino IC é numerado. No entanto, a marcação de orientação varia um pouco entre os fabricantes e entre os tipos de embalagem. Procure uma marcação não congruente como uma covinha, um ponto pequeno, uma seta branca, um canto entalhado - qualquer coisa que faça a área do chip diferente das outras partes do chip provavelmente indica o pino 1. Em caso de dúvida, verifique a folha de dados.

Redefinir com fio ao lado de um ATmega8 (o mesmo se aplica ao ATmega168 e ao ATmega328)

Saiba como usar a configuração de continuidade no seu multímetro. Será vital para resolver problemas na estrada!

Cada fabricante de microcontroladores tem um método diferente para obter código na memória flash do micro. Nos últimos anos, houve ênfase no ISP ou "na programação do sistema". O ISP permite que você programe o IC sem precisar desconectar o microcontrolador da aplicação. Isso não é trivial! A história era muito mais dolorosa. A Atmel projetou um método relativamente direto que exige o controle de alguns pinos (6 no total). Devido a esta interface simples, o programador de hardware que é necessário para conectar seu computador a esta interface ISP é muito simples (barato!) Também.

A faixa vermelha indica a localização do Pin 1

Lembre-se de como identificamos pin1 no IC a partir da covinha? Os conectores bem também precisam de polarização para não reverter a orientação do conector e fritar as coisas. Infelizmente, a forma como os conectores são numerados é o oposto do dos ICs. Na imagem do conector do ISP, você vê a faixa vermelha indicando o pino 1. Um IC conta de forma seqüencial num lado. Os conectores, por outro lado, aumentam os números de pinos, de um lado para o outro, à medida que você trabalha no caminho do conector.

A cadeia de programação parece algo assim:

  1. Existe um compilador C gratuito chamado AVR-GCC. O usuário escreve o código em C e, em seguida, compila esse código em arquivos HEX

  2. O AVR-GCC pode ser instalado na plataforma Windows com um programa de instalação WinAVR fácil

  3. O usuário obtém esse código HEX em um AVR através dos pinos ISP

  4. Um programador de porta serial e um programmere de porta paralela foram projetados para conectar a porta do computador aos pinos AVR ISP

  5. O computador executa um programa de linha de comando para transferir o arquivo HEX do computador, para a porta serial ou paralela e para os pinos AVR ISP

  6. O micro executa o código da máquina (arquivos * .HEX) uma vez que é alimentado ou reiniciado

O que é um C compilador? Este é um programa que insere um programa escrito na linguagem C e produz um arquivo HEX. Preferimos programar em C porque é mais fácil para nós do que o assembly e mais flexível do que BASIC.

O que é um arquivo HEX? Este é um arquivo que contém vários caracteres hexadecimais. Estes "códigos hexagonais" representam as instruções da máquina que o ATmega328 entende. Este arquivo é o que é enviado para o programador, e o programador carrega estas instruções da máquina no ATmega328.

Antes que possamos ficar muito loucos, baixe e instale WinAVR no computador em que você estará fazendo o desenvolvimento de seu código. Se este link está desatualizado, uma busca do Google deve levá-lo diretamente para ele. A instalação do Windows deve ser bastante simples - siga todos os padrões. WinAVR contém uma versão do compilador GCC e várias outras ferramentas, incluindo avrdude e Notepad do programador. avrdude é um programa de linha de comando simples que leva um arquivo HEX e o envia para a porta serial ou paralela para programação em um microcontrolador Atmel.

Ao trabalhar para trás nesta lista, vou lhe fornecer um exemplo de arquivo HEX 'Hello World' que irá provar que tudo está funcionando corretamente no seu micro. Com qualquer placa microcontrolador, o primeiro truque é sempre obter um LED para piscar. Este é o 'Olá Mundo' dos sistemas embarcados. Adivinha blink_1MHz.hex faz?

Com o arquivo hexadecimal em destaque, agora você precisa entrar no micro. Você precisará conectar o AVR-PG1 (ou o AVR-PG2) ao ATmega328. A maneira mais fácil de fazer isso é com 9 fios que correm da sua placa de jogo para o conector de 10 pinos no conector do ISP no AVR-PG1 / PG2.

Jamming fios no conector do ISP não é uma boa solução a longo prazo, mas por causa do aumento do LED, ele fará. Cortei os fios curtos e despojava ambas as extremidades. Uma extremidade despojada é inserida na extremidade do conector de programação preto, a outra extremidade é inserida na tábua de panela.

O programador paralelo AVR-PG2 conectado ao ATmega328. Eu também liguei duas tampas de 0,1 uF. Estas tampas de desacoplamento são colocadas perto dos pinos VCC e GND no ATmega328 para ajudar a reduzir o ruído no IC. Você pode achar que você tem uma DC 5V direta, mas não realmente - essas tampas de 0,1 uF ajudam a reduzir a ondulação na linha 5V. Sim, o ATmega328 provavelmente será executado sem eles, mas eles são bons para ter instalado.

AVR ISP Note: Você realmente tem que ligar todos os 4 pinos GND. Você não pode conectar apenas um dos pinos GND no conector do ISP.

Além disso, precisamos de um LED para controlar. Isso pode ser vinculado a qualquer pino GPIO. O PC0 parece um bom local.

O comando resistor / LED não importa - lembre-se (do Tutorial 1) de que você deve ter o resistor! O pino GPIO na verdade não é importante. blink_1MHz.hex irá alternar todos os pinos em todas as portas para que você possa ligar o resistor a qualquer pino. À medida que você adiciona mais hardware periférico, você deseja dedicar alguns pinos para uso alternativo (como pinos TX e RX para comunicação serial).

Você está se aproximando! Hora de programar o chip!

Uma vez que o WinAVR esteja instalado, você deve ter alguns novos ícones em sua área de trabalho. Programmers Notepad é um bom editor de código e marcador de texto.

O que é um editor de código / marcador? Ao programar, você precisará de um editor de texto em seu computador para que você possa criar o código (tipo). Depois de criar este "código" no seu computador (dentro do editor de código), você passará este código para o compilador (você clicará em um botão que executa o compilador com o arquivo C digitado) e o compilador irá criar um arquivo HEX (assumindo que não há problemas ou erros de digitação em seu código). O marcador? Ao criar código, muitas vezes é bom ter várias partes do seu programa codificadas por cores para que você possa contar coisas comuns como for( ) e #define. Este destaque ajuda muito na programação.

Use qualquer ferramenta de texto que você gosta. O bloco de notas funcionará, mas é bastante rudimentar. eu também gosto JFE dos meus dias PIC. Ambos têm uma opção de "ferramentas" que é excelente, mas JFE é melhor na minha opinião, pois lista as funções C que você pode clicar duas vezes e navegar até. Se houver uma maneira de fazer um truque semelhante no Notepad 2 do Programmer, informe-me! Como o Programmers Notepad v2 (aka PN2) vem com a instalação do WinAVR, nós vamos usá-lo!

AVR-GCC é extremamente poderoso, muito complexo e difícil de usar inicialmente. Estou acostumado a passar um arquivo * .c para um compilador PIC (CC5x) e obter um arquivo HEX novamente. Sem barulho, sem bagunça. Acredite-me, a pena de ter o AVR-GCC funcionando vale a pena. AVR-GCC é um compilador verdadeiramente agradável e é grátis. Incluí um estoque Makefile e blink_1MHz.c arquivo em blink_1MHz.zip para você começar. Eu não sou, de modo algum, um Linux ou tipo de pessoa. Tudo o que você precisa saber é que, quando você digita 'make' no prompt de comando, o compilador procurará um arquivo chamado 'Makefile' (sem extensão de arquivo!) E use esse arquivo para direcionar como compilar seu arquivo C.

Estes são os únicos dois arquivos que você deve precisar para piscar para compilar. Abra blink_1MHz.c no bloco de notas do programador e clique em Ferramentas->Faça tudo. Isso é o mesmo que digitar 'fazer tudo' no prompt de comando do diretório que você salvou esses dois arquivos. Por exemplo

C:\Code\Blink>faça tudo

também deve compilar o seu código. É um pouco mais fácil fazer isso através da interface do Notepad do Programador, em vez de alternar para a janela do Prompt de Comando. Depois de ter compilado com sucesso o arquivo C em um arquivo HEX, agora você precisa obter esse arquivo hexadecimal no AVR. Finalmente é hora de ligar o seu sistema! Os programadores AVR baratos exigem o alvo (que é a sua placa de pão) para fornecer energia ao programador (isto é o AVR-PG1 ou PG2). Ligue o seu prato de pão - você deve ver o LED de energia acender. A partir daqui, vou assumir que você está usando o programador de portas paralelas AVR-PG2.

Há apenas dois pontos no makefile que você deveria estar preocupado neste momento. Estes dois pontos estão localizados sob o  seção de opções de programação. Este makefile é enorme, mas role até a seção Opções de programação (avrdude). Agora, coloque um '#' na frente das linhas que deseja comentar.

Se você estiver usando o AVR-PG1 (programador de porta serial), você edita assim:

#AVRDUDE_PROGRAMMER = stk200
AVRDUDE_PROGRAMMER = ponyser

# com1 = serial port. Use lpt1 to connect to parallel port.
#AVRDUDE_PORT = lpt1
AVRDUDE_PORT = COM1

Se você estiver usando o AVR-PG2 (programador de porta paralela), você edita assim:

AVRDUDE_PROGRAMMER = stk200
#AVRDUDE_PROGRAMMER = ponyser

# com1 = serial port. Use lpt1 to connect to parallel port.
AVRDUDE_PORT = lpt1
#AVRDUDE_PORT = COM1

É claro que os números da porta dependem do seu computador específico, mas uma vez que você trabalha, você estará pronto para a vida. Supondo que você tenha editado e salvado seu makefile, volte para o PN2. Com a sua placa de mesa equipada, clique em Ferramentas->Programas. Isso enviará o comando 'make program' para o prompt de comando. Se tudo estiver configurado corretamente, você deve ter carregado com sucesso blink_1MHz.hex em seu alvo ATmega328 e seu LED deve estar piscando.

Se você receber um erro :

não pode abrir o dispositivo "giveio"

Então leia esta página. Basicamente você precisa copiar o arquivo giveio.sys de C: \ WinAVR / bin para o diretório C: \ Windows, então digite install_giveio.bat no prompt de comando.

Problemas típicos:

Se ainda não conseguir programar o AVR, é onde 99% dos usuários da primeira vez acabam. Diga e solucione problemas.

As conexões do ISP estão corretas? É fácil obter o conector do ISP para trás. Dê uma olhada nas fotos acima.

Existe um fio solto? Retire o multímetro e verifique se você recebeu 5V nos pinos VCC e GND no ATmega328. Os fios que entram no conector do ISP têm uma boa conexão sólida?

Você tem o seu ATmega328 conectado tanto a energia como a terra?

O seu fornecimento de 5V produz 5V?

Você tem a porta COM direita ou a porta LPT selecionada em seu arquivo make?

Há uma infinidade de coisas para verificar. É difícil! Eu sei. Mas, uma vez que você coloque as coisas corretamente, e esse LED pisca - ficará fantástico!

Ok - vou assumir que você obteve o código corretamente carregado no AVR e que o LED está piscando. Parabéns! Você está bem no seu caminho para um mundo inteiro de dor! Uma vez que você trabalha uma coisa, é difícil parar! GPS, datalogging, RF, layout de PCB - é apenas um par de lúpulo.

Você pode obter todas as peças para esta palestra aqui.

Aqui estão alguns recursos adicionais para programação AVR:

Nós amamos o feedback! Informe erros de digitação, comentários ou recomendações para [email protected].

Palestra 1 - Plano de fundo e fonte de alimentação

Palestra 2 - Como obter código em um microcontrolador


Palestra 3 - O que é um oscilador?


Palestra 4 - Comunicação UART e Serial


Palestra 5 - AVR GCC Compilando


Palestra 6 - Fundamentos de solda


Palestra 7 - Soldagem SMD


Palestra 8 - Eagle: Schematics


Palestra 9 - Eagle: Layout de PCB


Palestra 10 - Águia: criando uma nova parte


Erros comuns, dicas e truques