Ардуинщики всех стран - объединяйтесь! В этом форуме, конечно.
Ответить

atmega16 в ардуино

Вт ноя 08, 2022 14:43:35

здравствуйте, я переделал ардуино уно на атмега 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;
}
}
}

Re: atmega16 в ардуино

Вт ноя 08, 2022 17:20:31

А сосчитать число импульсов за 1 секунду уже ну никак?

Re: atmega16 в ардуино

Ср ноя 09, 2022 12:00:44

Частотомер / периодомер...
:sleep:
Только вот мега 16 это уже не нанка в принципе - надо ставить платформу MightyCore и соответственно раскладку выводов делать.
:roll:

Re: atmega16 в ардуино

Ср ноя 09, 2022 12:20:26

Странный вопрос: коль энкодер, так, значит квадратурный - так? Коль квадратурный, то подключен к таймеру - так? Коль к таймеру подключен, то что мешает связать с ним другой таймер по достижению нужного количества отсчетов и считать обороты чисто аппаратно? Ну, а ежели аврка так не умеет, можно в прерывании того самого таймера счетчик инкрементировать/декрементировать (только нужно иметь флаг, в какую сторону переполнение произошло).

Re: atmega16 в ардуино

Сб ноя 12, 2022 07:37:31

я переделал на атмегу 8535 , скетч переписал на нее и привел код в рабочее состояние, дальше будет развитие на управление шаговым мотором в зависимости от числа оборотов, угол по энкодеру уже считает данный скетч, у энкодера три канала выхода ABZ , Z канал это один импульс на оборот , на меге 8535 есть INT2 я когда прописываю третье прерывание по внешнему признаку, только когда я подключаю к нему импульсы то все остальные прерывания не работают, attachInterrupt(2, fan_interrupt, FALLING); эта команда с атмегой 8535 не работает, может у кого есть код как включить все три прерывания?

Re: atmega16 в ардуино

Сб ноя 12, 2022 09:41:41

Вообще-то 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)

Re: atmega16 в ардуино

Сб ноя 12, 2022 10:11:56

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 KiB) Скачиваний: 44

Re: atmega16 в ардуино

Сб ноя 12, 2022 12:57:19

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

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


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


а как прописать чтобы третье прерывание заработало?

Re: atmega16 в ардуино

Сб ноя 12, 2022 13:23:36

На схеме со светиками раскладка кристалла...НО...
имена прерываний "по ардуиновски" будут отличаться
для bobuino
dip40 bobuino.pdf
(1.19 MiB) Скачиваний: 54

int0 - D2
int1 - D3
int2 - D6
или для "стандарт"
dip40standard.pdf
(610.72 KiB) Скачиваний: 56

int0 - D10
int1 - D11
int2 - D2
то же и для "sanguino" (там другие выводы меняются)
dip40 sanguino.pdf
(610.57 KiB) Скачиваний: 51

int0 - D10
int1 - D11
int2 - D2
конкретика какая платформа выбрана (и соответственно загрузчик и фузы) надо выставить в соответствующих вкладках IDE - компилятор будет вести обработку имен выводов согласно выбранной платформы (строка pinout)
8)
Последние данные лучше посмотреть на сайте:
https://github.com/MCUdude
https://github.com/MCUdude/MightyCore
8)

Re: atmega16 в ардуино

Сб ноя 12, 2022 13:43:46

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 KiB) Скачиваний: 49
Последний раз редактировалось veso74 Сб ноя 12, 2022 13:47:26, всего редактировалось 1 раз.

Re: atmega16 в ардуино

Сб ноя 12, 2022 13:46:37

вторую ссылку пробовал пишет что эта библиотека атмегой не поддерживается

Re: atmega16 в ардуино

Сб ноя 12, 2022 13:48:39

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

Устанавливается нормально. Win7 64 bit, Arduino IDE v1.8.19
Вложения
ard.jpg
(122.74 KiB) Скачиваний: 39

Re: atmega16 в ардуино

Сб ноя 12, 2022 13:51:07

1.8.19 32 бит

Re: atmega16 в ардуино

Сб ноя 12, 2022 13:56:04

Это прожка под использование PCINT, а не набора INT0-INT2, что также требует некоторой "алхимии" с установкой библиотек.
Исходно у vik vik взяты за основу "стандартные" прерывания платформ для IDE.
8)

Re: atmega16 в ардуино

Сб ноя 12, 2022 13:56:56

Просто скачайте архива библиотеки и распаковайте архив в MyDoc/Arduino/hardware
(убрать ...-master с имя папки)
Вложения
Untitled-2.jpg
(73.75 KiB) Скачиваний: 66

Re: atmega16 в ардуино

Сб ноя 12, 2022 14:00:45

Ошибка компиляции для платы ATmega8535.
вот такую хрень выдал

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

Сб ноя 12, 2022 14:01:59

Сделайте скрийншот настройки выбранного микроконтроллера в Arduino IDE.

Re: atmega16 в ардуино

Сб ноя 12, 2022 14:04:47

выбран стандарт , а под какой вариант эта библиотека?

Re: atmega16 в ардуино

Сб ноя 12, 2022 14:06:06

Не понял вопрос о вариантах?
---
Это прожка под использование PCINT, а не набора INT0-INT2...

Нет. Посм. файл 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;

Re: atmega16 в ардуино

Сб ноя 12, 2022 14:09:23

вот варианты
Вложения
скрин.jpg
(158.89 KiB) Скачиваний: 48
Ответить