Arduino IDE в вопросах и ответах

Ардуинщики всех стран - объединяйтесь! В этом форуме, конечно.
Аватара пользователя
muravei_
Потрогал лапой паяльник
Сообщения: 336
Зарегистрирован: Чт май 20, 2021 13:33:05

Re: Arduino IDE в вопросах и ответах

Сообщение muravei_ »

[uquote="Олегыч1",url="/forum/viewtopic.php?p=4603292#p4603292"]Martian, на Алике от 16 килорублей плюс доставка 1,5 тыс. Нерационально на мой взгляд. За эти деньги можно купить новый современный смартфон и засунуть его в Кешу)) Да и Кеша тогда не особо нужен :))[/uquote]
https://aliexpress.ru/item/1005007088208938.html
https://aliexpress.ru/item/32668119796.html
Аватара пользователя
Олегыч1
Поставщик валерьянки для Кота
Сообщения: 1941
Зарегистрирован: Пт фев 27, 2015 20:57:08
Откуда: Курск

Re: Arduino IDE в вопросах и ответах

Сообщение Олегыч1 »

muravei_, похоже это то что нужно. :beer:
Martian
Друг Кота
Сообщения: 12867
Зарегистрирован: Сб дек 18, 2021 19:25:32
Контактная информация:

Re: Arduino IDE в вопросах и ответах

Сообщение Martian »

но это похоже на подделку...
Аватара пользователя
Viper_Snake
Электрический кот
Сообщения: 1046
Зарегистрирован: Вс мар 01, 2009 19:47:16
Откуда: Ростов-на-Дону

Re: Arduino IDE в вопросах и ответах

Сообщение Viper_Snake »

Товарисчи, а просветите меня плиз, насчёт такого вопроса: начинал изучение программирования с Ардуины, соответственно писал код в Arduino IDE. Прошло время, полностью отучился от библиотек, языка Wiring, и перешел на чистый C. Однако привычка писать в Arduino IDE так и осталась, хотя сейчас она используется как блокнот с встроенным компилятором. Вопрос такой, трудно ли будет с нее перелезть на ту же AVR studio. При написании программ использую исключительно стандартные функции C а так же прямое обращение к регистрам МК, минуя ардуиновские функции типа диджиталврайтов, ридов и делеев. Или забить и пользоваться тем, к чему привык? Камни использую голые, без загрузчиков и всякой мути.
Не важно чем все начнется. Важно чем кончится!
OKF
Это не хвост, это антенна
Сообщения: 1385
Зарегистрирован: Вт июн 07, 2011 08:03:18

Re: Arduino IDE в вопросах и ответах

Сообщение OKF »

Свой, тебе удобный ввод/вывод пишется отдельно, в хедере. И оформляется в виде define или online. Тогда исходный текст будет один и тот же, что в Ардуино, что в Студии. И просто переносится на другие платформы, тот же ПИК хотя бы, без какого либо изменения в исходнике.
Аватара пользователя
Viper_Snake
Электрический кот
Сообщения: 1046
Зарегистрирован: Вс мар 01, 2009 19:47:16
Откуда: Ростов-на-Дону

Re: Arduino IDE в вопросах и ответах

Сообщение Viper_Snake »

OKF писал(а):Свой, тебе удобный ввод/вывод пишется отдельно, в хедере. И оформляется в виде define или online. Тогда исходный текст будет один и тот же, что в Ардуино, что в Студии. И просто переносится на другие платформы, тот же ПИК хотя бы, без какого либо изменения в исходнике.
Ну это в принципе понятно. Тогда вопрос развернутый более: Вот сейчас я пишу программу для 84-й тини. Можно ли с таким кодом заехать в ту же Студио, естественно прописав необходимые моменты в хедере и убрав ардуиновские Setup и Loop? Понятно, что Setup в Avr Studio вообще не будет, это по сути просто то, что однократно выполнится при запуске контроллера, а дальше основной циклт ипа While(1){} Который в ардуино иде заменен на функцию Loop(). Пример кода ниже, здесь чарлиплексинг 12-ти светодиодов на Port A и опрос 1 кнопки на Port B. Все крутится на прерывании Таймера 1, цикл Loop() не используется, это пока только заготовка, хотя код в железе работает отлично и без нареканий:
Спойлер

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

byte blue_dat[6] = { 0x02, 0x02, 0x01, 0x04, 0x02, 0x01 };
byte green_dat[6] = { 0x01, 0x04, 0x04, 0x08, 0x08, 0x08 };
byte led_mask[12] = { 0x03, 0x06, 0x05, 0x0C, 0x0a, 0x09, 0x03, 0x06, 0x05, 0x0C, 0x0a, 0x09 };
byte ledbuff[12];
byte maskbuff[12];
volatile byte time_val = 1;
volatile byte led_clk = 0;
volatile byte buff_step = 0;
volatile byte keylock = 0;
volatile byte deb_tmr = 0;
void setup() {
  cli();
  TCCR1A = 0;
  TCCR1B = 0;
  TCNT1 = 0;
  OCR1A = 124;
  TCCR1B |= (1 << WGM12);
  TCCR1B |= (1 << CS11) | (1 << CS10);
  TIMSK1 |= (1 << OCIE1A);
  sei();
}
ISR(TIMER1_COMPA_vect) {
  PORTA &= 0xF0;
  DDRA &= 0xF0;
  PORTA |= ledbuff[buff_step];
  DDRA |= led_mask[buff_step];
  buff_step += 1;
  if (buff_step >= 12) {
    buff_step = 0;
    for (byte i = 0; i < time_val; i++) {
      ledbuff[i] = blue_dat[i];
    }
    for (byte i = time_val; i < 6; i++) {
      ledbuff[i] = 0x00;
    }
    for (byte i = 6; i < 6 + time_val; i++) {
      ledbuff[i] = 0x00;
    }
    for (byte i = time_val + 6; i < 12; i++) {
      ledbuff[i] = green_dat[i - 6];
    }
    if ((PINB & 0x04) == 0) {
      if (deb_tmr <= 9) {
        deb_tmr += 1;
      }
    }
    if ((PINB & 0x04) != 0) {
      deb_tmr = 0;
      keylock = 0;
    }
    if (deb_tmr >= 9 && keylock != 0x01) {
      keylock = 0x03;
    }
    if (keylock == 0x03) {
      time_val += 1;
      keylock = 0x01;
      if (time_val > 6) {
        time_val = 1;
      }
    }
  }
}
void loop() {
}
Не важно чем все начнется. Важно чем кончится!
OKF
Это не хвост, это антенна
Сообщения: 1385
Зарегистрирован: Вт июн 07, 2011 08:03:18

Re: Arduino IDE в вопросах и ответах

Сообщение OKF »

Можно. Для студии только нужно дописать инклюды, которые уже прописаны в Ардуино.

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

#include <avr/io.h>
#include <avr/interrupt.h>

void setup() {
  // тут твой сетап
}

void loop() {
  // тут твой луп
}


int main(void) {
  setup();
  while(true)
    loop();
}
И будет выполняться хоть в Студио, хоть в Ардуино IDE.
А можешь и в Ардуино писать с main-ом, без setup() и loop().
Аватара пользователя
Viper_Snake
Электрический кот
Сообщения: 1046
Зарегистрирован: Вс мар 01, 2009 19:47:16
Откуда: Ростов-на-Дону

Re: Arduino IDE в вопросах и ответах

Сообщение Viper_Snake »

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

Re: Arduino IDE в вопросах и ответах

Сообщение BOB51 »

Setup не убирает, но Loop вполне можно убрать.
Да и смысл переводить в АВР студио?
Тот же GCC...
(Это ежли не ту студио, что после проглатывания мелкощипом пошла, использовать).
Плюс необходимость полностью выполнить предварительную инициализацию аппаратных средств МК (что в ардуиноIDE скрыто - выполняется "по умолчанию", а при работе с авр студио надо самому ручками вписывать).
:roll:
Кстати...
никто не запрещает в рамках Ардуино IDE обходить "встроенные функции" референса, работая под "чистым Си" для конкретного семейства МК (в случае Viper_Snake это АВР).
Расширенный функционал для той же АВР студии смотрим тут:
https://alexgyver.ru/lessons/
:wink:
Последний раз редактировалось BOB51 Чт сен 19, 2024 17:09:15, всего редактировалось 2 раза.
OKF
Это не хвост, это антенна
Сообщения: 1385
Зарегистрирован: Вт июн 07, 2011 08:03:18

Re: Arduino IDE в вопросах и ответах

Сообщение OKF »

[uquote="Viper_Snake",url="/forum/viewtopic.php?p=4626794#p4626794"]абдурина не дает убрать из кода свои функции.[/uquote]
Если хотите помощи, то говорите не общими фразами, а давайте конкретный пример с распечаткой ошибок.
veso74
Поставщик валерьянки для Кота
Сообщения: 1903
Зарегистрирован: Сб май 05, 2012 20:24:52
Откуда: KN34PC, Болгария
Контактная информация:

Re: Arduino IDE в вопросах и ответах

Сообщение veso74 »

[uquote="Viper_Snake",url="/forum/viewtopic.php?p=4626777#p4626777"]... Можно ли ...[/uquote]
Можно.

Самое интересное, что Arduino IDE тоже "понимает" етот код, скомпилирует его, генерирует .hex и может записать его в МК, с управлением одной кнопкой. Только в EEPROM не записывает (легко) и не управляет фюзов МК.

Ниже как пример: blink на ATtiny13A с Timer0, который также компилируется и в Arduino IDE:

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

#include <avr/io.h>
#include <avr/interrupt.h>

ISR(TIM0_OVF_vect) {
  PORTB ^= _BV(LED_PIN);  // toggle LED pin
}

int main(void) {
  DDRB = 0b00000001;                // set LED pin as OUTPUT
  PORTB = 0b00000000;               // set all pins to LOW
  TCCR0B |= _BV(CS02) | _BV(CS00);  // set prescaler to 1024 (CLK = 1200000Hz / 1024 / 256 = 4Hz, 0.25s)
  TIMSK0 |= _BV(TOIE0);             // enable Timer Overflow interrupt
  sei();

  while (1);
}
Последний раз редактировалось veso74 Чт сен 19, 2024 18:36:37, всего редактировалось 1 раз.
Аватара пользователя
Viper_Snake
Электрический кот
Сообщения: 1046
Зарегистрирован: Вс мар 01, 2009 19:47:16
Откуда: Ростов-на-Дону

Re: Arduino IDE в вопросах и ответах

Сообщение Viper_Snake »

Если убрать из кода функцию Loop , компилятор начинает жаловаться, что она неопределена.
Не важно чем все начнется. Важно чем кончится!
veso74
Поставщик валерьянки для Кота
Сообщения: 1903
Зарегистрирован: Сб май 05, 2012 20:24:52
Откуда: KN34PC, Болгария
Контактная информация:

Re: Arduino IDE в вопросах и ответах

Сообщение veso74 »

[uquote="Viper_Snake",url="/forum/viewtopic.php?p=4626817#p4626817"]Если убрать из кода функцию Loop , компилятор начинает жаловаться, что она неопределена.[/uquote]

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

int main(void) {
  pinMode(LED_BUILTIN, OUTPUT);

  while (1) {
    digitalWrite(LED_BUILTIN, HIGH);   // turn the LED on (HIGH is the voltage level)
    delay(1000);                       // wait for a second
    digitalWrite(LED_BUILTIN, LOW);    // turn the LED off by making the voltage LOW
    delay(1000);                       // wait for a second
  }
}
Viper_Snake, замените необходимыми командами. Если не понятно чем, посмотрите в папках Arduino IDE.

Изображение
Последний раз редактировалось veso74 Чт сен 19, 2024 18:25:52, всего редактировалось 2 раза.
Аватара пользователя
Viper_Snake
Электрический кот
Сообщения: 1046
Зарегистрирован: Вс мар 01, 2009 19:47:16
Откуда: Ростов-на-Дону

Re: Arduino IDE в вопросах и ответах

Сообщение Viper_Snake »

veso74, Некоторое подобие управления фьюзами находится во вкладке "Инструменты" там можно для тини 84 например, BOD выставить, настроить тактирование. Устанавливаются эти фьюзы криво с помощью кнопки "записать загрузчик". Я предпочитаю свой код в hex компилировать, а потом с помощью Avrdudess его зашивать. У него удобный очень калькулятор фьюзов приаттачен, даже баран разберется без привлечения новых ворот.
Не важно чем все начнется. Важно чем кончится!
veso74
Поставщик валерьянки для Кота
Сообщения: 1903
Зарегистрирован: Сб май 05, 2012 20:24:52
Откуда: KN34PC, Болгария
Контактная информация:

Re: Arduino IDE в вопросах и ответах

Сообщение veso74 »

Да, некоторое. А было бы полезно все фюзы.
Ничего. Программатор всегда включен и вместе с его и AVRDUDESS (любимой, пользуюсь для AVR).
---
Да, это для AVR. А в Arduino IDE пишу и за STM8/32, CH32 и за Teensy и ESP ...
(Для второго и третего MK больше не использую Arduino IDE и, считаю, это "правильный путь" :) ).
Аватара пользователя
Viper_Snake
Электрический кот
Сообщения: 1046
Зарегистрирован: Вс мар 01, 2009 19:47:16
Откуда: Ростов-на-Дону

Re: Arduino IDE в вопросах и ответах

Сообщение Viper_Snake »

veso74, О, да, это работает!
Спойлер

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

#include <avr/io.h>
#include <avr/interrupt.h>
byte blue_dat[7] = { 0x02, 0x02, 0x01, 0x04, 0x02, 0x01 };
byte green_dat[6] = { 0x01, 0x04, 0x04, 0x08, 0x08, 0x08 };
byte led_mask[12] = { 0x03, 0x06, 0x05, 0x0C, 0x0a, 0x09, 0x03, 0x06, 0x05, 0x0C, 0x0a, 0x09 };
byte ledbuff[12];
byte maskbuff[12];
volatile byte time_val = 1;
volatile byte led_clk = 0;
volatile byte buff_step = 0;
volatile byte keylock = 0;
volatile byte deb_tmr = 0;
ISR(TIMER1_COMPA_vect) {
  PORTA &= 0xF0;
  DDRA &= 0xF0;
  PORTA |= ledbuff[buff_step];
  DDRA |= led_mask[buff_step];
  buff_step += 1;
  if (buff_step >= 12) {
    buff_step = 0;
    for (byte i = 0; i < time_val; i++) {
      ledbuff[i] = blue_dat[i];
    }
    for (byte i = time_val; i < 6; i++) {
      ledbuff[i] = 0x00;
    }
    for (byte i = 6; i < 6 + time_val; i++) {
      ledbuff[i] = 0x00;
    }
    for (byte i = time_val + 6; i < 12; i++) {
      ledbuff[i] = green_dat[i - 6];
    }
    if ((PINB & 0x04) == 0) {
      if (deb_tmr <= 100) {
        deb_tmr += 1;
      }
    }
    if (deb_tmr >= 5 && deb_tmr < 100 && ((PINB & 0x04) != 0)) {
      keylock = 0x01;
    }
    if (deb_tmr >= 100 && keylock == 0x00) {
      keylock = 0x02;
    }
    if (keylock == 0x01) {
      time_val += 1;
      if (time_val > 6) {
        time_val = 1;
      }
    }
    if (keylock == 0x02) {
      time_val -= 1;
      keylock = 0x03;
      if (time_val < 1) {
        time_val = 6;
      }
    }
    if ((PINB & 0x04) != 0) {
      deb_tmr = 0;
      keylock = 0;
    }
  }
}
int main(void) {
  cli();
  TCCR1A = 0;
  TCCR1B = 0;
  TCNT1 = 0;
  OCR1A = 124;
  TCCR1B |= (1 << WGM12);
  TCCR1B |= (1 << CS11) | (1 << CS10);
  TIMSK1 |= (1 << OCIE1A);
  sei();
  while (1)
    ;
}
А зачем нужен пустой цикл While в конце Main-a? Процессор не может просто ничего не делать после выполнения Main? И можно ли считать мой код полностью отвязанным от Wiring и ардуиновской платформы?

Добавлено after 10 minutes 5 seconds:
CH32 тоже взял пощупать, вместе с программаторами. Его рекомендуется вместе с MoonRiver Studio употреблять вроде. Пока нет особо времени на вникание, это для меня абсолютно новые ворота.
Не важно чем все начнется. Важно чем кончится!
Martian
Друг Кота
Сообщения: 12867
Зарегистрирован: Сб дек 18, 2021 19:25:32
Контактная информация:

Re: Arduino IDE в вопросах и ответах

Сообщение Martian »

[uquote="Viper_Snake",url="/forum/viewtopic.php?p=4626826#p4626826"]А зачем нужен пустой цикл While в конце Main-a?[/uquote] main - это же функция. Просто самая главная, первая. Иными словами, точка входа в пользовательскую программу. Допустим, мы завершили эту функцию. Тогда, получается, мы завершили пользовательскую программу.
[uquote="Viper_Snake",url="/forum/viewtopic.php?p=4626826#p4626826"]Процессор не может просто ничего не делать после выполнения Main?[/uquote] Может. Но реализуется это иначе, например, входом в один из ждущих-спящих режимов.
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15545
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: Arduino IDE в вопросах и ответах

Сообщение BOB51 »

Если не сделать явную остановку МК в конце главного цикла (или не "закольцевать" программу) МК будет продолжать выборку команд из неиспользуемой части ПЗУ.
По умолчанию это код 0xFF "чистая ячейка".
И так до переполнения счётчика РС.
А затем снова с адреса 0x0000.
8)
dim3740
Нашел транзистор. Понюхал.
Сообщения: 156
Зарегистрирован: Вс сен 28, 2014 07:54:21

Re: Arduino IDE в вопросах и ответах

Сообщение dim3740 »

Пару месяцев ничего не прошивал. Сегодня прошивается только один раз, для повтора требуется перезагрузка компа.
Тестю все на "блинке", на разных Нанках. Пробую и OLD Boot и настройку и просто 328.
Базовая IDE 1.8, но сегодня ставил и последние. Примерно тот же печальный эффект. Кабели тоже менял, хотя часто из их качества так и было.
Только у меня так? Что-то с обновлением Винды / драйверов видимо за эти пару месяцев.

П.С. Вопрос решился. 2 партии нанок и обе были с багами. Надо сразу тестить и китайцам выставлять счета, а не ждать 2 месяца(((
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15545
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: Arduino IDE в вопросах и ответах

Сообщение BOB51 »

:sleep:
Ответить

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