Página 1 de 1
Delay

Enviado:
15 Jan 2007 08:27
por sandrini
Bom dia!!!
Estou tendo dificuldades em acertar um tempo de Delay... estou utilizando o WinAVR e a biblioteca dele, <delay.h>, parece que não funciona de acordo.
Eu preciso de um delay de 104 microsegundos e pensei em até fazer em assembler, mas também não entendi como fazer isso...
Será que alguém poderia me dar uma dica de como conseguir este delay?
Grato.

Enviado:
15 Jan 2007 09:02
por rubenprom
Teria de ser obrigatoriamente em assembler?
Eu, programa o delay em linguagem C, porem tb podia-se chamar a rotina de delay, da seguinte maneira simples:
#include <delay.h>
....
void programa
{
//trecho do programa
delay(1000); //O que equivale a 1 segundo
}
....
senao podes escrever a seguinte sintaxe
#include <delay.h>
#include<avr/io>
void delay(int second)
{
int i;
for(i=0 ; i< =second ; i++);
}
void main()
{
delay(1000) //O que equivale a 1 segundo
}
Espero possa te ajduar em algo, mas a ideia é essa

Enviado:
15 Jan 2007 09:13
por sandrini
RubenProm
Não precisa ser em assembler, mas também não estou conseguindo fazer em C...
Já tentei várias vezes da maneira que você escreveu e mesmo assim não consigo um atraso para a minha necessidade.
Vou tentar explicar o que preciso.
Bem, estou tentando fazer uma outra serial num Atmega8 e preciso, para 9600bps, um atraso de aproximadamente 104 us entre um bit e outro... é justamente este atraso que estou tentando fazer...
O problema é que não consigo ter uma lógica para isto... parece que em cada parte do programa que coloco o delay, ele dá um valor diferente...
Mas mesmo assim, valeu pela dica....

Enviado:
15 Jan 2007 12:07
por helton
Talvez seja mais fácil , voce criar uma interrupção ( timer / counter )na frequencia que voce necessita ( por exemplo 1/2 bit de interrupção ), e dentro da sua interrupção , voce transmitir um bit desejado...
- Código: Selecionar todos
SIGNAL ( SIG_OVERFLOW1 )
{
TCNT1 = Frequencia;//104 us por exemplo
if ( tx_cnt <= 8 )
{
if ((SBUFAUX % 2) == 0 )TXDAUX_OFF;
else TXDAUX_ON;
SBUFAUX>>=1;
}
tx_cnt++;
}
é um pouco mais fácil, e muito mais preciso que a função
_delay_us(104);

Enviado:
15 Jan 2007 13:14
por sandrini
Valeu Helton...
Eu já estava começando a implementar algo parecido.... mas a sua ideia me pareceu melhor que a minha... vou tentar...
Obrigado.