ATtiny 2313

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Аватара пользователя
ooogo
Это не хвост, это антенна
Сообщения: 1306
Зарегистрирован: Вс янв 18, 2009 20:51:02

Re: ATtiny 2313

Сообщение ooogo »

В МК есть таймер, который вы можете настроить на генерацию нужной частоты, и есть внешнее прерывание , используйте их.
indi_88
Родился
Сообщения: 17
Зарегистрирован: Чт май 06, 2010 16:09:40

Re: ATtiny 2313

Сообщение 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
Аватара пользователя
urry
Сверлит текстолит когтями
Сообщения: 1262
Зарегистрирован: Пн дек 08, 2008 10:58:48
Откуда: Винница
Контактная информация:

Re: ATtiny 2313

Сообщение 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 строчка .
ЭТО ВАЖНО
indi_88
Родился
Сообщения: 17
Зарегистрирован: Чт май 06, 2010 16:09:40

Re: ATtiny 2313

Сообщение indi_88 »

Так частота ж мцу предопределена мной в мейкфайле
indi_88
Родился
Сообщения: 17
Зарегистрирован: Чт май 06, 2010 16:09:40

Re: ATtiny 2313

Сообщение indi_88 »

Решил проблему, убрал в понипрог галочку фьюза пределителя CKDIV
Закрыто

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