Delay

Software e Hardware para ATMEL

Moderadores: 51, guest2003, brasilma

Delay

Mensagempor sandrini » 15 Jan 2007 08:27

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.
sandrini
Nibble
 
Mensagens: 65
Registrado em: 12 Out 2006 10:16

Mensagempor rubenprom » 15 Jan 2007 09:02

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
rubenprom
Byte
 
Mensagens: 222
Registrado em: 16 Out 2006 00:23
Localização: Porto Alegre - RS

Mensagempor sandrini » 15 Jan 2007 09:13

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....
sandrini
Nibble
 
Mensagens: 65
Registrado em: 12 Out 2006 10:16

Mensagempor helton » 15 Jan 2007 12:07

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);
Helton Marques
"Priorize as Prioridades"
helton
Byte
 
Mensagens: 146
Registrado em: 16 Out 2006 09:18
Localização: São José-SC

Mensagempor sandrini » 15 Jan 2007 13:14

Valeu Helton...

Eu já estava começando a implementar algo parecido.... mas a sua ideia me pareceu melhor que a minha... vou tentar...

Obrigado.
sandrini
Nibble
 
Mensagens: 65
Registrado em: 12 Out 2006 10:16


Voltar para AVR

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante

x