Blog - ACEPIC Tecnologia

Informações e notícias sobre microcontroladores e afins....

Últimas Postagens

Leitura de chaves com o PIC16F628A e MPLAB XC8

Criado por - Carlos Sandrini

Leitura de chaves com o PIC16F628A e MPLAB XC8

A seguir temos mais um projeto simples que mostra como fazer a leitura das entradas digitais do microcontrolador PIC16F628A utilizando-se o compilador em linguagem C MPLAB XC8.No caso, será realizada a leitura do estado do pino 4 da porta A e do pino 0 da porta B, onde estão conectadas as chaves S1 e S2, respectivamente O projeto deverá ser capaz de verificar o pressionamento das chaves e quando acontecer do pressionamento da chave S1, deve-se acionar o Led LED1 por 3 segundos e quando pressionada a chave S2, deve-se acionar o Led LED2 por também 3 segundos.Segue abaixo o circuito utilizado para o projeto:Criando o projeto para o compilador XC8 na IDE MPLAB XPara este projeto deverá ser criado um projeto no MPLAB X conforme já verificado na postagem anterior. Veja aqui como criar um projeto na IDE MPLAB X.Projeto com o compilador MPLAB XC8 e o PIC16F628A - Parte 1Projeto com o compilador MPLAB XC8 e o PIC16F628A - Parte 2Para o nome do projeto e do código fonte, fique livre para escolher o que mais lhe agrada.Criando o arquivo para o código do Projeto// CONFIG #pragma config FOSC = HS // Oscillator Selection bits (HS oscillator: High-speed crystal/resonator on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN) #pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT disabled) #pragma config PWRTE = ON // Power-up Timer Enable bit (PWRT enabled) #pragma config MCLRE = ON // RA5/MCLR/VPP Pin Function Select bit (RA5/MCLR/VPP pin function is MCLR) #pragma config BOREN = OFF // Brown-out Detect Enable bit (BOD disabled) #pragma config LVP = OFF // Low-Voltage Programming Enable bit (RB4/PGM pin has digital I/O function, HV on MCLR must be used for programming) #pragma config CPD = OFF // Data EE Memory Code Protection bit (Data memory code protection off) #pragma config CP = OFF // Flash Program Memory Code Protection bit (Code protection off) #include <xc.h> #define _XTAL_FREQ 8000000 void main(void) { TRISAbits.TRISA4 = 1; //Direciona o pino 4 da porta A como entrada TRISBbits.TRISB0 = 1; //Direciona o pino 0 da porta B como entrada TRISBbits.TRISB6 = 0; //Direciona o pino 6 da porta B como saída TRISBbits.TRISB7 = 0; //Direciona o pino 7 da porta B como saída PORTBbits.RB6 = 0; //Atribui nível lógico 0 (0V) ao pino 6 da porta B PORTBbits.RB7 = 0; //Atribui nível lógico 0 (0V) ao pino 7 da porta B while(1) { if (PORTAbits.RA4 == 1) { PORTBbits.RB6 = 1; __delay_ms(3000); } if (PORTBbits.RB0 == 1) { PORTBbits.RB7 = 1; __delay_ms(3000); } PORTBbits.RB6 = 0; PORTBbits.RB7 = 0; } } Entendendo o código Verificamos que, em grande parte, este código se assemelha ao anterior, porém na função principal (main), teremos agora o direcionamento dos pinos 4 da porta A (pino 3 do PIC16F628A) e 0 da porta B (pino 6 do PIC16F628A) como pinos de entrada. TRISAbits.TRISA4 = 1; //Direciona o pino 4 da porta A como entrada TRISBbits.TRISB0 = 1; //Direciona o pino 0 da porta B como entrada TRISBbits.TRISB6 = 0; //Direciona o pino 6 da porta B como saída TRISBbits.TRISB7 = 0; //Direciona o pino 7 da porta B como saída No laço principal (loop infinito), devemos agora monitorar os estados destes pinos direcionados como entrada. Isso se faz através do comando if. O comando if é um comando de decisão e este é usado para determinar se uma expressão é verdadeira, no caso, devemos verificar se o estado de um determinado pino é igual a 1, ou seja, se este pino está em nível lógico alto. if (PORTAbits.RA4 == 1) { PORTBbits.RB6 = 1; __delay_ms(3000); } ou if (PORTBbits.RB4 == 1) { PORTBbits.RB7 = 1; __delay_ms(3000); } Caso a condição da expressão seja verdadeira, deve-se executar os comandos que estão dentro do bloco if. Onde, no caso: Se pressionado o botão S1, o nível lógico, que está em 0 (0V) no pino 4 da porta A deverá ser levado a 1 (5V) e assim, a condição do comando if (PORTAbits.RA4 == 1) será satisfeita, ou seja, será verdadeira. Então deverá ser atribuído nível lógico 1 (5V) ao pino 6 da porta B (pino 12 do PIC) e, em seguida, será gerado um atraso de 3000ms (3 segundos). Caso seja pressionado o botão S2, o processo acima deverá ser o mesmo, assim, a condição if (PORTBbits.RB0 == 1) será verdadeira e será atribuído nível lógico 1 (5V) ao pino 7 da porta B (pino 13 do PIC) e, também, após, será gerado um atraso de 3000ms. Ao final dos comandos condicionais, temos a atribuição de níveis lógico 0 (0V) aos pinos 6 e 7 da porta B e, assim, caso estejam acesos, serão apagados os LEDS conectados a estes pinos, conforme o esquema elétrico. Perceba também que, caso seja pressionada uma chave, não será possível verificar o estado do outro pino que possui outra chave dentro dos 3 segundos em que o comando de atraso está sendo executado. Porém veremos como executar a ações enquanto não é finalizado o tempo de atraso estipulado em outra postagem.

Mais detalhes

Publicado em: 18/04/2023

Projeto com o compilador MPLAB XC8 e o PIC16F628A - Parte 2

Criado por - Carlos Sandrini

Projeto com o compilador MPLAB XC8 e o PIC16F628A - Parte 2

Agora que criamos o projeto com o compilador XC8 e o PIC16F628A, podemos criar o código fonte do projeto, porém primeiramente, é necessário a configuração dos bits de controle (Configuration Bits). Para isso, no MPLAB X, clique no menu Production e sem seguida, escolha a opção Set Configuration Bits;Será exibido no rodapé da área de edição de código um painel contendo todos os bits de configuração para o microcontrolador PIC16F628A;E para alterar a configuração de cada bit, pode-se clicar na coluna Option e realizar a configuração de acordo com a necessidade. Veja na figura a seguir a configuração da seleção do osciladorEntão podemos alterar as configurações dos bits(*) conforme segue:FOSC = HSWDTE = OFFPWRTE = ONMCLRE = ONBOREN = OFFLVP = OFFCPD = OFF CP = OFF* Não entraremos em detalhes sobre as explicações dos bits de configuração, caso deseje mais detalhes, recomendamos o nosso Curso Linguagem C para Microcontrolador PIC baseado nafamília 18F  Veja a seguir a configuração dos bits completa.Após, clique no botão Generate Source Code to Output para gerar o código de configuração.Após gerado o código, copie e cole no editor, conforme a figura. Atente-se para que as configurações devem ficar acima da inclusão do arquivo xc.h (#include <xc.h>)Agora, complete o código conforme segue: // CONFIG #pragma config FOSC = HS // Oscillator Selection bits (HS oscillator: High-speed crystal/resonator on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN) #pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT disabled) #pragma config PWRTE = ON // Power-up Timer Enable bit (PWRT enabled) #pragma config MCLRE = ON // RA5/MCLR/VPP Pin Function Select bit (RA5/MCLR/VPP pin function is MCLR) #pragma config BOREN = OFF // Brown-out Detect Enable bit (BOD disabled) #pragma config LVP = OFF // Low-Voltage Programming Enable bit (RB4/PGM pin has digital I/O function, HV on MCLR must be used for programming) #pragma config CPD = OFF // Data EE Memory Code Protection bit (Data memory code protection off) #pragma config CP = OFF // Flash Program Memory Code Protection bit (Code protection off) #include <xc.h> #define _XTAL_FREQ 8000000 void main(void) { TRISBbits.TRISB6 = 0; //Direciona o pino 6 da porta B como saída PORTBbits.RB6 = 0; //Atribui nível lógico 0 (0V) ao pino 6 da porta B while(1) { PORTBbits.RB6 = 1; //Atribui nível lógico 1 (5V) ao pino 6 da porta B (acende o LED) __delay_ms(1000); //Gera atraso de 1 segundo PORTBbits.RB6 = 0; //Atribui nível lógico 0 (0V) ao pino 6 da porta B (apaga o LED) __delay_ms(1000); //Gera atraso de 1 segundo } } Entendendo o código fonte // CONFIG #pragma config FOSC = HS // Oscillator Selection bits (HS oscillator: High-speed crystal/resonator on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN) #pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT disabled) #pragma config PWRTE = ON // Power-up Timer Enable bit (PWRT enabled) #pragma config MCLRE = ON // RA5/MCLR/VPP Pin Function Select bit (RA5/MCLR/VPP pin function is MCLR) #pragma config BOREN = OFF // Brown-out Detect Enable bit (BOD disabled) #pragma config LVP = OFF // Low-Voltage Programming Enable bit (RB4/PGM pin has digital I/O function, HV on MCLR must be used for programming) #pragma config CPD = OFF // Data EE Memory Code Protection bit (Data memory code protection off) #pragma config CP = OFF // Flash Program Memory Code Protection bit (Code protection off) Primeiramente, como já verificamos, temos a seleção dos bits de configuração (configuration bits). Esta configuração, de certa maneira, informa ao microcontrolador como ele deve trabalhar, ou seja, qual o tipo de oscilador que deverá ser utilizado, se será ou não habilitado o timer de segurança ou watchdog, se será habilitado ou não o timer de inicialização PWRTE, etc. #include <xc.h> Esta diretiva #include faz com que seja incluído no código fonte as funções do arquivo ‘xc.h’ que trata das configurações do compilador XC8 diante do microcontrolador utilizado. #define _XTAL_FREQ 8000000 Em seguida, através da diretiva #define, deve ser definido a frequência do oscilador que será utilizado como fonte de clock, no caso, será um oscilador a cristal (#pragma config HS) de 8MHz (8.000.000 Hz).Após, temos a função principal (main) do código fonte. Através desta função, serão realizadas todas as configurações dos periféricos do microcontrolador e será executado todo o seu funcionamento. void main(void) { .... } Perceba que uma função do tipo void (nulo), ou seja não retorna nada e também não recebe nenhum argumento (void). Dentro da função principal, temos as configurações iniciais do microcontrolador, no caso, vamos trabalhar somente com a porta B como periférico, assim, é necessário informar que um determinado pino ou todos os pinos de uma determinada porta será (ão) pino(s) de entra ou de saída. TRISBbits.TRISB6 = 0; //Direciona o pino 6 da porta B como saída PORTBbits.RB6 = 0; //Atribui nível lógico 0 (0V) ao pino 6 da porta B  O direcionamento do(s) pino(s) de uma porta se dá através do registrador TRISx, onde x indica qual a porta deverá ser configurada. No caso, a porta B, então TRISB.Caso seja desejada o direcionamento de todos os pinos da porta B, deve-se utilizar:  TRISB = 0; //Direciona todos os pinos da porta B como saída Ou   TRISB = 1; //Direciona todos os pinos da porta B como entrada  No caso de nosso código temos o sufixo bits após o registrador TRISB, assim será atribuído o direcionamento a um determinado pino e que, para nosso projeto, será o pino 6 da porta B, então temos:  TRISBbits.TRISB6 = 0; //Direciona o pino 6 da porta B como saída  Em seguida, usa-se o mesmo princípio de configuração para atribuir o nível lógico ao(s) pino(s) da porta, onde quando atribuído o nível lógico 0, temos 0V no(s) pino(s) e, se atribuído o nível lógico 1, temos 5V no(s) pino(s).   PORTBbits.RB6 = 0; //Atribui nível lógico 0 (0V) ao pino 6 da porta B  Note que TRISB6 e RB6 são os nomes do bit dos seus respectivos registradores TRISB e PORTB (veja o datasheet do PIC16F628A). Logo após as configurações dos periféricos na função principal, partiremos para a execução dos procedimentos que realmente são desejados, ou seja, fazer com que o microcontrolador execute o que se é desejado, no caso, fazer com que o LED permaneça aceso por 1 segundo e permaneça apagado por mais 1 segundo. Para isso, o processo deverá ser realizado infinitamente, assim, podemos utilizar o que é chamado de loop infinito (ou laço infinito), onde, desta maneira os códigos são executados dentro de um laço sem fim.A linguagem C disponibiliza alguns comandos para execução de um laço infinito, entre eles o comando while (enquanto), sendo que, como o próprio nome diz, serão executados os códigos dentro do laço enquanto uma expressão seja verdadeira, dessa maneira, temos:   while(1); //loop infinito  Neste caso, a expressão (1) é sempre verdadeira, deste modo o microcontrolador deverá executar este laço infinitamente. Para o nosso caso, devemos fazer:  while(1) { PORTBbits.RB6 = 1; //Atribui nível lógico 1 (5V) ao pino 6 da porta B (acende o LED) __delay_ms(1000); //Gera atraso de 1 segundo PORTBbits.RB6 = 0; //Atribui nível lógico 0 (0V) ao pino 6 da porta B (apaga o LED) __delay_ms(1000); //Gera atraso de 1 segundo }  Então, todos os códigos entre as chaves do laço while serão executados infinitamente.Compilando o projeto Finalizando, agora é necessário compilar o projeto para que seja gerado o código hexadecimal (*.hex) para que seja programado o microcontrolador. Para isso, no MPLAB X, pode-se clicar no menu Production e em seguida escolher a opção Build Main Project, ou pressionar a tecla F11 do teclado.Outra maneira de compilar o código é clicar no símbolo de martelo na barra de ferramentas, conforme mostra a figura a seguir:Abaixo do editor de código será exibido o resultado da compilação:O arquivo hexadecimal gerado estará disponível em ... dist->default->production. Ela terá o nome do seu projeto, seguido de X.production.hex, conforme abaixo:

Mais detalhes

Publicado em: 14/04/2023

Projeto com o compilador MPLAB XC8 e o PIC16F628A - Parte 1

Criado por - Carlos Sandrini

Projeto com o compilador MPLAB XC8 e o PIC16F628A - Parte 1

O projeto abaixo mostra como acionar uma saída de um pino do microcontrolador PIC16F628A utilizando-se o compilador em linguagem C MPLAB XC8, compilador este desenvolvido pela Microchip que também é a fabricante dos microcontroladores PIC.Utiliza-se, como monitoramento da saída, um LED conectado ao pino 6 da porta B (pino 12 do PIC), porém pode-se utilizar o mesmo código para outros acionamentos, como por exemplo o acionamento de um relé, além da possibilidade de se utilizar o mesmo princípio para acionamento de outros pinos de I/O do microcontrolador tanto para a porta A quanto para a porta B.Neste projeto, vamos fazer com que o LED permaneça aceso por 1 segundo e permaneça apagado por, também, 1 segundo num processo infinito. Sendo assim, segue abaixo o circuito utilizado para o projeto:Criando um projeto para o compilador XC8 na IDE MPLABXApós a instalação da IDE MPLAB X e do compilador MPLAB XC8, devemos criar um projeto para que possamos escrever o código para o acionamento do pino desejado. Segue abaixo o procedimento para criação deste projeto: 1 - Na tela inicial do MPLAB X, no menu File, escolha a opção “New Project”;2  - No primeiro passo (Choose Project) clique em Next para prosseguir;3 - No segundo passo (Select Device), na caixa Device, escolha o microcontrolador desejado, no caso, o PIC16F628A, em seguida clique no botão;4 - No terceiro passo (Select Header) basta clicar no botão Next para prosseguir. Como não será feita a seleção do Header, você será direcionado ao quinto passo;5 - No quinto passo (Select Compiler), marque a opção XC8 e, em seguida, clique no botão Next;6 - No sexto e último passo (Select Project Name and Folder), dê um nome ao projeto em Project Name e, caso deseje, clique no botão Browse para escolher a pasta onde será armazenado o projeto. Em seguida, clique no botão Fisnish para finalizar o processo de criação do projeto.7 - A IDE MPLAB X deverá exibir na aba Projects, no lado esquerdo, as pastas e arquivos do projeto;Criando o arquivo para o código do Projeto 1 – Para criar o arquivo onde será desenvolvido o código do projeto, na aba Projects, clique com o botão da direita do mouse sobre a pasta Source Files, depois New e em seguida main.c;2- Em seguida, dê um nome ao arquivo em File Name (pode ser o mesmo nome do projeto). Confira o nome do arquivo e o caminho completo do projeto em Created File e em seguida, clique no botão Finish.3 - Será criado o arquivo com a extensão *.c e será apresentado o arquivo para edição na tela principal do MPLAB X, conforme abaixo:Clique aqui para continuar

Mais detalhes

Publicado em: 14/04/2023

Programando o ESP32 com o Visual Studio Code e PlatformIO IDE

Criado por - Carlos Sandrini

Programando o ESP32 com o Visual Studio Code e PlatformIO IDE

Instalação do Visual Studio Code no WindowsInicialmente, vamos fazer o download do Visual Studio Code em https://code.visualstudio.com/  Após baixar o arquivo de instalação do Visual Studio Code, inicie a instalação seguindo os seguintes passos: Nesta primeira tela do instalador, escolha a opção ‘Eu aceito o acordo’ e clique sobre o botão ‘Próximo’ para prosseguir. Caso queira criar um atalho em sua área de trabalho, selecione esta opção e também é interessante manter a seleção em ‘Adicione em Path’. Após clique no botão ‘Próximo’. O Instalador deverá exibir as informações de instalação e as opções selecionadas como ‘Tarefas adicionais’, conforma figura acima.Neste caso, clique sobre o botão ‘Instalar’ e a instalação deverá começar.  Ao finalizar a instalação, poderá deixar marcada a opção ‘Iniciar o Visual Studio Code’ e ao clicar sobre o botão ‘Concluir’, o VS Code será aberto.Quando aberto pela primeira vez, poderá ser exibido no canto inferior direito (conforme a imagem acima) uma informação com a opção de instalar o pacote de tradução para Português Brasil, caso deseje traduzir o Visual Studio Code, clique sobre o botão azul – Instalar e Reiniciar.Após isso, o VS Code deverá fechar e reiniciar já com o software todo em português. - Instalação da Extensão PlatformIO IDE no VS CodePara a programação do ESP32 utilizando o Visual Studio Code, será necessária a instalação da extensão PlatformIO IDE. Com esta extensão também é possível a programação de outros dispositivos, tal como o ESP8266, Arduino e oturos.Para instalar a extensão, abra o VS Code e pressione Ctrl+Shift+X ou clique no ícone localizado no lado esquerdo do VS Code onforme mostra a figura a seguir:   No campo de pesquisa o lado, busque por PlatformIO IDE:  Note que ao passar o cursor do mouse sobre PlatformIO IDE, será exibida uma janela ao lado direito com as informações da extensão, inclusive com a sua versão atual, que, no momento da escrita deste post, está na versão 2.4.3.Clicando sobre PlatformIO IDE, serão exibidas mais informações sobre a extensão e um botão azul para instalar. Clique sobre este botão para prosseguir com a instalação.  Após a instalação, deverá ser exibido um ícone da extensão PlatformIO IDE logo abaixo do ícone de extensões no VS Code conforme a figura abaixo:  Recomenda-se fortemente que o VS Code seja fechado e aberto novamente após a instalação da extensão PlatformIO IDE.Obs..: Caso não seja exibido o ícone após a instalação da extensão, este deverá ser exibido após a reinicialização do VS Code e, caso ainda não seja exibido, recomenda-se refazer os passos anteriores. - Utilizando a extensão PlatformIO IDEAbra o VS Code e clique sobre a extensão PlatformIO IDE instalada.  Neste momento, deverá ser exibido, no lado direito do botão, uma janela com acesso rápido às opções da plataforma. Clique sobre a opção PIO Home -> OpenSerá exibida a tela de boas-vindas da plataforma onde poderão ser criados projetos, assim como importados projetos do Arduino, abrir um projeto criado anteriormente e importados projetos de exemplos. Veja as opções de acesso rápido marcadas em vermelho na figura acima.  - Criando um projetoClique sobre o botão ‘New Project’ em Acesso Rápido (ver figura anterior). - Na janela (Project Wizard) que será aberta, dê um nome ao seu projeto;- Em board, procure a opção DOIT ESP2 DEVKIT V1. Basta começar a digitar o nome e serão exibidos todos os nomes de placas disponíveis;- Em Framework, deixe a opção Arduino Framework;- Caso esteja marcada a seleção ‘Location – Use default location’, o projeto deverá ser armazenado em Documentos do Windows. Neste projeto de exemplo, deixaremos esta opção marcada;- Clique sobre o botão ‘Finish’.Obs.: A criação do projeto poderá demorar alguns minutos. Ao criar um novo projeto, o VS Code deverá exibir no lado esquerdo (Explorador) o nome do projeto e logo abaixo as pastas e arquivos pertencentes ao projeto e na janela de edição deverá ser mostrado o arquivo platformio.ini.O platformio.ini é o arquivo de configuração para o projeto. Ele mostra a plataforma, a placa utilizada e a estrutura do projeto. Você também pode adicionar outras configurações como bibliotecas a serem incluídas, opções de upload, alteração da taxa de transmissão do Monitor Serial e outras configurações.Obs.: Não mova ou exclua nenhum arquivo ou pasta criado. Caso isso seja feito, o projeto não funcionará corretamente.Para este projeto de exemplo, vamos alterar a taxa de transmissão do Monitor Serial (Padrão 9600bps) para 115200bps. Para isso, basta acrescentar o seguinte código ao arquivo platformio.ini.  monitor_speed = 115200 Salve o arquivo atualizado pressionando Ctrl+S. Agora podemos escrever o código do projeto e este deverá ser feito no arquivo main.cpp localizado na pasta src.Para abrir o arquivo para edição, basta clicar sobre ele para que seja disponibilizado na janela de edição. Veja a figura a seguir: Copie e cole ou escreva o código a seguir no arquivo main.cpp: #include <arduino.h> #define LED 2 void setup() { // put your setup code here, to run once: Serial.begin(115200); pinMode(LED, OUTPUT); } void loop() { // put your main code here, to run repeatedly: digitalWrite(LED, HIGH); Serial.println("LED is on"); delay(1000); digitalWrite(LED, LOW); Serial.println("LED is off"); delay(1000); } A finalizar, pressione CTRL+S para salvar o arquivo. - Compilando e fazendo o Upload do projeto no ESP32Para fazer o upload do código compilado no ESP32, podemos clicar novamente sobre o ícone da extensão PlatformIO IDE e logo em seguida escolher a opção upload em Project Tasks, conforme a figura a seguir: Também é possível fazer o upload do código para o ESP32 clicando-se no ícone upload localizado no canto inferior esquerdo e junto aos ícones de acesso rápido do VS Code: Onde temos, da esquerda para a direita:- Home: Vai para a tela de boas-vindas da PlatformIO IDE;- Build/Compile: Compila o código do projeto;- Upload: Compila e faz o upload do projeto;- Clean- Serial Monitor: Abre o Monitor Serial na tela de Terminal (geralmente exibido abaixo do editor de código)- Terminal: Abre a tela do Terminal. Durante e após a compilação e upload do projeto, deverão ser apresentadas as informações na Tela do Terminal, conforme a próxima figura:     

Mais detalhes

Publicado em: 04/04/2022

Programando o PIC com Bootlader

Criado por - Carlos Sandrini

Programando o PIC com Bootlader

No vídeo abaixo é mostrado como proceder para programar o microcontrolador PIC pré-programado com bootloader das placas ACEPIC.   Confira nossos cursos online e nossas placas.

Mais detalhes

Publicado em: 28/03/2022

Programando o PIC com o PicKit3

Criado por - Carlos Sandrini

Programando o PIC com o PicKit3

No vídeo abaixo é mostrado como utilizar o gravador Pickit3 para programar os microcontroladores PIC diretamente na placa ACEPIC.   Confira nossos cursos online e nossas placas.

Mais detalhes

Publicado em: 28/03/2022

Postagens populares

Leitura de chaves com o PIC16F628A e MPLAB XC8

Criado por - Carlos Sandrini

Leitura de chaves com o PIC16F628A e MPLAB XC8

A seguir temos mais um projeto simples que mostra como fazer a leitura das entradas digitais do microcontrolador PIC16F628A utilizando-se o compilador em linguagem C MPLAB XC8.No caso, será realizada a leitura do estado do pino 4 da porta A e do pino 0 da porta B, onde estão conectadas as chaves S1 e S2, respectivamente O projeto deverá ser capaz de verificar o pressionamento das chaves e quando acontecer do pressionamento da chave S1, deve-se acionar o Led LED1 por 3 segundos e quando pressionada a chave S2, deve-se acionar o Led LED2 por também 3 segundos.Segue abaixo o circuito utilizado para o projeto:Criando o projeto para o compilador XC8 na IDE MPLAB XPara este projeto deverá ser criado um projeto no MPLAB X conforme já verificado na postagem anterior. Veja aqui como criar um projeto na IDE MPLAB X.Projeto com o compilador MPLAB XC8 e o PIC16F628A - Parte 1Projeto com o compilador MPLAB XC8 e o PIC16F628A - Parte 2Para o nome do projeto e do código fonte, fique livre para escolher o que mais lhe agrada.Criando o arquivo para o código do Projeto// CONFIG #pragma config FOSC = HS // Oscillator Selection bits (HS oscillator: High-speed crystal/resonator on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN) #pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT disabled) #pragma config PWRTE = ON // Power-up Timer Enable bit (PWRT enabled) #pragma config MCLRE = ON // RA5/MCLR/VPP Pin Function Select bit (RA5/MCLR/VPP pin function is MCLR) #pragma config BOREN = OFF // Brown-out Detect Enable bit (BOD disabled) #pragma config LVP = OFF // Low-Voltage Programming Enable bit (RB4/PGM pin has digital I/O function, HV on MCLR must be used for programming) #pragma config CPD = OFF // Data EE Memory Code Protection bit (Data memory code protection off) #pragma config CP = OFF // Flash Program Memory Code Protection bit (Code protection off) #include <xc.h> #define _XTAL_FREQ 8000000 void main(void) { TRISAbits.TRISA4 = 1; //Direciona o pino 4 da porta A como entrada TRISBbits.TRISB0 = 1; //Direciona o pino 0 da porta B como entrada TRISBbits.TRISB6 = 0; //Direciona o pino 6 da porta B como saída TRISBbits.TRISB7 = 0; //Direciona o pino 7 da porta B como saída PORTBbits.RB6 = 0; //Atribui nível lógico 0 (0V) ao pino 6 da porta B PORTBbits.RB7 = 0; //Atribui nível lógico 0 (0V) ao pino 7 da porta B while(1) { if (PORTAbits.RA4 == 1) { PORTBbits.RB6 = 1; __delay_ms(3000); } if (PORTBbits.RB0 == 1) { PORTBbits.RB7 = 1; __delay_ms(3000); } PORTBbits.RB6 = 0; PORTBbits.RB7 = 0; } } Entendendo o código Verificamos que, em grande parte, este código se assemelha ao anterior, porém na função principal (main), teremos agora o direcionamento dos pinos 4 da porta A (pino 3 do PIC16F628A) e 0 da porta B (pino 6 do PIC16F628A) como pinos de entrada. TRISAbits.TRISA4 = 1; //Direciona o pino 4 da porta A como entrada TRISBbits.TRISB0 = 1; //Direciona o pino 0 da porta B como entrada TRISBbits.TRISB6 = 0; //Direciona o pino 6 da porta B como saída TRISBbits.TRISB7 = 0; //Direciona o pino 7 da porta B como saída No laço principal (loop infinito), devemos agora monitorar os estados destes pinos direcionados como entrada. Isso se faz através do comando if. O comando if é um comando de decisão e este é usado para determinar se uma expressão é verdadeira, no caso, devemos verificar se o estado de um determinado pino é igual a 1, ou seja, se este pino está em nível lógico alto. if (PORTAbits.RA4 == 1) { PORTBbits.RB6 = 1; __delay_ms(3000); } ou if (PORTBbits.RB4 == 1) { PORTBbits.RB7 = 1; __delay_ms(3000); } Caso a condição da expressão seja verdadeira, deve-se executar os comandos que estão dentro do bloco if. Onde, no caso: Se pressionado o botão S1, o nível lógico, que está em 0 (0V) no pino 4 da porta A deverá ser levado a 1 (5V) e assim, a condição do comando if (PORTAbits.RA4 == 1) será satisfeita, ou seja, será verdadeira. Então deverá ser atribuído nível lógico 1 (5V) ao pino 6 da porta B (pino 12 do PIC) e, em seguida, será gerado um atraso de 3000ms (3 segundos). Caso seja pressionado o botão S2, o processo acima deverá ser o mesmo, assim, a condição if (PORTBbits.RB0 == 1) será verdadeira e será atribuído nível lógico 1 (5V) ao pino 7 da porta B (pino 13 do PIC) e, também, após, será gerado um atraso de 3000ms. Ao final dos comandos condicionais, temos a atribuição de níveis lógico 0 (0V) aos pinos 6 e 7 da porta B e, assim, caso estejam acesos, serão apagados os LEDS conectados a estes pinos, conforme o esquema elétrico. Perceba também que, caso seja pressionada uma chave, não será possível verificar o estado do outro pino que possui outra chave dentro dos 3 segundos em que o comando de atraso está sendo executado. Porém veremos como executar a ações enquanto não é finalizado o tempo de atraso estipulado em outra postagem.

Mais detalhes

Publicado em: 18/04/2023

Projeto com o compilador MPLAB XC8 e o PIC16F628A - Parte 2

Criado por - Carlos Sandrini

Projeto com o compilador MPLAB XC8 e o PIC16F628A - Parte 2

Agora que criamos o projeto com o compilador XC8 e o PIC16F628A, podemos criar o código fonte do projeto, porém primeiramente, é necessário a configuração dos bits de controle (Configuration Bits). Para isso, no MPLAB X, clique no menu Production e sem seguida, escolha a opção Set Configuration Bits;Será exibido no rodapé da área de edição de código um painel contendo todos os bits de configuração para o microcontrolador PIC16F628A;E para alterar a configuração de cada bit, pode-se clicar na coluna Option e realizar a configuração de acordo com a necessidade. Veja na figura a seguir a configuração da seleção do osciladorEntão podemos alterar as configurações dos bits(*) conforme segue:FOSC = HSWDTE = OFFPWRTE = ONMCLRE = ONBOREN = OFFLVP = OFFCPD = OFF CP = OFF* Não entraremos em detalhes sobre as explicações dos bits de configuração, caso deseje mais detalhes, recomendamos o nosso Curso Linguagem C para Microcontrolador PIC baseado nafamília 18F  Veja a seguir a configuração dos bits completa.Após, clique no botão Generate Source Code to Output para gerar o código de configuração.Após gerado o código, copie e cole no editor, conforme a figura. Atente-se para que as configurações devem ficar acima da inclusão do arquivo xc.h (#include <xc.h>)Agora, complete o código conforme segue: // CONFIG #pragma config FOSC = HS // Oscillator Selection bits (HS oscillator: High-speed crystal/resonator on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN) #pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT disabled) #pragma config PWRTE = ON // Power-up Timer Enable bit (PWRT enabled) #pragma config MCLRE = ON // RA5/MCLR/VPP Pin Function Select bit (RA5/MCLR/VPP pin function is MCLR) #pragma config BOREN = OFF // Brown-out Detect Enable bit (BOD disabled) #pragma config LVP = OFF // Low-Voltage Programming Enable bit (RB4/PGM pin has digital I/O function, HV on MCLR must be used for programming) #pragma config CPD = OFF // Data EE Memory Code Protection bit (Data memory code protection off) #pragma config CP = OFF // Flash Program Memory Code Protection bit (Code protection off) #include <xc.h> #define _XTAL_FREQ 8000000 void main(void) { TRISBbits.TRISB6 = 0; //Direciona o pino 6 da porta B como saída PORTBbits.RB6 = 0; //Atribui nível lógico 0 (0V) ao pino 6 da porta B while(1) { PORTBbits.RB6 = 1; //Atribui nível lógico 1 (5V) ao pino 6 da porta B (acende o LED) __delay_ms(1000); //Gera atraso de 1 segundo PORTBbits.RB6 = 0; //Atribui nível lógico 0 (0V) ao pino 6 da porta B (apaga o LED) __delay_ms(1000); //Gera atraso de 1 segundo } } Entendendo o código fonte // CONFIG #pragma config FOSC = HS // Oscillator Selection bits (HS oscillator: High-speed crystal/resonator on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN) #pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT disabled) #pragma config PWRTE = ON // Power-up Timer Enable bit (PWRT enabled) #pragma config MCLRE = ON // RA5/MCLR/VPP Pin Function Select bit (RA5/MCLR/VPP pin function is MCLR) #pragma config BOREN = OFF // Brown-out Detect Enable bit (BOD disabled) #pragma config LVP = OFF // Low-Voltage Programming Enable bit (RB4/PGM pin has digital I/O function, HV on MCLR must be used for programming) #pragma config CPD = OFF // Data EE Memory Code Protection bit (Data memory code protection off) #pragma config CP = OFF // Flash Program Memory Code Protection bit (Code protection off) Primeiramente, como já verificamos, temos a seleção dos bits de configuração (configuration bits). Esta configuração, de certa maneira, informa ao microcontrolador como ele deve trabalhar, ou seja, qual o tipo de oscilador que deverá ser utilizado, se será ou não habilitado o timer de segurança ou watchdog, se será habilitado ou não o timer de inicialização PWRTE, etc. #include <xc.h> Esta diretiva #include faz com que seja incluído no código fonte as funções do arquivo ‘xc.h’ que trata das configurações do compilador XC8 diante do microcontrolador utilizado. #define _XTAL_FREQ 8000000 Em seguida, através da diretiva #define, deve ser definido a frequência do oscilador que será utilizado como fonte de clock, no caso, será um oscilador a cristal (#pragma config HS) de 8MHz (8.000.000 Hz).Após, temos a função principal (main) do código fonte. Através desta função, serão realizadas todas as configurações dos periféricos do microcontrolador e será executado todo o seu funcionamento. void main(void) { .... } Perceba que uma função do tipo void (nulo), ou seja não retorna nada e também não recebe nenhum argumento (void). Dentro da função principal, temos as configurações iniciais do microcontrolador, no caso, vamos trabalhar somente com a porta B como periférico, assim, é necessário informar que um determinado pino ou todos os pinos de uma determinada porta será (ão) pino(s) de entra ou de saída. TRISBbits.TRISB6 = 0; //Direciona o pino 6 da porta B como saída PORTBbits.RB6 = 0; //Atribui nível lógico 0 (0V) ao pino 6 da porta B  O direcionamento do(s) pino(s) de uma porta se dá através do registrador TRISx, onde x indica qual a porta deverá ser configurada. No caso, a porta B, então TRISB.Caso seja desejada o direcionamento de todos os pinos da porta B, deve-se utilizar:  TRISB = 0; //Direciona todos os pinos da porta B como saída Ou   TRISB = 1; //Direciona todos os pinos da porta B como entrada  No caso de nosso código temos o sufixo bits após o registrador TRISB, assim será atribuído o direcionamento a um determinado pino e que, para nosso projeto, será o pino 6 da porta B, então temos:  TRISBbits.TRISB6 = 0; //Direciona o pino 6 da porta B como saída  Em seguida, usa-se o mesmo princípio de configuração para atribuir o nível lógico ao(s) pino(s) da porta, onde quando atribuído o nível lógico 0, temos 0V no(s) pino(s) e, se atribuído o nível lógico 1, temos 5V no(s) pino(s).   PORTBbits.RB6 = 0; //Atribui nível lógico 0 (0V) ao pino 6 da porta B  Note que TRISB6 e RB6 são os nomes do bit dos seus respectivos registradores TRISB e PORTB (veja o datasheet do PIC16F628A). Logo após as configurações dos periféricos na função principal, partiremos para a execução dos procedimentos que realmente são desejados, ou seja, fazer com que o microcontrolador execute o que se é desejado, no caso, fazer com que o LED permaneça aceso por 1 segundo e permaneça apagado por mais 1 segundo. Para isso, o processo deverá ser realizado infinitamente, assim, podemos utilizar o que é chamado de loop infinito (ou laço infinito), onde, desta maneira os códigos são executados dentro de um laço sem fim.A linguagem C disponibiliza alguns comandos para execução de um laço infinito, entre eles o comando while (enquanto), sendo que, como o próprio nome diz, serão executados os códigos dentro do laço enquanto uma expressão seja verdadeira, dessa maneira, temos:   while(1); //loop infinito  Neste caso, a expressão (1) é sempre verdadeira, deste modo o microcontrolador deverá executar este laço infinitamente. Para o nosso caso, devemos fazer:  while(1) { PORTBbits.RB6 = 1; //Atribui nível lógico 1 (5V) ao pino 6 da porta B (acende o LED) __delay_ms(1000); //Gera atraso de 1 segundo PORTBbits.RB6 = 0; //Atribui nível lógico 0 (0V) ao pino 6 da porta B (apaga o LED) __delay_ms(1000); //Gera atraso de 1 segundo }  Então, todos os códigos entre as chaves do laço while serão executados infinitamente.Compilando o projeto Finalizando, agora é necessário compilar o projeto para que seja gerado o código hexadecimal (*.hex) para que seja programado o microcontrolador. Para isso, no MPLAB X, pode-se clicar no menu Production e em seguida escolher a opção Build Main Project, ou pressionar a tecla F11 do teclado.Outra maneira de compilar o código é clicar no símbolo de martelo na barra de ferramentas, conforme mostra a figura a seguir:Abaixo do editor de código será exibido o resultado da compilação:O arquivo hexadecimal gerado estará disponível em ... dist->default->production. Ela terá o nome do seu projeto, seguido de X.production.hex, conforme abaixo:

Mais detalhes

Publicado em: 14/04/2023

Projeto com o compilador MPLAB XC8 e o PIC16F628A - Parte 1

Criado por - Carlos Sandrini

Projeto com o compilador MPLAB XC8 e o PIC16F628A - Parte 1

O projeto abaixo mostra como acionar uma saída de um pino do microcontrolador PIC16F628A utilizando-se o compilador em linguagem C MPLAB XC8, compilador este desenvolvido pela Microchip que também é a fabricante dos microcontroladores PIC.Utiliza-se, como monitoramento da saída, um LED conectado ao pino 6 da porta B (pino 12 do PIC), porém pode-se utilizar o mesmo código para outros acionamentos, como por exemplo o acionamento de um relé, além da possibilidade de se utilizar o mesmo princípio para acionamento de outros pinos de I/O do microcontrolador tanto para a porta A quanto para a porta B.Neste projeto, vamos fazer com que o LED permaneça aceso por 1 segundo e permaneça apagado por, também, 1 segundo num processo infinito. Sendo assim, segue abaixo o circuito utilizado para o projeto:Criando um projeto para o compilador XC8 na IDE MPLABXApós a instalação da IDE MPLAB X e do compilador MPLAB XC8, devemos criar um projeto para que possamos escrever o código para o acionamento do pino desejado. Segue abaixo o procedimento para criação deste projeto: 1 - Na tela inicial do MPLAB X, no menu File, escolha a opção “New Project”;2  - No primeiro passo (Choose Project) clique em Next para prosseguir;3 - No segundo passo (Select Device), na caixa Device, escolha o microcontrolador desejado, no caso, o PIC16F628A, em seguida clique no botão;4 - No terceiro passo (Select Header) basta clicar no botão Next para prosseguir. Como não será feita a seleção do Header, você será direcionado ao quinto passo;5 - No quinto passo (Select Compiler), marque a opção XC8 e, em seguida, clique no botão Next;6 - No sexto e último passo (Select Project Name and Folder), dê um nome ao projeto em Project Name e, caso deseje, clique no botão Browse para escolher a pasta onde será armazenado o projeto. Em seguida, clique no botão Fisnish para finalizar o processo de criação do projeto.7 - A IDE MPLAB X deverá exibir na aba Projects, no lado esquerdo, as pastas e arquivos do projeto;Criando o arquivo para o código do Projeto 1 – Para criar o arquivo onde será desenvolvido o código do projeto, na aba Projects, clique com o botão da direita do mouse sobre a pasta Source Files, depois New e em seguida main.c;2- Em seguida, dê um nome ao arquivo em File Name (pode ser o mesmo nome do projeto). Confira o nome do arquivo e o caminho completo do projeto em Created File e em seguida, clique no botão Finish.3 - Será criado o arquivo com a extensão *.c e será apresentado o arquivo para edição na tela principal do MPLAB X, conforme abaixo:Clique aqui para continuar

Mais detalhes

Publicado em: 14/04/2023

Programando o ESP32 com o Visual Studio Code e PlatformIO IDE

Criado por - Carlos Sandrini

Programando o ESP32 com o Visual Studio Code e PlatformIO IDE

Instalação do Visual Studio Code no WindowsInicialmente, vamos fazer o download do Visual Studio Code em https://code.visualstudio.com/  Após baixar o arquivo de instalação do Visual Studio Code, inicie a instalação seguindo os seguintes passos: Nesta primeira tela do instalador, escolha a opção ‘Eu aceito o acordo’ e clique sobre o botão ‘Próximo’ para prosseguir. Caso queira criar um atalho em sua área de trabalho, selecione esta opção e também é interessante manter a seleção em ‘Adicione em Path’. Após clique no botão ‘Próximo’. O Instalador deverá exibir as informações de instalação e as opções selecionadas como ‘Tarefas adicionais’, conforma figura acima.Neste caso, clique sobre o botão ‘Instalar’ e a instalação deverá começar.  Ao finalizar a instalação, poderá deixar marcada a opção ‘Iniciar o Visual Studio Code’ e ao clicar sobre o botão ‘Concluir’, o VS Code será aberto.Quando aberto pela primeira vez, poderá ser exibido no canto inferior direito (conforme a imagem acima) uma informação com a opção de instalar o pacote de tradução para Português Brasil, caso deseje traduzir o Visual Studio Code, clique sobre o botão azul – Instalar e Reiniciar.Após isso, o VS Code deverá fechar e reiniciar já com o software todo em português. - Instalação da Extensão PlatformIO IDE no VS CodePara a programação do ESP32 utilizando o Visual Studio Code, será necessária a instalação da extensão PlatformIO IDE. Com esta extensão também é possível a programação de outros dispositivos, tal como o ESP8266, Arduino e oturos.Para instalar a extensão, abra o VS Code e pressione Ctrl+Shift+X ou clique no ícone localizado no lado esquerdo do VS Code onforme mostra a figura a seguir:   No campo de pesquisa o lado, busque por PlatformIO IDE:  Note que ao passar o cursor do mouse sobre PlatformIO IDE, será exibida uma janela ao lado direito com as informações da extensão, inclusive com a sua versão atual, que, no momento da escrita deste post, está na versão 2.4.3.Clicando sobre PlatformIO IDE, serão exibidas mais informações sobre a extensão e um botão azul para instalar. Clique sobre este botão para prosseguir com a instalação.  Após a instalação, deverá ser exibido um ícone da extensão PlatformIO IDE logo abaixo do ícone de extensões no VS Code conforme a figura abaixo:  Recomenda-se fortemente que o VS Code seja fechado e aberto novamente após a instalação da extensão PlatformIO IDE.Obs..: Caso não seja exibido o ícone após a instalação da extensão, este deverá ser exibido após a reinicialização do VS Code e, caso ainda não seja exibido, recomenda-se refazer os passos anteriores. - Utilizando a extensão PlatformIO IDEAbra o VS Code e clique sobre a extensão PlatformIO IDE instalada.  Neste momento, deverá ser exibido, no lado direito do botão, uma janela com acesso rápido às opções da plataforma. Clique sobre a opção PIO Home -> OpenSerá exibida a tela de boas-vindas da plataforma onde poderão ser criados projetos, assim como importados projetos do Arduino, abrir um projeto criado anteriormente e importados projetos de exemplos. Veja as opções de acesso rápido marcadas em vermelho na figura acima.  - Criando um projetoClique sobre o botão ‘New Project’ em Acesso Rápido (ver figura anterior). - Na janela (Project Wizard) que será aberta, dê um nome ao seu projeto;- Em board, procure a opção DOIT ESP2 DEVKIT V1. Basta começar a digitar o nome e serão exibidos todos os nomes de placas disponíveis;- Em Framework, deixe a opção Arduino Framework;- Caso esteja marcada a seleção ‘Location – Use default location’, o projeto deverá ser armazenado em Documentos do Windows. Neste projeto de exemplo, deixaremos esta opção marcada;- Clique sobre o botão ‘Finish’.Obs.: A criação do projeto poderá demorar alguns minutos. Ao criar um novo projeto, o VS Code deverá exibir no lado esquerdo (Explorador) o nome do projeto e logo abaixo as pastas e arquivos pertencentes ao projeto e na janela de edição deverá ser mostrado o arquivo platformio.ini.O platformio.ini é o arquivo de configuração para o projeto. Ele mostra a plataforma, a placa utilizada e a estrutura do projeto. Você também pode adicionar outras configurações como bibliotecas a serem incluídas, opções de upload, alteração da taxa de transmissão do Monitor Serial e outras configurações.Obs.: Não mova ou exclua nenhum arquivo ou pasta criado. Caso isso seja feito, o projeto não funcionará corretamente.Para este projeto de exemplo, vamos alterar a taxa de transmissão do Monitor Serial (Padrão 9600bps) para 115200bps. Para isso, basta acrescentar o seguinte código ao arquivo platformio.ini.  monitor_speed = 115200 Salve o arquivo atualizado pressionando Ctrl+S. Agora podemos escrever o código do projeto e este deverá ser feito no arquivo main.cpp localizado na pasta src.Para abrir o arquivo para edição, basta clicar sobre ele para que seja disponibilizado na janela de edição. Veja a figura a seguir: Copie e cole ou escreva o código a seguir no arquivo main.cpp: #include <arduino.h> #define LED 2 void setup() { // put your setup code here, to run once: Serial.begin(115200); pinMode(LED, OUTPUT); } void loop() { // put your main code here, to run repeatedly: digitalWrite(LED, HIGH); Serial.println("LED is on"); delay(1000); digitalWrite(LED, LOW); Serial.println("LED is off"); delay(1000); } A finalizar, pressione CTRL+S para salvar o arquivo. - Compilando e fazendo o Upload do projeto no ESP32Para fazer o upload do código compilado no ESP32, podemos clicar novamente sobre o ícone da extensão PlatformIO IDE e logo em seguida escolher a opção upload em Project Tasks, conforme a figura a seguir: Também é possível fazer o upload do código para o ESP32 clicando-se no ícone upload localizado no canto inferior esquerdo e junto aos ícones de acesso rápido do VS Code: Onde temos, da esquerda para a direita:- Home: Vai para a tela de boas-vindas da PlatformIO IDE;- Build/Compile: Compila o código do projeto;- Upload: Compila e faz o upload do projeto;- Clean- Serial Monitor: Abre o Monitor Serial na tela de Terminal (geralmente exibido abaixo do editor de código)- Terminal: Abre a tela do Terminal. Durante e após a compilação e upload do projeto, deverão ser apresentadas as informações na Tela do Terminal, conforme a próxima figura:     

Mais detalhes

Publicado em: 04/04/2022

Programando o PIC com Bootlader

Criado por - Carlos Sandrini

Programando o PIC com Bootlader

No vídeo abaixo é mostrado como proceder para programar o microcontrolador PIC pré-programado com bootloader das placas ACEPIC.   Confira nossos cursos online e nossas placas.

Mais detalhes

Publicado em: 28/03/2022

Programando o PIC com o PicKit3

Criado por - Carlos Sandrini

Programando o PIC com o PicKit3

No vídeo abaixo é mostrado como utilizar o gravador Pickit3 para programar os microcontroladores PIC diretamente na placa ACEPIC.   Confira nossos cursos online e nossas placas.

Mais detalhes

Publicado em: 28/03/2022

Categorias Populares
Útimas postagens
Leitura de chaves com o PIC16F628A e MPLAB XC8
Leitura de chaves com o PIC16F628A e MPLAB XC8
A seguir temos mais um projeto simples que mostra como fazer a leitura das entradas digitais do microcontrolador PIC16F628A utilizando-se o compilador em linguagem C MPLAB XC8.No caso, será realizada a leitura do estado do pino 4 da porta A e do pino 0 da porta B, onde estão conectadas as chaves S1 e S2, respectivamente O projeto deverá ser capaz de verificar o pressionamento das chaves e quando acontecer do pressionamento da chave S1, deve-se acionar o Led LED1 por 3 segundos e quando pressionada a chave S2, deve-se acionar o Led LED2 por também 3 segundos.Segue abaixo o circuito utilizado para o projeto:Criando o projeto para o compilador XC8 na IDE MPLAB XPara este projeto deverá ser criado um projeto no MPLAB X conforme já verificado na postagem anterior. Veja aqui como criar um projeto na IDE MPLAB X.Projeto com o compilador MPLAB XC8 e o PIC16F628A - Parte 1Projeto com o compilador MPLAB XC8 e o PIC16F628A - Parte 2Para o nome do projeto e do código fonte, fique livre para escolher o que mais lhe agrada.Criando o arquivo para o código do Projeto// CONFIG #pragma config FOSC = HS // Oscillator Selection bits (HS oscillator: High-speed crystal/resonator on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN) #pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT disabled) #pragma config PWRTE = ON // Power-up Timer Enable bit (PWRT enabled) #pragma config MCLRE = ON // RA5/MCLR/VPP Pin Function Select bit (RA5/MCLR/VPP pin function is MCLR) #pragma config BOREN = OFF // Brown-out Detect Enable bit (BOD disabled) #pragma config LVP = OFF // Low-Voltage Programming Enable bit (RB4/PGM pin has digital I/O function, HV on MCLR must be used for programming) #pragma config CPD = OFF // Data EE Memory Code Protection bit (Data memory code protection off) #pragma config CP = OFF // Flash Program Memory Code Protection bit (Code protection off) #include <xc.h> #define _XTAL_FREQ 8000000 void main(void) { TRISAbits.TRISA4 = 1; //Direciona o pino 4 da porta A como entrada TRISBbits.TRISB0 = 1; //Direciona o pino 0 da porta B como entrada TRISBbits.TRISB6 = 0; //Direciona o pino 6 da porta B como saída TRISBbits.TRISB7 = 0; //Direciona o pino 7 da porta B como saída PORTBbits.RB6 = 0; //Atribui nível lógico 0 (0V) ao pino 6 da porta B PORTBbits.RB7 = 0; //Atribui nível lógico 0 (0V) ao pino 7 da porta B while(1) { if (PORTAbits.RA4 == 1) { PORTBbits.RB6 = 1; __delay_ms(3000); } if (PORTBbits.RB0 == 1) { PORTBbits.RB7 = 1; __delay_ms(3000); } PORTBbits.RB6 = 0; PORTBbits.RB7 = 0; } } Entendendo o código Verificamos que, em grande parte, este código se assemelha ao anterior, porém na função principal (main), teremos agora o direcionamento dos pinos 4 da porta A (pino 3 do PIC16F628A) e 0 da porta B (pino 6 do PIC16F628A) como pinos de entrada. TRISAbits.TRISA4 = 1; //Direciona o pino 4 da porta A como entrada TRISBbits.TRISB0 = 1; //Direciona o pino 0 da porta B como entrada TRISBbits.TRISB6 = 0; //Direciona o pino 6 da porta B como saída TRISBbits.TRISB7 = 0; //Direciona o pino 7 da porta B como saída No laço principal (loop infinito), devemos agora monitorar os estados destes pinos direcionados como entrada. Isso se faz através do comando if. O comando if é um comando de decisão e este é usado para determinar se uma expressão é verdadeira, no caso, devemos verificar se o estado de um determinado pino é igual a 1, ou seja, se este pino está em nível lógico alto. if (PORTAbits.RA4 == 1) { PORTBbits.RB6 = 1; __delay_ms(3000); } ou if (PORTBbits.RB4 == 1) { PORTBbits.RB7 = 1; __delay_ms(3000); } Caso a condição da expressão seja verdadeira, deve-se executar os comandos que estão dentro do bloco if. Onde, no caso: Se pressionado o botão S1, o nível lógico, que está em 0 (0V) no pino 4 da porta A deverá ser levado a 1 (5V) e assim, a condição do comando if (PORTAbits.RA4 == 1) será satisfeita, ou seja, será verdadeira. Então deverá ser atribuído nível lógico 1 (5V) ao pino 6 da porta B (pino 12 do PIC) e, em seguida, será gerado um atraso de 3000ms (3 segundos). Caso seja pressionado o botão S2, o processo acima deverá ser o mesmo, assim, a condição if (PORTBbits.RB0 == 1) será verdadeira e será atribuído nível lógico 1 (5V) ao pino 7 da porta B (pino 13 do PIC) e, também, após, será gerado um atraso de 3000ms. Ao final dos comandos condicionais, temos a atribuição de níveis lógico 0 (0V) aos pinos 6 e 7 da porta B e, assim, caso estejam acesos, serão apagados os LEDS conectados a estes pinos, conforme o esquema elétrico. Perceba também que, caso seja pressionada uma chave, não será possível verificar o estado do outro pino que possui outra chave dentro dos 3 segundos em que o comando de atraso está sendo executado. Porém veremos como executar a ações enquanto não é finalizado o tempo de atraso estipulado em outra postagem.

18/04/2023

Projeto com o compilador MPLAB XC8 e o PIC16F628A - Parte 2
Projeto com o compilador MPLAB XC8 e o PIC16F628A - Parte 2
Agora que criamos o projeto com o compilador XC8 e o PIC16F628A, podemos criar o código fonte do projeto, porém primeiramente, é necessário a configuração dos bits de controle (Configuration Bits). Para isso, no MPLAB X, clique no menu Production e sem seguida, escolha a opção Set Configuration Bits;Será exibido no rodapé da área de edição de código um painel contendo todos os bits de configuração para o microcontrolador PIC16F628A;E para alterar a configuração de cada bit, pode-se clicar na coluna Option e realizar a configuração de acordo com a necessidade. Veja na figura a seguir a configuração da seleção do osciladorEntão podemos alterar as configurações dos bits(*) conforme segue:FOSC = HSWDTE = OFFPWRTE = ONMCLRE = ONBOREN = OFFLVP = OFFCPD = OFF CP = OFF* Não entraremos em detalhes sobre as explicações dos bits de configuração, caso deseje mais detalhes, recomendamos o nosso Curso Linguagem C para Microcontrolador PIC baseado nafamília 18F  Veja a seguir a configuração dos bits completa.Após, clique no botão Generate Source Code to Output para gerar o código de configuração.Após gerado o código, copie e cole no editor, conforme a figura. Atente-se para que as configurações devem ficar acima da inclusão do arquivo xc.h (#include <xc.h>)Agora, complete o código conforme segue: // CONFIG #pragma config FOSC = HS // Oscillator Selection bits (HS oscillator: High-speed crystal/resonator on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN) #pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT disabled) #pragma config PWRTE = ON // Power-up Timer Enable bit (PWRT enabled) #pragma config MCLRE = ON // RA5/MCLR/VPP Pin Function Select bit (RA5/MCLR/VPP pin function is MCLR) #pragma config BOREN = OFF // Brown-out Detect Enable bit (BOD disabled) #pragma config LVP = OFF // Low-Voltage Programming Enable bit (RB4/PGM pin has digital I/O function, HV on MCLR must be used for programming) #pragma config CPD = OFF // Data EE Memory Code Protection bit (Data memory code protection off) #pragma config CP = OFF // Flash Program Memory Code Protection bit (Code protection off) #include <xc.h> #define _XTAL_FREQ 8000000 void main(void) { TRISBbits.TRISB6 = 0; //Direciona o pino 6 da porta B como saída PORTBbits.RB6 = 0; //Atribui nível lógico 0 (0V) ao pino 6 da porta B while(1) { PORTBbits.RB6 = 1; //Atribui nível lógico 1 (5V) ao pino 6 da porta B (acende o LED) __delay_ms(1000); //Gera atraso de 1 segundo PORTBbits.RB6 = 0; //Atribui nível lógico 0 (0V) ao pino 6 da porta B (apaga o LED) __delay_ms(1000); //Gera atraso de 1 segundo } } Entendendo o código fonte // CONFIG #pragma config FOSC = HS // Oscillator Selection bits (HS oscillator: High-speed crystal/resonator on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN) #pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT disabled) #pragma config PWRTE = ON // Power-up Timer Enable bit (PWRT enabled) #pragma config MCLRE = ON // RA5/MCLR/VPP Pin Function Select bit (RA5/MCLR/VPP pin function is MCLR) #pragma config BOREN = OFF // Brown-out Detect Enable bit (BOD disabled) #pragma config LVP = OFF // Low-Voltage Programming Enable bit (RB4/PGM pin has digital I/O function, HV on MCLR must be used for programming) #pragma config CPD = OFF // Data EE Memory Code Protection bit (Data memory code protection off) #pragma config CP = OFF // Flash Program Memory Code Protection bit (Code protection off) Primeiramente, como já verificamos, temos a seleção dos bits de configuração (configuration bits). Esta configuração, de certa maneira, informa ao microcontrolador como ele deve trabalhar, ou seja, qual o tipo de oscilador que deverá ser utilizado, se será ou não habilitado o timer de segurança ou watchdog, se será habilitado ou não o timer de inicialização PWRTE, etc. #include <xc.h> Esta diretiva #include faz com que seja incluído no código fonte as funções do arquivo ‘xc.h’ que trata das configurações do compilador XC8 diante do microcontrolador utilizado. #define _XTAL_FREQ 8000000 Em seguida, através da diretiva #define, deve ser definido a frequência do oscilador que será utilizado como fonte de clock, no caso, será um oscilador a cristal (#pragma config HS) de 8MHz (8.000.000 Hz).Após, temos a função principal (main) do código fonte. Através desta função, serão realizadas todas as configurações dos periféricos do microcontrolador e será executado todo o seu funcionamento. void main(void) { .... } Perceba que uma função do tipo void (nulo), ou seja não retorna nada e também não recebe nenhum argumento (void). Dentro da função principal, temos as configurações iniciais do microcontrolador, no caso, vamos trabalhar somente com a porta B como periférico, assim, é necessário informar que um determinado pino ou todos os pinos de uma determinada porta será (ão) pino(s) de entra ou de saída. TRISBbits.TRISB6 = 0; //Direciona o pino 6 da porta B como saída PORTBbits.RB6 = 0; //Atribui nível lógico 0 (0V) ao pino 6 da porta B  O direcionamento do(s) pino(s) de uma porta se dá através do registrador TRISx, onde x indica qual a porta deverá ser configurada. No caso, a porta B, então TRISB.Caso seja desejada o direcionamento de todos os pinos da porta B, deve-se utilizar:  TRISB = 0; //Direciona todos os pinos da porta B como saída Ou   TRISB = 1; //Direciona todos os pinos da porta B como entrada  No caso de nosso código temos o sufixo bits após o registrador TRISB, assim será atribuído o direcionamento a um determinado pino e que, para nosso projeto, será o pino 6 da porta B, então temos:  TRISBbits.TRISB6 = 0; //Direciona o pino 6 da porta B como saída  Em seguida, usa-se o mesmo princípio de configuração para atribuir o nível lógico ao(s) pino(s) da porta, onde quando atribuído o nível lógico 0, temos 0V no(s) pino(s) e, se atribuído o nível lógico 1, temos 5V no(s) pino(s).   PORTBbits.RB6 = 0; //Atribui nível lógico 0 (0V) ao pino 6 da porta B  Note que TRISB6 e RB6 são os nomes do bit dos seus respectivos registradores TRISB e PORTB (veja o datasheet do PIC16F628A). Logo após as configurações dos periféricos na função principal, partiremos para a execução dos procedimentos que realmente são desejados, ou seja, fazer com que o microcontrolador execute o que se é desejado, no caso, fazer com que o LED permaneça aceso por 1 segundo e permaneça apagado por mais 1 segundo. Para isso, o processo deverá ser realizado infinitamente, assim, podemos utilizar o que é chamado de loop infinito (ou laço infinito), onde, desta maneira os códigos são executados dentro de um laço sem fim.A linguagem C disponibiliza alguns comandos para execução de um laço infinito, entre eles o comando while (enquanto), sendo que, como o próprio nome diz, serão executados os códigos dentro do laço enquanto uma expressão seja verdadeira, dessa maneira, temos:   while(1); //loop infinito  Neste caso, a expressão (1) é sempre verdadeira, deste modo o microcontrolador deverá executar este laço infinitamente. Para o nosso caso, devemos fazer:  while(1) { PORTBbits.RB6 = 1; //Atribui nível lógico 1 (5V) ao pino 6 da porta B (acende o LED) __delay_ms(1000); //Gera atraso de 1 segundo PORTBbits.RB6 = 0; //Atribui nível lógico 0 (0V) ao pino 6 da porta B (apaga o LED) __delay_ms(1000); //Gera atraso de 1 segundo }  Então, todos os códigos entre as chaves do laço while serão executados infinitamente.Compilando o projeto Finalizando, agora é necessário compilar o projeto para que seja gerado o código hexadecimal (*.hex) para que seja programado o microcontrolador. Para isso, no MPLAB X, pode-se clicar no menu Production e em seguida escolher a opção Build Main Project, ou pressionar a tecla F11 do teclado.Outra maneira de compilar o código é clicar no símbolo de martelo na barra de ferramentas, conforme mostra a figura a seguir:Abaixo do editor de código será exibido o resultado da compilação:O arquivo hexadecimal gerado estará disponível em ... dist->default->production. Ela terá o nome do seu projeto, seguido de X.production.hex, conforme abaixo:

14/04/2023

Projeto com o compilador MPLAB XC8 e o PIC16F628A - Parte 1
Projeto com o compilador MPLAB XC8 e o PIC16F628A - Parte 1
O projeto abaixo mostra como acionar uma saída de um pino do microcontrolador PIC16F628A utilizando-se o compilador em linguagem C MPLAB XC8, compilador este desenvolvido pela Microchip que também é a fabricante dos microcontroladores PIC.Utiliza-se, como monitoramento da saída, um LED conectado ao pino 6 da porta B (pino 12 do PIC), porém pode-se utilizar o mesmo código para outros acionamentos, como por exemplo o acionamento de um relé, além da possibilidade de se utilizar o mesmo princípio para acionamento de outros pinos de I/O do microcontrolador tanto para a porta A quanto para a porta B.Neste projeto, vamos fazer com que o LED permaneça aceso por 1 segundo e permaneça apagado por, também, 1 segundo num processo infinito. Sendo assim, segue abaixo o circuito utilizado para o projeto:Criando um projeto para o compilador XC8 na IDE MPLABXApós a instalação da IDE MPLAB X e do compilador MPLAB XC8, devemos criar um projeto para que possamos escrever o código para o acionamento do pino desejado. Segue abaixo o procedimento para criação deste projeto: 1 - Na tela inicial do MPLAB X, no menu File, escolha a opção “New Project”;2  - No primeiro passo (Choose Project) clique em Next para prosseguir;3 - No segundo passo (Select Device), na caixa Device, escolha o microcontrolador desejado, no caso, o PIC16F628A, em seguida clique no botão;4 - No terceiro passo (Select Header) basta clicar no botão Next para prosseguir. Como não será feita a seleção do Header, você será direcionado ao quinto passo;5 - No quinto passo (Select Compiler), marque a opção XC8 e, em seguida, clique no botão Next;6 - No sexto e último passo (Select Project Name and Folder), dê um nome ao projeto em Project Name e, caso deseje, clique no botão Browse para escolher a pasta onde será armazenado o projeto. Em seguida, clique no botão Fisnish para finalizar o processo de criação do projeto.7 - A IDE MPLAB X deverá exibir na aba Projects, no lado esquerdo, as pastas e arquivos do projeto;Criando o arquivo para o código do Projeto 1 – Para criar o arquivo onde será desenvolvido o código do projeto, na aba Projects, clique com o botão da direita do mouse sobre a pasta Source Files, depois New e em seguida main.c;2- Em seguida, dê um nome ao arquivo em File Name (pode ser o mesmo nome do projeto). Confira o nome do arquivo e o caminho completo do projeto em Created File e em seguida, clique no botão Finish.3 - Será criado o arquivo com a extensão *.c e será apresentado o arquivo para edição na tela principal do MPLAB X, conforme abaixo:Clique aqui para continuar

14/04/2023

Todas as postagens