роботы
робототехника
микроконтроллеры
Главная
Как сделать робота
Новости
Спорт
Статьи
Wiki
Форум
Downloads
Ссылки
Контакты  


 Страниц (2): [1] 2 »   

> Описание: неправильная частота
kurt84
Отправлено: 20 Июля, 2008 - 12:11:17
Post Id



Майор


Сообщений всего: 56
Дата рег-ции: Июль 2008  





Здравствуйте!

Такая проблема: собрал схему из статьи "Простой робот на микроконтроллере (Часть 1). Управляем электромоторами.". Отличия только в том, что мк взял другой - ATmega16-16, и соответственно, кварц на 16MHz.

Залил на мк такую программу:
#include <avrio.h>
#include <avrinterrupt.h>
#include <avrsignal.h>
#include <utildelay.h>

#define F_CPU 16000000UL

void my_function(void)
{
PORTA |= _BV( PA3 );
PORTA |= _BV( PA2 );

_delay_ms( 1000 );

PORTA &= ~_BV(PA3);
PORTA &= ~_BV(PA2);

PORTA |= _BV( PA1 );
PORTA |= _BV( PA0 );

_delay_ms( 1000 );

PORTA &= ~_BV(PA1);
PORTA &= ~_BV(PA0);
}

int main(void) {
DDRA = 0xff;
PORTA = 0x00;

while( true )
{
my_function();
}
}

Все работает, за исключением одной проблемы: задержки _delay_ms( 1000 ), которые по идее должны давать задержку в 1 секунду - дают задержку в ~15-16 секунд. Я так подозреваю, что причиной может быть то, что контроллер работает не на той частоте ( около 1MHz ). От чего такое может быть? Что я делал неправильно?
 
 Top
VCOM Супермодератор
Отправлено: 21 Июля, 2008 - 11:58:41
Post Id



Супермодератор


Сообщений всего: 658
Дата рег-ции: Март 2007  





А ты фузы та выставил чтоб он у тебя от внешнего карца работал? Чета мне подсказывает, что он у тя как с завода пришел с включенным внутренним РЦ генератором на 1 МГц. Так и шпарит Ж)))). Кури в сторону CKSEL0..CKSEL3.... Как там оно во всяких АврДудах ВинАврах выставляется, чесно гря не знаю....
 
 Top
kurt84
Отправлено: 21 Июля, 2008 - 13:52:35
Post Id



Майор


Сообщений всего: 56
Дата рег-ции: Июль 2008  





Да, судя по всему дело действительно именно во фьюзах. Хорошо было бы если кто-нибудь подсказал, как их выставить c помощью AVRDUDE на внешний кварц частотой 16MHz.
 
 Top
VCOM Супермодератор
Отправлено: 21 Июля, 2008 - 14:03:52
Post Id



Супермодератор


Сообщений всего: 658
Дата рег-ции: Март 2007  





Ну вод чего нинаю, того нинаю. Ща тут народ который в АврДудах шарит, подскажет те Ж))))
 
 Top
digger Администратор
Отправлено: 21 Июля, 2008 - 20:53:40
Post Id



Администратор


Сообщений всего: 372
Дата рег-ции: Май 2006  





Основные fuse-биты в AVR объединены в двух байтах: Fuse Low Byte и Fuse High Byte.

Содержание битов каждого из байтов (для ATmega16):

Fuse Low Byte

Bit 7 - BODLEVEL - Brown out detector trigger level

Bit 6 - BODEN - Brown out detector enable

Bit 5 - SUT1 - Select start-up time

Bit 4 - SUT0 - Select start-up time

Bit 3 - CKSEL3 - Select Clock source

Bit 2 - CKSEL2 - Select Clock source

Bit 1 - CKSEL1 - Select Clock source

Bit 0 - CKSEL0 - Select Clock source


Fuse High Byte

Bit 7 - OCDEN - Enable OCD

Bit 6 - JTAGEN - Enable JTAG

Bit 5 - SPIEN - Enable Serial Program and Data Downloading

Bit 4 - CKOPT - Oscillator options

Bit 3 - EESAVE - EEPROM memory is preserved through the Chip Erase

Bit 2 - BOOTSZ1 - Select Boot Size

Bit 1 - BOOTSZ0 Select Boot Size

Bit 0 - BOOTRST Select Reset Vector


Запрограммированный бит равен 0
Незапрограммированный - 1


Вам нужно приблизительно следующее: Fuse Calculator

для Low Byte
0xEF

для High Byte
0x89

AVRDUDE имеет замечательный интерфейс командной строки.

Программируют fuse-биты командами вида

CODE:
-U lfuse:w:xx -U hfuse:w:xx


где xx - двузначное шестнадцатиричное число, определяющее одно из 256 возможных состояний байта (именно эти числа мы и определили с помощью Fuse Calculator ).

Теперь нам понадобится командная строка, в которой мы напишем команду для AVRDUDE.

В Вашем случае она может выглядеть примерно вот так:

"C:\WinAVR\bin\avrdude.exe" -p m16 -c stk200 -P lpt1 -U hfuse:w:0x89:m -U lfuse:w:0xef:m


Не забудьте только указать правильный путь к avrdude.exe, который находится в папке с WinAVR в папке bin
 
 Top
kurt84
Отправлено: 21 Июля, 2008 - 22:50:22
Post Id



Майор


Сообщений всего: 56
Дата рег-ции: Июль 2008  





Спасибо!
Я так понимаю, что выставлять фьюзы можно отдельно от заливания программы в контроллер, и последующие заливки программ не сбросят эти настройки, так?
 
 Top
digger Администратор
Отправлено: 22 Июля, 2008 - 00:44:01
Post Id



Администратор


Сообщений всего: 372
Дата рег-ции: Май 2006  





Да.

Для AVRDUDE существует удобная утилита avrdude-gui, предоставляющая графический интерфейс.

Эта утилита по не совсем понятным причинам была удалена из последних версий WinAVR.

Скачать ее можно здесь:
http://sourceforge.net/project/s...?group_id=125549

Файл avrdude-gui.exe лучше положить в папку bin в WinAVR.
 
 Top
kurt84
Отправлено: 22 Июля, 2008 - 07:34:58
Post Id



Майор


Сообщений всего: 56
Дата рег-ции: Июль 2008  





Спасибо. Буду пробовать Улыбка
 
 Top
JaRcom
Отправлено: 23 Июля, 2008 - 21:55:34
Post Id



Рядовой


Сообщений всего: 18
Дата рег-ции: Июль 2008  





так и в PonyProg также есть возмо выставления, см. меню:
Command/Configuration and Security bits
 
 Top
ризюк
Отправлено: 24 Мая, 2009 - 21:50:21
Post Id



Генерал


Сообщений всего: 89
Дата рег-ции: Март 2009  





digger пишет:
Основные fuse-биты в AVR объединены в двух байтах: Fuse Low Byte и Fuse High Byte.

Содержание битов каждого из байтов (для ATmega16):

Fuse Low Byte

Bit 7 - BODLEVEL - Brown out detector trigger level

Bit 6 - BODEN - Brown out detector enable

Bit 5 - SUT1 - Select start-up time

Bit 4 - SUT0 - Select start-up time

Bit 3 - CKSEL3 - Select Clock source

Bit 2 - CKSEL2 - Select Clock source

Bit 1 - CKSEL1 - Select Clock source

Bit 0 - CKSEL0 - Select Clock source


Fuse High Byte

Bit 7 - OCDEN - Enable OCD

Bit 6 - JTAGEN - Enable JTAG

Bit 5 - SPIEN - Enable Serial Program and Data Downloading

Bit 4 - CKOPT - Oscillator options

Bit 3 - EESAVE - EEPROM memory is preserved through the Chip Erase

Bit 2 - BOOTSZ1 - Select Boot Size

Bit 1 - BOOTSZ0 Select Boot Size

Bit 0 - BOOTRST Select Reset Vector



А что надо выбрать, если у меня кварц 8 МГц? (WinAvr)
(Добавление)
digger пишет:
Программируют fuse-биты командами вида


CODE:-U lfuse:w:xx -U hfuse:w:xx



Это в мейкфайле писать?
(Добавление)
ЗЫ есть avrdude-gui
 
 Top
digger Администратор
Отправлено: 24 Мая, 2009 - 22:19:02
Post Id



Администратор


Сообщений всего: 372
Дата рег-ции: Май 2006  





Сначала смотреть здесь:
Fuse Calculator

а команду писать в командной строке.
 
 Top
ризюк
Отправлено: 24 Мая, 2009 - 23:21:59
Post Id



Генерал


Сообщений всего: 89
Дата рег-ции: Март 2009  





Спасибо, а что тогда такое start up time ?
 
 Top
бот_м_16 Супермодератор
Отправлено: 25 Мая, 2009 - 01:01:43
Post Id



Супермодератор


Сообщений всего: 1033
Дата рег-ции: Окт. 2008  





Изучать документацию
 
 Top
ризюк
Отправлено: 25 Мая, 2009 - 03:51:56
Post Id



Генерал


Сообщений всего: 89
Дата рег-ции: Март 2009  





бот_м_16 пишет:
Изучать документацию


А где её найти?
 
 Top
ОЛЕГ Супермодератор
Отправлено: 25 Мая, 2009 - 04:09:45
Post Id



Супермодератор


Сообщений всего: 1732
Дата рег-ции: Нояб. 2008  





Форум => Полезное => Datasheets микроконтроллеров AVR в Atmel AVR Technical Library
 
 Top
Страниц (2): [1] 2 »
« Делаем роботов »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 





Powered by Exclusive Bulletin Board
ExBB FM 1.0 RC1 Smiles by Fool from Foolstown