ATtiny 2313
Re: ATtiny 2313
В МК есть таймер, который вы можете настроить на генерацию нужной частоты, и есть внешнее прерывание , используйте их.
Re: ATtiny 2313
А если использовать такой код:
читаю док на функцию:
В симмуляторе аврстудио не хочет делать паузу в 12,5 мкс, вместо этого получаю 12 мкс.
ЗЫ Еще возник вопрос по функции дилей:
Пытался по очереди выводить что-то на знакоместа, код:
Смотрю док:
Я так понял, 1 секунду оно мне все-таки выдаст...
Идем дальше... В мейкфайле ставлю частоту 4000000, задержка составляет 4 сек, а не 1 сек.
Ставлю 1000000 и, о чудо, задержка равна 1 сек. Кто может объяснить почему?
ЗЫ Забыл добавить, оптимизация -Os
Код: Выделить всё
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
- urry
- Сверлит текстолит когтями
- Сообщения: 1262
- Зарегистрирован: Пн дек 08, 2008 10:58:48
- Откуда: Винница
- Контактная информация:
Re: ATtiny 2313
Наверное, потому что в файле \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 строчка .
ЭТО ВАЖНО
Скопируйте файл оттуда в Ваш проект, подключайте его теперь не через #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
Так частота ж мцу предопределена мной в мейкфайле
Re: ATtiny 2313
Решил проблему, убрал в понипрог галочку фьюза пределителя CKDIV