Страница 2 из 2

Re: ATtiny 2313

Добавлено: Ср май 12, 2010 16:29:47
ooogo
В МК есть таймер, который вы можете настроить на генерацию нужной частоты, и есть внешнее прерывание , используйте их.

Re: ATtiny 2313

Добавлено: Чт май 13, 2010 00:29:57
indi_88
А если использовать такой код:

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

	for(unsigned char i = 25; i > 0; i--)
	{
		PORTD |= 0b00000001;
		//WAITING();
		_delay_us(12.5);
		PORTD &= 0b11111110;
		_delay_us(12.5);
		//WAITING();
	}
читаю док на функцию:

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

void _delay_ms  	(double   	 __ms)   
В симмуляторе аврстудио не хочет делать паузу в 12,5 мкс, вместо этого получаю 12 мкс.

ЗЫ Еще возник вопрос по функции дилей:
Пытался по очереди выводить что-то на знакоместа, код:

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

	PORTB = 0x01;
	PORTD = 0x10;
	_delay_ms(1000);	
	PORTD = 0x00;
		
	PORTB = 0x02;
	PORTD = 0x20;
	_delay_ms(1000);
	PORTD = 0x00;
		
	PORTB = 0x03;
	PORTD = 0x40;
	_delay_ms(1000);
	PORTD = 0x00;	
Смотрю док:

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

The maximal possible delay is 262.14 ms / F_CPU in MHz.

When the user request delay which exceed the maximum possible one, _delay_ms() provides a decreased resolution functionality. In this mode _delay_ms() will work with a resolution of 1/10 ms, providing delays up to 6.5535 seconds (independent from CPU frequency). The user will not be informed about decreased resolution. 
Я так понял, 1 секунду оно мне все-таки выдаст...
Идем дальше... В мейкфайле ставлю частоту 4000000, задержка составляет 4 сек, а не 1 сек.
Ставлю 1000000 и, о чудо, задержка равна 1 сек. Кто может объяснить почему?

ЗЫ Забыл добавить, оптимизация -Os

Re: ATtiny 2313

Добавлено: Чт май 13, 2010 08:18:46
urry
Наверное, потому что в файле \avr\include\util\delay.h указана частота :)
Скопируйте файл оттуда в Ваш проект, подключайте его теперь не через #include <delay.h>, а так #include "delay.h"
В самом файле видим

#ifndef F_CPU
/* prevent compiler error by supplying a default */
# warning "F_CPU not defined for <util/delay.h>"
# define F_CPU 1000000UL
#endif

Это ремим, создаем файл настроек. обзываем его как-то так hard_config.h и подключаем его к файлу delay.h

#ifndef _UTIL_DELAY_H_
#define _UTIL_DELAY_H_ 1
#include <inttypes.h>
#include <util/delay_basic.h>
#include "hard_config.h"

Далее, в нем (hard_config.h) определяем частоту
#define F_OSC 4000000UL
и в файле delay.h пишем
#define F_CPU F_OSC
это все ради того, чтобы при изменении частоты менялась только 1 строчка .
ЭТО ВАЖНО

Re: ATtiny 2313

Добавлено: Чт май 13, 2010 12:31:34
indi_88
Так частота ж мцу предопределена мной в мейкфайле

Re: ATtiny 2313

Добавлено: Чт май 13, 2010 13:31:06
indi_88
Решил проблему, убрал в понипрог галочку фьюза пределителя CKDIV