Ви не увійшли.
В порядку брєда - можна ще тупо стабілітрон на 3.3в кинути паралельно.
Найстабільніше таки діод і pull-up із сторони esp. Щоб не вносити змін в той модуль аналізатора і взагалі не паритись, open drain там чи ні.
А так то можна і щось типу https://blackchip.com.ua/mikroskhemi/mikroskhema-sn74lvc1t45dbvrg4/ запропонувати ![]()
Так то воно так, але саме в цьому чіпі воно не прикручене
Взагалі цікавий чіп. Дуже простий. Особливо якщо не руками смикати за регістри а використати https://github.com/IOsetting/FwLib_STC8 . І дешевий.
Та отож. Краще 1 раз поміряти ніж 2 дні вгадувати ![]()
Можливо воно якось працювало на паразитному живленні, доки не підключили ще 2 піни.
Тут мені приходить в голову інвертуючий підсилювач на ще одному операційнику. Але треба мутити 2 полярне живлення.
Хоча можна замутити штучну землю і заживитись від 12В..
А можна і не паритись, а відфільтрувати постійну складову конденсатором. А перехід між різними рівнями постійної складової придушити ФНЧ.
Ну я тут прикинув, щоб отримати з цієї схеми діапазон в 1000 попугаїв, треба взяти резистори з ряда 1k; 2,4k; 5,6k; 13k; 33k; 75k; 200k; 470k. Пріємлємо ![]()
Хочу зробити пищалку, яка уміє видавати сигнал різної гучності ![]()
https://en.wikipedia.org/wiki/Logarithmic_resistor_ladder - нагуглив таке, але воно виглядає зовсім по наркоманськи. І замість дешифратора аналоговий комутатор не дуже подобається.
Оце намагаюсь придумати схему, у якої на вході 3 біта, а на виході - 8 рівнів напруги, але розташованих в логарифмічному порядку. Поки що придумалось тільки дешифратор, 8 підібраних резисторів, операційник.. А можна без дешифратора? І номінали резисторів мені не подобаються
Із схемою теж непогано ![]()
Ще хороша ідея - синхронізувати все з частотою мережі. Піднімати прапорець по interrupt і крутити далі бізнес-логіку з кнопками і всим іншим. Тоді не треба запам"ятовувати мілісекунди для кнопок, можна рахувати 100-герцові тіки. І за analogread можна смикати рідше. Це ж регулятор обертів, так? Ви ж не крутите його 3000 обертів за хвилину?
https://www.rcgroups.com/forums/showthread.php?1473207-Diy-osd-(Arduino-and-opensource) - тут чувак досить сильно упоровся в цю тему з формуванням OSD на ардуїні.
Точно
Дякую.
Колись учили ассемблер x86, там все якось більш зрозуміло було ![]()
Цікаві досліди ![]()
sts 0x0000, r1 ; 0x<__SREG__+0x7fffc1> R_AVR_16 i14+0x1Записуємо 0 після i14? наче в С коді не було. Чи це вже щось наступне?
А можна трохи пояснень? ![]()
А то відкрив систему команд AVR і ні%%я не пойняв ![]()
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 - незрозуміло.
А можна якийсь приклад, зрозумілий колгоспникам? А то те що гуглиться - в стилі "ну.. можна робити всяке.. програму там написати".. Як на мене, програму під ардуїну написати ще простіше, приклади є прямо в IDE, і вона сама собі програматор.
Трохи не зрозуміло навіщо резистор між gnd і gnd.
https://nicuflorica.blogspot.com/2013/10/afisaj-de-nokia-3410-comandat-de-arduino.html - наче успішний експеримент.
Тільки не кажіть, що ви виграли тендер на реконструкцію ліфта!! (мотори, кінцевики..) бо я подивився відео і мені стало зле.
и хочется попробовать Ардуино.
Будь яка девборда. Абсолютно будь яка. Головне щоб вистачило ніг для 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 метрів кабелю і кілька кіловат мотор - мабуть є смисл. Якщо в робота-аніматроніка - мабуть немає.
І чому ця форма запису ніде не задокументована?!
Задокументована ж. Просто це компіляторо-залежне розширення, наприклад sdcc так не вміє.
Не знаю що таке SBC (Session Border Controller? Subband Coding? Sensotronic Brake Control?). Але щоб клацати релюшками, годиться абсолютно будь-який мікроконтроллер. Хоч і Intel 4004
Головне щоб вистачило ніг на GPIO. А якщо не вистачить - можна взяти розширювач GPIO, або ще один контроллер.
Що воно повинно робити крім клацання реле?
Прикольно
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 видно очима ![]()
Так, ARDUINO_AVR_UNO більш підходить під задачу.
Тоді можна використати ![]()
Взагалі щоб задати правильне питання, треба знати половину відповіді. А якщо знаєш половину відповіді - іншу половину, скоріше за все, теж знаєш ![]()
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. І зробити, щоб під неправильний камінь не зібралось. І буде вам щастя.
Бо не домовились що робити з пустими полями.
Взагалі без розуміння задумки автора - складно.
sizeof(data)/sizeof(data[0]) часто зустрічаю. Теж не люблю. А так.. Неочевидно трохи. Я здогадуюсь що в С масив і вказівник майже синоніми, і так теж можна. Але в такому записі легко допустити помилку, і компілятор її нормально пропустить. І фіг потім знайдете що не так ![]()
sizeof(data)/sizeof(*data)Не люблю. І щось мені здається що там помилка ![]()
#define DATA_SIZE 10
int data[DATA_SIZE];Просто і зрозуміло.
розділення на масив має буте швидше, ниж займатися розділом після отримання...
Число операцій приблизно однакове. Розпихувати операції з розбором окремих полів має смисл, якщо одна велика операція в ваші обмеження не влізе. Ну, зробите це окремою функцією, будете викликати після кожного розділювача. Головне - не робити суперфункцій з суперциклами і глобальними суперзмінними. Робіть функції прості і зрозумілі.