sábado, 14 de junho de 2014

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