Explorar E-books
Categorias
Explorar Audiolivros
Categorias
Explorar Revistas
Categorias
Explorar Documentos
Categorias
Departamento de Telemática
Elabore uma arquitetura redundante constituída por 3 microcontroladores PIC ou 3 arduinos UNO, e
os programem para que façam o seguinte: o primeiro microcontrolador PIC ou arduino deve ler seu
conversor AD e imprimir em um display de 7 segmentos o valor lido. Posteriormente, ele deve
aguardar 5 segundos e enviar esse valor, por uma interface serial, para o segundo PIC ou arduino.
Esse, por sua vez, deve imprimir o valor recebido em um display de 7 segmentos, aguardar 5 segundos
e, depois, enviá-lo para o terceiro microcontrolador PIC ou arduino. Esse deve receber o valor,
imprimir no seu display de 7 segmentos e alterar o valor para zero. O último PIC ou arduino deve
imprimir o valor zero no seu display, aguardar 5 segundos e retornar o valor zero para o segundo PIC
ou arduino, que deve escrever no seu display, aguardar 5 segundos e enviá-lo para o 1o PIC ou arduino.
O 1o PIC ou arduino deve receber o valor do segundo PIC ou arduino, imprimi-lo no seu display. Esse
ciclo deve ser executado por tempo indeterminado.
Disciplina: Projeto Sistemas Embarcados
Professor: Paulo Regis Carneiro de Araújo
Aluno: Ulisses Oliveira Soares
Curso: Tecnologia em Telemática
2. Códigos-fonte em linguagem C
2.1. PIC 1
void main(){
while (TRUE) {
valor_ad = read_adc();
valor = (long int) (10 * (valor_ad - 1)) / 255; // Conversão 0-255 para 0-9
output_b(tabela[valor]);
delay_ms(5000);
putc(valor); // 5s após ter exibido o valor no display, envia pela porta serial de hardware
valor = fgetc(porta_s); // Aguarda de forma sincronizada uma leitura na interface serial de software
output_b(tabela[valor]);
delay_ms(2000); // Aguarda 2s para voltar a ler o conversor A/D
}
}
2.2. PIC 2
#use fixed_io (b_outputs = pin_b0, pin_b1, pin_b2, pin_b3, pin_b4, pin_b5, pin_b6)
#use fixed_io (c_outputs = pin_c6, pin_c4)
#use delay (clock=1000000) // 1 MHz
#use rs232 (baud =4800, xmit = pin_c6, rcv = pin_c7) // Interface serial de hardware
#use rs232 (baud =4800, xmit = pin_c4, rcv = pin_c3, stream = porta_s) // Interface serial de software
#fuses XT, NOWDT, PUT // Cristal f < 4MHz, No Watch-dog timer, Power-up Time
void main(){
int x, tempo;
long int valor;
while (TRUE) {
tempo = 0;
while (!kbhit() && (++tempo < 30)) delay_ms(1000); // Aguarda 30s por um valor
x = (kbhit() ? getc() : 10); // Se não recebeu valor, atribui o valor 10 (código de erro)
valor = fgetc(porta_s); // Aguarda de forma sincronizada uma leitura na interface serial de software
output_b(tabela[valor]);
delay_ms(2000); // Aguarda 2s para transmitir de volta ao PIC 1
fputc(valor, porta_s); // Envia o valor de erro pela interface serial de software
}
}
2.3. PIC 3
#use fixed_io (b_outputs = pin_b0, pin_b1, pin_b2, pin_b3, pin_b4, pin_b5, pin_b6)
#use fixed_io (c_outputs = pin_c6, pin_c4)
#use delay (clock=1000000) // 1 MHz
#use rs232 (baud =4800, xmit = pin_c6, rcv = pin_c7) // Interface serial de hardware
#use rs232 (baud =4800, xmit = pin_c4, rcv = pin_c3, stream = porta_s) // Interface serial de software
#fuses XT, NOWDT, PUT // Cristal f < 4MHz, No Watch-dog timer, Power-up Time
void main(){
int x, tempo;
// long int valor;
while (TRUE) {
tempo = 0;
while (!kbhit() && (++tempo < 30)) delay_ms(1000); // Aguarda 30s por um valor
x = (kbhit() ? getc() : 10); // Se não recebeu valor, atribui o valor 10 (código de erro)
output_b(tabela[x]); // Exibe no display o valor recebido por 5s
delay_ms(5000);