Mensagem

"Sonhar mais um sonho impossível, lutar quando é fácil ceder, vencer o inimigo invencível, negar quando a regra é vender."
Miguel de Cervantes.

"Os microprocessadores RISC funcionam a partir do princípio genial de se encarregar das coisas mais fáceis e deixar todas as partes difíceis para outras pessoas resolverem."
Douglas Adams.

Livro - AVR e ARDUINO: TÉCNICAS DE PROJETO

IT´S TIME TO ROCK THE MICROCONTROLLER TEACHING!


Esta obra foi desenvolvida como referência para projetistas de sistemas microcontrolados e como livro texto para áreas afins.

Apresenta:

* Um grande conjunto de técnicas de projetos eletrônicos e de programação para o emprego com microcontroladores. Dentre os assuntos abordados, destacam-se:
*  displays de 7 segmentos;
*  LCDs alfanuméricos (16x2) e gráfico (128x64);
*  teclado matricial;
*  geração de sinais PWM;
*  módulo de ultrassom;
*  motores DC de baixa potência para eletrônica digital;
*  conversores CC-CC e CC-CA;
*  cartão SD;
*  RTOS;
*  técnicas de multiplexação;
*  matriz e cubo de LEDs;
*  I2C como máquina de estados;
*  comunicação serial com computador;
*  comunicação sem fio (RF básico e Bluetooth);
*  técnicas para uso com o conversor AD;
*  técnicas para a conversão DA simples;
*  programação C com assembly;
*  técnicas para o desenho de placas de circuito impresso.

* Detalhes do ATmega328 para trabalho com a plataforma Arduino, permitindo explorar suas características (facilidade de uso,  aquisição e disponibilidade de inúmeros módulos de expansão).
*  Um software para simulação de circuitos microcontrolados.
*  Amplo conjunto de exercícios.
-----------------------------------------------------------
DOWNLOAD: Sumário, Programas (5/11/15), Figuras e Exercícios.

VERSÃO COMPLETA em PDF aqui !!!
-----------------------------------------------------------

P/ + detalhes ou compra clique na figura abaixo
(também vendido aqui).


 NOT DESIGNED FOR DUMMIES
C Programming for AVR Studio.

-----------------------------------------------------------

ERRATAS OU COMENTÁRIOS:

-----------------------------------------------------------

Nos programas, se for utilizado o Atmel Studio 6 ou AVR Studio 5.1 e houver erro de compilação, quando aparecer prog_char é necessário substituí-lo por PROGMEM const char.

---------------------------------------------------------
Na pg. 158 a Tab. 6.1 esta errada, a correta possui endereçamento duas vezes maior, consequentemente as referências aos endereços das interrupções estão incorretas, favor consultar o datasheet do ATmega328.
---------------------------------------------------------
Na Fig. 6.1 (pg. 162) existe duplicidade da chave para o TWI, uma deve ser do ADC. Aqui a figura corrigida com o reajuste das chaves. 
---------------------------------------------------------
Na Fig. 9.12 (pg. 224) o sinal de 60 Hz deve estar conectado ao pino PD5 (T1) e não PD3. Aqui a figura corrigida. 
-----------------------------------------------------
No Capítulo 6 a Tab. 6.1 (pg. 158) e pg. 160 contém os endereços  de interrupção do ATmega88 e não do ATmega328, os endereços crescem de dois em dois e não de um em um. 

23 comentários:

  1. Boa noite, amigo como posso compra este livro de arduino e qual é o preço

    ResponderExcluir
  2. Caro Florisvaldo, o livro é vendido exclusivamente nos sítios clubedeautores.com.br ou agbook.com.br.

    ResponderExcluir
  3. Achei que os programas para download estão muito desorganizados.Deveriam estar organizados por capitulo e pagina.

    ResponderExcluir
  4. A ideia é permitir o acesso aos programas sem que se possua o livro. Todavia, nós poderíamos ter feito isso associando os capítulos aos nomes. Fica para a próxima. Valeu a sugestão.

    ResponderExcluir
  5. Obrigado pela atenção.

    Em tempo, gostaria de tirar algumas duvidas a respeito da biblioteca avr/pgmspace não achei muito material sobre a mesma, nem em português nem em inglês, existe um e-mail para onde eu possa encaminhar minha duvida.
    Grato

    ResponderExcluir
    Respostas
    1. No help do AVR Studio havia alguma explicação do uso da biblioteca. Qualquer coisa veja em http://www.avrfreaks.net/

      Excluir
  6. Olá, prof. Borges.

    Estou migrando do uc PIC para o AVR, estou tentando trabalhar com o AVR Studio 6 tanto utilizando o Arduino quanto WinAVR(Gcc). Mas, estou com um problema muito sério em relação a memória RAM, A sensação que eu tenho é q o compilador não libera o espaço de memória utilizado pelas variáveis locais das funções. Ou seja, ele fica somando as variáveis das funções, como se fossem variáveis locais.

    Vc pode me ajudar com isso? já estou ficando desesperado, pois estou a uma semana batalhando para conseguir encontrar uma solução.

    ResponderExcluir
    Respostas
    1. Corrigindo ele armazena as variáveis locais como se fossem globais, chegando ao ponto de overflow de memória RAM.
      exemplo:
      o exemplo abaixo não vai rodar pq faltam informações, é apenas um overview do q está acontecendo..
      /*****************************************/
      //arquivo mensagem.c
      void mensagem()
      {
      escreve_lcd("Mensagem1");
      escreve_lcd("Mensagem2");
      }

      void mensagem2()
      {
      escreve_lcd("Mensagem3");
      escreve_lcd("Mensagem4");
      }

      //main.c
      #include"mensagem.h"

      void main()
      {
      mensagem();
      mensagem2();
      }

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

      Até onde eu sei, as variáveis que estão na função mensagem, deveria ser liberada após a saída da função, mas não acontece. Quando eu compilo ele simplesmente soma as variáveis da função mensagem com as da função mensagem2...

      Excluir
    2. Caro Lins,

      a função escreve_LCD(), possui um grave defeito: ela usa a memória RAM para armazenar a string, usando duas memórias, a flash e a RAM, a flash com o caractere para ser movido para a RAM! Provavelmente o compilador aloca RAM e não libera, pois ele não sabe dizer se a variável é local, visto que a mesma não foi declarada explicitamente.
      A solução é armazenar qualquer mensagem na memória de programa (flash) e uma função escreve_LCD_flash(msg). No programa do meu livro, LCD.c, tem uma função para isso.

      Excluir
    3. Olá, Professor.

      Agradeço pela sua resposta, estou utilizando o atributo PROGMEM para resolver isso, o engraçado é que eu criei uma classe no arduino que necessitava de um porteiro da classe LiquidCrystal e também acontecia a mesma coisa, eu estava com quase toda memória RAM em uso, enquanto a Flash estava com pouca utilização.
      Comprei o seu livro e já estou lendo, muito bom e com certeza vai me ajudar e muito a melhorar as minhas técnicas de programação.

      Grato pela atenção,

      Ronaldo Lins

      Excluir
  7. Comprei o pdf do livro e estou gostando bastante. Adaptei os exemplos para o Atmel Studio 7. Gostaria de saber posso encontrar as respostas dos exercícios

    ResponderExcluir
  8. Os exercícios sempre foram proposto em aula, não tenho a solução. Cada programa pode ter inúmeras respostas conforme estilo de programação e algoritmo escolhido.

    ResponderExcluir
  9. Adquiri o livro e estou gostando bastante.
    Vi que as erratas já foram corrigidas .. só na última que não entendi. Pro ATMega328P é de 1 em 1 ou de 2 em 2?

    ResponderExcluir
  10. Os endereços das interrupções no ATmega328 crescem de 2 em 2.

    ResponderExcluir
  11. Não entendi uma outra coisa .. Na página 106, no rodapé:
    21 Se algum pino não for utilizado é recomendado que o seu nível lógico seja definido. Entradas com
    nível flutuante devem ser evitadas para evitar o consumo de corrente quando o pino não estiver sendo
    empregado. Neste caso a Atmel recomenda a habilitação do pull-up (para maiores detalhes ver o
    manual do fabricante).
    Quer dizer que o melhor é fazer assim:
    DDRB0
    PORTB0
    Ou DDRB, depois setar apenas o bit 0 como 1, os demais setar 0 ??
    Qualquer coisa, se ficar muito extenso meu e-mail é rickymunhoz@gmail.com (Ricardo Munhoz)

    ResponderExcluir
  12. Os pinos que não forem utilizados, configurar como entrada no registrador DDRx e habilitar o pull-up no registrador PORTx adequado. Qualquer pino não utilizado deve ser configurado como pino de entrada para evitar algum curto circuito acidental, o pull-up é recomendação do fabricante.

    ResponderExcluir
  13. Olá, tentei visualizar o pdf mas o link esta quebrado. Queria ver uma amostra, se possível. Gosto de analisar bem o livro antes de comprar. Não gosto de livros digitais.

    ResponderExcluir
  14. Opa! Link corrigido, pode baixar gratuitamente o livro completo. Abraço.

    ResponderExcluir
    Respostas
    1. Nossa muito obrigado pelo livro gratuito, me falaram muito bem deste livro no site: www.embarcados.com.br. Tenho uma noção de programar em C com PIC's e quero aprender AVR mas não usando as tantas abstrações que o pessoal usa na programação de Arduíno, quero programar de uma forma mais próxima do hardware. Obrigado pelo livro em PDF gratuito, DEus te abençoe e muito sucesso.

      Excluir
  15. Olá, muito bom o livro e todo o material. Estou simulando no Proteus o programa em C do pisca LED, não funcionou.
    No Proteus basta conectar os pinos como mostra a figura do livro, ou tem mais alguma coisa que precisa ser feita para funcionar? Coloquei um multímetro no LED e não está chegando tensão. Liguei o AVCC e o Reset em +5V e o Aref em serie com um capacitor de 100n para o terra. O que estou fazendo errado?

    ResponderExcluir