Mostrando postagens com marcador Eletrônica Digital. Mostrar todas as postagens
Mostrando postagens com marcador Eletrônica Digital. Mostrar todas as postagens

Microcontroladores - O que são, Para Que Servem e Onde São Usados

Estudar e entender Microcontroladores, é como sair da Matrix e entender como ela funciona, de tão presente que eles são em nosso dia a dia (ao longo dele, você se depara com milhares de microcontroladores) e importância que eles tem.

Neste tutorial daremos mais detalhes sobre o que é um microcontrolador, o que ele faz, pra que serve e onde está sendo utilizado em sua vida.


O que é um Microcontrolador

De uma maneira bem direta, podemos dizer que um microcontrolador é um dispositivo que mistura hardware com software.

Você vai, através de programação (C ou Assembly, geralmente), conseguir controlar um hardware para fazer funções específicas de uma maneira fantasticamente simples, fácil, flexível e poderosa.
(Não se surpreenda como nossos elogios, microcontroladores são dispositivos realmente fascinantes)





Numa abordagem mais técnica, podemos dizer que um microcontrolador é um circuito integrado, assim como um microprocessador. Mas é uma definição um pouco vaga.
O que é um Microcontrolador
CI ou IC (Circuito Integrado ou Integrated Circuit)

Imagine um CI comum, pode ser que seja apenas de portas lógicas, como AND, OR ou NOT.

Há CI's para usar em temporização, oscilador ou decodificador do tipo binário para display de 7 segmentos.

Ou seja, há CI's com funções únicas e bem específicas.
fazem aquilo, simplesmente isso e nada mais.

Existem milhares de tipos e funções diferentes, sempre cumprindo bem suas funções na qual foram criados e concebidos para fazer.

Microcontrolador também é um CI, mas é diferente, pois ele não faz algo específico, é um CI de uso geral, já que dá a liberdade para que possamos programá-lo para fazer uma tarefa que desejemos.


Para que serve um Microcontrolador


Onde os Microcontroladores são usados
Kit de Desenvolvimento Microcontrolador ATMEL AVR
Microcontrolador é um tipo especial de circuito integrado, pois vem com a possibilidade de ser programado para desempenhar tarefas específicas.

Alguns kits de desenvolvimento possuem diversos hardwares, para se usar com o microcontrolador, com display de LED, botões, luzes, acionador de motor, sensores e uma gigantesca infinidade.

Você pode programar seu microcontrolador para que, ao apertar um botão no teclado, ele seja exibido no dispositivo de tela. Ou seja, você acoplou o teclado e o visor, e programou o microcontrolador para fazer essa tarefa.

Como funciona um microcontrolador
PICKit - Kit de desenvolvimento para microcontrolador tipo PIC
Talvez você queria que ao digitar dois números no teclado, seja exibido a soma, e outras operações matemáticas, então você teria uma calculadora.

Também pode usar o teclado e dispositivos de laser, e programar o microcontrolador para mandar, via o laser, informações sobre qual botão foi pressionado e assim fazer seu próprio controle remoto.

E que tal comprar um sensor de temperatura e hardware de bluetooth?
Assim, programe seu microcontrolador (que vai ficar na sua casa), para disparar e enviar um sinal via blutooth para seu celular, caso a temperatura de sua casa atinja certo valor, e então você criou um alarme contra incêndio.





O que é possível fazer com um Microcontrolador

O que é possível fazer no microcontrolador vai depender de seus conhecimentos e criatividade.
Obviamente, dentro que o modelo específico do microcontrolador fornece.
Claro que não dá pra enviar um sinal de bluetooth, se sua placa de desenvolvimento não possuir hardware para tal.

Os microcontroladores também estão limitados a sua memória, capacidade de processamento e ao número de instruções. Alguns fornecem a possibilidade de uso de até 35 instruções, outro mais de 70, dependendo do modelo e a que fim se destina tal microcontrolador.

Porém, não se engane: as possibilidades são fantásticas.
Lembre-se que nosso alfabeto possui 26 letras (com as 3 estrangeiras wxy), e o que é possível fazer com essas letras?

Livros, lindas poesias, pensamentos, músicas e uma infinidade de outras coisas.

Lembre-se que, na programação, praticamente tudo é feito com testes condicionais (if, else, switch), laços (for, while, do while) e alocação de memória (dinâmica, através de declaração de variáveis ou declaração automática, no caso de linguagens como as de scripts).

Mas a verdade é que, mesmo com poucas ideias e instruções em programação, foi possível criar tudo que vemos nos dias de hoje, como aplicativos, sistemas operacionais e zilhões de outras coisas.

Não há muita diferença da programação comum, de software, e o uso de microcontroladores.
A diferença é que você terá alguns hardwares, instruções e opções de acordo com o hardware.
Mas a lógica é a mesma.


Ou seja, o que é possível fazer com um microcontrolador é o que sua mente consegue fazer.

Registradores dos Microprocessadores Intel x86

Quem já teve contato com a linguagem de programação Assembly sabe da importância dos registradores, que são elementos usados para o armazenamento rápido e temporário de memória.
Na programação, usamos constantemente diversos tipos de registradores da arquitetura x86 para guardar dados, mover, copiar e outras coisas, entre registradores ou entre registradores e a memória.

Nesse artigo, de nosso curso de Microprocessador Intel 8086/8088, vamos falar dos registradores visíveis e suas funções.
Visíveis pois podemos manuseá-los diretamente, pois há diversos outros registradores que os programadores não tem acesso durante a criação de um código Assembly.


Os registradores de uso geral do x86

São eles: AX, BX, CX, DX, BP, SI e DI.

Tais registradores são de 16 bits, ou sejam, podem receber ou enviar 16 bits de dados de uma só vez. Porém, alguns destes (AX, BX, CX e DX) são comumente usados como registradores de 8 bits, ou seja, são divididos em dois blocos de 8 bits.

O bloco com os 8 primeiros dígitos são identificados por L, de LOW, e os outros bits são identificados pela letra H, de HIGH.

Assim, o registrador AX é formado por AH e AL.
BX é formado por BH e BL.
CX é formado por CH e CL.
DX é formado por DH e DL.

Eles são ditos de uso geral pois podem ser usados livremente pelo programador Assembly para armazenar e trocar informações em seus códigos da maneira que mais lhe convier.
Vale salientar que, embora sejam de uso geral, eles possuem uso específicos, que serão vistos na seção a seguir, onde daremos mais detalhes sobre cada um deles, suas importâncias e usos especiais.

Mas lembre-se que você poderá usar qualquer um deles em seus programas.
Porém, não é bom sair usando qualquer um aleatoriamente, pois em determinadas rotinas é interessante usar determinados registradores que possuem características que irão nos auxilar.

As características específicas de cada registrador desses, de uso geral, são as seguintes:
  • AX, AH e AL → Registrador Acumulador, muito usado em operação aritméticas, para armazenar o endereço de offset, interrupção e operações com I/O (entrada/saída)
  • BX, BH e BL → Registrador de Base, que guarda o offset do ponteiro de dados
  • CX, CH e CL → Registrador contador, usado para armazenar contagens, com nas instruções LOOP e REP. Esse registro vai incrementando/decrementando automaticamente, conforme sua utilização (em strings, por exemplo)
  • DX, DH e DL → Registrador de dados, usado para instruções de divisão e multiplicação, como o acumulador, além de também ser usado para armazenar o offset de um ponteiro de dados
  • BP → Ponteiro de base, usado para indicar uma posição na transferência de dados na memória
  • SI →Source Index, usado em instruções que envolvem strings para armazenar o ponteiro da origem
  • DI → Destination Index, também usado em strings, onde armazena um ponteiro da base do destino

Os registros de propósito especial

Dentro desta categoria, podemos citar: IP, SP, as Flags e os Registros de Segmento.

  • IP → Ponteiro de instrução, que sempre aponta para a próxima instrução a ser executada em um segmento de código
  • SP → Stack Pointer, usado nas intruções CALL e RET, para se trabalhar com a pilha
Os dois últimos tipos (de segmento e flags) serão discutidos com mais detalhes em seguida.

Flags

São registros especiais que servem para fazer coisas específicas, como indicar, alterar e controlar algumas características dos microprocessadores.

  • C (Carry) → Além de indicar situações de erro, é usado é operações de adição e subtração (é o 'vai 1' e 'empresta 1' aqui no Brasil)
  • P (Parity) → Se determinado número é ímpar, a flag P assume valor lógico 0, ou valor lógico 1 caso o número seja par
  • A (Auxiliary Carry) → Usada nas instruções DAA e DAS em adição e subtração de números BCD
  • Z (Zero) → Testa se determinada operação terá valor lógico 0. Retorna 1 se o resultado é 0, e 0 se não for
  • S (Sign) → Indica o sinal de um número. Tem valor 1 se o número for negativo, e 0 se for positivo
  • T (Trap) → Habilita o trap do microprocessador, fazendo-o interromper as instruções de acordo com o que houver nos registros de controle e debug
  • I (Interrupt) → Faz as interrupções serem habilitadas quando o pino INTR é 1. Pode ser modificado pelas instruções STI e CLI
  • D (Direction) → Incrementa ou decrementa os registros SI e DI em operações com strings. Se igual 1, o registro automaticamente decrementa, se 0 ele incrementa. Modificado através das instruções STD e CLD
  • O (Overflow) → Usado em operações de adição e subtração para indicar o extrapolamento de endereço

A história da Computação

Antes de iniciarmos nossos estudos sobre os Microprocessadores 8086/8088, é necessário entendermos a história da computação e a dos microprocessadores, focando na motivação por trás do uso desses hardwares.

Quando se fala em computação, a primeira coisa que nos vem a mente é um monitor, um mouse, um teclado, em um quarto escuro, quando alguém olhando uma chuva de números binários caindo, como efeito Matrix.

Ilusão hacker à parte, especificamente, computação não está ligada com computadores pessoais, e sim a com a Matemática.

Computar, a arte de contar

A história da Computação se confunde com a história da Matemática, pois é, em suma, a história do processo de contagem.
Quando aqueles pastores de ovelhas colocavam uma pedrinha dentro de um saco, a cada vez que uma olha saía para pastar, e tiravam uma pedra do saco quando cada uma voltava, era um método de contagem, conseqüentemente, um método de computação.

Na verdade, podemos ver isso como um algoritmo.
Pois era uma maneira de checar se todas as ovelhas do pastor voltaram (quando não sobrava pedra alguma no saco). Caso sobrasse, alguma havia se perdido na floresta ou iria virar ensopado de alguém.

Um exemplo de computação pré-história são os riscos que os homens das cavernas faziam para enumerar os dias, ou animais ou outra coisa qualquer.
Outro exemplo importante e mais recente foi a invenção dos logaritmos. Uma ideia matemática fantástica que permitia fazer cálculos de expoentes e raízes de uma maneira bem simples e rápida, consultando apenas uma tabela de valores.
Podemos ver, então, esse método do logaritmo como um algoritmo, e a tabela dos logaritmos como um banco de dados.

MicroprocessadoresPorém, o instrumento antigo de contagem mais famoso é, sem dúvidas, o ábaco.
O ábaco é um instrumento totalmente manual, de contagem. Sua ideia é tão simples, ao passo que é poderosa, que ainda é usado em escolas do mundo inteiro como método de aprendizado de crianças, para fazer as famosas ‘continhas’.

Computação Mecânica

Há dois grandes fatores que influenciam na evolução da tecnologia: a preguiça e a curiosidade.
E é difícil distinguir os dois, visto que a curiosidade surge com a vontade de se entender e automatizar as coisas, tentando criar métodos de se fazer algo com o menor esforço possível.

História dos Microprocessadores
Pascaline
Uma grande evolução na arte de contar, foi a máquina Pascaline, também conhecida como calculadora de Pascal, criada pelo Matemático Blaise Pascal, que era uma espécie de ábaco aprimorado, com engrenagens e rodas, que fazia cálculos muito mais complexos e de forma mais automatizada que o ábaco. Pascal é tão importante em Computação que existe uma linguagem de programação dedicada a ele, o Pascal.



Porém, o caso mais fascinante de engenhoca computacional totalmente mecânica, é a máquina criada por Charles Babbage em 1837, a Analytical Engine.

Ela podia operar continuamente, como em um loop de programação, também aceitava dados de entradas (através de cartões furados, que definiam as operações, constantes e variáveis a serem usadas na máquina), além de possuir memória para armazenar 1000 (sim, mil) números de 40 (sim, quarenta) dígitos decimais!
Tutorial de 8086 8088
 Máquina Analítica de Charles Babbage
Cartões furados do Computador Analítico de Charles Babbage
Cartões perfurados de Babbage




















Por ter sido a primeira pessoa a criar um algoritmo para ser rodado na Máquina Analítica de Babbage, muitos consideram a inglesa Ada Lovelace como a primeira programadora da história.
Como verão adiante, as mulheres terão um importante papel na evolução dos computadores.

Os elétrons na Computação

O uso da eletricidade, que quando chegou abalou e transformou completamente o mundo, não poderia ficar de fora da computação, e o uso da energia elétrica foi, e ainda é, amplamente uso nesse ramo.

Inicialmente, a eletricidade foi amplamente usada para automatizar as máquinas mecânicas, como as máquinas perfuradoras de cartões, que perfuravam os cartões usando um motor movido a energia elétrica.

Essa inovação ocorreu no final do século XX, e a empresa pioneira nesse setor foi a International Business Machines Corporation (hoje conhecida como IBM), que passou a comercializar máquinas perfuradoras de cartões, que foram muito utilizada até a chegada das máquinas eletrônico-digitais.

Essas máquinas eletrônicas chegaram, mais especificamente, no começo da década de 40 do século passado, na Alemanha, durante a 2ª Guerra Mundial, e seu primeiro advento foi o computador Z3, que fez cálculos de trajetórias de mísseis.

Apostila de Arduino
Z3

Porém, como muita coisa em época de guerra, há controvérsias, e alguns afirmam que o computador britânico Colossus, usado para quebrar códigos da Alemanha, foi o primeiro dispositivo eletrônico-digital a ser inventado.
Curso de Arduino
O Colossus era operador por duas mulheres


Porém, essas máquinas eram totalmente específicas em suas funções.
Faziam algo que foram programadas para serem feitas, e nada mais.
É aí que entra o ENIAC (Eletronics Numerical Integrator and Calculator), uma máquina de 30 toneladas, com mais de 17 mil tubos à vacuuo e centenas de milhares de quilômetros de fios, que era possível de ser programável para fazer diversas funções.

Essa programação era possível de ser feita reorganizando os fios do ENIAC, o que era extremamente cansativo, demorado e financeiramente inviável.

Apostila de Eletrônica
O pequeno ENIAC, também governado por mulheres

Logo, era necessário algo que fosse facilmente programável. E é aí que entram os microprocessadores na história.

Memória RAM: O que é, para que serve

Sem dúvidas, a maior característica de memórias do tipo RAM é a sua flexibilidade em permitir que informações sejam alteradas (escritas) e lidas (sem haver destruição - são apenas copiadas) de qualquer bloco de memória, de qualquer tamanho e ordem.


SRAM: static RAM

É um tipo de memória que armazena, de forma constante (até o computador ser desligado), informações.

O principal exemplo de memória do tipo SRAM é algo que já estudamos aqui no Eletrônica Progressiva: os Latches.
Nesse tipo de memória, cada célula pode ser representada por um latch, que armazena 1 ou 0.

Na verdade, as memórias SRAM estão ajustadas de modo semelhante ao tabuleiro de xadrez, mostrado em nosso artigo introdutório sobre memória.

Um exemplo prático, e real, pode ser entendido da seguinte maneira:
Empilhe 8 tabuleiros de xadrez.
Agora, o address bus selecionará uma linha e uma coluna de um tabuleiro e irá pegar os 8 bits (1 bit de cada tabuleiro) ou 1 byte.

Armazenamento e Memória Digital

Já falamos sobre Latches e Flip-Flops, que podem ser usados para reter informações.
Vamos agora, nesse artigo do site Eletrônica Progressiva, explicar sobre os tipos mais importantes de armazenamento de informações: memória RAM, ROM e Discos Rígidos.

O que é a memória

Em Eletrônica/Elétrica/Computação, memória é um elemento que armazena informação.
Como sabemos, o menor elemento de armazenamento é o bit, que armazena 1 ou 0.

A memória nada mais é que um conjunto de células, onde cada um desses pequenos blocos armazena uma informação. Podemos fazer uma analogia de uma memória com o tabuleiro de Xadrez:


É como se em cada casa do tabuleiro, um bit pudesse armazenado.

Note que cada linha, ou cada coluna, possui 8 casas. Logo, cada fila pode armazenar 8 bits ou 1 byte.
Como temos 8 filas (8 linhas ou 8 colunas), nosso bloco de memória tem a capacidade de 64 bits, ou 8 bytes.
Se tivéssemos 10 tabuleiros desses, teríamos a capacidade de armazenas 80 bytes de informação na nossa memória.

Endereços de memória - Data Bus

E assim como no xadrez, cada célula de memória também possui um endereço, para que possamos identificar e manipular cada bloco desses.
As operações que envolvem endereço são, sem dúvidas, umas das mais importantes em termos de eletrônica digital, pois escrever é o ato de colocar determinadas informações na memória e ler é o ato de copiar determinadas informações.

A importância dos endereços advém do fato de existirem um número enorme de informação nas memórias, por isso temos que saber exatamente onde escrever e de onde copiar os bits.

Essas informações percorrem um trecho chamado data busque é o responsável por 'carregar' as informações (bits), seja pra escrever ou ler dados. O data bus é formado por linhas paralelas que carregam, simultaneamente, a informação. Note que, quanto maior o número de linhas (ou seja, quanto mais larga for a banda), mais rápido e eficiente será o processamento.

Além do data bus, existe o address bus, que recebe um conjunto de bits que representam um local na memória, onde vamos atuar. Assim como no data bus, quanto maior o número de linhas, mais capacidade o address bus terá de selecionar endereços de memória.

Por exemplo, se o address bus tiver 4 faixas, onde cada uma recebe um bite de informação, ele poderá acessar 2^4 = 16 endereços, o que é bem pouco. Porém, se tiver 32 bits, poderá acessar mais de 4 bilhões de endereços de memória.


Memória RAM e Memória ROM: o que são, para que servem e qual a diferença entre RAM e ROM

A memória RAM (random-access memory: memória de acesso aleatório), como o próprio nome diz, é aquela em que qualquer endereço de memória pode ser acessado de uma maneira igual (probabilidade iguais), seja para operações de leitura ou escrita. Outra grande característica é ter seus dados perdidos quando o computador é desligado.

A memória ROM (read-only memory: memória somente de leitura), como o próprio nome diz, é um tipo de memória onde seus dados podem ser lidos, mas não podem ser escritos, pois os dados são escritos lá de maneira permanente.