Помогите новичку запрограммировать контроллер ATtiny13

Модератор: boogyman

Помогите новичку запрограммировать контроллер ATtiny13

Сообщение:#1  Сообщение skullhead » 14 фев 2012, 22:24

Всем привет.
Случай для знающих людей элементарный,но я совсем новичок, поэтому без помощи не обойдусь.Нашел вот схемку radioparty. ru/index.php/device-avr/217-stepcontrolattiny13
В программировании контроллеров я не силен совсем, нужна простая программа на Си , чтобы моторчик вращался в одну сторону, если можно то с комментариями. Ну и совсем круто будет для меня, если программа будет например крутить двигатель на несколько оборотов в одну сторону,а потом в другую, ну и в том духе.
Нигде не нашел подробного объяснения, или подобной программы с хорошим описанием, поэтому спрашиваю. Самому разбираться с самых азов к сожалению времени нет. А вот пример такой программки с комментами очень бы помог освоиться. Заранее спасибо.
Последний раз редактировалось skullhead 15 фев 2012, 07:26, всего редактировалось 1 раз.
Аватара пользователя
skullhead
Новичок
 
Сообщения: 6
Зарегистрирован: 14 фев 2012, 22:22

Re: Помогите новичку запрограммировать контроллер ATtiny13

Сообщение:#2  Сообщение boogyman » 14 фев 2012, 23:00

Какой моторчик?(мощность, напряжение питания). Как он будет переключаться? (с помощью кнопок, переключателя, циклично)
Аватара пользователя
boogyman
Модератор
 
Сообщения: 183
Зарегистрирован: 25 дек 2011, 21:48
Откуда: Москва

Re: Помогите новичку запрограммировать контроллер ATtiny13

Сообщение:#3  Сообщение skullhead » 15 фев 2012, 07:24

Моторчик униполярный ST28. переключаться циклично ,никаких кнопок.да и не в этом дело.у меня есть пару проверенных схем.но загвоздка в программе. с основами программирования я знаком,но не микроконтроллеров.вот мне бы пример,с подсказками.сложных задач пока перед собой не ставлю,вот для начала хочу разобраться с вращением мотора.
там по ссылке схема которую планирую использовать.
Аватара пользователя
skullhead
Новичок
 
Сообщения: 6
Зарегистрирован: 14 фев 2012, 22:22

Re: Помогите новичку запрограммировать контроллер ATtiny13

Сообщение:#4  Сообщение boogyman » 15 фев 2012, 11:30

Вот код, немножко переделал из исходника который есть в статье вверху по ссылке, шаговый циклично меняет направление вращения

Код: Выделить всё
// 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);
   }
}

Вложения
stepper.rar
Проект в AVRstudio и Proteus
(34.82 КБ) Скачиваний: 2705
Аватара пользователя
boogyman
Модератор
 
Сообщения: 183
Зарегистрирован: 25 дек 2011, 21:48
Откуда: Москва

Re: Помогите новичку запрограммировать контроллер ATtiny13

Сообщение:#5  Сообщение skullhead » 15 фев 2012, 12:10

Спасибо огромное! Не ожидал такого развернутого ответа)Теперь есть от чего отталкиваться.
Появился вопрос.С чем может быть связаны дергания двигателя во время симуляции?
Аватара пользователя
skullhead
Новичок
 
Сообщения: 6
Зарегистрирован: 14 фев 2012, 22:22

Re: Помогите новичку запрограммировать контроллер ATtiny13

Сообщение:#6  Сообщение boogyman » 15 фев 2012, 12:52

Надо попробовать в железе, пока времени нет, думаю частоту таймера надо настраивать
Аватара пользователя
boogyman
Модератор
 
Сообщения: 183
Зарегистрирован: 25 дек 2011, 21:48
Откуда: Москва

Re: Помогите новичку запрограммировать контроллер ATtiny13

Сообщение:#7  Сообщение skullhead » 15 фев 2012, 12:56

а какой компилятор использовался?
Аватара пользователя
skullhead
Новичок
 
Сообщения: 6
Зарегистрирован: 14 фев 2012, 22:22

Re: Помогите новичку запрограммировать контроллер ATtiny13

Сообщение:#8  Сообщение boogyman » 15 фев 2012, 13:12

skullhead писал(а):а какой компилятор использовался?

AVRStudio 4
Аватара пользователя
boogyman
Модератор
 
Сообщения: 183
Зарегистрирован: 25 дек 2011, 21:48
Откуда: Москва

Re: Помогите новичку запрограммировать контроллер ATtiny13

Сообщение:#9  Сообщение skullhead » 15 фев 2012, 13:15

Спасибо еще раз.
Аватара пользователя
skullhead
Новичок
 
Сообщения: 6
Зарегистрирован: 14 фев 2012, 22:22

Re: Помогите новичку запрограммировать контроллер ATtiny13

Сообщение:#10  Сообщение vadd » 31 янв 2014, 22:20

Здравствуйте. Хотелось бы собрать электронное управление заслонкой холодного,горячего воздуха в
автомобиль на шаговом двигателе. В программировании не силен, хочу попросить у вас помощи. Схему я
набросал. Суть в том, чтобы двигатель управлялся энкодором, общий угол поворота двигателя примерно 180
град ,угол поворота двигателя в каждую сторону примерно 90 град. (эту величину хотелось сделать
регулируемой, указать отвечающий параметр за кол-во шагов при прошивке МК), а также при повороте
энкодера в одну сторону зажигались светодиоды красного цвета, а в противоположную - синего, но при этом
светодиоды красного цвета выключались, и наоборот.
Вложения
Управление заслонкой.rar
(15.56 КБ) Скачиваний: 2372
Аватара пользователя
vadd
Новичок
 
Сообщения: 5
Зарегистрирован: 24 янв 2014, 10:16

Re: Помогите новичку запрограммировать контроллер ATtiny13

Сообщение:#11  Сообщение Vasilii_II » 12 мар 2015, 17:58

Помогите разобраться:
В выше приведенном тексте кода инициализация портов происходит выражением
Код: Выделить всё
 DDRB = 0b00001111;

писал подобную программу в для тех же целей что и обсуждалось здесь, но у меня не работает контроллер при задании в программе параметра 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? или что-то еще?
Аватара пользователя
Vasilii_II
Новичок
 
Сообщения: 4
Зарегистрирован: 12 мар 2015, 02:37

Re: Помогите новичку запрограммировать контроллер ATtiny13

Сообщение:#12  Сообщение AntonChip » 12 мар 2015, 21:44

Подключены все хедеры?
Частота установлена?
Аватара пользователя
AntonChip
Администратор
 
Сообщения: 196
Зарегистрирован: 24 дек 2011, 21:11
Откуда: Киров

Re: Помогите новичку запрограммировать контроллер ATtiny13

Сообщение:#13  Сообщение Vasilii_II » 13 мар 2015, 00:35

Да хидеры подключены, и частота выставлена перед хидером который за delay отвечает. Может с winAVR-20100110 что не так?
Аватара пользователя
Vasilii_II
Новичок
 
Сообщения: 4
Зарегистрирован: 12 мар 2015, 02:37

Re: Помогите новичку запрограммировать контроллер ATtiny13

Сообщение:#14  Сообщение AntonChip » 14 мар 2015, 08:11

Попробуйте установить последнюю версию Avrstudio4 и последнюю версию AVR GNU Toolchain
Аватара пользователя
AntonChip
Администратор
 
Сообщения: 196
Зарегистрирован: 24 дек 2011, 21:11
Откуда: Киров

Re: Помогите новичку запрограммировать контроллер ATtiny13

Сообщение:#15  Сообщение Vasilii_II » 16 мар 2015, 22:04

Попробовал обновиться и установил AVR GNU Toolchain, результаты не поменялись. Может кто-нибудь попробует скомпилировать мой Си файл, может быть с ним что не так!
Вложения
test_t13.rar
(651 байт) Скачиваний: 1968
Аватара пользователя
Vasilii_II
Новичок
 
Сообщения: 4
Зарегистрирован: 12 мар 2015, 02:37

Re: Помогите новичку запрограммировать контроллер ATtiny13

Сообщение:#16  Сообщение AntonChip » 17 мар 2015, 06:28

А не слишком много нулей в #define F_CPU, частота получается 1,2ГГц
Аватара пользователя
AntonChip
Администратор
 
Сообщения: 196
Зарегистрирован: 24 дек 2011, 21:11
Откуда: Киров

Re: Помогите новичку запрограммировать контроллер ATtiny13

Сообщение:#17  Сообщение Vasilii_II » 10 апр 2015, 21:23

Согласен нулей чего-то я перебрал, но все равно это не решило проблемы и вариант с 4-ым инициализированным битом раньше работал!
Аватара пользователя
Vasilii_II
Новичок
 
Сообщения: 4
Зарегистрирован: 12 мар 2015, 02:37


Вернуться в Микроконтроллеры AVR

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 14

Rambler's Top100