Baixe o app para aproveitar ainda mais
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)
Compartilhar