|
Visão Geral ->
Construindo ->
Observando o Programa ->
Tutorial Iniciante
->
| |||||||||||||||
|
Introdução &
VISÃO GERAL
Este Curso de Programação foi planejado para introduzir o novatos e principiantes na programação dos micro controladores PIC12C508A e PIC16F84. O PIC12C508A é o "bebê" da gama de micro controladores com 8 pinos com 5 que podem ser configuradas como entrada ou saída e uma o pino GP3 que só pode ser configurado como pino de entrada já o PIC16F84 é uma versão com 18 pinos. Ambos são dispositivos muito pequenos no mundo "micro" mas eles são a escolha mais certa para começar. O curso contém toda a informação que você precisa para começar o seu projeto. Para entender como programar um micro controlador, você precisa de contribuição de muitas fontes diferentes. Isso inclui idéias e apresentações de diversos instrutores. Dessa forma veremos cada um oferecendo um ponto de vista diferente para descrever uma característica ou terminologia em algo tão complexo como a programação para utilização de micro controlador. Antes de começar este curso nós apresentamos um tutorial, por Jim Brown BSc(Eng), HDipEdAd, GDE (Inteligências), sobre o micro controlador PIC16F84. Leia apenas os primeiros 25% e volte ao nosso curso. Depois você poderá ler gradualmente o restante do tutorial. Nós escolhemos estes dois micro controladores da gama de dispositivos PIC pois eles são baratos e os melhores para novatos. Talvez você esteja querendo saber por que produzi tantas informações sobre como programar estes chips, uma vez que há uma quantidade enorme já disponível em livros e em web sites. A razão é que a informação encontrada geralmente é de uma natureza altamente técnica e não preparada para orientar o iniciante a programar. Mas o que é necessário é um curso para pessoas absolutamente leigas. Com certeza algo que introduza a menor quantidade de complicação para conseguir fazer um programa pronto e funcionando.E isso é o que nós fizemos. Você não tem que saber Álgebra Booleana, matemática complexa ou o efeito de XOR'ing em um arquivo para ser capaz de programar. Aqui tudo é de um modo bem simples. O curso lhe mostra como conectar os chips a dispositivos externos e aproveitar as idéias de um projeto aplicando-as em outro você poderá criar um circuito totalmente novo com o mínimo de conhecimento técnico. Há uma coisa surpreendente sobre programar. Um programa pode ser construído usando-se pensamento altamente complexo ou pensamento muito simples. O resultado final será o mesmo, mas a abordagem mais simples poderá conter mais instruções para alcançar o resultado final. Mas quem se preocupa com algumas instruções a mais quando o micro estiver processando a 1.000.000 instruções por segundo!? Mas antes de você por o pé na estrada do desenvolvimento, temos algumas preliminares que antecedem a essas descobertas:
O Micro controlador
São eles o PIC12C508A e o PIC16F84. As iniciais "PIC" geralmente adotadas significam "Controlador de Interface Programável" (originalmente em inglês Programmable Interface Controler). Os chips PIC se tornaram conhecidos como o Sonho dos Programadores. Eles são fáceis trabalhar se assimilarmos todas as informações técnicas necessárias para entender a sua operação. Informações estas que se encontram disponíveis GRATUITAMENTE na Internet e são geradas por grupos de entusiastas no assunto, contando com colaboradores do mundo inteiro. Essa informação é muito vasta e algumas vezes desconexa e de difícil acesso. Muito dessas informações foram reunidas e será apresentada de maneira que possa ser compreendida por um iniciante. Basicamente um micro controlador é capaz de armazenar e executar um programa. Ele pega as instruções ou dados do programa, e/ou de fontes externas, e fornece a saída do processamento em dispositivos para criar um resultado. Ele pode efetivamente tomar o lugar de um ou mesmo centenas de circuitos integrados e componentes simples. Isto torna o projeto de um circuito que utiliza micro controlador muito mais simples em aparência do que o projeto que utiliza componentes ativos e passivos em sua construção por muitas vezes substituindo milhares desse componente.
O programa gravado no
micro controlador pode ser projetado para executar cálculos matemáticos,
analíticos e oferecer uma resposta rápida e por esse motivo
desconhecedores do assunto chegam a pensar que estes pequenos besouros tem
"inteligência própria”.
A ilustração abaixo mostra as atribuições de cada pino:
As linhas de saída são chamadas GP (Propósito Geral - general purpose) e são identificadas por GP0, GP1, GP2, GP3, GP4, e GP5.
O desenho abaixo ilustra como o chip é conectado à fonte de alimentação.
Conectando um PIC12C508A aos terminais da fonte
Como o PIC12C508A tem um oscilador interno não há nenhuma necessidade de outro componente para tê-lo disponível operacionalmente. O oscilador interno não é absolutamente preciso e caso você precise de uma contagem de tempo com alta precisão, basta você adicionar um cristal como mostrado acima.
O
inconveniente é que Isto reduz a capacidade do chip na quantidade de
pinos de entrada entrada/saída.
Considerando
que esta é uma linha exclusivamente de entrada, este é o melhor
lugar para conectar o interruptor. O interruptor pode ter qualquer
função. Depende do programa. Pode ser projetado para ser: reset, começo,
incremento, decremento, pânico, aumento de brilho, mudança de uma melodia,
etc etc. Mas o principal limitador de seu uso é o pequeno número de apenas 5 saídas. Por isso incluímos o também o chip da família PIC16F84.
O PIC16F84 tem 18 terminais o que permite projetos mais ousados. Você pode também usar o PIC16C84. Os dois chips apresentados são basicamente idênticos exceto que o PIC16C84 tem os arquivos de 0C a 2F enquanto que o F84 tem arquivos até 4F. O circuito básico para um PIC16F84, conectado aos pólos da fonte, é mostrado abaixo:
Conectando um PIC16F84 aos terminais da fonte
O chip PIC16F84 bem como
o PIC16C84 requer "componentes externos nos pinos 15 e 16 destinados para
completar o circuito oscilador conectados à linha "clock in". Estes
componentes permitem ao chip produzir uma freqüência (chamada de pulso de
clock) na linha "clock in" e então o micro executará as instruções do
programa. Escolhendo um resistor 4k7 e um capacitor de 22p, o chip operará
a 4MHz. O chip pode ser operado a qualquer freqüência, e até mesmo
diretamente a 0Hz! (Isto é chamado de single-steppinng) A operação de "queimar" também é chamada de "programação" e para realizar essa tarefa disponibilizamos alguns projetos para a gravação do programa no chip, entre eles esta o programador independente Multi-chip apresentado em forma de KIT.
Destaco aqui mais uma
das vantagens do PIC16F84 (e do PIC16C84) é a sua capacidade de
programação no circuito (in-circuit). Um produto básico pode ser projetado para vários clientes ou operações diferentes, usando tecnologia de montagem de superfície (surface mount technology - SMT), e na última fase da montagem o programa apropriado pode então ser instalado conforme a indicação do cliente, os produtos são montados "vazios" e o software mais recente pode ser instalado a qualquer momento e atualizações podem ser adicionadas sem qualquer trabalho de re-projeto ou remoção do chip, bastando conectá-lo a um programador.
CONSIDERAÇÕES SOBRE A ALIMENTAÇÃO DOS MICRO CONTROLADORES
25mA
Cada linha de saída de um PIC12c508A pode entregar um máximo de 25mA enquanto que o micro controlador PIC16F84 pode entregar um máximo de 20mA e receber 25mA. Nós permitimos um máximo de 25mA para todas as situações para manter as coisas mais simples. O que isso
significa? A corrente levada por um dispositivo é chamada a CORRENTE DE CARGA. Vinte e cinco miliamperes não significam muito em termos de eletricidade mas em eletrônica, é impressionante o que pode ser conseguido. 25mA são 0.025 A e isso não é suficiente para fazer um motor funcionar ou acender uma lâmpada incandescente mas há vários dispositivos que podem ser acionadosabaixo cito 3:
A especificação para a linha de saída de um micro controlador PIC é 25mA e 5v. Em outras palavras a linha de saída tem uma voltagem de saída de 5v e corrente máxima que podem ser fornecida por ela é de 25mA. A linha de saída vai, teoricamente, entregar mais que 25mA, mas o transistor no chip pode ser danificado (aquecer demais) se uma corrente mais elevada fluir. A corrente fornecida pela linha de saída é determinada pela resistência do dispositivo (ou dispositivos), conectado(s) à linha. O dispositivo mais simples é um resistor como mostrado na fig.1:
Se o valor do resistor for muito baixo, mais que 25mA fluirão. Se a resistência for alta, menos que 25mA fluirão. O fluxo da corrente não é determinado pelo chip mas pelo valor do resistor. O resistor é chamado RESISTOR de CARGA ou simplesmente de CARGA. O VALOR DO RESISTOR DE CARGA A resistência do resistor de carga é determinada pela Lei de Ohm. Nós sabemos que a voltagem na linha é 5v. Esta é V na fórmula. A corrente máxima disponível é 0.025A = I na fórmula. A Lei de Ohm declara: I = V/R (Corrente é igual a voltagem dividida pela resistência). Esta equação pode ser re-organizada assim: R =
V/I Um resistor de 200 ohm conectado a uma linha de saída permitirá que fluam 25mA quando a saída for ALTA (HIGH). Esta é só uma explicação teórica sobre como um resistor em uma linha de saída não executará nenhuma função! Não fará nada por si só apenas ficar ligeiramente morno. Mas um resistor executará mais de 20 funções diferentes dependendo de onde é colocado no circuito e do valor dos componentes ao seu redor. Em nosso primeiro exemplo abaixo, um resistor é somado em série com um LED de forma que o LED receberá um máximo de 25mA. O propósito do resistor é duplo. Primeiramente permite o LED crie uma voltagem característica de 1.7v (para um vermelho LED) e secundariamente tem um valor que permita que 25mA passem pelo LED. O resistor estará usando 5v em uma extremidade e 1.7v na outra. Estas voltagens são providas pelo chip e o LED e o resistor não tem nada a ver com a sua origem. O resistor simplesmente permite que uma certa quantia de corrente o atravesse dependendo de seu valor, e esse é o valor trabalhado acima. Um ponto
a se destacar: Os 508A têm 5 linhas de saída e se todas as saídas
estiverem entregando 25mA, a saída total para o chip será 125mA. Isto está
ligeiramente acima da corrente máxima permissível de 100mA para o chip,
mas não será um problema.
Vamos para uma situação prática: CONECTANDO UM LED Se um LED for conectado a uma das saídas como mostrado na fig. 2,
uma certa voltagem é encontrada passando por ele, de acordo com a cor do LED. Isso é chamado de voltagem CARACTERÍSTICA ou voltagem de queda no LED. Essa voltagem existe, não importa o quanto o LED esteja iluminado. Isso é completamente diferente das características de uma lâmpada incandescente e é por isso que LEDs e lâmpadas precisam ser tratados diferentemente quando estivermos trabalhando com as suas necessidades operacionais. Para um LED vermelho a "voltagem característica" é 1.7v. Para um LED laranja a "voltagem característica" é 1.9v. Para um LED verde a "voltagem característica" é 2.1v. LEDs não podem ser conectados diretamente à uma linha de saída sem um resistor limitador de voltagem. A razão é muito técnica, mas basicamente um LED vermelho, por exemplo, não se acende até que exatamente 1.7v o estejam alimentando, e, se a voltagem tentar subir além dos 1.7v, os LEDs brilharão com mais intensidade; permita uma corrente muito alta e eles serão danificados quando a intensidade da corrente for superior a 40mA. É virtualmente impossível prover uma voltagem constante de 1.7v e o modo mais simples para se prevenir danos ao LED é conectar um resistor em série. Se o valor do resistor for determinado através de uma formula, uma corrente precisa será entregue ao LED e tudo ficará ok. O LED durará 100 anos ou mais! Suppose we want to deliver 25mA to a LED. Se nós tomarmos um LED vermelho, o valor de resistência pode ser definida pela lei de Ohm. A voltagem que passa pelo resistor é determinada por: 5v - 1.7v = 3.3v (A voltagem através do LED é a voltagem de 5V da alimentação, menos os 1.7v dissipados pelo LED devido característica queda de voltagem mencionada acima). Esse é o valor para V. I =
V/R Um LED laranja tem uma voltagem característica mais alta, de 1.9v e assim, um resistor limitador de valor mais baixo será necessário para os 25mA. Use um 120R. Para um LED verde, use um 100R. LEDs de alto brilho estão disponíveis em todas as cores e embora eles sejam classificados em 25mA, eles produzirão brilho muito bom com corrente de 5 a 15 mA. Para projetos alimentados por bateria a corrente de LEDs pode ser reduzida para valores tão baixos quanto 1mA, e isso aumentará enormemente a vida da bateria. A Tabela
1 fornece o valor para o resistor limitador para um LED vermelho, em
diferentes correntes.
CONECTANDO UM DIAFRAGMA
PIEZO Buzzers, sirenes e vibradores piezo têm componentes ativos dentro do alojamento (transistores, sufoque, etc) para criar um som bastante alto. Estes dispositivos operam com alimentação de corrente contínua (6 a 12v). Um diafragma piezo requer uma onda senoidal quadrada - em outras palavras uma forma de onda "pulsante" para fazer o diafragma curvar-se e assim produzir o som irritante característico. A amplitude da onda determina a intensidade do som e a freqüência da onda determina o tom.
FORNECENDO CARGAS DE ALTA CORRENTE Cargas que requerem mais que 25 Ma devem ser conectadAs a uma saída do micro controlador através de um transistor de amplificação (driver). Um transistor-driver é na realidade um amplificador de corrente. Transistores podem ser classificados em componentes de corrente baixa, média e alta. Se uma
carga necessita, digamos, de 100 mA, um transistor amplificador de baixa
corrente será necessário. Se o
transistor estiver controlando uma lâmpada, a corrente inicial para o
filamento da lâmpada é aproximadamente 6 vezes a corrente de iluminação e
assim o transistor deverá ser capaz de entregar 600mA. A voltagem pelo resistor base será: 5v (a saída do '508A) menos a voltagem base emissor do transistor driver (0.7v) = 5 - 0.7 = 4.3v Resistência do resistor
base: Este é o valor máximo de resistência que você deve usar. (Lembre-se: quanto mais alto o valor de um resistor, MENOS corrente irá passar por ele.) Teoricamente um resistor 680R saturará o transistor completamente e proverá 600mA para ligar a lâmpada. Mas suponha que o transistor não tenha um ganho de 100. Pode ter só um ganho de 80 ao entregar uma corrente alta. Neste caso os 600mA não fluirão em sua totalidade e sob as piores condições a Lâmpada não irá iluminar-se. Para considerar essa possibilidade, o valor do resistor base pode ser reduzido de forma que uma corrente ligeiramente mais alta fluirá pelo transistor. Deste modo você está garantindo que o transistor será saturado, no caso do ganho não ser 100. É bom manter uma margem de garantia e assim um resistor tão baixo quanto um 470R pode ser usado. Um resistor baixo, de 470 ohm não danificará o transistor e não fará o globo ascender de forma "muito brilhante." É simplesmente um valor para assegurar que o transistor sature-se completamente mesmo nas piores condições. Se o transistor não se saturar completamente, ficará mais quente que o normal e o globo ficará escuro. Isto pode aquecer demais o transistor e causar danos - por isso é importante que o transistor seja saturado COMPLETAMENTE. Uma corrente inicial alta é um dos problemas ocultos quando acionamos globos geralmente não é encontrado até que um globo de corrente alta seja empregado ou vários globos sejam acionados ao mesmo tempo. Como você pode ver, corrente é requerida da saída do micro controlador para acionar o transistor e se forem acionadas cargas de correntes altas, os 25mA do micro serão gastos muito rapidamente! Suponha que você queira acionar uma lâmpada automotiva de 12v. Um transistor driver de alta-potência será necessário uma vez que a corrente inicial é de aproximadamente 6 ampères. Transistores de corrente alta têm aproximadamente um ganho de corrente de apenas 20 a 50 e se você usar a pior situação, a corrente requerida na base para saturar completamente (ligar) o transistor será 5,000/20 =250mA. Obviamente isto está além da capacidade de saída do micro controlador. Assim você tem que efetuar alguns cálculos antes de conectar dispositivos de corrente alta. A resposta é acrescentar um transistor amplificador extra entre o chip e o transistor de potência como mostrado na fig: 3. este transistor é chamado transistor de buffer e efetivamente amplia a capacidade do chip por um fator de cerca de 100. Se o transistor de saída (o transistor de potência) requer uma corrente de 250mA em sua base, o transistor de buffer entregará esta corrente e irá precisar de 250/100 = 2.5mA do microprocessador. Os 2.5mA podem ser providos facilmente pelo micro e assim, nós estamos de volta ao negócio. O s transistores de saída e o driver podem estar em dois arranjos diferentes. A Fig. 3 mostra dois transistores individualmente ou um único transistor Darlington como mostrado na fig.4.
O resultado é exatamente o mesmo. A única diferença é o número de componentes necessários e o espaço ocupado na placa de circuito impresso. Na fig. 3, quando a saída do micro é BAIXA, o transistor PNP de buffer está ligado. Isto entrega corrente à base do transistor de saída por um resistor 18R. Nós determinamos que a corrente na base deve ser de 250mA para ligar com segurança a lâmpada de 12v x 1amp. Esta corrente tem que passar pelo resistor 18R, e a potência em watts dissipada por este resistor será surpreendente! Ela precisa ser 1watt! Esta corrente é perdida já que não executa nenhuma função e os 250mA colocarão uma carga pesada na alimentação de 5v. A solução é pôr um transistor Darlington na saída, como é mostrado na fig. 4. Um transistor Darlington é composto de dois transistores no mesmo estojo e se parece com um transistor normal com três terminais. Um transistor Darlington típico pode ter um ganho de 2,500 e se a lâmpada requerer 6 amperes para ligar, a corrente requerida na base será 2.5mA. O resistor separador de 1K entregará aproximadamente 3.5mA, lembrando que há uma queda de 1.2v entre base e o pólo negativo negativa para o transistor de Darlington. Mas a maior vantagem maior do projeto com o Darlington é a ausência do resistor de 18 ohm. Isto eliminará a forte demanda nos 5v da alimentação. Um transistor Darlington satisfatório para uma carga de até 4 ampères é o BD 679. A pinagem para um BD 679 é mostrado na fig. 5.
Um TRIAC pode ser usado, como mostrado na fig. 6.para manejar Cargas de altas de corrente alternada sendo o seu acionamento controlado pelo PIC.
O TRIAC é especialmente adequado para acionar cargas de corrente alternada pois conduz em qualquer direção e pode ser ligado parcialmente durante um ciclo (cada meio-ciclo) fornecendo suavização para lâmpadas (dimmer) ou controle de velocidade para motores. TRIACs estão disponíveis em versões "sensitive gate" que requerem baixa corrente no gate. Isto é ideal para o micro '508A. TRIACs requerem a menor CORRENTE DE DISPARO NO GATE, quando a corrente no gate é negativa.
BITS DE
CONFIGURAÇÃO
Faça sua primeira leitura neste tópico com certeza não entendera muita coisa mas a medida que seguirmos tenho certeza que você retornara a este tópico.
Estes são os bits essenciais
contidos no arquivo de configuração de definições que determinam as
características do chip estamos utilizando. Note os dois sinais de sublinhado antes de CONFIG da linha de configuração abaixo.
;Experiência 01.asm
;Projeto:Ligando um LED
O Bit 2 seleciona o timer watchdog. O Bit 3 seleciona o timer Power-up e
O Bit 4 seleciona a Proteção
de Código. Quando definido como “1” a proteção de código está DESLIGADA. Quando definido como “0” a proteção está LIGADA.
Bits de CONFIGURAÇÃO:
4 3 2 1 0
CP PWRTE WDT FOSC1 FOSC2
1 1 0 1 1 __CONFIG 1Bh
(código não protegido) (habilitado) (desligado) (osc. RC externo) Nota: O bit do timer WDT foi intencionalmente LIGADO em cada um dos experiências a seguir de forma que você possa ver quando um novo programa (ou re-burn) tenha sido baixado pelo IC-Prog. A check-mark ao lado de WDT deve ser removida antes do início da gravação.
Clique para remover a check-mark
Agora vamos às
experiências. | |||||||||||||||
|
Visão Geral ->
Construindo ->
Observando o Programa ->
Tutorial Iniciante
-> | |||||||||||||||