Microchip Curiosity Board
Introdução a placa e ferramentas de programação
Fábio Souza
Sobre o instrutor
Fábio Souza
Embarcados
A placa Curiosity
Referência: http://www.embarcados.com.br/curiosity/
Recursos
1. Conector USB mini-B (parte traseira);
2. Pads para conector para fonte 9V;
3. Botão para Master Clear Reset;
4. Jumper para seleção de fonte 3,3/5V p (J12);
5. Pads para fonte externa;
6. Conectores de expansão;
7. Soquete DIP para microcontrolador de 8, 14 e 20
pinos;
8. Conectores para padrão mikroBUS™;
9. Pads para módulo Bluetooth RN4020;
10. Potenciômetro;
11. LEDs;
12. Botão mTouch®;
13. Botão do tipo Push button.
PIC16F1619
Circuito de Programação e Depuração
Uma das vantagens da placa Curiosity é o circuito de programação e depuração integrado. Trata-se de
um circuito baseado em um PIC24FJ, com interface USB, que facilita a depuração e programação do
microcontrolador alvo sem a necessidade de uma ferramenta externa.
Alimentação
A alimentação da placa pode ser feita de 3 formas:
1. Conector USB (J2);
2. Conector para fonte externa (J15), este não vem montado na placa;
3. Pads para alimentação externa (TP3 e TP4).
A placa Curiosity é uma excelente placa para prototipação. Possui headers de expansão facilitando o
acesso aos pinos do microcontrolador.
Headers para expansão de I/Os
Padrão mikroBUS™
Módulo bluetooth RN4020
Para facilitar a integração da Curiosity em projetos relacionados à IoT há a possibilidade de conexão do
módulo bluetooth RN4020 da própria Microchip, através dos pads disponíveis na placa.
Ferramentas de software
Primeiros passos
MPLAB X e compilador XC8
Novo projeto
Escolha do tipo de projeto
Escolha do microcontrolador
Escolha do debug header
Ferramenta de programação/debug
Escolha do Compilador
Nome do projeto
Tela inicial do projeto
Exemplo - Blink
Arquivo fonte
Configuration Bits
Configuration Bits
Configuration Bits
Pino do LED
Código do Blink
#define _XTAL_FREQ 500000 //define para utilizar funções de tempo - Osc em 500 KHz
void main(void) {
LATA5 = 0; //desliga saídas
TRISA5 = 0; //configura RA5 como saída
while(1){
LATA5 = ~LATA5; //inverte o estado do pino
__delay_ms(1000); //aguarda 1 seg
}
}
MPLAB Code Configurator
Instalação
Instalando o MPLAB Code Configurator
Selecione MPLAB Code Configurator
Termos de licença
Fim da instalação
MPLAB Code Configurator
Usando o MPLAB Code Configurator
Criar um novo projeto
Iniciando o MPLAB Code Configurator
System
System Clock Select
Low Voltage Programming
Acessando as configurações dos pinos de I/O
Janela para configuração dos I/Os
LEDs
LED PINO
D4 RA5
D5 RA1
D6 RA2
D7 RC5
MPLAB Code Configurator Pin Manager
Configurando todos os LEDs
Generate Code
Criar um arquivo main.c?
Resultado
Arquivos gerados pelo MCC
Exemplo
while (1) {
D4_SetHigh();
__delay_ms(1000);
D4_SetLow();
__delay_ms(1000);
}
Explorando os pinos de I/O
PORTs
O PIC16F1619 possui 3 ports: PORTA, PORTB e PORTC.
Os pinos são organizados no microcontrolador, conforme
seu port e seguindo uma sequência. Por exemplo o pino 0
do PORTA é chamado de RA0, o pino 5 do PORTB como
RB5, e assim por diante.
Registradores
Cada port possui basicamente 3 registradores para controle dos
pinos, que são:
● TRISx - tem a função de definir a direção do pino, ou seja,
se funcionará como uma entrada ou saída;
● PORTx - é onde será feita a leitura do estado lógico
presente no pino;
● LATx - retêm a informação no lach (flip-flop tipo D) no port.
Além desses registradores básicos, alguns ports possuem outros
registradores de configuração, por exemplo:
● ANSELx - Configura se o pino será digital ou analógico;
● WPUx - Configura resistores de pull-up.
Configurando um pino como Entrada ou Saída
Para configurar um pino de I/O como entrada ou saída deve-se utilizar o registrador TRISx.
ENTRADA: TRISX = 1
SAÍDA: TRISX = 0
Pinos Digitais
Para usar os pinos de I/O digitais,
devemos configurar o registrador
ANSELX para o correto funcionamento
do pino.
DIGITAL: ANSELX = 0
ANALÓGICO: ANSELX = 1
Lendo o estado de um pino de I/O
Para leitura utiliza-se o registrador
PORTx. O valor presente nesse
registrador conterá o nível lógico
presente no pino
Escrevendo em um pino de I/O
Para escrita é utilizado o registrador
LATx
Exemplo de leitura e escrita nos pinos
Para testar a teoria apresentada vamos criar uma aplicação para leitura de
tecla e escrita em LEDs. Para isso vamos usar a chave táctil (S1) presente na
Curiosity, assim como os LEDs (D4, D5, D6 e D7). Cada vez que a tecla for
pressionada será ligado um LED e apagados os outros, dando efeito de
deslocamento.
Circuito
Configurando os pinos no MCC
Código de configuração gerado
void PIN_MANAGER_Initialize(void) {
LATA = 0x00;
TRISA = 0x19;
ANSELA = 0x11;
LATB = 0x00;
TRISB = 0xF0;
ANSELB = 0x30;
WPUB = 0x00;
LATC = 0x00;
TRISC = 0xDF;
ANSELC = 0xCF;
WPUC = 0x00;
OPTION_REGbits.nWPUEN = 0x01;
}
Variáveis e constantes
#define NOPRESS 0
#define PRESS 1
#define FINAL_POSITION 4
#define START_POSITION 0
//variáveis
unsigned char position = 0;
bit ST_BT;
Leitura da Tecla
if(TECLA_GetValue() == LOW){ //se botão pressionado
if(ST_BT == NOPRESS){ //se não estava pressionado
ST_BT = PRESS; //sinaliza que o botão foi pressionado
posicao++; //incrementa indexador dos LEDs
if(posicao>=POSICAO_FINAL)posicao = POSICAO_INICIAL; //se chegou no máximo reinicia
}
}
else{
ST_BT = NOPRESS;
}
Atualizando os LEDs
//atualiza leds
switch(posicao){
case 0:
D4_SetHigh(); //D4 = LIGADO
D5_SetLow(); //D5 = DESLIGADO
D6_SetLow(); //D6 = DESLIGADO
D7_SetLow(); //D7 = DESLIGADO
break;
case 1:
D4_SetLow(); //D4 = DESLIGADO
D5_SetHigh(); //D5 = LIGADO
D6_SetLow(); //D6 = DESLIGADO
D7_SetLow(); //D7 = DESLIGADO
break;
case 2:
D4_SetLow(); //D4 = DESLIGADO
D5_SetLow(); //D5 = DESLIGADO
D6_SetHigh(); //D6 = LIGADO
D7_SetLow(); //D7 = DESLIGADO
break;
case 3:
D4_SetLow(); //D4 = DESLIGADO
D5_SetLow(); //D5 = DESLIGADO
D6_SetLow(); //D6 = DESLIGADO
D7_SetHigh(); //D7 = LIGADO
break;
}
Explorando o TIMER0
O TIMER0
● Temporizador/Contador de 8 bits;
● Leitura ou escrita;
● Prescaler selecionável;
● Fonte de clock interna ou externa;
● Seleção de borda para fonte de clock externa;
● Interrupção para overflow.
Diagrama de blocos do TIMER0
Registrador OPTION_REG
Usando o TIMER0 para piscar um LED
Piscar o LED D4 da placa Curiosity, utilizando o TIMER0 como temporizador. O LED deverá inverter o
seu estado em aproximadamente 500 ms.
LED PINO
D4 RA5
D5 RA1
D6 RA2
D7 RC5
Configuração do TIMER0 no MCC
Código gerado pelo MCC
void TMR0_Initialize(void) {
// Set TMR0 to the options selected in the User Interface
// PSA assigned; PS 1:256; TMRSE Increment_hi_lo; mask the nWPUEN and INTEDG bits
OPTION_REG = (OPTION_REG & 0xC0) | 0xD7 & 0x3F;
// TMR0 12;
TMR0 = 0x0C;
// Load the TMR value to reload variable
timer0ReloadVal = 12;
// Clearing IF flag
INTCONbits.TMR0IF = 0;
}
Loop principal
while (1) {
while (!TMR0IF); //enquanto não ocorrer o estouro do timer
//o intervalo de estouro será de aprocimadamente 0,5 s
TMR0_Reload(); //reinicia timer
TMR0IF = 0; //limpa flag de estouro do timer
D4_Toggle(); //inverte os estado do led
}
Obrigado!!
fabio.souza@embarcados.com.br
www.embarcados.com.br

Workshop Microchip Curiosity Board