Autor Tópico: CLOCK em microsegundos  (Lida 17830 vezes)

Description:

0 Membros e 1 Visitante estão vendo este tópico.

Online Cláudio F.

  • Fuso
  • **
  • Posts: 210
  • Sexo: Masculino
  • Cidade - UF: São Paulo/SP
Re: CLOCK em microsegundos
« Resposta #15 Online: 06 de Outubro de 2009, 07:37 »
Bom dia,

uma alternativa é vc tentar usar as API's: "QueryPerformanceCou nter" e "QueryPerformanceFre quency". tem uma precisão de nanosegundos.

vai ocorrer atrasos na temporização por causa do windows. mas é uma base de tempo.

Artigo MSDN: How To: Time Managed Code Using QueryPerformanceCou nter and QueryPerformanceFre quency we can see result in nanoseconds
http://msdn.microsoft.com/en-us/library/ms979201.aspx
« Última modificação: 06 de Outubro de 2009, 07:47 por Cláudio S. Freund »



Offline minilathe

  • How to ask questions - The Smart Way...
  • Moderadores
  • CNCMASTER
  • ******
  • Posts: 4295
  • Sexo: Masculino
  • http://science-lakes.com/article43-html.html
  • Cidade - UF: Rio de Janeiro - RJ
  • Nome:: Gil Pinheiro
  • Profissão: Engenheiro e professor universitário
Re: CLOCK em microsegundos
« Resposta #16 Online: 06 de Outubro de 2009, 08:16 »
Cláudio,

Bom dia, ao usar essas funções, o Windows poderá ajudar na medição do desempenho (velocidade) de execução do programa. A questão é como executar o programa com velocidade usando o / ou dentro do Windows...

Do mesmo modo, o Windows não deveria  alterar a frequência de envio da sequência de pulsos do programa, para acionar o driver dos motores de passo, seja afetada. Essa frequência pode ser da ordem de 10.000Hz. Não sei se isso poderia ser garantido dentro do Windows (talvez no Windows 2000 ou NT??)...

Um outro aspecto é que, de um modo geral, a linguagem C++ pode ser poderosa para fazer interfaces gráficas, mas não é eficiente para programação em tempo real, vejam o artigo: http://www.research.att.com/~bs/esc99.html

Eu particularmente prefiro o assembly ou no máximo o ANSI C ou algo parecido.  Principalmente para poder gerar sinais da ordem de KHz via software.

Existem dois mundos que possuem requisitos conflitantes, que são a interface com o usuário, que deve ser gráfica, funcional,.... e o lado "máquina" do software, que deve se comportar como um relógio, com resolução de microssegundos e sem atrasar ou adiantar nada. Uma linguagem ideal deveria atender tudo isso (difícil, talvez só o assembly, mas vá tentar montar uma interface gráfica com assembly...), ou então usar dois sistemas interdependentes.
« Última modificação: 06 de Outubro de 2009, 08:29 por minilathe »

matrixlan1

  • Visitante
Re: CLOCK em microsegundos
« Resposta #17 Online: 06 de Outubro de 2009, 10:22 »
Professor Gil, muito obrigado pelas informações, estou aprendendo muito com você, so tenho a agradecer.....

Citar
para as aplicações de baixo nível e de baixo tempo de resposta. Nesse sistema poderia ser empregado DOS, LINUX ou nenhum sistema operacional.

Em tempo real uso threads que é a melhor forma de usar o windows em tempo real, acredito que outros programadores usem alguns "truques sujos" como você comentou...mas tambem usem Threads,

Algumas considerações (ou opções) que me deixam confuso...

1 - digamos que eu mude de SO para linux, como posso compatibilizar esse software com um amigo que nao usa linux e sim windows?

2 - os programadores tem formas de converter isso? passo a acreditar que mesmo usando outro SO o codigo gerado seria pra windows pois um arquivo .EXE que roda no linux roda em windows pelo fato de ser .EXE?

2 - O você acha de usar um pic 16F877A e esquecer a interface por enquanto? a programação seria bem mais simples mas roubaria a "magia" de controlar tudo por PC..

3 - A porta USB é muito mais rapida e seria uma opção interessante e moderna pra mim, parece que o BILL fornece suporte para essa porta trabalhar em tempo real, falo isso porque a Rogercom tem otimos curso pela net.

4 - Existem softwares geradores de CLOCK na internet que geram onda quadrada 1 a 20 khz, precisaria de um codigo aberto de uma programa desses (e ja estou atras) pra saber quais "truques" os programdores usaram para enganar o o nosso (R)windows.....



Offline minilathe

  • How to ask questions - The Smart Way...
  • Moderadores
  • CNCMASTER
  • ******
  • Posts: 4295
  • Sexo: Masculino
  • http://science-lakes.com/article43-html.html
  • Cidade - UF: Rio de Janeiro - RJ
  • Nome:: Gil Pinheiro
  • Profissão: Engenheiro e professor universitário
Re: CLOCK em microsegundos
« Resposta #18 Online: 06 de Outubro de 2009, 11:02 »
Em tempo real uso threads que é a melhor forma de usar o windows em tempo real, acredito que outros programadores usem alguns "truques sujos" como você comentou...mas tambem usem Threads,

Algumas considerações (ou opções) que me deixam confuso...

1 - digamos que eu mude de SO para linux, como posso compatibilizar esse software com um amigo que nao usa linux e sim windows?

2 - os programadores tem formas de converter isso? passo a acreditar que mesmo usando outro SO o codigo gerado seria pra windows pois um arquivo .EXE que roda no linux roda em windows pelo fato de ser .EXE?

2 - O você acha de usar um pic 16F877A e esquecer a interface por enquanto? a programação seria bem mais simples mas roubaria a "magia" de controlar tudo por PC..

3 - A porta USB é muito mais rapida e seria uma opção interessante e moderna pra mim, parece que o BILL fornece suporte para essa porta trabalhar em tempo real, falo isso porque a Rogercom tem otimos curso pela net.

4 - Existem softwares geradores de CLOCK na internet que geram onda quadrada 1 a 20 khz, precisaria de um codigo aberto de uma programa desses (e ja estou atras) pra saber quais "truques" os programdores usaram para enganar o o nosso (R)windows.....

1 - Não sei..., é complicado rodar algo em tempo real (de verdade) usando um simulador de Linux dentro do Windows ou algo similar. A tecnolgia ainda não chegou a esse ponto...

2 - Seria uma boa opçao, mas o "pulo do  gato" é saber como cortar as tarefas, ou seja, o que fica no PC e o que vai para o PIC. De modo a balancear: velocidade de resposta, carga de processamento, tipo de processamento, .... A interface "bonitinha" poderia ser feita depois.
 
3 -Cuidado com a USB, existem vários modos de operação, alguns são como uma porta serial embutida (no maximo 115 kbps). Mas a questão não é tanto a velocidade da porta, mas o balanceamento da carga de processamento, pois a parte rápida não ficaria no PC. Excetuando os sistemas de multimídia, uma interface USB rápida não foi pensada em sistemas de controle em tempo real, mas, sendo rápida, acelera a transferência de um arquivo, mas para controle direto dos motores, esse fluxo deve ser constante e sem variações de frequência, o que, novamente esbarra na limitação do software dentro do PC.

4 - Eu acredito que esse geradores usam a saída de áudio do PC, que não possui nível de sinal TTL para acionar motores!! Para isso o Windows possui algumas coisas específicas. Mas quem gera o sinal não é uma "porta paralela", mas um conversor D/A da placa de áudio, que também possui um buffer (memória), para absorver o jitter e atrasos no envio de dados. Algo semelhante a um CD player a prova de buracos na estrada, ou seja, voce toca o CD mas não é interrompido se a cabeça de leitura se afastar do CD por alguns momentos. A estrada esburacada seria o (R)Windows...  :)

Mas ai teria que usar um placa de som com tres canais de áudio sincronizados a nível de cada bit, acho que seria complicado....

Existem processadores DSP (dsPIC), que são rápidos e acho que poderiam ajudar nesse tipo problema, fora do PC.... Ou dentro (uma placa dedicada).

Offline C N C N o w !

  • CNCMASTER
  • ******
  • Posts: 6300
  • Sexo: Masculino
Re: CLOCK em microsegundos
« Resposta #19 Online: 06 de Outubro de 2009, 12:10 »
4 - Existem softwares geradores de CLOCK na internet que geram onda quadrada 1 a 20 khz, precisaria de um codigo aberto de uma programa desses (e ja estou atras) pra saber quais "truques" os programdores usaram para enganar o o nosso (R)windows.....

Não há truques e não são necessários, o SO atribui elevada prioridade às tarefas concernentes ao codec de áudio por motivos óbvios.

matrixlan1

  • Visitante
Re: CLOCK em microsegundos
« Resposta #20 Online: 06 de Outubro de 2009, 18:18 »
Citar
Não há truques e não são necessários, o SO atribui elevada prioridade às tarefas concernentes ao codec de áudio por motivos óbvios.

Ah bem lembrado isso amigo, eu tenho no meu programa como da prioridade ao processamento em tempo real em:

- PRIORIDADE NORMAL
- PRIORIDADE MEDIA
- PRIORIDADE ALTA

com apenas mais algumas linhas eu poderia trabalhar em prioridade "ALTA" sera que isso mudaria alguma coisa no meu programa?


« Última modificação: 06 de Outubro de 2009, 19:39 por matrixlan1 »

matrixlan1

  • Visitante
Re: CLOCK em microsegundos
« Resposta #21 Online: 06 de Outubro de 2009, 18:29 »
Citar
2 - Seria uma boa opçao, mas o "pulo do  gato" é saber como cortar as tarefas, ou seja, o que fica no PC e o que vai para o PIC. De modo a balancear: velocidade de resposta, carga de processamento, tipo de processamento, .... A interface "bonitinha" poderia ser feita depois.

Gil eu falei em abandonar totalmente qualquer tipo de interface deixando o meu projeto um pouco sem graça caso eu migre pro PIC, pelo que andei pesquisando acessar o PIC por PC não é muito legal, se fosse fazer isso partiria logo pra USB que é mais moderno.

No caso do PIC você acha que eu poderia conseguir velocidade em MICROSEGUNDOS?


 

Offline minilathe

  • How to ask questions - The Smart Way...
  • Moderadores
  • CNCMASTER
  • ******
  • Posts: 4295
  • Sexo: Masculino
  • http://science-lakes.com/article43-html.html
  • Cidade - UF: Rio de Janeiro - RJ
  • Nome:: Gil Pinheiro
  • Profissão: Engenheiro e professor universitário
Re: CLOCK em microsegundos
« Resposta #22 Online: 06 de Outubro de 2009, 19:20 »
Gil eu falei em abandonar totalmente qualquer tipo de interface deixando o meu projeto um pouco sem graça caso eu migre pro PIC, pelo que andei pesquisando acessar o PIC por PC não é muito legal, se fosse fazer isso partiria logo pra USB que é mais moderno.

O PIC poderia ser acessado via interface serial (RS232 ou RS485) ou USB.


No caso do PIC você acha que eu poderia conseguir velocidade em MICROSEGUNDOS?

Voce quer dizer tempo de execução de instrução de 1 us, não é? Com 20MHz, cada instrução de máquina é executada em 200 ns. Há modelos, com interface USB, que podem trabalhar acima de 40Mhz.

matrixlan1

  • Visitante
Re: CLOCK em microsegundos
« Resposta #23 Online: 06 de Outubro de 2009, 19:52 »
Citar
Voce quer dizer tempo de execução de instrução de 1 us, não é? Com 20MHz, cada instrução de máquina é executada em 200 ns. Há modelos, com interface USB, que podem trabalhar acima de 40Mhz.

Entendi a resposta como um "SIM" e ja estou corroendo a placa de circuito impresso em acido para criar um pequeno laboratorio com o PIC 16F877A-20 (que trabalha com 20MHZ) com todos os seus IN/OUT's separados e vou começar a fazer testes com PIC.

Ja pra comunicação via porta seria RS232 não tenho nem noção de como vou começar , sei que usa o C.I. max232 para comunicar-se com o PC, agora correr atras de codigos de comunicação nas comunidades por ai...

MUITO OBRIGADO por me orientar, so gostaria muito de poder ainda um dia realizar esse projeto via porta paralela, se conseguir posto nesse mesmo topico.

ABRAÇÃO.

Online Cláudio F.

  • Fuso
  • **
  • Posts: 210
  • Sexo: Masculino
  • Cidade - UF: São Paulo/SP
Re: CLOCK em microsegundos
« Resposta #24 Online: 07 de Outubro de 2009, 08:17 »
Bom dia,

Bom dia, ao usar essas funções, o Windows poderá ajudar na medição do desempenho (velocidade) de execução do programa. A questão é como executar o programa com velocidade usando o / ou dentro do Windows...

Do mesmo modo, o Windows não deveria  alterar a frequência de envio da sequência de pulsos do programa, para acionar o driver dos motores de passo, seja afetada. Essa frequência pode ser da ordem de 10.000Hz. Não sei se isso poderia ser garantido dentro do Windows (talvez no Windows 2000 ou NT??)...

Com a base de tempo, um pouco de criatividade e com um bom computador, acredito sim que seja possível chegar prox aos 10khz. (Já fui feliz empregando em algo parecido... mas n tao exigido.)

Citar
Um outro aspecto é que, de um modo geral, a linguagem C++ pode ser poderosa para fazer interfaces gráficas, mas não é eficiente para programação em tempo real, vejam o artigo: http://www.research.att.com/~bs/esc99.html

concordo em gênero, número e grau... O Artigo do msdn que eu postei, é em cima do .Net, mas n impede de que seja utilizando C Win32. mesmo pq fazer programas rápidos através de framework... só com mágica.

Offline minilathe

  • How to ask questions - The Smart Way...
  • Moderadores
  • CNCMASTER
  • ******
  • Posts: 4295
  • Sexo: Masculino
  • http://science-lakes.com/article43-html.html
  • Cidade - UF: Rio de Janeiro - RJ
  • Nome:: Gil Pinheiro
  • Profissão: Engenheiro e professor universitário
Re: CLOCK em microsegundos
« Resposta #25 Online: 07 de Outubro de 2009, 09:26 »
Cláudio,

Citar

Com a base de tempo, um pouco de criatividade e com um bom computador, acredito sim que seja possível chegar prox aos 10khz. (Já fui feliz empregando em algo parecido... mas n tao exigido.)


Pois é, os motores de passo numa CNC trabalham com 15 Khz ou mais, portanto, acho que fui modesto....

Para trabalhar (direito) devem haver folgas, acredito que o programa deveria poder chegar sem esforços nos 50kHz, num PC considerado médio, usando o MS-Windows (qual?) e um programa em C padrão (ex.: ANSI) - compilador C (qual?).

Outras opções (resultados garantidos em menos tempo, menor esforço):
- Partir totalmente para arquitetura mais aberta (PC, Linux)
- Partir para uma arquitetura híbrida, com mais controle da "situação" (PC ,Windows, C++, PIC, Assembly PIC). 
« Última modificação: 07 de Outubro de 2009, 17:57 por minilathe »

matrixlan1

  • Visitante
Re: CLOCK em microsegundos
« Resposta #26 Online: 07 de Outubro de 2009, 11:21 »
Citar
Com a base de tempo, um pouco de criatividade e com um bom computador, acredito sim que seja possível chegar prox aos 10khz. (Já fui feliz empregando em algo parecido... mas n tao exigido.)


caro amigo, como coseguiu tal facanha? tem algum esboço de codigo de como conseguiu? porque no maximo que consegui foi 60hz >:(

se eu conseuisse pelo menos 1000hz ja estaria feliz.... ;D

os caras que programao em CNC sabem como fazer mas nao conhecço nenhum que de pelo menos uma dica (veja que nao quero codigo pronto) so uma luz.......

Online Cláudio F.

  • Fuso
  • **
  • Posts: 210
  • Sexo: Masculino
  • Cidade - UF: São Paulo/SP
Re: CLOCK em microsegundos
« Resposta #27 Online: 07 de Outubro de 2009, 22:10 »
Boa noite,

minilathe,

acho q fui mal compreendido... eu n estou aqui defendendo o windows e mto menos sugerindo que se faça algum programa sério e confiável com base nos meus palpites. minha intenção foi só de ajudar o colega matrixlan. pois pelo q pude intender, ele n estava precisando de nd mto sofisticado.



matrixlan,

assim q eu tiver o código em mãos, eu posto aqui para ver se te ajuda.


Sds.

Offline minilathe

  • How to ask questions - The Smart Way...
  • Moderadores
  • CNCMASTER
  • ******
  • Posts: 4295
  • Sexo: Masculino
  • http://science-lakes.com/article43-html.html
  • Cidade - UF: Rio de Janeiro - RJ
  • Nome:: Gil Pinheiro
  • Profissão: Engenheiro e professor universitário
Re: CLOCK em microsegundos
« Resposta #28 Online: 07 de Outubro de 2009, 23:08 »
Claudio,


minilathe,

acho q fui mal compreendido... eu n estou aqui defendendo o windows e mto menos sugerindo que se faça algum programa sério e confiável com base nos meus palpites. minha intenção foi só de ajudar o colega matrixlan. pois pelo q pude intender, ele n estava precisando de nd mto sofisticado.

Ok, sem stress.... não sou sócio do Bill Gates nem concorrente direto. E se voce tiver algum programa que rode rápido no Windows, conforme temos discutido aqui, será bem vindo...

Contra fatos, não há argumentos....  :)

Offline C N C N o w !

  • CNCMASTER
  • ******
  • Posts: 6300
  • Sexo: Masculino
Re: CLOCK em microsegundos
« Resposta #29 Online: 08 de Outubro de 2009, 07:06 »
E se voce tiver algum programa que rode rápido no Windows, conforme temos discutido aqui, será bem vindo...

Acho que é importante enfatizar que o prob com o Win não é - e nunca foi - a velocidade, muito menos na atualidade, com máquinas muito rápidas e baratas ao alcance de todos.

O prob é - e sempre foi - a latência, causada pelas interrupções do SO, portanto os masoquistas que pretendem se aventurar nesse pântano devem começar por estudar maneiras de evitar a interferência das tarefas de housekeeping, o resto é relativamente trivial e está ao alcance de muitos programadores.

Merece reflexão o fato de o mais bem sucedido prog pra Win, o Mach, ser em parte um port do EMC e empregar um driver pra lidar com a coisa. Quer me parecer que o Art Fenerty aproveitou o monumental trabalho relativo à cinemática do EMC e tratou de concentrar-se nas questões relativas à administração das prioridades ...