|
Atmega8 задержки, помогите новичку |
|
|
|
Dec 19 2011, 06:34
|
Группа: Участник
Сообщений: 10
Регистрация: 9-02-11
Пользователь №: 62 817

|
Я совсем новичок в программировании контролеров. Прошу помощи у знающих людей. Нужно сформировать последовательность импульсов длительностью 1мс с периодом 20мс для управления сервоприводом. Вот программа: CODE #include <avr/io.h> #include <avr/io.h> #include <util/delay.h> int main(void) { DDRC = 0xFF; unsigned char i; while(1) { _delay_ms(1000); for (i=0;i<255;i++) { PORTC = 0b111111; _delay_ms(1); PORTC = 0b000000; _delay_ms(19); } } }
но почему с помощью задержек длительность импульса получается всегда больше?(по данному коду получается 5мс, даже если поставить ее 1мкс получаем 2мс). Подскажите в чем ошибка? Или подскажите (с примером кода) как можно по другому решить данную задачу. Спасибо
|
|
|
|
|
 |
Ответов
|
Dec 19 2011, 11:14
|
Группа: Участник
Сообщений: 10
Регистрация: 9-02-11
Пользователь №: 62 817

|
Всем кто помогал, огромнейшее спасибо с аппаратным ШИМ получилось таки разобраться. Единственное что не понял это как правильно задать частоту процессора. По идее он должен быть 1МГц. Длительность импульса и период я подогнал подбором с помощью делителя, получилось 1мс а период 32мс (нужно 20мс), но серва впринципе работает нормально и при такой частоте. Еще рас спасибо всем за оперативную помощь =)) Цитата(MaxiMuz @ Dec 19 2011, 14:01)  Укажите на какой частоте работает ваш МК, параметры режима расчитываются изходя из Fclk. Fclk Это и есть частота процессора в ГЦ? если я правильно понял то она задается командой #define F_CPU 1000000UL только я использовал не Phase Correct PWM, а Fast PWM с делителем 64.
Сообщение отредактировал kennykiller - Dec 19 2011, 11:18
|
|
|
|
|
Dec 19 2011, 12:01
|
Группа: Участник
Сообщений: 10
Регистрация: 9-02-11
Пользователь №: 62 817

|
Цитата(demiurg_spb @ Dec 19 2011, 15:18)  Повторюсь ещё раз. Обычно она не задаётся через дефайн напрямую, а спускается из makefile. Точно также как и тип MCU. makefile я знаю есть в WINavr а где он находится если я компилирую через AVRstudio? (язык C)
|
|
|
|
|
Dec 19 2011, 12:10
|
Группа: Участник
Сообщений: 10
Регистрация: 9-02-11
Пользователь №: 62 817

|
Цитата(demiurg_spb @ Dec 19 2011, 16:07)  Студия использует тот же тулчейн (avr-gcc) что и WinAVR и сборка проектов осуществляется утилитой make. Поэтому между ними нет никакой разницы в этом смысле. Единственное отличие заключаться в том, что студия может править makefile сама посредством меню с настройками проекта и т.п. как в AVRstudio мне из makefila задать правильно частоту процессора напиши пожалуйста подробнее
|
|
|
|
Сообщений в этой теме
kennykiller Atmega8 задержки Dec 19 2011, 06:34 Sergey_Aleksandrovi4 Скорее всего неверно задана частота МК в проекте. ... Dec 19 2011, 07:47 kennykiller Цитата(Sergey_Aleksandrovi4 @ Dec 19 2011, 11... Dec 19 2011, 08:28  Sergey_Aleksandrovi4 Цитата(kennykiller @ Dec 19 2011, 12:28) ... Dec 19 2011, 09:20  demiurg_spb Цитата(kennykiller @ Dec 19 2011, 11:28) ... Dec 19 2011, 10:33 mempfis_ Цитата(kennykiller @ Dec 19 2011, 09:34) ... Dec 19 2011, 08:00 haker_fox QUOTE (kennykiller @ Dec 19 2011, 14:34) ... Dec 19 2011, 09:36 kennykiller Цитата(haker_fox @ Dec 19 2011, 13:36) Та... Dec 19 2011, 09:46  MaxiMuz Цитата(kennykiller @ Dec 19 2011, 12:46) ... Dec 19 2011, 10:01 TriD Значение F_CPU лучше всего указать в свойствах про... Dec 19 2011, 10:20     demiurg_spb Цитата(kennykiller @ Dec 19 2011, 15:10) ... Dec 19 2011, 12:16      kennykiller Цитата(demiurg_spb @ Dec 19 2011, 16:16) ... Dec 19 2011, 12:30       demiurg_spb Цитата(kennykiller @ Dec 19 2011, 15:30) ... Dec 20 2011, 04:52 MaxiMuz Цитата(kennykiller @ Dec 19 2011, 14:14) ... Dec 19 2011, 12:15
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|