#1 Re: Програмування Arduino » Регістрова змінна » 2025-08-27 16:47:44

Точно wink Дякую.
Колись учили ассемблер x86, там все якось більш зрозуміло було wink

#2 Re: Програмування Arduino » Регістрова змінна » 2025-08-27 14:22:16

Цікаві досліди wink

        sts     0x0000, r1      ; 0x<__SREG__+0x7fffc1> R_AVR_16        i14+0x1

Записуємо 0 після i14? наче в С коді не було. Чи це вже щось наступне?

#3 Re: Програмування Arduino » Регістрова змінна » 2025-08-27 11:32:38

А можна трохи пояснень? wink
А то відкрив систему команд AVR і ні%%я не пойняв wink

lds     r24, 0x0000 ; завантажили в r24 те що лежало в RAM за адресою 0х0000? serialBuf? старший байт?
bst     r24, 2 ; поклали в Т біт 2, 2^2=0х4; ок
eor     r24, r24 ; обнулили r24; ок
bld     r24, 0 ; встановили молодший біт в значення, збережене в Т; 0 або 1; ок
sts     0x0000, r24 ; зберігаємо 0/1 в 0х0000? назад в serialBuf?
sts     0x0000, r1  ; а що в r1??

Трюк з bst-eor-bld зовсім неочевидний, я б не додумався. Компілятор оптимізує однозначно краще. А що робить lds-sts - незрозуміло.

#4 Re: Програмування Arduino » Arduino vs LCD Trium Mars трабл » 2025-08-13 08:31:29

А можна якийсь приклад, зрозумілий колгоспникам? А то те що гуглиться - в стилі "ну.. можна робити всяке.. програму там написати".. Як на мене, програму під ардуїну написати ще простіше, приклади є прямо в IDE, і вона сама собі програматор.

#5 Re: Програмування Arduino » Arduino vs LCD Trium Mars трабл » 2025-08-12 10:08:37

Трохи не зрозуміло навіщо резистор між gnd і gnd.
https://nicuflorica.blogspot.com/2013/10/afisaj-de-nokia-3410-comandat-de-arduino.html - наче успішний експеримент.

#6 Re: Апаратні питання » порекомендуйте железо для проекта » 2025-08-08 12:41:38

Тільки не кажіть, що ви виграли тендер на реконструкцію ліфта!! (мотори, кінцевики..) бо я подивився відео і мені стало зле.

и хочется попробовать Ардуино.

Будь яка девборда. Абсолютно будь яка. Головне щоб вистачило ніг для gpio - порахуйте. Я б рекомендував RPI2040 - заливка прошивки без програматора і можливість debug - це капєц зручно. Або blue pill - але до нього треба програматор st-link v2. А так, arduino - кросплатформний фреймворк, працює майже на будь якому процесорі.
https://arduino.ua/prod1328-plata-razrabotchika-stm32f103c8t6-arm-stm32-minimalnaya-konfigyraciya
https://arduino.ua/prod6050-plata-rozrobnika-rp2040-zero-dual-core-2mb

могли бы вы привести ссылку, плиз?

https://docs.arduino.cc/built-in-examples/basics/Blink/
мені не жалко, але як на мене без вміння гуглити зараз складно

концевики - обычные механические, с механическим триггером. есть смысл их через опторазвязку?

це ж ваші кінцевики, не мої. якщо в ліфт, там де 100 метрів кабелю і кілька кіловат мотор - мабуть є смисл. Якщо в робота-аніматроніка - мабуть немає.

#7 Re: Програмування Arduino » switch працює лише з повними рівняннями, чи можливо вказати діапазони? » 2025-08-08 12:14:04

І чому ця форма запису ніде не задокументована?!

Задокументована ж. Просто це компіляторо-залежне розширення, наприклад sdcc так не вміє.

#8 Re: Апаратні питання » порекомендуйте железо для проекта » 2025-08-07 18:48:44

Не знаю що таке SBC (Session Border Controller? Subband Coding? Sensotronic Brake Control?). Але щоб клацати релюшками, годиться абсолютно будь-який мікроконтроллер. Хоч і Intel 4004 wink Головне щоб вистачило ніг на GPIO. А якщо не вистачить - можна взяти розширювач GPIO, або ще один контроллер.
Що воно повинно робити крім клацання реле?

#9 Re: Програмування Arduino » switch працює лише з повними рівняннями, чи можливо вказати діапазони? » 2025-08-07 08:21:24

Прикольно wink avr-gcc так вміє.
І воно дійсно працює як діапазон

    rIndex = 0;
    switch (rIndex) {
        case 1 ... 31:
            rIndex = 100;
            break;
        default:
            rIndex = 101;
    };

цей код транслюється в таке

        lds r24,rIndex
        mov __tmp_reg__,r24
        lsl r0
        sbc r25,r25
        sbiw r24,1
        sbiw r24,31
        brsh .L2
        ldi r24,lo8(100)
        sts rIndex,r24
        rjmp .L4
.L2:
        ldi r24,lo8(101)
        sts rIndex,r24
.L4:

Константи 1 і 31 видно очима wink

#11 Re: Програмування Arduino » switch працює лише з повними рівняннями, чи можливо вказати діапазони? » 2025-08-06 12:12:43

Тоді можна використати wink
Взагалі щоб задати правильне питання, треба знати половину відповіді. А якщо знаєш половину відповіді - іншу половину, скоріше за все, теж знаєш wink

#12 Re: Програмування Arduino » Чи є інструменти для перевірки наявності вивода у плати за номером? » 2025-08-06 12:02:25

void digitalWrite(uint8_t pin, uint8_t val)
{
	uint8_t timer = digitalPinToTimer(pin);
	uint8_t bit = digitalPinToBitMask(pin);
	uint8_t port = digitalPinToPort(pin);
	volatile uint8_t *out;

	if (port == NOT_A_PIN) return;

Можна так
Або почитати як влаштовано pins_arduino.h

щоб не множити окремі скетчі до різних плат

#idef __AVR_ATmega8__

#else

#endif

Для кожної вашої каменюки - свій ifdef.  І зробити, щоб під неправильний камінь не зібралось. І буде вам щастя.

#13 Re: Програмування Arduino » Чому повідомлення не вдається розкласти в масив без затримки часу » 2025-08-05 17:18:39

Бо не домовились що робити з пустими полями.
Взагалі без розуміння задумки автора - складно.

#14 Re: Програмування Arduino » Чому повідомлення не вдається розкласти в масив без затримки часу » 2025-08-05 16:19:33

sizeof(data)/sizeof(data[0]) часто зустрічаю. Теж не люблю.  А так.. Неочевидно трохи. Я здогадуюсь що в С масив і вказівник майже синоніми, і так теж можна. Але в такому записі легко допустити помилку, і компілятор її нормально пропустить. І фіг потім знайдете що не так wink

#15 Re: Програмування Arduino » Чому повідомлення не вдається розкласти в масив без затримки часу » 2025-08-05 15:41:38

sizeof(data)/sizeof(*data)

Не люблю. І щось мені здається що там помилка wink

#define DATA_SIZE 10
int data[DATA_SIZE];

Просто і зрозуміло.

#16 Re: Програмування Arduino » Чому повідомлення не вдається розкласти в масив без затримки часу » 2025-08-05 15:26:15

розділення на масив має буте швидше, ниж займатися розділом після отримання...

Число операцій приблизно однакове. Розпихувати операції з розбором окремих полів має смисл, якщо одна велика операція в ваші обмеження не влізе. Ну, зробите це окремою функцією, будете викликати після кожного розділювача. Головне - не робити суперфункцій з суперциклами і глобальними суперзмінними. Робіть функції прості і зрозумілі.

#17 Re: Програмування Arduino » Чому повідомлення не вдається розкласти в масив без затримки часу » 2025-08-05 14:22:55

Ви намагаєтесь робити складно. Робіть просто.
1. просто приймайте символи в буфер. Коли приймете n - обробіть весь буфер зразу. Якщо буфер переповниться - ну, придумайте щось. Це помилка в даних.
2. обробка буфера. знаходите розділювачі полів, викусюєте частини з цифрами, перетворюєте в int. int кидаєте в масив.
Весь алгоритм.
Не треба придумувати байто@0bства на рівному місці. Не треба економити рядки коду. Не треба придумувати саморобні парсери. atoi нормально працює.

#18 Re: Програмування Arduino » Чому повідомлення не вдається розкласти в масив без затримки часу » 2025-08-05 11:28:09

В тому й річ що ніяк. На то воно й undefined. Стежте за попередженнями компілятора, хоча це 100% гарантії не дасть, на цей код він не дає попереджень. Є статичні аналізатори, хттпс://cppcheck.sourceforge.io/demo/ наприклад. Цей ловить.

Cppcheck 2.10

[test.cpp:10]: (error) Array 'rArr[10]' accessed at index 10, which is out of bounds.

Done!

#19 Re: Програмування Arduino » Чому повідомлення не вдається розкласти в масив без затримки часу » 2025-08-05 10:09:03

filat18 пише:
jokeR пише:

Ось наприклад я взяв такий код ....

ось тут я не розумію, як цей код пов'язон читанням повідоилень і як  він реагує на закінчення повідомлення?

Це відноситься до експлуатації undefined behavior. Вам просто повезло що байти удачно розмістились.

#20 Re: Програмування Arduino » Чому повідомлення не вдається розкласти в масив без затримки часу » 2025-08-05 09:42:26

Ну, а delay() у вас там навіщо?

void loop() {
  String textcom = ""; // переменная для сбора текста из сом-порта    
  while (Serial.available() > 

Пояснюю ще раз.
Як тільки ця умова перестане виконуватись - ви вивалитесь з функції loop(). Це відбудеться, коли ви читаєте з порту швидше ніж туди пишуть. При наступному запуску (це відбувається дуже швидко) String textcom  знову очиститься.
Не треба робити ініціалізацію таким чином. Робіть її в setup. І очищайте буфер коли вам потрібно.
А нестабільність тому, що вам треба підібрати точно таку затримку, щоб читати з точно такою швидкістю, з якою туди пишуть. Очевидно, це неможливо.

#21 Re: Програмування Arduino » Чому повідомлення не вдається розкласти в масив без затримки часу » 2025-08-05 09:34:27

Ну так ви зробили щось не те що вам пропонували.
Ось наприклад я взяв такий код

#include <stdio.h>
int rArr[10]; // = {0}; 
int rIndex; // = 0; 
int main()
{
  rArr[10] = {0};
  rArr[1] = 1;
  rIndex = 0;
    return rIndex+rArr[0];
}

і прогнав його через godbolt.org

__SP_H__ = 0x3e
__SP_L__ = 0x3d
__SREG__ = 0x3f
__tmp_reg__ = 0
__zero_reg__ = 1
rArr:
        .zero   20
rIndex:
        .zero   2
main:
        push r28
        push r29
        in r28,__SP_L__
        in r29,__SP_H__
.L__stack_usage = 2
        sts rArr+20+1,__zero_reg__ ; тут видно, що rArr[10] = {0};  попадає мимо масиву. насправді обнуляється rIndex
        sts rArr+20,__zero_reg__
        ldi r24,lo8(1)
        ldi r25,0
        sts rArr+2+1,r25
        sts rArr+2,r24
        sts rIndex+1,__zero_reg__ ; rIndex = 0; - обнуляється ще раз
        sts rIndex,__zero_reg__
        lds r18,rArr
        lds r19,rArr+1
        lds r24,rIndex ж 
        lds r25,rIndex+1
        add r24,r18
        adc r25,r19
        pop r29
        pop r28
        ret

Вам просто повезло.

#22 Re: Апаратні питання » Живлення від type-c » 2025-07-26 13:06:23

Упсь. Без резистора 3.48В. Походу підтяжка 5.1к на 3.3в.
Упсь №2. Якщо підключити тільки 1 резистор, а другу лінію залишити вільною - запускається.
1682380786_papik-pro-p-nichego-ne-ponyatno-no-ochen-interesno-sti-25.jpg

#23 Re: Апаратні питання » Живлення від type-c » 2025-07-26 11:33:09

Не розпарсив hmm

Сорян, радіоринок на Караваєвих дачах wink Думаю що постачальники ті ж самі.

А тепер саме цікаве. вношу в лінію CC свою ємність (лізу міряти напругу) - і зарядка запускається. І продовжує працювати далі. Неочікуваний спецефект.

#24 Апаратні питання » Живлення від type-c » 2025-07-25 10:36:11

jokeR
відповідей: 8

З"явилась необхідність отримати 5В від зарядки з виходом type-c. Судячи з манів, просто так вона їх не віддасть. Треба щоб із сторони пристрою на лініях CC1 і CC2 були pull down резистори 5.1к. В роз"ємі що я купив - pull-up на 56к, тобто це роз"єм для зарядки. Ок, читаю хттпс://electronics.stackexchange.com/questions/688168/usb-c-c2c-xn005-56-as-5v-power-supply, киваю, перепаюю резистори. Все одно не працює. На резисторах падає 1.6В, зарядка напругу не віддає sad
Що я пропустив?

#25 Re: Апаратні питання » WS2812B і кольори » 2025-07-14 14:55:53

Ви ж, сподіваюсь, платформу та фреймворк lgt8fx використовуєте для LGT8F, а не atmelavr та arduino-avr?

Обіжаєте wink

[env:LGT8F328P]
platform = lgt8f
board = LGT8F328P
framework = arduino

Можете зарепортити issue у FastLED.

Ну, так.
Походу, для LED стрічок це не найкращий контроллер wink

Підвал форуму