Здраствуйте.
Есть вопрос по программным задержкам.
Для начала, опишу то с че я работаю.
Микроконтроллер mega169V в составе демонстрационной платы
AVR Butterfly. Программно обеспечение взято с сайта SmileyMicros.com и представляет из себя ,оптимизированные под WinAVR(GCC) исходники для IAR, с офф сайта Atmel.
Все это хозяйство я сопрягаю с датчиками DS1920 1-Ware.
Сответственно были взяты исходники для апноута AVR318 под IAR и оптимизированы под WinAvr.
Естественно первым делом я стал проверять мременные задержки.
Написал кусочек кода для формирования импульсов определенной длительности, и проверял на осцилографе, снимая сигнал с одной из ножек порта.
===============================================
#include "dallasbus.h"
#include <avr/io.h>
#include "main.h"
#include <util/delay.h>
#include "LCD_functions.h"
// 1-Ware function main
#define F_CPU 1000000UL
char dallasfunction (char input)
{
static char enter = 1;
if (enter)
{
enter = 0;
cbi(LCDCRA, 7);
DDRD=0xff; //Set port D to output port
//===========================
while (1)
{
PORTD=0xFF;
_delay_us(5);
PORTD=0x00;
_delay_us(10);
}
//============================
}
else if (input == KEY_MINUS)
{
enter = 1; // Set enter to 1 before leaving the TemperatureFunc
return ST_1ware;
}
else
return ST_1ware_FUNC;
}
Как видно из изходника я использовал функцию _delay_us();
Изначально я использовал частоту 8 Мгц.
Импульсы получились не такими как я предполагал. Длительность и период были в разы больше чем я указывал.
Я начал :!: УМЕНЬШАТЬ частоту и только на !! 1Мгц достиг примерно нужного значения .
Суть в том, что это ИМХО полный абсурд :shock: . Ибо я считал что временные интервалы с уменьшением частоты должны УВЕЛИЧИВАТЬСЯ, а не УМЕНЬШАТЬСЯ.
Что скажете товарищи.
Как же определить зависимость задержек от частоты. Жду ваших комментариев :roll: