Buscar

Aula 03 - Sistemas Embarcados - O1 - T1 (2)

Prévia do material em texto

Thiago Mayrink
Automação Industrial 
Sistemas Embarcados – Aula 03
thiago.mayrink@aiscer com.br
(31) 98474-9537
Belo Horizonte, Minas Gerais
28 de setembro de 2021
Sistemas Embarcados - SE
Dispositivos periféricos, interrupção, acesso direto à memória 
Barramentos padrões
Comunicação de dados
Aplicações em processos Industriais 
Tipos de Microcontroladores
Microcontroladores comerciais
Linguagens de programação
Ferramentas para análise, desenvolvimento e depuração
Programação em C
Aula 02
Sistemas Embarcados - SE
Compilador CCS
Sistemas Embarcados - SE
Placa Didática
Sistemas Embarcados - SE
Simulador PIC
Sistemas Embarcados - SE
Placa Didática
Sistemas Embarcados - SE
Exemplo 01.a
• Piscar o LED na saída D4 com a frequência de 2H
while(true){
output_high(PIN_D4); // Colocar o pino RD4 em nivel logico 1
delay_ms(2000); //Delay de 2S
output_low (PIN_D4); // Colocar o pino RD4 em nivel logico 0
delay_ms(2000); //Delay de 2S
}
Sistemas Embarcados - SE
Exemplo 01.b
• Piscar o LED na saída D4 com a frequência de 1HZ
while(true){
output_high(PIN_D4); // Colocar o pino RD4 em nivel logico 1
delay_ms(1000); //Delay de 1S
output_low (PIN_D4); // Colocar o pino RD4 em nivel logico 0
delay_ms(1000); //Delay de 1S
}
Sistemas Embarcados - SE
Exemplo 01.c
• Piscar o LED na saída D4 com a frequência de 1HZ (Outra forma)
while(true){
output_toggle(PIN_D4); // Colocar o pino RD4 em nivel
logico invertido ao valor anterior
delay_ms(1000); //Delay de 1S
}
Sistemas Embarcados - SE
Exemplo 01.d
• Acionar uma saída de acordo com um sinal de entrada (uma 
entrada)
while(true){
if(input(PIN_D0)){
output_high(PIN_D4);
} else {
output_low(PIN_D4); 
}
}
Sistemas Embarcados - SE
Exemplo 01.e
• Acionar uma saída de acordo com um sinal de entrada (duas 
entradas)
while(true){
if(input(PIN_D0) || input(PIN_D1)){
output_high(PIN_D4);
} else {
output_low(PIN_D4); 
}
}
Sistemas Embarcados - SE
Exemplo 01.f
• Acionar uma saída de acordo com dois sinais de entrada
while(true){
if(input(PIN_D0) && input(PIN_D1)){
output_high(PIN_D4);
} else {
output_low(PIN_D4); 
}
}
Sistemas Embarcados - SE
Exemplo 02
Encher um tanque dependendo do nível da água no mesmo
Ligações
• Sensor de nível baixo (Pino RD0)
• Sensor de nível alto (Pino RD1)
• Válvula solenóide (Pino RD4)
• Lâmpada de defeito (Pino RD5)
Condições
• Abaixo do nível mínimo: Válvula abre
• Ao atingir nível máximo: Válvula fecha
• Em caso de falha: Acender a luz e fechar a válvula
OBS: 
• Sensor: Nível 1 com presença de líquido e 0 sem presença de líquido
• Válvula: Nível 1 abre a válvula e nível 0 fecha válvula
Sistemas Embarcados - SE
Exemplo 02
• Encher um tanque 
dependendo do nível da 
água no mesmo
Comparando o valor da 
função input como 0 e 1
while(true){
if(input(PIN_D0)==0 && input(PIN_D1)==1){ //condição de 
defeito
output_low(PIN_D4);
output_high(PIN_D5);
} else {
output_low(PIN_D5);
if (input(PIN_D0)==0){
output_high(PIN_D4);
}
if (input(PIN_D1)==1){
output_low(PIN_D4);
}
}
}
Sistemas Embarcados - SE
Exemplo 02
• Encher um tanque 
dependendo do nível da 
água no mesmo
Considerando input como 
verdadeiro e falso
while(true){
if(!input(PIN_D0) && input(PIN_D1)){ //condição de defeito
output_low(PIN_D4);
output_high(PIN_D5);
} else {
output_low(PIN_D5);
if (!input(PIN_D0)){
output_high(PIN_D4);
}
if (input(PIN_D1)){
output_low(PIN_D4);
}
}
}
Sistemas Embarcados - SE
Exemplo 02
• Encher um tanque 
dependendo do nível da 
água no mesmo
Considerando a declaração 
de define
#include "AulaPrática.h"
#define MINIMO PIN_D0
#define MAXIMO PIN_D1
#define VALVULA PIN_D4
#define ALARME PIN_D5
void main()
{
setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_OFF);
setup_psp(PSP_DISABLED);
setup_spi(FALSE);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
// TODO: USER CODE!!
while(true){
if(!input(MINIMO) && input(MAXIMO)){ //condição de defeito
output_low(VALVULA);
output_high(ALARME);
} else {
output_low(ALARME);
if (!input(MINIMO)){
output_high(VALVULA);
}
if (input(MAXIMO)){
output_low(VALVULA);
}
}
}
}
Sistemas Embarcados - SE
Exemplo 02
• Encher um tanque 
dependendo do nível da 
água no mesmo
Considerando a criação de 
funções para:
• Abertura de Válvula
• Fechamento de Válvula
• Liga Defeito
• Desliga Defeito
#include "AulaPrática.h"
#define MINIMO PIN_D0
#define MAXIMO PIN_D1
#define VALVULA PIN_D4
#define ALARME PIN_D5
void abre_valvula();
void fecha_valvula();
void liga_defeito();
void desliga_defeito();
void main()
{
setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_OFF);
setup_psp(PSP_DISABLED);
setup_spi(FALSE);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
Sistemas Embarcados - SE
Exemplo 02
• Encher um tanque 
dependendo do nível da 
água no mesmo
Considerando a criação de 
funções para:
• Abertura de Válvula
• Fechamento de Válvula
• Liga Defeito
• Desliga Defeito
// TODO: USER CODE!!
while(true){
if(input(maximo) && !input(minimo)){
liga_defeito();
fecha_valvula();
}
else{
desliga_defeito();
if(!input(minimo)){
abre_valvula();
}
if(input(maximo)){
fecha_valvula();
}
}
}
}
void abre_valvula(){
output_high(valvula);
}
void fecha_valvula(){
output_low(valvula);
}
void liga_defeito(){
output_high(alarme);
}
void desliga_defeito(){
output_low(alarme);
}
Sistemas Embarcados - SE
Exemplo 03
• Utilização de Display LCD de Caracteres
Sistemas Embarcados - SE
Exemplo 03
• Pinagem
Sistemas Embarcados - SE
Exemplo 03
• Mais Comuns
Sistemas Embarcados - SE
Exemplo 03
Utilização de Biblioteca visor.h
• Biblioteca com rotinas para controle de display
• Arquivo criado com rotinas de domínio público
• Adequada para aulas didáticas
Sistemas Embarcados - SE
Exemplo 03
Para utilização da Biblioteca
• A biblioteca deve ser copiada para a pasta do projeto
• A biblioteca deve ser incluida com:
#include “.visor.h”
IMPORTANTE: para usar a biblioteca do display deve-se definir os 
pinos do display, o tipo do display e o endereço da segunda 
linha com #define
Sistemas Embarcados - SE
Exemplo 03
• Iniciar o display
lcd_ini();
• Escrever a palavra teste no display
printf(lcd_escreve,”teste”);
delay_ms(1000);
• Posicionar escrita na linha 1
pos_linha(1);
• Desabilitar o cursos
desabilita_cursor();
• Posicionar display
lcd_pos_xy(9,1);
Sistemas Embarcados - SE
Atividade 01
Acrescentar no código do sistema de nível, as seguintes 
informações do display:
Linha 1:
• Alarme
• Meio
• Cheio
• Vazio
Estado da Válvula
• Estado da Válvula (Aberto ou Fechado)
Sistemas Embarcados - SE
Próximo Encontro
Continuação das Aulas práticas (Aplicação dos conceitos 
apreendidos)

Continue navegando