роботы робототехника микроконтроллеры


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

> Описание: неправильная частота
kurt84 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 Супермодератор Post Id



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


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



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



Майор


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



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



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


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



Ну вод чего нинаю, того нинаю. Ща тут народ который в АврДудах шарит, подскажет те Ж))))
 
 Top
digger Администратор 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 Post Id



Майор


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



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



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


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



Да.

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

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

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

Файл avrdude-gui.exe лучше положить в папку bin в WinAVR.
 
 Top
kurt84 Post Id



Майор


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



Спасибо. Буду пробовать Улыбка
 
 Top
JaRcom Post Id



Рядовой


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



так и в PonyProg также есть возмо выставления, см. меню:
Command/Configuration and Security bits
 
 Top
ризюк 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 Администратор Post Id



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


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



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

а команду писать в командной строке.
 
 Top
ризюк Post Id



Генерал


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



Спасибо, а что тогда такое start up time ?
 
 Top
бот_м_16 Супермодератор Post Id



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


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



Изучать документацию
 
 Top
ризюк Post Id



Генерал


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



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


А где её найти?
 
 Top
ОЛЕГ Супермодератор 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
  Яндекс.Метрика   Рейтинг@Mail.ru