реклама на сайте
подробности

 
 
> Atmega8 задержки, помогите новичку
kennykiller
сообщение Dec 19 2011, 06:34
Сообщение #1





Группа: Участник
Сообщений: 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мс). Подскажите в чем ошибка? Или подскажите (с примером кода) как можно по другому решить данную задачу. Спасибо
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
kennykiller
сообщение Dec 19 2011, 11:14
Сообщение #2





Группа: Участник
Сообщений: 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
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Dec 19 2011, 11:18
Сообщение #3


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(kennykiller @ Dec 19 2011, 14:14) *
Fclk Это и есть частота процессора в ГЦ? если я правильно понял то она задается командой #define F_CPU 1000000UL
Повторюсь ещё раз. Обычно она не задаётся через дефайн напрямую, а спускается из makefile. Точно также как и тип MCU.


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
kennykiller
сообщение Dec 19 2011, 12:01
Сообщение #4





Группа: Участник
Сообщений: 10
Регистрация: 9-02-11
Пользователь №: 62 817



Цитата(demiurg_spb @ Dec 19 2011, 15:18) *
Повторюсь ещё раз. Обычно она не задаётся через дефайн напрямую, а спускается из makefile. Точно также как и тип MCU.

makefile я знаю есть в WINavr а где он находится если я компилирую через AVRstudio? (язык C)
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Dec 19 2011, 12:07
Сообщение #5


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Студия использует тот же тулчейн (avr-gcc) что и WinAVR и сборка проектов осуществляется утилитой make.
Поэтому между ними нет никакой разницы в этом смысле.
Единственное отличие заключаться в том, что студия может править makefile сама посредством меню с настройками проекта,
а WinAVR хоть тоже и имеет в поставке конфигуратор makefile - mFile, но больше заточен для рукопашного редактирования Makefile.


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- 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
|- - kennykiller   Цитата(demiurg_spb @ Dec 19 2011, 16:07) ...   Dec 19 2011, 12:10
|- - 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


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd June 2025 - 22:18
Рейтинг@Mail.ru


Страница сгенерированна за 0.01431 секунд с 7
ELECTRONIX ©2004-2016