win-avr + proteus = гонит задержка

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
Нашел транзистор. Понюхал.
Сообщения: 150
Зарегистрирован: Чт апр 29, 2010 10:32:32

Сообщение kondor »

Решил потренироваться работать с 1 wire и заметил косяк какой-то, немогу понять в чем именно.

Код: Выделить всё

int main()
 { 
	int i;
	DDRD = 255;
	#define AA 7
	while (1) 	{
	for (i = 0 ; i < 1500 ; i++ ) asm("NOP");
	PORTD = 0;
	for (i = 0 ; i < AA ; i++ ) asm("nop");
	PORTD = 255;
	} 
	return 0; 
} 
Задержку именно по нижнему уровню, первый цикл для удобства.

АА = 3 => задержка 250 нс.
АА = 4 => задержка 350 нс.
АА = 5 => задержка 400 нс.
АА = 6 => задержка 450 нс.
АА = 7 => задержка 3.2 мкс.
АА = 8 => задержка 3.6 мкс.

протеус 7.6 сп4, атмега 16, частота 16 МГц, сигнал измеряю на виртуальном осциллографе. В чем может быть дело ?
Реклама
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18862
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

во-первых, вы неправильно используете ассемблерную вставку для команды NOP: надо писать asm volatile ("nop")
во-вторых, вы вообще не в курсе, как оптимизатор WinAVR работает - бесполезные циклы он игнорирует (бесполезные - значит, не делающие никаких манипуляций с переменными, от которых что-то зависит в программе)
в-третьих, в WinAVR есть отличные функции задержек в модуле util/delay.h: _delay_us(float x) - задержка в х микросекунд, _delay_ms(float x) - задержка в х миллисекунд. так что пользуйтесь ими и не фантазируйте.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Реклама
Нашел транзистор. Понюхал.
Сообщения: 150
Зарегистрирован: Чт апр 29, 2010 10:32:32

Сообщение kondor »

1. попробовал так, изменений нет.
2. знаю что for (i = 0 ; i < AA; i++ ); будет игнорироваться, а если добавить nop, то задержка будет, хоть и непонятно какая.
3. про них я знаю, просто хотел разобраться из-за чего такое происходит. Суть не именно в том чтобы создать задержку, а в том, чтобы понять почему такое происходит. Мало ли где это может вылезти.
Модератор
Аватара пользователя
Сообщения: 4517
Зарегистрирован: Пн апр 03, 2006 11:43:25
Откуда: Санкт - Петербург

Сообщение Aheir »

По Протеусу - тема в "Цифровой технике", по WinAVR - в начале этого раздела. Определитесь - и туда.
Оптимизм х (Опыт + Знания) = const
Контактная информация:
Реклама
Эиком - электронные компоненты и радиодетали
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»