O documento descreve o desenvolvimento de uma plataforma em tempo real para aquisição de dados em Linux. O autor construiu um circuito baseado no microcontrolador AVR para coletar dados e enviá-los para um computador através da porta paralela. Ele usou o RTAI Linux para fornecer serviços de tempo real e ferramentas como o Scicos e QRTAILab para modelar e executar a aplicação de aquisição de dados.
2. Objetivo
●
Utilizar o GNU/Linux e um computador
desktop para construir tarefas de tempo
real afim de fazer aquisição de dados
3. Computador desktop
– Computador de propósito geral
● A princípio, o seu uso é inadequado para
tempo real.
– Memória virtual (MMU), arbitragem em
barramentos, etc..
● Usualmente é usado microcontroladores.
– Determinismo garantido, latência previsível.
5. GNU/Linux
– Linux padrão não é de tempo real
● Latências de interrupções e indeterminismo
no escalonamento de tarefas.
– Por que usar Linux para tempo real?
● Comunicação entre tarefas
● Comandos
● Supervisão
● Logs em disco
● Visualização de dados
6. GNU/Linux
– Como fazer Linux em tempo real?
● Modificação no kernel.
– Opções: RTLinux, RTAI, Xenomai
7. RTAI
– Real Time Application Interface
– Começou no Dipartimento di Ingegneria
Aerospaziale del Politecnico di Milano
(DIAPM) - Itália, em 1996/97
8. RTAI
– patch (remendo) aplicado ao kernel Linux.
– Camada de abstração de hardware de
tempo real (RTHAL).
– Controle de interrupções.
11. RTAI - Serviços
– Possui uma API que disponibiliza:
● Gerenciamento de processos;
● Gerenciamento de memória;
● Variáveis condicionais (semáforos);
● Mailboxes (caixa de mensagens);
● Temporizadores;
● dentre outros.
12. RTAI - Aplicações
– Suporte a periféricos (drivers):
● Porta paralela.
● Porta serial.
– Projetos que suportam o RTAI:
● RTNet – protocolo de tempo real para redes.
● COMEDI – Drivers de placas de aquisição de
dados.
● CANBUS
13. RTAI-Lab
– Disponibiliza ferramentas para
desenvolver diagramas de blocos que
são compilados e executados com
RTAI Linux.
– Podem ser desenvolvidos usando:
● Matlab/Simulink/Real Time Workshop
● Scilab/Scicos (código livre)
14. Aquisição de dados
– Circuito baseado no microcontrolador
AVR
● Atmega48
– Dados enviados pela porta paralela
15.
16. #include <avr/io.h>
#include <avr/interrupt.h>
ISR(INT0_vect)
{
unsigned char temp;
ADCSRA |= _BV(ADSC);/*inicia conversão*/
while(ADCSRA & 0x40);/*aguarda fim da conversão*/
temp = ADCH;
PORTB = temp;
}
int main(void) {
/* Inicializa portas*/
PORTB = 0x00;
DDRB = 0xff; /* PORTB como saída*/
PRR = ~(_BV(PRADC)); /* Apenas ativa o ADC*/
/* Inicializa ADC*/
ADMUX = _BV(ADLAR); /* AREF como referencia, ADC0 como entrada,
ajuste
do resultado para esquerda*/
DIDR0 = _BV(ADC0D); /* desabilitar o buffer de entrada digital do
ADC0*/
ADCSRA = _BV(ADEN) | _BV(ADPS0); /* habilita ADC, pre-escala=2*/
/* Inicializa interrupção externa*/
EICRA = _BV(ISC00) | _BV(ISC01);/* Borda de subida em INT0 gera
uma
interrupção*/
EIMSK = _BV(INT0); /* habilita interrupção externa*/
sei();
while(1){}
return 1;
}
21. Conclusão
– Resultados bons apesar das limitações de um
computador desktop e da porta paralela.
– Boa alternativa ao Matlab/Simulink/RTW
● Baixo custo
● Código aberto
– Possibilidade de muitos projetos envolvendo o
RTAI Linux.