SlideShare uma empresa Scribd logo
1 de 22
Baixar para ler offline
Desenvolvimento de uma
plataforma em tempo real de
aquisição de dados em
ambiente Linux
Fabio Louvatti do Carmo
Projeto de Graduação
Objetivo
●
Utilizar o GNU/Linux e um computador
desktop para construir tarefas de tempo
real afim de fazer aquisição de dados
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.
Computador desktop
– Por que usar?
● Alta capacidade de realizar operações com
ponto flutuante.
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
GNU/Linux
– Como fazer Linux em tempo real?
● Modificação no kernel.
– Opções: RTLinux, RTAI, Xenomai
RTAI
– Real Time Application Interface
– Começou no Dipartimento di Ingegneria
Aerospaziale del Politecnico di Milano
(DIAPM) - Itália, em 1996/97
RTAI
– patch (remendo) aplicado ao kernel Linux.
– Camada de abstração de hardware de
tempo real (RTHAL).
– Controle de interrupções.
Camada de abstração
RTHAL
RTAI - Interrupções
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.
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
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)
Aquisição de dados
– Circuito baseado no microcontrolador
AVR
● Atmega48
– Dados enviados pela porta paralela
#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;
}
Diagrama de blocos - Scicos
Bloco 'Sensor'
#include <math.h>
#include <stdlib.h>
#include <scicos_block4.h>
#include <sys/io.h>
void i_generic_SENS(scicos_block *block,int flag){
int i;
double *y;
unsigned char temp;
double t = get_scicos_time();
switch(flag) {
case 4:
break;
case 1: /* Atualização da saída do bloco */
for (i=0;i<1;i++) {
outb(inb(0x37a)|0x01,0x37a);/* borda de subida*/
outb(inb(0x37a)&0xfe,0x37a);/* coloca nível baixo no pino */
y = block->outptr[i];
temp = inb(0x378);
y[0] = 0.019607843*temp;
}
break;
case 5:
break;
}
}
QRtaiLab
Resultados
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.
Obrigado!

Mais conteúdo relacionado

Semelhante a Pg fabio louvatti

TDC2016SP - Trilha Linux Embarcado
TDC2016SP - Trilha Linux EmbarcadoTDC2016SP - Trilha Linux Embarcado
TDC2016SP - Trilha Linux Embarcadotdc-globalcode
 
Alta Disponibilidade na Prática utilizando servidores Linux
Alta Disponibilidade na Prática utilizando servidores LinuxAlta Disponibilidade na Prática utilizando servidores Linux
Alta Disponibilidade na Prática utilizando servidores Linuxelliando dias
 
Desenvolvimento de drivers para sistemas embarcados
Desenvolvimento de drivers para sistemas embarcadosDesenvolvimento de drivers para sistemas embarcados
Desenvolvimento de drivers para sistemas embarcadosRodrigo Almeida
 
Hackeando um SmartBOX (com android) e instalando Linux & JAVA & OpenDevice
Hackeando um SmartBOX (com android) e instalando Linux & JAVA & OpenDeviceHackeando um SmartBOX (com android) e instalando Linux & JAVA & OpenDevice
Hackeando um SmartBOX (com android) e instalando Linux & JAVA & OpenDeviceRicardo Rufino
 
A arquitetura básica de um computador
A arquitetura básica de um computadorA arquitetura básica de um computador
A arquitetura básica de um computadorredesinforma
 
Software Livre para Aplicações em Robótica
Software Livre para Aplicações em RobóticaSoftware Livre para Aplicações em Robótica
Software Livre para Aplicações em RobóticaLinux User Goup Alagoas
 
Máquinas Multiníveis - Nível da Microarquitetura
Máquinas Multiníveis - Nível da MicroarquiteturaMáquinas Multiníveis - Nível da Microarquitetura
Máquinas Multiníveis - Nível da MicroarquiteturaLincoln Lamas
 
Introdução a Computação - Unidade 5.pptx
Introdução a Computação - Unidade 5.pptxIntrodução a Computação - Unidade 5.pptx
Introdução a Computação - Unidade 5.pptxRildo Reis
 
Aplicando o poder de uma GPU no SQL Server
Aplicando o poder de uma GPU noSQL ServerAplicando o poder de uma GPU noSQL Server
Aplicando o poder de uma GPU no SQL Serverpichiliani
 
Aula de introducao ao ZOS
Aula de introducao ao ZOSAula de introducao ao ZOS
Aula de introducao ao ZOSIvan Sanches
 
Microcontroladores x microprocessadores
Microcontroladores x microprocessadoresMicrocontroladores x microprocessadores
Microcontroladores x microprocessadoresmiroslayer
 
Programação Multicore: Como sobreviver a esta revolução usando o Pinguim?
Programação Multicore: Como sobreviver a esta revolução usando o Pinguim?Programação Multicore: Como sobreviver a esta revolução usando o Pinguim?
Programação Multicore: Como sobreviver a esta revolução usando o Pinguim?Paulo Vital
 
Sistemas embarcados: motivação e primeiros passos
Sistemas embarcados: motivação e primeiros passosSistemas embarcados: motivação e primeiros passos
Sistemas embarcados: motivação e primeiros passosMarcelo Barros de Almeida
 
Apostila para aprender sobre CPUs e tudo mais
Apostila para aprender sobre CPUs e tudo maisApostila para aprender sobre CPUs e tudo mais
Apostila para aprender sobre CPUs e tudo maisGilberto Mota
 
Aula 01 - Introducao aos Sistemas Operacionais.pptx
Aula 01 - Introducao aos Sistemas Operacionais.pptxAula 01 - Introducao aos Sistemas Operacionais.pptx
Aula 01 - Introducao aos Sistemas Operacionais.pptxAlexandredePaula28
 
Webinar: Arquitetura de software para sistemas embarcados
Webinar: Arquitetura de software para sistemas embarcadosWebinar: Arquitetura de software para sistemas embarcados
Webinar: Arquitetura de software para sistemas embarcadosEmbarcados
 

Semelhante a Pg fabio louvatti (20)

Cisco ios
Cisco iosCisco ios
Cisco ios
 
Hardware
Hardware Hardware
Hardware
 
TDC2016SP - Trilha Linux Embarcado
TDC2016SP - Trilha Linux EmbarcadoTDC2016SP - Trilha Linux Embarcado
TDC2016SP - Trilha Linux Embarcado
 
Alta Disponibilidade na Prática utilizando servidores Linux
Alta Disponibilidade na Prática utilizando servidores LinuxAlta Disponibilidade na Prática utilizando servidores Linux
Alta Disponibilidade na Prática utilizando servidores Linux
 
Desenvolvimento de drivers para sistemas embarcados
Desenvolvimento de drivers para sistemas embarcadosDesenvolvimento de drivers para sistemas embarcados
Desenvolvimento de drivers para sistemas embarcados
 
Hackeando um SmartBOX (com android) e instalando Linux & JAVA & OpenDevice
Hackeando um SmartBOX (com android) e instalando Linux & JAVA & OpenDeviceHackeando um SmartBOX (com android) e instalando Linux & JAVA & OpenDevice
Hackeando um SmartBOX (com android) e instalando Linux & JAVA & OpenDevice
 
A arquitetura básica de um computador
A arquitetura básica de um computadorA arquitetura básica de um computador
A arquitetura básica de um computador
 
Software Livre para Aplicações em Robótica
Software Livre para Aplicações em RobóticaSoftware Livre para Aplicações em Robótica
Software Livre para Aplicações em Robótica
 
Máquinas Multiníveis - Nível da Microarquitetura
Máquinas Multiníveis - Nível da MicroarquiteturaMáquinas Multiníveis - Nível da Microarquitetura
Máquinas Multiníveis - Nível da Microarquitetura
 
Introdução a Computação - Unidade 5.pptx
Introdução a Computação - Unidade 5.pptxIntrodução a Computação - Unidade 5.pptx
Introdução a Computação - Unidade 5.pptx
 
Aplicando o poder de uma GPU no SQL Server
Aplicando o poder de uma GPU noSQL ServerAplicando o poder de uma GPU noSQL Server
Aplicando o poder de uma GPU no SQL Server
 
Aula de introducao ao ZOS
Aula de introducao ao ZOSAula de introducao ao ZOS
Aula de introducao ao ZOS
 
Microcontroladores x microprocessadores
Microcontroladores x microprocessadoresMicrocontroladores x microprocessadores
Microcontroladores x microprocessadores
 
Programação Multicore: Como sobreviver a esta revolução usando o Pinguim?
Programação Multicore: Como sobreviver a esta revolução usando o Pinguim?Programação Multicore: Como sobreviver a esta revolução usando o Pinguim?
Programação Multicore: Como sobreviver a esta revolução usando o Pinguim?
 
Treinamento arduino (1).pptx
Treinamento arduino (1).pptxTreinamento arduino (1).pptx
Treinamento arduino (1).pptx
 
Sistemas embarcados: motivação e primeiros passos
Sistemas embarcados: motivação e primeiros passosSistemas embarcados: motivação e primeiros passos
Sistemas embarcados: motivação e primeiros passos
 
4198 modems instalacao
4198 modems instalacao4198 modems instalacao
4198 modems instalacao
 
Apostila para aprender sobre CPUs e tudo mais
Apostila para aprender sobre CPUs e tudo maisApostila para aprender sobre CPUs e tudo mais
Apostila para aprender sobre CPUs e tudo mais
 
Aula 01 - Introducao aos Sistemas Operacionais.pptx
Aula 01 - Introducao aos Sistemas Operacionais.pptxAula 01 - Introducao aos Sistemas Operacionais.pptx
Aula 01 - Introducao aos Sistemas Operacionais.pptx
 
Webinar: Arquitetura de software para sistemas embarcados
Webinar: Arquitetura de software para sistemas embarcadosWebinar: Arquitetura de software para sistemas embarcados
Webinar: Arquitetura de software para sistemas embarcados
 

Pg fabio louvatti

  • 1. Desenvolvimento de uma plataforma em tempo real de aquisição de dados em ambiente Linux Fabio Louvatti do Carmo Projeto de Graduação
  • 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.
  • 4. Computador desktop – Por que usar? ● Alta capacidade de realizar operações com ponto flutuante.
  • 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; }
  • 17. Diagrama de blocos - Scicos
  • 18. Bloco 'Sensor' #include <math.h> #include <stdlib.h> #include <scicos_block4.h> #include <sys/io.h> void i_generic_SENS(scicos_block *block,int flag){ int i; double *y; unsigned char temp; double t = get_scicos_time(); switch(flag) { case 4: break; case 1: /* Atualização da saída do bloco */ for (i=0;i<1;i++) { outb(inb(0x37a)|0x01,0x37a);/* borda de subida*/ outb(inb(0x37a)&0xfe,0x37a);/* coloca nível baixo no pino */ y = block->outptr[i]; temp = inb(0x378); y[0] = 0.019607843*temp; } break; case 5: break; } }
  • 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.