Страница 1 из 1
Помогите новичку запрограммировать контроллер ATtiny13
Добавлено: 14 фев 2012, 23:24
skullhead
Всем привет.
Случай для знающих людей элементарный,но я совсем новичок, поэтому без помощи не обойдусь.Нашел вот схемку radioparty. ru/index.php/device-avr/217-stepcontrolattiny13
В программировании контроллеров я не силен совсем, нужна простая программа на Си , чтобы моторчик вращался в одну сторону, если можно то с комментариями. Ну и совсем круто будет для меня, если программа будет например крутить двигатель на несколько оборотов в одну сторону,а потом в другую, ну и в том духе.
Нигде не нашел подробного объяснения, или подобной программы с хорошим описанием, поэтому спрашиваю. Самому разбираться с самых азов к сожалению времени нет. А вот пример такой программки с комментами очень бы помог освоиться. Заранее спасибо.
Re: Помогите новичку запрограммировать контроллер ATtiny13
Добавлено: 15 фев 2012, 00:00
boogyman
Какой моторчик?(мощность, напряжение питания). Как он будет переключаться? (с помощью кнопок, переключателя, циклично)
Re: Помогите новичку запрограммировать контроллер ATtiny13
Добавлено: 15 фев 2012, 08:24
skullhead
Моторчик униполярный ST28. переключаться циклично ,никаких кнопок.да и не в этом дело.у меня есть пару проверенных схем.но загвоздка в программе. с основами программирования я знаком,но не микроконтроллеров.вот мне бы пример,с подсказками.сложных задач пока перед собой не ставлю,вот для начала хочу разобраться с вращением мотора.
там по ссылке схема которую планирую использовать.
Re: Помогите новичку запрограммировать контроллер ATtiny13
Добавлено: 15 фев 2012, 12:30
boogyman
Вот код, немножко переделал из исходника который есть в статье вверху по ссылке, шаговый циклично меняет направление вращения
Код: Выделить всё
// attiny13, clock 9.6MHz, предделитель на 8 включен
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
// массивы последовательностей выходов
#define MAX_STEP 4
// по часовой
unsigned char cwstep_seq[MAX_STEP]= {0b00000110,
0b00000011,
0b00001001,
0b00001100};
// против часовой
unsigned char ccwstep_seq[MAX_STEP]= {0b00001100,
0b00001001,
0b00000011,
0b00000110};
volatile unsigned char step_index;
volatile unsigned int ovftimes;
volatile unsigned char status;
// обработчик прерывания по переполнению TIMER0
ISR(TIM0_OVF_vect)
{
static unsigned int count=1;
count++;
if (count >= ovftimes) {
cli(); // запрещаем прерывания
// Stepping Output
if (status)
PORTB = ccwstep_seq[step_index++];
else
PORTB = cwstep_seq[step_index++];
if (step_index >= MAX_STEP)
step_index=0;
count=0; // сброс счетчика
TCNT0=0; // старт отсчета с нуля
sei(); // разрешаем прерывания
}
}
int main(void)
{
// инициализация портов
DDRB = 0b00001111; // PB0, PB1, PB2, и PB3 выходы, остальные входы
PORTB = 0b00000000; // Reset PORTB Output
// Инициализация TIMER0
TCCR0B=(1<<CS01); // предделитель на 8 с частотой 9.6 MHz
TCNT0=0; // обнуляем счетчик
TIMSK0=(1<<TOIE0); // разрешаем прерывание по переполнению TIMER0
step_index=0;
ovftimes=10;
sei(); // разрешаем прерывания
while(1) { // главный цикл
status=1; // направление против часовой
_delay_ms(500);
status=0; // направление по часовой
_delay_ms(500);
}
}
Re: Помогите новичку запрограммировать контроллер ATtiny13
Добавлено: 15 фев 2012, 13:10
skullhead
Спасибо огромное! Не ожидал такого развернутого ответа)Теперь есть от чего отталкиваться.
Появился вопрос.С чем может быть связаны дергания двигателя во время симуляции?
Re: Помогите новичку запрограммировать контроллер ATtiny13
Добавлено: 15 фев 2012, 13:52
boogyman
Надо попробовать в железе, пока времени нет, думаю частоту таймера надо настраивать
Re: Помогите новичку запрограммировать контроллер ATtiny13
Добавлено: 15 фев 2012, 13:56
skullhead
а какой компилятор использовался?
Re: Помогите новичку запрограммировать контроллер ATtiny13
Добавлено: 15 фев 2012, 14:12
boogyman
skullhead писал(а):а какой компилятор использовался?
AVRStudio 4
Re: Помогите новичку запрограммировать контроллер ATtiny13
Добавлено: 15 фев 2012, 14:15
skullhead
Спасибо еще раз.
Re: Помогите новичку запрограммировать контроллер ATtiny13
Добавлено: 31 янв 2014, 23:20
vadd
Здравствуйте. Хотелось бы собрать электронное управление заслонкой холодного,горячего воздуха в
автомобиль на шаговом двигателе. В программировании не силен, хочу попросить у вас помощи. Схему я
набросал. Суть в том, чтобы двигатель управлялся энкодором, общий угол поворота двигателя примерно 180
град ,угол поворота двигателя в каждую сторону примерно 90 град. (эту величину хотелось сделать
регулируемой, указать отвечающий параметр за кол-во шагов при прошивке МК), а также при повороте
энкодера в одну сторону зажигались светодиоды красного цвета, а в противоположную - синего, но при этом
светодиоды красного цвета выключались, и наоборот.
Re: Помогите новичку запрограммировать контроллер ATtiny13
Добавлено: 12 мар 2015, 17:58
Vasilii_II
Помогите разобраться:
В выше приведенном тексте кода инициализация портов происходит выражением
писал подобную программу в для тех же целей что и обсуждалось здесь, но у меня не работает контроллер при задании в программе параметра DDRB некоторых значений, :
Код: Выделить всё
int main(void) {
// инициализация порта
DDRB = 0x1F; // так не работает
DDRB = 0b00011111; // и так не работает
DDRB |= _BV(4); // так работает
DDRB = 0x10; // и так работает
PORTB|= _BV(4); // включаю светодиод
_delay_ms(3000);
PORTB&= ~_BV(4); // выключаю светодиод
while(1){
_delay_ms(1000)
...
не работает - заключается в том что при старте светодиод включается и на этом больше никаких действий не происходит.
Но при скачивании программулины с поста
boogyman » 15 фев 2012, 11:30 и загрузки ее в протеус - программа работает!!!
Проверял работу в протеусе и на МК, код писал на AVR studio 4.
Предполагаю что может не хватать каких то настроек для проекта в AVR studio? или что-то еще?
Re: Помогите новичку запрограммировать контроллер ATtiny13
Добавлено: 12 мар 2015, 21:44
AntonChip
Подключены все хедеры?
Частота установлена?
Re: Помогите новичку запрограммировать контроллер ATtiny13
Добавлено: 13 мар 2015, 00:35
Vasilii_II
Да хидеры подключены, и частота выставлена перед хидером который за delay отвечает. Может с winAVR-20100110 что не так?
Re: Помогите новичку запрограммировать контроллер ATtiny13
Добавлено: 14 мар 2015, 08:11
AntonChip
Попробуйте установить последнюю версию Avrstudio4 и последнюю версию AVR GNU Toolchain
Re: Помогите новичку запрограммировать контроллер ATtiny13
Добавлено: 16 мар 2015, 22:04
Vasilii_II
Попробовал обновиться и установил AVR GNU Toolchain, результаты не поменялись. Может кто-нибудь попробует скомпилировать мой Си файл, может быть с ним что не так!
Re: Помогите новичку запрограммировать контроллер ATtiny13
Добавлено: 17 мар 2015, 06:28
AntonChip
А не слишком много нулей в #define F_CPU, частота получается 1,2ГГц
Re: Помогите новичку запрограммировать контроллер ATtiny13
Добавлено: 10 апр 2015, 21:23
Vasilii_II
Согласен нулей чего-то я перебрал, но все равно это не решило проблемы и вариант с 4-ым инициализированным битом раньше работал!