Obrigado por colaborar com este website.

Por favor, deixe seu AdBlock pausado enquanto visita este site.
O único retorno em desenvolvê-lo é com a exibição de publicidade não invasiva, e o Adblock retira toda chance de retorno. Obrigado e conto com sua ajuda e compreensão.







6. Visão geral de microcontroladores abordados

Dentro de um microcontrolador Microchip típico, encontramos, basicamente, os seguintes "blocos" funcionais:

6.1.Estrutura Central

  • - CPU: Processamento central de todos os sinais externos e internos ao dispositivo
  • - ALU: Unidade Lógico-aritmética, responsável por operações matemáticas e booleanas
  • - Pilha: Contador que é incrementado a cada vez que uma função é chamada ou que uma instrução é executada da memória de programa. Usada e consultada pela CPU para que o microcontrolador "saiba" em qual posição do programa se encontra.

    6.2. Memórias

  • - RAM: memória ocupada pelo funcionamento ordinário da CPU e, também, para armazenamento de variáveis declaradas no seu programa, assunto que será detalhado um pouco mais a frente neste artigo.
  • - ROM: Ou memória de programa, é uma memória geralmente de Somente Leitura. Embora em alguns PICs da família 18F seja possível gravar nesta memória durante a execução do programa, considera-se em geral que ela tem uso apenas interno ao microcontrolador, nela sendo armazenado o programa que o microcontrolador deve, linha a linha, executar. Todo o seu programa compilado deve, obrigatoriamente, caber nesta memória, a qual possui tamanho imensamente variável de acordo com o modelo do dispositivo.
  • - EEPROM: Memória não-volátil que se pode escrever e apagar eletricamente ao longo da execução do programa. Possui leitura/escrita bastante demoradas, devido a isso, alguns recursos de programação podem ser necessários para que esta possa ser utilizada.

    6.3 Estruturas de funcionalidade elétrica auxiliar

  • - Oscilador: Responsável pela geração da frequência livre que será determinada pelo cristal de Quartzo externo e, também, pelas demais topologias de oscilação, como interna, R ou RC. Assunto será discutido futuramente.
  • - Reguladores de tensão: Alguns núcleos - CPU - operam com tensões mais baixas que a alimentação do dispositivo, tornando necessário o uso de reguladores internos.

    6.4. Entradas e saídas

  • - Amplificadores de corrente a MOS-Fets, na saída, permitindo que cada saída do microcontrolador forneça cerca de 15 a 20mA e Drene, para o terra, cerca de 25mA.
  • - Geradores PWM - Pulse Width Modulation - geram, via hardware, um trem de pulsos, cuja largura do nível alto é controlado via software. Muito útil para controle de potências eficazes em corrente contínua.
  • - Circuito das Entradas Analógicas: utilizam uma conversão baseada no tempo de carga e descarga de um capacitor interno para determinar, sob várias possíveis resoluções, o valor de tensão "lido" na entrada, que pode variar entre zero e 5 volts. Também podem ser configuradas como entradas digitais no programa, e, com isso, serem normalmente usadas como pinos digitais.

    6.5. Watchdog Timer (WDT)
    Nada mais é do que um Oscilador independente interno (princípio de funcionamento RC) que monitora a execução do programa principal no microcontrolador. O Watchdog Timer deve ser resetado pelo programa feito pelo leitor a intervalos regulares, fato que assinala que o microcontrolador está funcionando corretamente e sem travamentos. Se o Watchdog não for resetado, ele Reseta o microcoontrolador. Ou o Principal reseta o WDT ou o WDT reseta o principal.
    Note-se que nem todo microcontrolador disporá de todos estes recursos internos, embora Todos eles, necessariamente, tenham de CPU, Pilhas Internas, entradas e saídas e ALU.

    7. PIC utilizado nos próximos exemplos e suas características
    Para os próximos exemplos, utilizaremos um tradicional microcontrolador PIC, modelo 16F877A, que dispõe de todos os recursos acima descritos, é barato, fácil de se encontrar e por isso excelente ao aprendizado do iniciante.

  • - Alimentação: 4.5 a 5.5V (5V typ.)
  • - Consumo típico @4MHz: 1mA
  • - Frequência máxima de operação: 20MHz (5MIPS)
  • - ROM: 8kb
  • - RAM: 368 Bytes
  • - EEPROM: 256 Bytes
  • - 33 entradas e saídas
  • - Dois canais PWM (CCPs)
  • - Entradas analógicas: 8, 10 bits de resolução máxima.

    8. Gravadores

    Microcontroladores, para que funcionem, precisam ter seu software - ou, mais adequadamente nomeados FIRMWARES - gravados em suas memórias de programa. Isso exige um dispositivo Físico que, ligado a alguma porta de um computador, forneça as tensões necessárias ao PIC em gravação e, ao mesmo tempo, os dados que preencherão sua memória de programa, que sào transmitidos pela referida porta do computador. Hoje em dia muito mais comuns, gravadores USB sào rápidos, muito práticos e confiáveis. Os modelos Alemães Brenner 8/9 são os clássicos exemplos de bons gravadores USB, e pode ser adquirido a custos baixos em vários sites. Também estão facilmente disponíveis e gratuitamente em diversos sites esquemas de gravadores de PIC experimentais, que usam a porta serial (evite este modelo, por gentileza, a não ser que possua alimentação por fonte externa) ou paralela, a quem possui computador que ainda possua esta antiga interface.

    Importante é que o Leitor, neste momento, providencie, monte ou compre um gravador que ao menos suporte o modelo sugerido neste artigo, o PIC16F877A.

    A maior parte dos gravadores aceita o microcontrolador em um soquete ZIF - zero Insertion Force -, que não corre risco de danificar os pinos do circuito integrado ao ser colocado ou retirado. Outra possibilidade importante a ser lembrada é que a maioria dos gravadores de boa qualidade fornece a opção de o usuário gravar o microcontrolador por meio de um terminal ICSP - In Circuit Serial Programming.

    Imagine que sua eletrônica utilize um microcontrolador SMD, que não tem como ser gravado sem que esteja soldado à placa que o grave. A soluçào é a gravação ICSP, largamente adotada pela indústria. O gravador é conectado a placa com o PIC virgem já soldado e este é gravado na própria placa na qual irá funcionar definitivamente, com um mínimo de Hardware nela necessário para este processo.

    9. Preparativos e recapitulação

    Nos oito tópicos anteriores, procurei munir o meu paciente leitor de todas as ferramentas teóricas e práticas indispensáveis para o nosso próximo passo, que, adianto afim de animar o leitor, já é a elaboração de um primeiro programa prático e a gravação do microcontrolador de testes que possibilite a execução de uma tarefa simples.

    Até aqui o leitor foi preparado de forma básica e superficial com as seguintes ferramentas, vamos relembrá-las:

  • - Breve histórico do componente programável denominado Microcontrolador
  • - Necessidade de um microcontrolador e onde deve ou não ser utilizado
  • - Fabricantes
  • - Linguagens de programação
  • - Linguagem C e seus principais comandos
  • - Compilador
  • - Hardware típico controlado por microcontroladores comuns
  • - Visão geral e estrutura interna dos microcontroladores abordados no artigo

    Ademais, deve o leitor possuir no momento, conforme solicitado, as seguintes ferramentas de desenvolvimento:

  • - Compilador PIC C Compiler CCS versão 4.0 ou superior
  • - PIC16F877A para testes
  • - Gravador de sua preferência

    Reunido tudo isso, podemos começar.

    10. - Enfim, Prática

    Após dar ao meu leitor toda a base de conhecimento elementar para as ações por vir, estamos aptos a realizar o primeiro exemplo, que certamente é a melhor forma de fazer o leitor compreender todos os conceitos de programação sendo aplicados e, também, a melhor forma possível de aprendizado, em minha opinião.

    Nosso primeiro programa será fazer com que o microcontrolador pisque um LED conectado em uma de suas Entradas e Saídas, sem, contudo, usar conceitos um pouco mais aprofundados, como utilização de Timers, Interrupções ou programas avançados. Por hora, faremos isso da forma mais descompromissada e simples possível, não usando, provavelmente, nenhuma ferramenta estranha ao leitor que acompanhou o artigo até aqui.

    10.1 - Montagem Física
    Evidentemente, todo teste com circuitos microcontrolados requer uma estrutura física mínima. Para tanto, o leitor deverá montar agora, em uma protoboard, o seguinte esquema elétrico:

    http://www.4shared.com/photo/GwhTI_oW/first_example_design.html

    Pouparei os leitores de pormenorizações sobre como realizar tal montagem. Conforme explícito no início do presente artigo, assume-se que o leitor possua experiência básica em eletrônica para ser apto a compreender os conceitos envolvidos neste curso.

    10.2 - Firmware (software)
    O leitor, a seguir, fará o download do software que deverá ser gravado internamente ao PIC, utilizando-se, para isso, o já abordado Gravador de sua preferência. A pasta contém o arquivo .c não compilado e também o arquivo .hex resultante da compilação com sucesso, que poderá ser carregado diretamente no software controlador de seu gravador, sem nenhuma alteração.

    http://www.4shared.com/file/rl7rEii_/First_Example_Firmware_Kit.html

    Realizados estes dois passos acima, prosseguiremos para as devidas explicações.

    10.3. - Explicações pertinentes ao exemplo acima

    10.3.1. - Sobre o projeto elétrico
    Acredito que o desenho não deva trazer novidade alguma ao leitor. Trata-se de uma montagem que garante a estrutura fundamental para funcionamento do microcontrolador PIC16F877A neste exemplo: Alimentação de 5V, oscilador a cristal e respectivo filtro, LED indicador com respectivo resistor limitador.

    Observação: Omitida no esquema por motivos de ocultamento de linhas de alimentação de Circuitos integrados digitais, a alimentação do microcontrolador deve ser realizada com fonte estabilizada, com tensão de 5V e corrente mínima de 200mA. O positivo da fonte vai aos pinos 11 e 32 (é necessário que ambos recebam a mesma tensão de alimentação, juntos) e o terra da alimentação vai aos pinos 12 e 31 (idem sobre serem ligados juntos).

    10.3.2. - Sobre o Software
    Partindo-se da premissa básica que este é um curso destinado a proramação de microcontroladores e não eletrônica básica, procuremos, agora, focalizar-nos neste importante tópico a esta altura de nossa longa jornada.
    O leitor deverá abrir o arquivo "First Example Firmware .c", que é o programa não-compilado que foi gravado no microcontrolador.

    Deverá, na tela do compilador CCS já instalado há tempos no computador do aluno um programa como este:

    http://www.4shared.com/photo/wSPzkek6/First_Example_Firmware.html

    Passemos a examiná-lo Linha a Linha. Até o presente ponto do artigo, é Este o tópico mais Importante, para o qual o Leitor deverá tomar especial atenção. Grande parte dos estudantes do tema possuem dificuldade em compreender livros de programação em linguagem C por exemplos serem dados sem maiores explicações de cada elemento. Procurarei eliminar esta limitação agora, aumentando e muito o didatismo e validade deste pequeno curso.

    10.3.3. - Detalhamento do primeiro exemplo de Firmware

    Caso o leitor tenha realizado de fato as leituras anteriormente recomendadas, alguns elementos do dado exemplo deverão parecer famiiliares.

    O programa inicia-se onde todo aquele, sem exceção, deverá começar, ao menos no CCS PIC C Compiler: a Definição do modelo de Microcontrolador utilizado, que, como será visto posteriormente, pode ser escolhido em uma útil ferramenta deste Compilador chamada "Pic Wizard". Neste caso, foi esta definição foi feita na Primeira linha:

    #include <16F877A.h>

    No caso, foi utilizado esta linha de comando por ser especificamente o microcontrolador utilizado. Caso o programa fosse destinado a ser gravado em um modelo de microcontrolador PIC18F2550, por exemplo, utilizar-se-ia a linha de comando "#include <18F2550.h>".

    A definição acima faz com que o compilador busque, no momento da compilação, em suas bibliotecas internas, o arquivo listado logo após a diretiva "#include". Tal arquivo contém todos os dados de estruturação Interna do microcontrolador, certamente poupando o leitor/programador de árdua tarefa de incluir no programa definições de em qual endereço interno ao microcontrolador situa-se cada pino de entrada e saída, cada Timer e endereços de interrupções, assuntos estudados futuramente. Assim, assume-se que o compilador mantém, em suas bibliotecas, arquivos Fixos sobre informações detalhadas dos microcontroladores da família PIC.

    A instrução "#include" será também utilizada para o leitor usufruir de úteis bibliotecas internas deste compilador, já presentes no momento da instalação do mesmo no computador. Tais bibliotecas incluem, por exemplo, funções para escrever em telas LCD, inclusive gráficas, uso de Relógios de Tempo Real (RTCs) e manipulação de memórias EEPROM Externas, além de ferramentas para tratamento de comunicações por protocolo I2C, e One Wire.

    Na linha seguinte, excuta-se a configuração do conversor analógico-digital interno a este modelo de microcontrolador, que poderá ser em 8 ou 10 bits:

    #device adc=8

    O conversor analógico-digital (ADC) interno é um útil recurso de hardware o qual a maioria dos microcontroladores da família 16F e praticamente todos da linha 18F possuem. Explorado futuramente, registre-se aqui que ele Precisa ser configurado ainda que não seja utilizado ao longo do programa, que é o nosso caso. A ferramenta Pic Wizard executa tal tarefa automaticamente, inserindo-a no programa no ponto apropriado.

    Por hora, é o que precisamos saber sobre esta linha.

    A seguir, trataremos de compreender os Fusíveis de configuração de hardware Interno do microcontrolador utilizado. Tais palavras possuem com o objetivo ligar ou desligar recursos internos do microcontrolador, definir proteções contra leitura de sua memória de programa, dentre outros fatores necessários para o funcionamento deste dispositivo. Quando o leitor estiver ao fim deste artigo, deverá sentir-se apto a configurar corretamente todos os fusíveis do Microcontrolador para o correto funcionamento do programa.

    Nos primórdios da era dos microcontroladores, haviam estruturas físicas internamente ao circuito integrado que assemelhavam-se a uma matriz de linhas e colunas de condutores, com alguns finos fios fundíveis conectando-as de forma que a queima em forma específica de alguns deles era executada pelo gravador afim de, permanentemente, executar a configuração interna do microcontrolador, daí o nome que persiste até nossos dias, "Fusíveis". Hoje realizada em uma memória nào-volátil interna, a configuração dos fusíveis pode ser alterada, simplesmente recompilando-se o programa original com os novos fusíveis desejados e regravando-se o microcontrolador.

    A seguir, atente o leitor para a linha de configuração dos fusíveis internos:

    #FUSES NOWDT, XT, PUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD

    Podendo-se também executar a configuração linha a linha de cada um deles, organiza-se melhor o programa efetuando-se a configuração de todos de uma só vez, como no exemplo acima. Separados por vírgulas, os fusíveis e suas funções são:

    NOWDT - Este fusível desabilita o Watchdog Timer (cão de guarda) do microcontrolador. De fato, normalmente, a maioria dos projetos não utiliza tal recurso, que já foi anteriormente explicado neste presente artigo. Caso deseje-se Ligar o WDT, o fusível WDT deverá ser utilizado em lugar do aqui apresentado. Cabe lembrar que, caso o programa do leitor não seja preparado para utilização do WDT, a ativação do mesmo por meio de fusível ocasionará resets temporários no microcontrolador, impossibilitando o funcionamento do mesmo.

    XT - Tipo de oscilador. Dependendo da frequência de operação do microcontrolador e do tipo de oscilador empregado, este fusível pode assumir diversas configurações. Aqui, foi utilizado o tipo "XT" por ser o recomendado pelo fabricante do microcontrolador para frequências iguais ou inferiores a 4MHz, desde que a fonte de clock do microcontrolador seja um Cristal de Quartzo ou ressonador a Quartzo com capacitores de filtro embutidos. Para frequências a cristal superiores a 4MHz, utiliza-se o fusível HS (Acrônimo de High Speed) em lugar do XT. Também podem ser utilizadas configurações de oscilador tipo RC, que utiliza para geração de clock do PIC apenas um resistor e um capacitor externos, sendo a de mais baixo custo para osciladores externos. Além deste tippo, pode ser utilizada uma fonte externa de clock de precisão para o microcontrolador, ou ainda, utilizar-se de osciladores internos do Microcontrolador, em modelos que possuam esta funcionalidade.

    Cada um destes tipos de oscilador possuem fusíveis específicos, presentes no Datasheet do dispositivo.

    O oscilador de maior precisão possível para esta topologia eletrônica sem dúvidas é o a Cristal de Quartzo, que foi o utilizado em nosso pequeno projeto-exemplo. Sendo externo ou com a conexão direta do cristal nos pinos do microcontrolador, é o que o leitor geralmente utilizará em seus projetos, e o que mais será observado em projetos encontrados em revistas e na Internet. Sob pretexto de redução de custos ou aumento do número de entradas e saídas disponíveis do IC, podem ser utilizados outros fusíveis e osciladores, contudo, este tópico não será abordado neste artigo. Assuma o leitor que deverá sempre procurar padronizar o oscilador de seu microcontrolador em Cristal, na velocidade que desejar.

    PUT - Determina que o microcontrolador deverá aguardar um determinado Período após ser energizado antes que comece a executar o programa interno. É especialmente útil para utilização em fontes de menor qualidade, nas quais a tensão pode levar um tempo maior para ser estabilizada nos próprios circuitos internos. Com esta opção desativada, o microcontrolador, para evitar travamentos, aguarda 70ms após ser ligado para começar a execução do programa. Com o fusível PUT acionado, como no nosso exemplo, 70ms Adicionais são inseridos nesta "espera" do microcontrolador afim de assegurar maior imunidade contra travamentos. A opção contrária a este fusível é "NOPUT", e deve ser utilizada sempre que fontes de boa qualidade ou bons reguladores alimentarem o microcontrolador.

    NOPROTECT - Determina que a memória de programa do microcontrolador não será protegida contra futura Leitura. Ferramenta muito útil, que deverá ser utilizada caso o leitor queira evitar Plágios de seu projeto, se comercialmente explorado. Com esta opção acionada ("PROTECT"), será possível apagar e regravar o microcontrolador com outro programa, mas Impossível de se ler o programa Original em seu interior, impossibilitando cópias do projeto que utilizar este PIC.

    NODEBUG - Modo de debug Desabilitado. Presente em quase a totalidade de todos os programas, esta opção desabilita o modo de depuração de erros para a ferramenta ICD, que, dentre outros, executa pausadamente linha a linha o programa, afim de auxiliar a resolução de problemas difíceis de serem encontrados no programa. Assuma o leitor que este fusível quase sempre será colocado desta forma em seu programa.

    NOBROWNOUT - Brownout Desabilitado. Esta funcionalidade, quando habilitada, aciona um hardware de natureza fundamentalmente analógica no interior do microcontrolador de forma a monitorar constantemente a tensão de alimentação do mesmo. Caso caia abaixo de um determinado valor, que pode ser Fixo (caso do PIC16F877, em cerca de 4V) ou variável (caso mais comum em microcncontroladores da famíliam 18F, podendo variar entre 2,5 e 4,5V), isto provoca um reset Interno do microcontrolador, como causa definida a forçada pelo Brownout.

    NOLVP - Modo de baixa tensão de programação desativado. Assim que uma tensào definida entre 12.5 e 14V é aplicada ao pino Vpp do microcontrolador, o mesmo imediatamente entra em modo de gravação. Necessária para a gravação da memória EEPROM (ROM) de programa, alguns modelos de microcontrolador permitem, por meio de hardware, que essa tensão seja dispensada. A opção contrária a esta, "LVP" apenas raramente será utilizada em hardware gravador de PICs que não possuam meios de fornecer a alta-tensão de gravação, o que nào é comum em nossos dias. Assuma o leitor que será praticamente sempre que este fusível será utilizado desta forma, "NOLVP".

    NOCPD - Proteção de memória EEPROM interna desativada. Equivalente de "NOPROTECT" para a memória EEPROM interna do microcontrolador. Esta ferramententa é útil para proteger os dados internos na memória não-volátil interna EEPROM. Em geral segue a mesma definição da proteção da ROM Interna. Se esta última estiver acionada, geralmente utilizar-se-á "CPD", afim de proteger os dados da EEPROM.

    Terminada a devida pormenorização sobre o assunto "fusíveis", a linha subsequente informa ao compilador a velocidade de operação externa do microcontrolador, que será sempre a mesma do cristal utilizado, observe:

    #use delay(clock=4000000)

    Esta diretiva não é, a rigor, necessária para a compilação do programa, mas será exigida caso alguma temporização interna seja requerida de alguma função do compilador, o que é o nosso caso. Informe aqui a frequência, em hertz, de funcionamento do seu microcontrolador. Foi utilizada a função "delay_ms()", que presta-se a realizar longas temporizações no firmware, conforme posteriormente explicado. Esta função exige que seja informado, por meio desta linha, a frequência externa do PIC, para que o compilador execute os cálculos necessários para a execução de tal temporização. Além desta função, a comunicação serial por hardware, a função delay_us(), os timers internos, o PWM, dentre outros, utilizam este dado, informado pelo programador. Para efeitos práticos, o leitor deverá sempre incluir esta linha em seu programa, enfim, com o correto Clock escolhido para o microcontrolador do projeto. No exemplo do nosso projeto, utilizamos um cristal de 4MHz, por isso tal diretiva teve como número "4000000".

    A seguir, dá-se início apo programa propriamente dito, com a função "Main", presente em qualquer programa escrito em linguagem C, conforme lido pelo leitor na literatura recomendada. No interior desta função, configura-se ainda mais funcionalidades internas ao microcontrolador que, dependendo apenas do modelo, podem ser em extenso número.

    Afinal, por que fazer desta forma o programa? Porque o Compilador exige essas "regras de escopo" para o programa nele escrito. É assim, por Definição, e tal ordem, até aqui descrita em nosso programa-exemplo debve ser seguida, sob pena de possíveis erros durante a tentativa de compilação do firmware escrito pelo leitor, com pena de impossibilidade de compilaçào do mesmo.

    A função principal ("Main") estará presente em todo programa realizado pelo leitor, como já dito. Outras funções podem e Devem ser utilizadas em caso de programas Maiores a serem escritos, com vantagens. Não abordarei neste tutorial como criar funções externas a Main, como repassar e retornar valores, ou tópicos avançados como Ponteiros, por exemplo. Tais assuntos, apesar de fundamentais, fogem ao interesse fundamental deste artigo. O leitor, ao final, deverá buscar conhecimentos sobre como adicionar funções extras em seu programa, sempre utilizadas, além de tópicos como passagem de valores e Protótipos de funcões.

    Dentro da função principal, temos, já de início, as configurações seguintes:

    setup_adc_ports(NO_ANALOGS);
    Desliga todas as entradas analógicas do microcontrolador, tornando seus respectivos pinos, I/Os digitais comuns.

    setup_adc(ADC_OFF);
    Desliga o hardware central de conversão analógico-digital, pois nenhuma conversào AD será realizada neste programa.

    setup_psp(PSP_DISABLED);
    Comunicações via protocolo PSP desabilitadas por Hardware. Tipo de comunicação utilizada por alguns periféricos, Não será utilizada em nosso programa, por isso, desligamos tal funcionalidade.

    setup_spi(SPI_SS_DISABLED);
    Comunicações via protocolo SPI desabilitadas por Hardware.

    setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
    Conforme prometido, Não foi utilizado neste programa Timers ou divisores internos do microcontrolador, assuntos ainda não abordados neste artigo. Contudo, Não é possível desligar fisicamente o timer 0 do PIC, ao menos deste modelo, configurando-o da forma mais elementar possível e poupando, assim, alguma memória ROM do dispositivo.

    setup_timer_1(T1_DISABLED);
    Timer 1 desligado por hardware.

    setup_timer_2(T2_DISABLED,0,1);
    Timer 2 desligado por Hardware. O compilador, entretanto, exige, por regra, que sejam carregados valores por parâmetros neste timer, daí a necessidade de os números 0 e 1 dentro do parênteses.

    setup_comparator(NC_NC_NC_NC);
    Desabilita os comparadores internos. Os comparadores, que fazem parte dos canais CCP do microcontrolador, posteriormente abordados, nào sào utilizados neste projeto e, por isso, são aqui desligados.

    setup_vref(FALSE);
    Desliga a rede de resistores internos de precisão responsáveis pela geração de referências Internas de tensão, caso tal funcionalidade seja exigida no tópico de Conversão analógico-digital com referência de tensão tipo janela. Assunto será melhor elucidado futuramente.

    Terminadas estas configurações, o programa executa sua primeira linha de comando direcionado ao mundo exterior:

    output_low(PIN_B0);
    Esta diretiva possui, neste compilador, uma sequência bem definida de funções, servindo para, basicamente, colocar o pino x em estado y.

    Dentro do parênteses, informe ao compilador qual pino será afetado pela função designada. No caso, desligamos, inicialmente, o terminal do Microcontrolador no qual foi conectado o Led, apagando o mesmo.

    Esta é, aliás, a forma mais prática e simples possível de levar um pino do microcontrolador a determinado nível lógico, ou, em outras palavras, ligá-lo ou desligá-lo, respectivamente inserindo nele 5V ou 0V.

    Inicialmente, o compilador irá normalmente configurar Automaticamente o pino especificado dentro dos parênteses desta função como Saída. Em seguida, colocará nele o nível lógico especificado na própria função, neste caso, nível Baixo, pois utilizou-se a função "output_low()". Quando executada esta função pelo PIC, o pino no qual foi ligado o LED estará em modo de Saída, que é o desejado em nosso projeto, de forma fixa.

    Note-se, também, que não é necessária Nenhuma configuração anterior do pino, se será utilizado como entrada saída de sinal, por exemplo, no ponto que esta função é utilizada: O compilador assume automaticamente que o pino será uma Saída, configurando-o desta mesma forma todas as vezes que tal função for utilizada no pino.

    while(1)
    {
    
    }
    


    Função familiar ao leitor, explicada na bibliografia anteriormente recomendada.

    o Laço While possui função de executar tudo aquilo que está dentro de suas chaves, enquanto for satisfeita a condição entre parênteses. Aqui, utilizamos o algarismo 1, que, na lógica booleana, representa condição satisfeita. Neste caso, este 1 será interpretado como uma condição fixamente satisfeita, o que significa que o laço é Eterno. Este laço for será executado infinitamente enquanto perdurar a alimentaçào do microcontrolador, pois a condição imposta sempre será tida como satisfeita. Nunca sendo quebrado, o leitor perceberá que as funções dentro do mesmo serão sequencialmente executadas, indefinidamente.

    Nota: O compilador CCS aceita, em lugar do "1", a palavra "True", para designar a exigência permanentemente cumprida. O resultado no programa é análogo.

    delay_ms(1000);
    Esta função, muito útil para temporizações que Não requeiram pecisão deverá ser uma aliada do leitor durante a execuçào de programas, dos simples aos complexos, para microcontroladores PIC e Linguagem C.

    Esta, como se pode facilmente inferir, executa uma temporização no ponto de um número de milissegundos expressos entre os parênteses. Como aqui foi utilizado o número 1000, uma temporização de um segundo será obtida antes da execução da próxima linha do programa.

    Curiosamente, um número positivo de até 16 bits pode ser utilizado entre os parênteses, permitindo temporizações de até 65535 milissegundos, ou mais de 65 segundos e meio. Para efeitos práticos, contudo, muito raramente utiliza-se temporizações superiores a 10 segundos por esta função. uma saída mais elegante seria, por exemplo, utilização de timers internos, ou a colocação de várias funções delay_ms() seguidas, caso no qual a temporização total é a Soma de todos os delays utilizados.

    output_high(PIN_B0);
    Função completamente análoga a já bem comentada "output_low()", mas que coloca o pino especificado entre os parênteses em nível Alto.

    Neste caso, esta função fará Acender o Led do circuito montado em Protoboard conforme esquema, pelo leitor.

    delay_ms(1000);
    Mais uma temporização idêntica à anterior, que determina, perceba bem, quanto tempo o Led irá permanecer aceso, dentro do laço While.

    output_low(PIN_B0);
    Aqui, o pino RB0 do PIC e consequentemente o LED são desligados, completando o ciclo de piscadas do Led, que, com as temporizações utilizadas em nosso exemplo, terá ciclo ativo de 50%: Um segundo ligado, um segundo desligado.

    Perceba agora o leitor que, logo após esta última função ser executada, fecha-se a chave da função While, que, conforme já explicado, é Infinita em nosso programa-exemplo. Isso significa que, na sequência, o pic Voltará a executar a primeira linha dentro do laço While, tornando assim o ciclo de piscadas constantes do LED infinito: ele irá piscar enquanto o circuito estiver conectado à alimentação.

    Insira na protoboard o microcontrolador gravado, ligue a alimentação do circuito de acordo com a tensão e corrente já especificadas e comprove o funcionamento de seu primeiro circuito microcontrolado totalmente funcional.

    Terminamos aqui a leitura e interpretação de nosso primeiro programa, em detalhamento minucioso que certamente não será necessário nos próximos exemplos de programa. A utilidade do que o aluno acabou de ler é muito grande, e espero que, neste ponto, meu leitor tenha clara noção da estruturação de um programa básico, quem sabe até arriscando-se a criar sua própria versão de um programa simples como o que foi acabado de ser apresentado. Tal atitude é Encorajada neste ponto. Sinta-se o leitor Livre para executar algumas modificações no programa que desejar, munido do conhecimento "linha-a-linha" a ele dado até o momento, tais mudanças livres são possíveis e úteis ao aprendizado.

    Boa sorte até aqui!
    Artigo gentilmente desenvolvido para este website por Daniel Bonadio.


    Você pode copiar e usar este material livremente. Peço-lhe apenas que mencione e fonte e o autor (Eng. Daniel Bonadio), e caso seja para uso na web, que envie um link até esta página.