atmega16 в ардуино

Ардуинщики всех стран - объединяйтесь! В этом форуме, конечно.
vik vik
Родился
Сообщения: 15
Зарегистрирован: Вт ноя 08, 2022 14:24:57

atmega16 в ардуино

Сообщение vik vik »

здравствуйте, я переделал ардуино уно на атмега 16 написал угломер по энкодеру и в коде генерируется импульс после полного оборота, может есть у кого код преобразования импульса из переменной в количество оборотов? типа тахометра и вывод на дисплей 16х2


}
else // Вращение шпинделя влево
{
Spindle_Direction = Spindle_Direction_CCW;
Enc_Pos--;
if (Enc_Pos < 0) // полный оборот
{
Enc_Pos = Enc_Line - 1;
TahoSetPulse(); // при проходе 0 генерим сигнал Taho
if (Mode_On_flag == true) // проверка режима на ON/OFF, только! после прохода 0 разрешаем счет до к.деления
{
Step_On_flag = true;
}
}
}
Реклама
Аватара пользователя
MLX90640
Опытный кот
Сообщения: 848
Зарегистрирован: Ср авг 03, 2022 05:22:56

Re: atmega16 в ардуино

Сообщение MLX90640 »

А сосчитать число импульсов за 1 секунду уже ну никак?
Реклама
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15585
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: atmega16 в ардуино

Сообщение BOB51 »

Частотомер / периодомер...
:sleep:
Только вот мега 16 это уже не нанка в принципе - надо ставить платформу MightyCore и соответственно раскладку выводов делать.
:roll:
Аватара пользователя
Eddy_Em
Собутыльник Кота
Сообщения: 2516
Зарегистрирован: Пт июл 12, 2019 22:52:01
Контактная информация:

Re: atmega16 в ардуино

Сообщение Eddy_Em »

Странный вопрос: коль энкодер, так, значит квадратурный - так? Коль квадратурный, то подключен к таймеру - так? Коль к таймеру подключен, то что мешает связать с ним другой таймер по достижению нужного количества отсчетов и считать обороты чисто аппаратно? Ну, а ежели аврка так не умеет, можно в прерывании того самого таймера счетчик инкрементировать/декрементировать (только нужно иметь флаг, в какую сторону переполнение произошло).
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ
Реклама
Эиком - электронные компоненты и радиодетали
vik vik
Родился
Сообщения: 15
Зарегистрирован: Вт ноя 08, 2022 14:24:57

Re: atmega16 в ардуино

Сообщение vik vik »

я переделал на атмегу 8535 , скетч переписал на нее и привел код в рабочее состояние, дальше будет развитие на управление шаговым мотором в зависимости от числа оборотов, угол по энкодеру уже считает данный скетч, у энкодера три канала выхода ABZ , Z канал это один импульс на оборот , на меге 8535 есть INT2 я когда прописываю третье прерывание по внешнему признаку, только когда я подключаю к нему импульсы то все остальные прерывания не работают, attachInterrupt(2, fan_interrupt, FALLING); эта команда с атмегой 8535 не работает, может у кого есть код как включить все три прерывания?
Реклама
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15585
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: atmega16 в ардуино

Сообщение BOB51 »

Вообще-то D2 это INT0...

Syntax
attachInterrupt(digitalPinToInterrupt(pin), ISR, mode); (recommended)
attachInterrupt(interrupt, ISR, mode); (not recommended)
attachInterrupt(pin, ISR, mode) ; (not recommended Arduino Due, Zero only)

для "стандартного" референса INT2 недоступно, там надо таки много покопаться и в дебрях IDE и в описании платформы MightyCore (с учетом вариантов раскладки выводов - их там аж три имеется - стандартный, sanguino и bobuino)...
8)
Реклама
veso74
Поставщик валерьянки для Кота
Сообщения: 1916
Зарегистрирован: Сб май 05, 2012 20:24:52
Откуда: KN34PC, Болгария
Контактная информация:

Re: atmega16 в ардуино

Сообщение veso74 »

3 прерывания ATmega8535 работают. Попробовал с 3-мя действиями со светодиодами.

Код: Выделить всё

attachInterrupt(0, fan_interrupt_0, FALLING);
attachInterrupt(1, fan_interrupt_1, FALLING);
attachInterrupt(2, fan_interrupt_2, FALLING);
Вложения
3_int.jpg
(180.62 КБ) 82 скачивания
vik vik
Родился
Сообщения: 15
Зарегистрирован: Вт ноя 08, 2022 14:24:57

Re: atmega16 в ардуино

Сообщение vik vik »

а как в скетче прописывал? можешь скинуть ?

Добавлено after 58 seconds:
у меня при включении третьего прерывания все гаснет и виснет,


для "стандартного" референса INT2 недоступно, там надо таки много покопаться и в дебрях IDE и в описании платформы MightyCore (с учетом вариантов раскладки выводов - их там аж три имеется - стандартный, sanguino и bobuino)...


а как прописать чтобы третье прерывание заработало?
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15585
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: atmega16 в ардуино

Сообщение BOB51 »

На схеме со светиками раскладка кристалла...НО...
имена прерываний "по ардуиновски" будут отличаться
для bobuino
dip40 bobuino.pdf
(1.19 МБ) 109 скачиваний
int0 - D2
int1 - D3
int2 - D6
или для "стандарт"
dip40standard.pdf
(610.72 КБ) 98 скачиваний
int0 - D10
int1 - D11
int2 - D2
то же и для "sanguino" (там другие выводы меняются)
dip40 sanguino.pdf
(610.57 КБ) 85 скачиваний
int0 - D10
int1 - D11
int2 - D2
конкретика какая платформа выбрана (и соответственно загрузчик и фузы) надо выставить в соответствующих вкладках IDE - компилятор будет вести обработку имен выводов согласно выбранной платформы (строка pinout)
8)
Последние данные лучше посмотреть на сайте:
https://github.com/MCUdude
https://github.com/MCUdude/MightyCore
8)
veso74
Поставщик валерьянки для Кота
Сообщения: 1916
Зарегистрирован: Сб май 05, 2012 20:24:52
Откуда: KN34PC, Болгария
Контактная информация:

Re: atmega16 в ардуино

Сообщение veso74 »

MightyCore -> ATmega8535, Internal Clock 8 MHz
Соотв. прерывание поднимает соотв. флаг.
Файл Proteus (v8.13) внутри.
Спойлер

Код: Выделить всё

bool ch_0 = false;
bool st_0 = false;

bool ch_1 = false;
bool st_1 = false;

bool ch_2 = false;
bool st_2 = false;

void setup() {
  pinMode(PIN_A0, OUTPUT);
  pinMode(PIN_A1, OUTPUT);
  pinMode(PIN_A2, OUTPUT);

  attachInterrupt(0, fan_interrupt_0, FALLING);
  attachInterrupt(1, fan_interrupt_1, FALLING);
  attachInterrupt(2, fan_interrupt_2, FALLING);
}

void loop() {
  if (ch_0) {
    digitalWrite(PIN_A0, st_0);
    ch_0 = false;
  }

  if (ch_1) {
    digitalWrite(PIN_A1, st_1);
    ch_1 = false;
  }

  if (ch_2) {
    digitalWrite(PIN_A2, st_2);
    ch_2 = false;
  }
}

void fan_interrupt_0() {
  ch_0 = true;
  st_0 ^= 1;
}

void fan_interrupt_1() {
  ch_1 = true;
  st_1 ^= 1;
}

void fan_interrupt_2() {
  ch_2 = true;
  st_2 ^= 1;
}
Вложения
sketch_nov12b.zip
(32.75 КБ) 86 скачиваний
Последний раз редактировалось veso74 Сб ноя 12, 2022 13:47:26, всего редактировалось 1 раз.
vik vik
Родился
Сообщения: 15
Зарегистрирован: Вт ноя 08, 2022 14:24:57

Re: atmega16 в ардуино

Сообщение vik vik »

вторую ссылку пробовал пишет что эта библиотека атмегой не поддерживается
veso74
Поставщик валерьянки для Кота
Сообщения: 1916
Зарегистрирован: Сб май 05, 2012 20:24:52
Откуда: KN34PC, Болгария
Контактная информация:

Re: atmega16 в ардуино

Сообщение veso74 »

Arduino IDE какая версия установлено?

Устанавливается нормально. Win7 64 bit, Arduino IDE v1.8.19
Вложения
ard.jpg
(122.74 КБ) 77 скачиваний
vik vik
Родился
Сообщения: 15
Зарегистрирован: Вт ноя 08, 2022 14:24:57

Re: atmega16 в ардуино

Сообщение vik vik »

1.8.19 32 бит
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15585
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: atmega16 в ардуино

Сообщение BOB51 »

Это прожка под использование PCINT, а не набора INT0-INT2, что также требует некоторой "алхимии" с установкой библиотек.
Исходно у vik vik взяты за основу "стандартные" прерывания платформ для IDE.
8)
veso74
Поставщик валерьянки для Кота
Сообщения: 1916
Зарегистрирован: Сб май 05, 2012 20:24:52
Откуда: KN34PC, Болгария
Контактная информация:

Re: atmega16 в ардуино

Сообщение veso74 »

Просто скачайте архива библиотеки и распаковайте архив в MyDoc/Arduino/hardware
(убрать ...-master с имя папки)
Вложения
Untitled-2.jpg
(73.75 КБ) 126 скачиваний
vik vik
Родился
Сообщения: 15
Зарегистрирован: Вт ноя 08, 2022 14:24:57

Re: atmega16 в ардуино

Сообщение vik vik »

Ошибка компиляции для платы ATmega8535.
вот такую хрень выдал
veso74
Поставщик валерьянки для Кота
Сообщения: 1916
Зарегистрирован: Сб май 05, 2012 20:24:52
Откуда: KN34PC, Болгария
Контактная информация:

Re: atmega1Сфотографируйте настройки выбранного микро6 в ард

Сообщение veso74 »

Сделайте скрийншот настройки выбранного микроконтроллера в Arduino IDE.
vik vik
Родился
Сообщения: 15
Зарегистрирован: Вт ноя 08, 2022 14:24:57

Re: atmega16 в ардуино

Сообщение vik vik »

выбран стандарт , а под какой вариант эта библиотека?
veso74
Поставщик валерьянки для Кота
Сообщения: 1916
Зарегистрирован: Сб май 05, 2012 20:24:52
Откуда: KN34PC, Болгария
Контактная информация:

Re: atmega16 в ардуино

Сообщение veso74 »

Не понял вопрос о вариантах?
---
[uquote="BOB51",url="/forum/viewtopic.php?p=4318856#p4318856"]Это прожка под использование PCINT, а не набора INT0-INT2...[/uquote]
Нет. Посм. файл WInterrupts.c.
Спойлер

Код: Выделить всё

// ATmega8, ATmega8515, ATmega8535, ATmega16, ATmega32, ATmega162  
      #elif defined(__AVR_ATmega8__) || defined(__AVR_ATmega8515__) || defined(__AVR_ATmega8535__) \
      || defined(__AVR_ATmega16__) || defined(__AVR_ATmega32__) || defined(__AVR_ATmega162__)
        case 0:
          MCUCR = (MCUCR & ~((1 << ISC00) | (1 << ISC01))) | (mode << ISC00);
          GICR |= (1 << INT0);
          break;
        case 1:
          MCUCR = (MCUCR & ~((1 << ISC10) | (1 << ISC11))) | (mode << ISC10);
          GICR |= (1 << INT1);
          break;
        case 2:
          #if defined(INT2) 
          #if defined(EMCUCR) 
          EMCUCR = (EMCUCR & ~((1 << ISC2))) | ((mode & 0x01) << ISC2); // ATmega8515/162
          #else
          MCUCSR = (MCUCSR & ~((1 << ISC2))) | ((mode & 0x01) << ISC2); // ATmega8535/16/32
          #endif
          GICR |= (1 << INT2);          
          #endif
          break;
vik vik
Родился
Сообщения: 15
Зарегистрирован: Вт ноя 08, 2022 14:24:57

Re: atmega16 в ардуино

Сообщение vik vik »

вот варианты
Вложения
скрин.jpg
(158.89 КБ) 88 скачиваний
Ответить

Вернуться в «Arduino»