1. A familia AVR
1.1. A família
1.2. TinyAvr
1.2.1. 32B para registradores
1.2.2. 64B de EEPROM
1.2.3. 64B de Sram
1.2.4. Memória do programa de 0.5 a 8 kB
1.2.5. 6 ou 32 pinos
1.3. Atmega328
1.3.1. Real Time Clock Counter
1.3.2. Versões Especiais para aplicações automotivas
1.3.3. Suporte Encriptação de Programa
1.3.4. Memória do programa de 4 a 256 kB
1.3.5. 28 ou 100 pinos
1.4. Avr Xmega
1.4.1. Memória do programa de 16 a 384 kB
1.4.2. 44, 64 ou 100 pinos (A4, A3, A1)
1.4.3. Maior desempenho, tal como DMA,
1.5. Evolução
1.5.1. Atmega8
1.5.2. Atmega168
1.5.3. Atmega328
1.5.4. Atmega2560
1.6. Caracteristicas
1.6.1. Arquitetura RISC
1.6.2. Compatibilidade de Código
1.6.3. Compatibilidade de Pinos
1.6.4. Comparativo de Velocidade AVR Intel 8051 e PIC16F
2. Diagrama de Blocos
2.1. Diagrama de Blocos
2.2. arquitetura Harvard 2 Vias entre CPU e Memória
2.2.1. largura de 8 bits
2.2.2. Harvard Modificada
2.2.2.1. memória flash armazena dados
2.2.2.2. LPM Copia o byte apontado pelo registrador Z para um registrador de uso geral
2.3. memória eeprom
2.4. 3 portas E/S digitais
2.4.1. port B,C,D
2.5. 3 timers
2.5.1. 2 de 8 bits
2.5.1.1. Timer 0 e Timer 2
2.5.2. 1 de 16 bits
2.5.2.1. Timer 1
2.6. conversor AD
2.6.1. 10 bits de resolução
2.6.2. 8 opções de entrada
2.6.3. 3 opções de referencia
2.6.3.1. tensão de alimentação ( AVcc )
2.6.3.2. referencia interna (1,1V)
2.6.3.3. tensão externa ( Aref )
2.7. comparador lógico
2.7.1. inicia uma interrupção ou um timer quando a voltagem de sua entrada positiva fica maior que a voltagem de sua entrada negativa
2.7.2. teste um sinal sem converter
2.8. interface seriais
2.8.1. SPI
2.8.2. TWI(l2c)
2.8.3. USART
2.9. memória Flash
2.9.1. onde fica o código
2.9.2. memória ROM
2.9.3. Mais lenta que a sRAM
2.9.4. operação de escrita
2.9.4.1. muda 1 para 0 sem problemas
2.9.4.2. para mudar o 0 para 1 e necessário operação de apagamento
2.9.5. gravando a memória flash
2.9.5.1. programador externo
2.9.5.2. programador serial SPI
2.9.5.3. programação por software
2.9.5.4. O número de escritas/apagamentos é limitado; a Atmel garante um mínimo de 10000 operações no ATmega328.
2.9.5.5. Para fins de apagamento e gravação a Flash é dividida em páginas de 128 bytes. As operações afetam sempre uma página inteira.
3. CPU
3.1. Diagrama da CPU
3.1.1. Program Counter
3.1.2. pipeline de 1 nivel
3.1.3. 32 registradores de uso geral
3.1.3.1. 8 bits
3.1.3.2. os seis ultimos podem ser usados como 3 de 16 bits
3.1.4. ALU
3.1.4.1. 8 Bits
3.1.4.2. operações realizadas em 1 ciclo
3.1.4.2.1. multiplicação em 2 ciclos
4. memória
4.1. registradores de uso geral
4.2. registradores de entrada e saida
4.3. Sram
5. Pinagem
5.1. Pinagem
5.2. Na placa
5.2.1. dos 28 pinos 23 podem ser usados como E/S
5.2.1.1. 3 portas
5.2.1.1.1. PC
5.2.1.1.2. PB
5.2.1.1.3. PD
5.2.1.2. todos possuem resistor e diodos de proteção
5.2.1.3. podem ser usados para gerar uma interrupção
5.2.2. todos os pinos possuem funções alternativas
6. BootLoader
6.1. primeiro software a ser executado pelo controlador
6.2. carrega na Flash o software que recebe da serial SPI
6.2.1. STK-500
6.3. A flash é dividida em 2 partes
6.3.1. Boot Loader
6.3.2. Aplicação
6.4. optiboot
6.4.1. serve em 512 bytes
6.4.2. 19200
6.5. considerações
6.5.1. inicia no reset
6.5.2. precisa dar reset para enviar o programa
6.5.3. corrigido no UNO
7. programação
7.1. linguagem
7.1.1. Escolha da linguagem
7.1.1.1. examinar cuidadosamente os requisitos de velocidade de execução, de espaço de memória e o tempo que vai demandar para se fazer o programa
7.1.1.2. Assembler X C
7.1.1.2.1. C
7.1.1.2.2. Assembler
7.1.2. alto nível
7.1.2.1. C /C++
7.1.2.1.1. Os programas na linguagem C são mais fáceis de se escrever e compreender
7.1.2.1.2. são mais lentos para serem executados que os programas assembler
7.1.2.2. compilador
7.1.3. Comparativo
7.1.4. baixo nível
7.1.4.1. assembler
7.1.4.1.1. trabalho de programação lento
7.1.4.1.2. melhores resultados quando se pretende poupar espaço de memória e aumentar a velocidade de execução do programa
7.1.4.2. montador
7.1.5. IDE
7.1.5.1. Integrated Development Enviroment
7.1.5.2. Ambiente de Desenvolvimento Integrado
7.1.5.3. disponibilizam uma interface contendo o editor de texto, o compilador e ferramentas para debug num mesmo programa
7.1.6. Simuladores
7.1.6.1. capazes de simular tanto o funcionamento do microprocessador/microcontrolador, quanto hardwares externos conectados a ele.
7.2. história
7.2.1. Até os anos 2000
7.2.1.1. Duas familias
7.2.1.1.1. 8051 da INTEL
7.2.1.1.2. PIC da Microchip.
7.2.1.2. Necessitava de conhecimento profundo do hardware
7.2.1.3. Muitas Opções diferentes nas duas familias
7.2.1.4. Ferramentas de programação deficientes
7.2.1.5. Sem Internet
7.2.1.6. Somente linguagem Assembler
7.2.1.7. cada microcontrolador tinha um modo diferente de ser programado
7.2.1.7.1. microcontrolador preferido
7.2.2. Lançamento da família AVR
7.2.3. O BOOM do Arduino
7.2.3.1. oferta de placas
7.2.3.2. facilidade de conexão a outros dispositivos
7.2.3.3. inteligência do software (IDE)
7.2.3.4. Comunidade
7.2.3.5. Open Source
7.2.3.6. Não necessita de conhecimento profundo de hardware
8. Pipeline
8.1. Conceito
8.1.1. consiste em dividir o processador em vários estágios distintos.
8.1.2. inicialmente usada em processadores RISC
8.1.3. Tambem chamado de Paralelismo
8.1.4. permite os processadores executarem tarefas diferentes ao mesmo tempo
8.1.5. aumenta o desempenho do processador e reduz o tempo de execução global de tarefas
8.1.6. A vantagem desta técnica, é que o primeiro estágio não precisa ficar esperando a instrução passar por todos os demais para carregar a próxima, e sim carregar uma nova instrução assim que se livra da primeira, ou seja, depois do primeiro pulso de clock.
8.1.7. Desta maneira, conseguimos que o processador seja capaz de processar simultaneamente, em um único ciclo de clock, várias instruções que normalmente demorariam vários ciclos para serem processadas.
8.2. Funcionamento
8.2.1. Sem Pipeline
8.2.1.1. Sem Pipeline
8.2.1.1.1. Os processadores eram capazes de processar apenas uma instrução de cada vez
8.2.1.1.2. Uma instrução simples podia ser executada em apenas um ciclo de clock, enquanto instruções mais complexas demoravam vários ciclos de clock para serem concluídas
8.2.1.1.3. Seria mais ou menos como montar um carro de maneira artesanal, peça por peça
8.2.1.2. 4 tarefas
8.2.1.2.1. lavar
8.2.1.2.2. secar
8.2.1.2.3. dobrar
8.2.1.2.4. guardar
8.2.1.3. Sem Pipeline nós só poderíamos começar uma nova tarefa após finalizada a tarefa anterior
8.2.1.4. Problema
8.2.1.4.1. após o término da primeira lavagem de roupas
8.2.1.4.2. máquina de lavar ficará ociosa até que a roupa passe pela secadora, seja dobrada e guardada.
8.2.2. Com Pipeline
8.2.2.1. após tirar as roupas da máquina de lavar e colocá-las na secadora você já coloca novas roupas sujas para lavar
8.2.2.2. você terá a máquina de lavar e a secadora funcionando ao mesmo tempo
8.2.3. Tempo de Execução
8.2.3.1. Sem Pipeline
8.2.3.2. Com Pipeline
8.3. Estágios de um Pipeline
8.3.1. A quantidade de operações paralelas que um processador é capaz de executar
8.3.2. Um pipeline de 8 estágios, por exemplo, consegue executar 8 operações concorrentes.
8.3.3. O Arduino tem Pipeline de 2 estágios
8.4. Sinal de Clock e Instruções
8.4.1. Escolha do Clock em função da instrução mais lenta
8.4.2. Cada circuito desses leva um tempo para ser executado.
8.4.3. cada um desses circuitos consome apenas o tempo de um ciclo de clock
8.4.4. O processado deve ser ajustado para que 1 ciclo de clock demore o tempo da instrução mais lenta dentre todas as instruções disponíveis.
8.5. Performance do Pipeline
8.5.1. o número de estágios de um pipeline representa o ganho em relação a um processador não pipeline
8.5.2. Formula
8.5.3. Por mais que tenhamos um clock baseado na instrução mais lenta
8.5.4. o pipeline consegue ter um tempo de execução por instrução menor
8.5.5. Porque várias instruções estaão sendo executadas em paralelo
8.5.6. Exemplo
8.5.6.1. 5000 instruções a serem executadas
8.5.6.2. clock de 10 nano-segundos
8.5.6.3. Sem Pipeline
8.5.6.3.1. 5000 * 10 = 50000 ns
8.5.6.4. Com Pipeline
8.5.6.4.1. 50000 / 12 = 3333,3 ns.
8.6. Limitações e Conflitos do Pipeline
8.6.1. conflitos estruturais
8.6.1.1. Algumas situações impossibilitam que o processador execute em paralelo
8.6.1.2. Se as instruções forem necessárias em dois lugares diferentes apenas um poderá executar.
8.6.1.2.1. No exemplo da lavanderia imagine que você tenha uma máquina lava-e-seca.
8.6.1.2.2. Nesse caso, ninguém poderia utilizar a secadora caso alguém já estivesse lavando roupa.
8.6.1.3. GPU
8.6.1.3.1. tem muito mais instruções de máquina e núcleos (processadores isolados)
8.6.1.3.2. Para evitar conflitos
8.6.2. conflitos de controle
8.6.2.1. Ocorrem quando a entrada de uma instrução depende da execução de outra e ambas estão em execução no pipeline.
8.6.2.2. o processador precisa esperar para dar sequência na execução