12. PRÁTICA 12: IMPLEMENTAÇÃO SUBROTINAS PARA CONTROLE DO MOTOR
Referencial Teórico: Operadores de atribuição; Laço While; Funções/Subrotinas.
Objetivo: Controlar o estado de funcionamento e rotação de um motor, por meio da subrotinas de programação.
Materiais: Utilizar botão presente na placa, potenciômetro ligado à entrada 1, motor de corrente contínua ligado à saída A e fonte de alimentação.
12.1 Arquivo Principal
#include "iniciog.h"
#include "pratica.h"
void main(){
configura_portas();
MOTOR_AB_EN = 1;
configura_conversor();
while(1){
ler_sensor();
if (sensor >= 500) para_ca_motor();
if (sensor <= 500) para_la_motor();
if (botao == 1) ligar_motor();
if (botao == 0) desligar_motor();
}
}
12.2 Arquivo Secundário
// acrescentar ao iniciog.h ou arquivo pratica.h
void configura_conversor(){
OpenADC(ADC_FOSC_8
&ADC_RIGHT_JUST
&ADC_4_TAD,
ADC_CH0
&ADC_INT_OFF
&ADC_VREFPLUS_VDD
&ADC_VREFMINUS_VSS,
ADC_1ANA);
}
unsigned long sensor;
void ler_sensor(){
SetChanADC(ADC_CH0);
ConvertADC();
while(BusyADC());
sensor = ReadADC();
}
void ligar_motor();
void para_ca_motor();
void para_la_motor();
void ligar_por_motor();
void desligar_motor();
void freiar_motor();
void invereter_motor();
void ligar_motor(){
MTR1_EN = 1;
}
void para_ca_motor(){
MTR1_CW = 1;
MTR1_CC = 0;
}
void para_la_motor(){
MTR1_CW = 0;
MTR1_CC = 1;
}
void ligar_por_motor(){
MTR1_EN = 1;
espere_por(10);
MTR1_EN = 0;
}
void desligar_motor(){
MTR1_EN = 0;
}
void freiar_motor(){
MTR1_CW = 1;
MTR1_CC = 1;
espere_por(10);
MTR1_CW = 0;
MTR1_CC = 0;
espere_por(10);
}
void invereter_motor(){
MTR1_CW = ~MTR1_CW;
MTR1_CC = ~MTR1_CC;
}
Aula de programação C – 11
11. PRÁTICA 11: USO DE MEMÓRIA EEPROM COM BOTÃO E CONTROLE DO LED
Referencial Teórico: Operadores de atribuição; Funções; Memórias do Microcontrolador.
Objetivo: Controlar o estado de funcionamento de um led presente na placa, por meio da gravação e leitura de dados em memória não volátil.
Materiais: Utilizar led e botão presentes na placa e memória EEPROM interna.
11.1 Arquivo Principal
#include "iniciog.h"
#include "pratica.h"
void main(){
configura_portas();
while(1){
if (botao == 1){
escrever_memoria(0x0A,'H');
}
if (botao == 0){
escrever_memoria(0x0A,'L');
}
ler_memoria(0x0A);
if (dado == 'H') led = 1;
if (dado == 'L') led = 0;
}
}
11.2 Arquivo Secundário
// acrescentar ao iniciog.h ou arquivo pratica.h
unsigned char escrever_memoria(unsigned char endereco, unsigned char dado){
EEADR = endereco;
EEDATA = dado;
EECON1bits.EEPGD = 0;
EECON1bits.CFGS = 0;
EECON1bits.WREN = 1;
INTCONbits.GIE = 0;
EECON2 = 0x55;
EECON2 = 0xAA;
EECON1bits.WR = 1;
while(EECON1bits.WR);
INTCONbits.GIE = 1;
EECON1bits.WREN = 0;
}
unsigned char dado;
unsigned char ler_memoria(unsigned char endereco){
EEADR = endereco;
EECON1bits.EEPGD = 0;
EECON1bits.CFGS = 0;
EECON1bits.RD = 1;
dado = EEDATA;
return dado;
}
Aula de programação C – 10
10. PRÁTICA 10: CONTROLE DO MOTOR E LED COM TIMERS
Referencial Teórico: Operadores de atribuição; Laço While; Funções de atraso; Funções.
Objetivo: Controlar o estado de funcionamento de um motor e led presente na placa, por meio da interrupção por tempo.
Materiais: Utilizar led presente na placa, motor de corrente contínua ligado à saída A e fonte de alimentação.
10.1 Arquivo Principal
#include "iniciog.h"
#include "pratica.h"
void main(){
configura_portas();
configura_relogio();
habilita_ponteh();
MTR1_CW = 1;
MTR1_CC = 0;
while(1){
}
}
10.2 Arquivo Secundário
// acrescentar ao iniciog.h ou arquivo pratica.h
void habilita_ponteh(){
MOTOR_AB_EN = 1;
MTR1_EN = 1;
MTR2_EN = 1;
}
// acrescentar ao iniciog // pratica 10
void configura_relogio(){
INTCON = 0b10100000;
T0CON = 0x80; // 20ms
TMR0H = 0x15; // 20ms
TMR0L = 0xA0; // 20ms
}
void zera_relogio(){
INTCONbits.TMR0IF = 0;
TMR0H = 0x15; // 20ms
TMR0L = 0xA0; // 20ms
}
#pragma code int_hr = 0x1848
#pragma interrupt trata_interrupcao
void trata_interrupcao(){
MTR1_EN = ~MTR1_EN;
led = ~led;
zera_relogio();
}
Aula de programação C – 09
9. PRÁTICA 09: CONTROLE DE MOTOR COM POTENCIÔMETRO E BOTÃO (SELO)
Referencial Teórico: Operadores de atribuição; Laço While; Funções de atraso; Funções.
Objetivo: Controlar o estado de funcionamento e a rotação de um motor por meio de um botão e um potenciômetro.
Materiais: Utilizar botão presente na placa, potenciômetro ligado à entrada 1, motor de corrente contínua ligado à saída A e fonte de alimentação.
9.1 Arquivo Principal
#include "iniciog.h"
#include "pratica.h"
void main(){
configura_portas();
habilita_ponteh();
configura_conversor();
while(1){
ler_sensor();
MTR1_CW = 1;
MTR1_CC = 0;
espere_por(sensor);
MTR1_CW = 0;
MTR1_CC = 0;
espere_por(sensor);
if (botao == 1) MTR1_EN = ~MTR1_EN;
}
}
9.2 Arquivo Secundário
// acrescentar ao iniciog.h ou arquivo pratica.h
void habilita_ponteh(){
MOTOR_AB_EN = 1;
MTR1_EN = 1;
MTR2_EN = 1;
}
void configura_conversor(){
OpenADC(ADC_FOSC_8
&ADC_RIGHT_JUST
&ADC_4_TAD,
ADC_CH0
&ADC_INT_OFF
&ADC_VREFPLUS_VDD
&ADC_VREFMINUS_VSS,
ADC_1ANA);
}
unsigned long sensor;
void ler_sensor(){
SetChanADC(ADC_CH0);
ConvertADC();
while(BusyADC());
sensor = ReadADC();
}
Aula de programação C – 08
8. PRÁTICA 08: CONTROLE DE MOTOR COM POTENCIÔMETRO E BOTÃO
Referencial Teórico: Operadores de atribuição; Laço While; Funções de atraso; Funções.
Objetivo: Controlar o estado de funcionamento e a rotação de um motor por meio de um botão e um potenciômetro.
Materiais: Utilizar botão presente na placa, potenciômetro ligado à entrada 1, motor de corrente contínua ligado à saída A e fonte de alimentação.
8.1 Arquivo Principal
#include "iniciog.h"
#include "pratica.h"
void main(){
configura_portas();
habilita_ponteh();
configura_conversor();
while(1){
ler_sensor();
MTR1_CW = 1;
MTR1_CC = 0;
espere_por(sensor);
MTR1_CW = 0;
MTR1_CC = 0;
espere_por(sensor);
if (botao == 1) MTR1_EN = 1;
if (botao == 0) MTR1_EN = 0;
}
}
8.2 Arquivo Secundário
// acrescentar ao iniciog.h ou arquivo pratica.h
void habilita_ponteh(){
MOTOR_AB_EN = 1;
MTR1_EN = 1;
MTR2_EN = 1;
}
void configura_conversor(){
OpenADC(ADC_FOSC_8
&ADC_RIGHT_JUST
&ADC_4_TAD,
ADC_CH0
&ADC_INT_OFF
&ADC_VREFPLUS_VDD
&ADC_VREFMINUS_VSS,
ADC_1ANA);
}
unsigned long sensor;
void ler_sensor(){
SetChanADC(ADC_CH0);
ConvertADC();
while(BusyADC());
sensor = ReadADC();
}
Aula de programação C – 07
7. PRÁTICA 07: CONTROLE DE VELOCIDADE MOTOR COM POTENCIÔMETRO
Referencial Teórico: Portas I/O; Registradores TRIS; Registradores PORT.
Objetivo: Controlar a rotação de um motor por meio de um potenciômetro e da conversão de sinal analógico para digital.
Materiais: Utilizar potenciômetro ligado à entrada 1, motor de corrente contínua ligado à saída A e fonte de alimentação.
7.1 Arquivo Principal
#include "iniciog.h"
#include "pratica.h"
void main(){
configura_portas();
habilita_ponteh();
configura_conversor();
while(1){
ler_sensor();
MTR1_CW = 1;
MTR1_CC = 0;
espere_por(sensor);
MTR1_CW = 0;
MTR1_CC = 0;
espere_por(sensor);
}
}
7.2 Arquivo Secundário
// acrescentar ao iniciog.h ou arquivo pratica.h
void habilita_ponteh(){
MOTOR_AB_EN = 1;
MTR1_EN = 1;
MTR2_EN = 1;
}
void configura_conversor(){
OpenADC(ADC_FOSC_8
&ADC_RIGHT_JUST
&ADC_4_TAD,
ADC_CH0
&ADC_INT_OFF
&ADC_VREFPLUS_VDD
&ADC_VREFMINUS_VSS,
ADC_1ANA);
}
unsigned long sensor;
void ler_sensor(){
SetChanADC(ADC_CH0);
ConvertADC();
while(BusyADC());
sensor = ReadADC();
}
Aula de programação C – 06
6. PRÁTICA 06: ACIONAMENTO DO MOTOR COM POTENCIÔMETRO
Referencial Teórico: Arquitetura do Microcontrolador; Registradores de Função Especiais – SRF.
Objetivo: Controlar o estado de funcionamento do motor por meio de um potenciômetro e da conversão de sinal analógico para digital.
Materiais: Utilizar potenciômetro ligado à entrada 1, motor de corrente contínua ligado à saída A e fonte de alimentação.
6.1 Arquivo Principal
#include "iniciog.h"
#include "pratica.h"
void main(){
configura_portas();
habilita_ponteh();
configura_conversor();
while(1){
ler_sensor();
if (sensor >= 500) {
MTR1_CW = 1;
MTR1_CC = 0;
}
if (sensor <= 500) {
MTR1_CW = 0;
MTR1_CC = 0;
}
}
}
6.2 Arquivo Secundário
// acrescentar ao iniciog.h ou arquivo pratica.h
void habilita_ponteh(){
MOTOR_AB_EN = 1;
MTR1_EN = 1;
MTR2_EN = 1;
}
void configura_conversor(){
OpenADC(ADC_FOSC_8
&ADC_RIGHT_JUST
&ADC_4_TAD,
ADC_CH0
&ADC_INT_OFF
&ADC_VREFPLUS_VDD
&ADC_VREFMINUS_VSS,
ADC_1ANA);
}
unsigned long sensor;
void ler_sensor(){
SetChanADC(ADC_CH0);
ConvertADC();
while(BusyADC());
sensor = ReadADC();
}
Aula de programação C – 05
5. PRÁTICA 05: ACIONAMENTO DO MOTOR COM BOTÃO
Referencial Teórico: Pinagem do Microcontrolador; Ciclo de Máquina; Oscilador.
Objetivo: Controlar o estado de funcionamento de um motor por meio do pressionamento de um botão.
Materiais: Utilizar botão presente na placa, motor de corrente contínua ligado à saída A e fonte de alimentação.
5.1 Arquivo Principal
#include "iniciog.h"
#include "pratica.h"
void main(){
configura_portas();
habilita_ponteh();
while(1){
if (botao == 1) {
MTR1_CW = 1;
MTR1_CC = 0;
}
if (botao == 0) {
MTR1_CW = 0;
MTR1_CC = 0;
}
}
}
5.2 Arquivo Secundário
// acrescentar ao iniciog.h ou arquivo pratica.h
void habilita_ponteh(){
MOTOR_AB_EN = 1;
MTR1_EN = 1;
MTR2_EN = 1;
}
Aula de programação C – 04
4. PRÁTICA 04: ACIONAMENTO DO MOTOR POR TEMPORIZAÇÃO
Referencial Teórico: Estudo das Interrupções; Interrupção por tempo; Timer 0.
Objetivo: Controlar o estado de funcionamento de um motor por meio das funções de atraso.
Materiais: Utilizar motor de corrente contínua ligado à saída A e fonte de alimentação.
4.1 Arquivo Principal
#include "iniciog.h"
#include "pratica.h"
void main(){
configura_portas();
habilita_ponteh();
while(1){
MTR1_CW = 1;
MTR1_CC = 0;
espere_por(250); // 100ms
MTR1_CW = 0;
MTR1_CC = 0;
espere_por(250); // 100ms
}
}
4.2 Arquivo Secundário
// acrescentar ao iniciog.h ou arquivo pratica.h
void habilita_ponteh(){
MOTOR_AB_EN = 1;
MTR1_EN = 1;
MTR2_EN = 1;
}
void configura_relogio(){
INTCON = 0b10100000;
T0CON = 0x80; // 20ms
TMR0H = 0x15; // 20ms
TMR0L = 0xA0; // 20ms
}
void zera_relogio(){
INTCONbits.TMR0IF = 0;
TMR0H = 0x15; // 20ms
TMR0L = 0xA0; // 20ms
}
#pragma code int_hr = 0x1848
#pragma interrupt trata_interrupcao
void trata_interrupcao(){
MTR1_EN = ~MTR1_EN;
led = ~led;
zera_relogio();
}
Aula de programação C – 03
3. PRÁTICA 03: LEITURA ANALÓGICA DO SENSOR E ACIONAMENTO DO LED
Referencial Teórico: Conversão Analógica/Digital Interna; identificadores; Tipos de Dados.
Objetivo: Controlar o estado de funcionamento de um led, realizando a conversão de um sinal analógico para digital proveniente de um sensor.
Materiais: Utilizar led presente na placa e potenciômetro ligado à entrada 1.
3.1 Arquivo Principal
#include "iniciog.h"
#include "pratica.h"
void main(){
configura_portas();
configura_conversor();
while(1){
ler_sensor();
if (sensor >= 500) led = 1;
if (sensor <= 500) led = 0;
}
}
3.2 Arquivo Secundário
// acrescentar ao iniciog.h ou arquivo pratica.h
void configura_conversor(){
OpenADC(ADC_FOSC_8
&ADC_RIGHT_JUST
&ADC_4_TAD,
ADC_CH0
&ADC_INT_OFF
&ADC_VREFPLUS_VDD
&ADC_VREFMINUS_VSS,
ADC_1ANA);
}
unsigned long sensor;
void ler_sensor(){
SetChanADC(ADC_CH0);
ConvertADC();
while(BusyADC());
sensor = ReadADC();
}