sábado, 14 de junho de 2014

GRAVANDO PROGRAMAS NO MICROCONTROLADOR COM BOOTLOADER



Com a placa desligada, coloque os jumpers J1, J2, J3, J4 e J5 (chaves H) na posição 1-2 (Boot).
Conecte o cabo USB do circuito no PC. Pressione o botão BOOTLOADER, que esta ligado ao PORTB<4> (pino37) do PIC e, em seguida, pressione e solte o botão RESET. Quando os dois LEDs começarem a piscar alternadamente, solte o botão BOOTLOADER e o bootloader estará pronto para receber programas pela porta USB. Para gravar o programa, use a aplicação PDFSUSB.exe seguindo os passos abaixo:




1) Execute o programa PDFSUSB.exe e na janela dessa aplicação, clique o botão Load HEX File para abrir a janela de seleção de arquivos.


2) Escolha o programa que deseja gravar no microcontrolador. O programa deve ter a extenção .hex.


3) Na janela de configuração que aparecer, escolha a opção "Não". Essa opção deve ser sempre selecionada pois ela não permitirá que os bits de configuração sejam regravados pelo seu programa. Se a opção Sim for escolhida, o bootloader vai deixar de funcionar e não será possível, da próxima vez, gravar o programa via bootloader. Nesse caso, o bootloader deverá ser regravado com um programador de porta serial ou outro qualquer.


4) O programa em formato hexa decimal será carregado e mostrado na parte inferior da janela.
Se o endereço inicial do programa não for "000800" você cometeu algum erro nas modificações do projeto. Reveja suas configurações.



5) Abra a lista Select PICDEM FS USB Board e selecione o dispositivo ativo na porta USB, relativo ao circuito que iremos gravar, indicado pela seta 1.



6)  Após selecionar o dispositivo USB, clique no botão Program Device, indicado pela seta 2 para iniciar a gravação do programa. Quem esta acostumado a usar programadores de porta serial vai notar que, com o bootloader, o programa é transferido para o microcontrolador a uma velocidade muito alta.


7) Quando a gravação terminar, confira as mensagens que aparecem na janela de mensagens. Se tudo correu bem, então pode iniciar a execução do programa no microcontrolador. 

  • Para isso desligue a energia da placa C
  • Coloque os jumpers J1, J2, J3, J4 e J5 (chaves H) na posição 2-3 (troque as chaves).
  • Alimente a placa que o programa carregado deve começar a ser executado.
  • Em algumas situações se o programa carrgeado não iniciar, pressionone o botão RESET do circuito.


Observação importante: O arquivo HEX deve ser compilado para iniciar em 0x800.
Veja o post "Compilando arquivos para uso com bootloader"




   

INSTALAÇÃO DO PROGRAMA DE COMUNICAÇÃO

INSTALAÇÃO DO PROGRAMA DE COMUNICAÇÃO: 

 PIC-DEM(TM) FS Demo Tool Version 1.00

Você pode baixar o programa aqui:

Acesse o arquivo do programa de instalação.



Inicie a instalação do programa


   


  


O programa pode ser acessado pelo link criado pelo programa de instalação. Para facilitar crie um atalho dele na sua área de trabalho.


O programa é instalado na pasta C:\MCHPFSUSB\Pc\Pdfusb\




Estabelecendo a comunicação

  • Conecte o cabo USB no PC. A princípio nada vai acontecer.
  • Pressione o botão BOOT, que esta ligado ao PORTB<4> (chave pull-up no pino37) do PIC e, em seguida, pressione e solte o botão RESET (chave pull-up no pino1).
  • Quando os dois LEDs começarem a piscar alternadamente, solte o botão BOOT e o bootloader estará pronto para receber programas pela porta USB.
  • Na primeira vez que esse procedimento for realizado no computador , o sistema operacional vai dizer que um novo hardware foi detectado e é necessário instalar um driver para o dispositivo USB.


Instalando o driver do para o dispositivo


O driver encontra-se na pasta C:\MCHPFSUSB\Pc\MCHPUSB Driver\Release




Abra o Gerenciador de dispositivos, você encontrará um "Dispositivo desconhecido"



Clique com o botão direito do mouse sobre o "Dispositivo desconhecido" e escolha "Atualizar Driver..."



Siga as telas abaixo


 


 



Se, se tudo correr bem, no Windows nunca se sabe, o driver será instalado.
Após o Driver instalado os Leds ligados em RD0 e RD1 (pinos 19 e 20 respectivamente) começam a piscar alternadamente.




   

Bootloader

Obs.: O desenvolvimento deste post praticamente igual (com alguns ajustes) ao do site http://www.hpspin.com.br/site1/bootloader/

Agradecimentos ao ex-aluno Mirayr Raul que ajudou no desmitificar o funcionamento do bootloader.

USB E BOOTLOADER

   Alguns microcontroladores da família 18F como o PIC18F4550 possuem porta de comunicação USB para facilitar a comunincação entre o PC e o microcontrolador. Uma das opções é usar a porta USB para gravar o programa no microcontrolador usando um bootloader, programa que fica residente no próprio microcontrolador e permite que o programa de aplicação seja gravado sem a necessidade de um programador.
   A Microchip fornece um framework com vários exemplos que permitem desenvolver aplicações em seus microcontroladores usando a porta USB. Nesta experiência, usaremos somente alguns arquivos mas, quem quiser, poderá baixar todo o diretório contendo o framework. Infelizmente não posso fornecer o link para o framework porque a estrutura de páginas da Microchip muda constantemente.

O QUE É O BOOTLOADER

   O bootloader é um programa que será gravado no microcontrolador, uma única vez, por um programador comum, como um McFlash, um JDM ou através do ICSP. A partir daí, o programador não será mais necessário, pois bastará conectar o microcontrolador na porta USB e transferir o programa de aplicação para o microcontrolador quantas vezes forem necessárias, sem que seja necessário remover o chip do circuito e numa velocidade muito mais alta do que a velocidade alcançada pelos programadores comuns.






   O programa de bootloader permite a comunicação entre o computador e a flash do PIC sem a necessidade de um gravador, com ele é possível ler, apagar e gravar novos dados na memória flash do microcontrolador.
   É importante salientar que desta forma teremos sempre o programa bootloader em "background" ao programa desenvolvido, e com isso algumas configurações não são possíveis de alterar.
   Esta é uma solução econômica, destinada ao estudo e desenvolvimento.
   Para aplicações profissionais é indicado a aquisição de um gravador, ou a construção de um (existem na WEB alguns tutoriais orientando a contrução de gravadores free.

PROGRAMA NECESSÁRIO PARA COMUNICAÇÃO USB



   

sexta-feira, 13 de junho de 2014

Biblioteca de incialização - config_PIC18F4550.h

   Existem alguns parâmetros que é necessário setar em cada projeto.
   A fim de simplificar, e não ter que digitar ou copiar a cada projeto novo, podemos incluir esses parâmetros em um aquivo de biblioteca ".h"

Para criar o arquivo de configuração

  1. Abra um editor de textos qualquer (bloco de notas, por exemplo), 
  2. Copie o conteúdo mostrado abaixo entre as barras horizontais e cole no arquivo
  3. Salve o arquivo com o nome "Config_PIC18F4550.H", lembre-se que a extensão do arquivo deve ser ".H" 



Arquivo de configuração para as praticas com o PIC18F4550
  
// PIC18F4550 Configuration Bit Settings
// 'C' source line config statements
// Cristal 20MHz / 5 = 4MHz
// PLL interno com entrada de 4MHz => 96MHz
// PLL interno /2 => 48MHz
// Fosc = 48MHz
// Tciclo = 4/Fosc = 1/12MHz = 83,333ns

// CONFIG1L
#pragma config PLLDIV = 5       // PLL Prescaler Selection bits (Divide by 5 (20 MHz oscillator input))
#pragma config CPUDIV = OSC1_PLL2// System Clock Postscaler Selection bits ([Primary Oscillator Src: /1][96 MHz PLL Src: /2])
#pragma config USBDIV = 2       // USB Clock Selection bit (used in Full-Speed USB mode only; UCFG:FSEN = 1) (USB clock source comes from the 96 MHz PLL divided by 2)

// CONFIG1H
#pragma config FOSC = HS        // Oscillator Selection bits (HS oscillator (HS))
#pragma config FCMEN = OFF      // Fail-Safe Clock Monitor Enable bit (Fail-Safe Clock Monitor disabled)
#pragma config IESO = OFF       // Internal/External Oscillator Switchover bit (Oscillator Switchover mode disabled)

// CONFIG2L
#pragma config PWRT = ON        // Power-up Timer Enable bit (PWRT enabled)
#pragma config BOR = ON         // Brown-out Reset Enable bits (Brown-out Reset enabled in hardware only (SBOREN is disabled))
#pragma config BORV = 2         // Brown-out Reset Voltage bits (Setting 1 2.79V)
#pragma config VREGEN = ON      // USB Voltage Regulator Enable bit (USB voltage regulator enabled)

// CONFIG2H
#pragma config WDT = OFF        // Watchdog Timer Enable bit (WDT disabled (control is placed on the SWDTEN bit))
#pragma config WDTPS = 32768    // Watchdog Timer Postscale Select bits (1:32768)

// CONFIG3H
#pragma config CCP2MX = ON      // CCP2 MUX bit (CCP2 input/output is multiplexed with RC1)
#pragma config PBADEN = OFF     // PORTB A/D Enable bit (PORTB<4:0> pins are configured as digital I/O on Reset)
#pragma config LPT1OSC = OFF    // Low-Power Timer 1 Oscillator Enable bit (Timer1 configured for higher power operation)
#pragma config MCLRE = ON       // MCLR Pin Enable bit (MCLR pin enabled; RE3 input pin disabled)

// CONFIG4L
#pragma config STVREN = ON      // Stack Full/Underflow Reset Enable bit (Stack full/underflow will cause Reset)
#pragma config LVP = OFF        // Single-Supply ICSP Enable bit (Single-Supply ICSP disabled)
#pragma config ICPRT = OFF      // Dedicated In-Circuit Debug/Programming Port (ICPORT) Enable bit (ICPORT disabled)
#pragma config XINST = OFF      // Extended Instruction Set Enable bit (Instruction set extension and Indexed Addressing mode disabled (Legacy mode))

// CONFIG5L
#pragma config CP0 = OFF        // Code Protection bit (Block 0 (000800-001FFFh) is not code-protected)
#pragma config CP1 = OFF        // Code Protection bit (Block 1 (002000-003FFFh) is not code-protected)
#pragma config CP2 = OFF        // Code Protection bit (Block 2 (004000-005FFFh) is not code-protected)
#pragma config CP3 = OFF        // Code Protection bit (Block 3 (006000-007FFFh) is not code-protected)

// CONFIG5H
#pragma config CPB = OFF        // Boot Block Code Protection bit (Boot block (000000-0007FFh) is not code-protected)
#pragma config CPD = OFF        // Data EEPROM Code Protection bit (Data EEPROM is not code-protected)

// CONFIG6L
#pragma config WRT0 = OFF       // Write Protection bit (Block 0 (000800-001FFFh) is not write-protected)
#pragma config WRT1 = OFF       // Write Protection bit (Block 1 (002000-003FFFh) is not write-protected)
#pragma config WRT2 = OFF       // Write Protection bit (Block 2 (004000-005FFFh) is not write-protected)
#pragma config WRT3 = OFF       // Write Protection bit (Block 3 (006000-007FFFh) is not write-protected)

// CONFIG6H
#pragma config WRTC = OFF       // Configuration Register Write Protection bit (Configuration registers (300000-3000FFh) are not write-protected)
#pragma config WRTB = OFF       // Boot Block Write Protection bit (Boot block (000000-0007FFh) is not write-protected)
#pragma config WRTD = OFF       // Data EEPROM Write Protection bit (Data EEPROM is not write-protected)

// CONFIG7L
#pragma config EBTR0 = OFF      // Table Read Protection bit (Block 0 (000800-001FFFh) is not protected from table reads executed in other blocks)
#pragma config EBTR1 = OFF      // Table Read Protection bit (Block 1 (002000-003FFFh) is not protected from table reads executed in other blocks)
#pragma config EBTR2 = OFF      // Table Read Protection bit (Block 2 (004000-005FFFh) is not protected from table reads executed in other blocks)
#pragma config EBTR3 = OFF      // Table Read Protection bit (Block 3 (006000-007FFFh) is not protected from table reads executed in other blocks)

// CONFIG7H
#pragma config EBTRB = OFF      // Boot Block Table Read Protection bit (Boot block (000000-0007FFh) is not protected from table reads executed in other blocks)

// #pragma config statements should precede project file includes.
// Use project enums instead of #define for ON and OFF.

//#include <xc.h>



Fim do arquivo de configuração  para as praticas com o PIC18F4550

  

Esta configuração pode ser obtida dentro do MPLABX
   Menu: "Windows\Pic Memory Views\Configuration Bits"



  O arquivo gerado abaixo aparentemente é o que se aproxima do que existe dentro do bootloader, sendo necessário para a simulação, uma vez que na execução o software criado roda "sob o bootloader"





   

MPLAB X IDE – Criando um projeto


Este tutorial tem por objetivo criar um projeto novo no MPLAB X IDE para um microcontrolador PIC18F4550


================================================

Abrindo a interface do MPLAB X IDE temos:


Nela temos a página inicial que nos disponibiliza links para várias fontes de consulta sejam elas por arquivos instalados junto ao ambiente ou informações on-line na web.

Criando um projeto



Inicie o assistente (wizard), que pode ser acessado pelo botão “New Projetc”, ou pelo menu File/New project.

  

1)      Escolhendo o Projeto

  •         Em “Categories” selecione “Microchip Embedded”
  •         Em “Projets” selecione “Standalone Project”
  •         Clique no botão “Next” para a próxima etapa


2)      Seleção do dispositivo

  •         No campo “Family”, selecione “Advanced 8-bit MCUs (PIC18)
  •         No campo “Device”, selecione “PIC18F4550”
  •         Clique no botão “Next” para a próxima etapa


3)      Seleção da ferramenta
Como a transferência do programa usaremos o Bootloader não importa a ferramenta a ser selecionada. Se desejar utilizar os recursos de simulação, escolha “Simulator”. Clique no botão “Next” para a próxima etapa.


4)      Seleção do compilador

  •          Selecione o XC8 para indicar que o programa é escrito em linguagem C.
  •         Clique no botão “Next” para a próxima etapa


5)      Nome do projeto e local de armazenamento

  •          Em “Project Name”, digite um nome relacionado com o objetivo do projeto (o que ele faz). Não utilize espaços, pontos, caracteres acentuados.
  •         Em “Project Location” indique a pasta onde estarão armazenados os seus projetos. No exemplo abaixo note que foi criada uma pasta “PIC18” no “Drive C” e nesta pasta foi criada uma pasta “Projetos”. Procure simplificar para você facilmente encontrar o projeto e seus arquivos.
  •         Clique no botão “Finish” para encerrar o assistente.


   Se você seguiu os passos terá janela abaixo.


    Agora é hora de você criar um arquivo para você digitar o seu código em linguagem C.

  • ·        Clique em “Source Files” com o botão direito do mouse e selecione “C Main File...”


  • Nome e local de armazenamento
  • Na janela que se abre digite um nome para o projeto que tenha relação com o objetivo do projeto. Aqui valem as mesmas regras mencionadas anteriormente quanto ao nome do projeto evitando espaços, pontos ou caracteres acentuados.
  • Clique no botão “Finish” para criar o arquivo.



Ao finalizar você terá um arquivo para digitar o código em linguagem C com:
  •         Um cabeçalho de comentário indicando o nome do projeto, o Autor (nome do usuário da máquina) e a data de criação do arquivo.
  •         Duas linhas de include com bibliotecas padrão de linguagem C
  •         A função Main criada







   

Hardware para desenvolvimento de aplicações

Hardware para o desenvolvimento de aplicações




Neste esquema temos:



  • Fonte regulada em +5V, com entrada acima de +8V
  • Estrutura para comunicação USB via bootloader
  • Conexão com LCD 2 x 16
  • PORTs A, B, C, D e E

O circuito foi pensado para a montagem de circuitos adicionais externamente (protoboard por exemplo)

Exemplos de hardware para desenvolvimento



Protoboard (não recomendado) visto as facilidade de desconexão e mau contato





Montagem em placa padrão

  


Montagem em placas próprias




 



Placas industrializada



   

Motor de Passo - Atividades

Atividade 1: Acionamento simples do motor de passo

Acionar um motor de passo em “passo completo” (Full Step) – Modo Wave



Avaliação da atividade:



  • Indicar a atividade no LCD 2 x 16
  • Mostrar a atividade acionando 4 Leds indicando as 4 bobinas do motor de passo

  


Atividade 2: Controle do sentido do motor de passo

Colocar um botão em B0 que indica o sentido (horário ou anti-horário):
  • 1 – 2 – 4 – 8
  • 8 – 4 – 2 – 1 
Observação: O botão pode funcionar de 2 formas:
  • Botão solto indica sentido 1 e botão pressionado indica sentido 2
  • Ao pressionar o botão muda o sentido

Avaliação da atividade:

  • Indicar a atividade no LCD 2 x 16
  • Mostrar a atividade acionando 4 Leds indicando as 4 bobinas do motor de passo

Dica de implementação: 

  • Utilize uma variável “sentido” com valores que indicam o sentido.
    • 0 – Horário
    • 1 – Anti-horário
  • Faça o teste do botão para troca de sentido dentro na rotina (função) de temporização

  


Atividade 3: Controle do modo de operação

Colocar um botão em B1 que indique as seguintes situações
  • Situação 1: Passo completo (“Full Step”) – Modo Wave (1 – 2 – 4 – 8 ou 8 – 4 – 2 – 1)
  • Situação 2: Meio-Passo (“Half-Step”):


Observações:

  • O botão pode funcionar em qualquer um dos modos descritos na atividade 2
  • O botão sentido (B0) deve mudar o sentido nas duas situações descritas por B1

Avaliação da atividade:

  • Indicar a atividade no LCD 2 x 16
  • Mostrar a atividade acionando 4 Leds indicando as 4 bobinas do motor de passo

Dica de implementação: 

  • Utilize uma variável “passo” com valores que indicam o modo de operação.
    • 0 – “Half-Step” – meio passo
    • 1 – “Full Step” – passo completo
  • Faça o teste do botão para troca de modo dentro na rotina (função) de temporização

  


Atividade 4: Controle de velocidade

Incluir 2 botões para controle de velocidade
  • B2: (-) diminui a velocidade
  • B3: (+) aumenta a velocidade

Avaliação da atividade:

  • Indicar a atividade no LCD 2 x 16
  • Mostrar a atividade acionando 4 Leds indicando as 4 bobinas do motor de passo

Dica de implementação: 

  • Utilize uma variável “tempo” com valores que indicam o tempo entre o acionamento de cada bobina.
    • O acionamento de B2 aumenta o tempo (decrementa a velocidade)
    • O acionamento de B3 diminui o tempo (aumenta a velocidade)
  • Faça o teste dos botões para alteração do tempo dentro na rotina (função) de temporização
======================================================================

Atividade 5: Ligação do hardware físico (motor de passo)

Estudo:

Cada bobina do motor de passo corresponde a uma carga.
Se for acionado em +12V, por exemplo, será necessário um circuito individual para cada bobina do motor, ou seja, 4 circuitos de acionamento.
Existem circuitos integrados que funcionam como “driver” que substituem o circuito de acionamento, respeitando as limitações do circuito (capacidade de corrente).
Para controlar o motor de passo podemos fazer uso da série de circuitos integrados ULN20XX que consistem em "buffers" não inversores de potência com elevada capacidade de corrente, justamente indicados para este tipo de aplicação.
Os tipos indicados com suas características são os seguintes:
  • Utilização com circuitos PMOS na faixa de 14-25 Volts de tensão de entrada:
    • ULN2002 - 50V/500 mA
    • ULN2012 - 60V/600 mA
    • ULN2022 - 95V/500 mA
  • Utilização com circuitos TTL e CMOS com 5V de tensão de entrada:
    • ULN2003 - 50V/500 mA
    • ULN2013 - 60V/600 mA
    • ULN2023 - 95V/500 mA
  • Utilização com circuitos CMOS e PMOS com tensões de entrada na faixa de 5 a 15 Volts:
    • ULN2004 - 50V/500 mA
    • ULN2014 - 60V/600 mA
    • ULN2024 - 95V/500 mA
  • Utilização com circuitos TTL e TTL-LS com tensões de entrada de 5V:
    • ULN2005 - 50V/500 mA
    • ULN2015 - 60V/600 mA
    • ULN2025 - 95V/500 mA

Implementação:

Implementação do controle do software com 4 botões descrito acima (B0, B1, B2 e B3)
Exemplo de ligação com driver ULN20xx