www.kn34pc.com
https://www.kn34pc.com/forums/

Arduino: кратки въпроси и отговори без обсъждане
https://www.kn34pc.com/forums/viewtopic.php?f=74&t=965
Страница 1 от 1

Автор:  LZ2WSG [ 02 Сеп 2018, 19:14 ]
Заглавие:  Arduino: кратки въпроси и отговори без обсъждане

Статична променлива, използвана във функция:

static uint8_t m;

Нуждае ли се от първоначала инициализация (static uint8_t m = 0;)?
Виждам, че се инициализира в 0 при първото изпълнение на функцията и в последващите изпълнения "помни" предишната си стойност,
но не съм сигурен доколко е правилно да се надявам, че ще е първоначално винаги равна на 0?

Автор:  LZ2WSG [ 13 Ное 2018, 11:17 ]
Заглавие:  Re: Arduino: кратки въпроси и отговори без обсъждане

четно-нечетно:
Цитат:
if (a % 2)
{ четно };
else
{ нечетно };

Цитат:
if (a & 0x01)
{ нечетно };
else
{ четно };

а може безусловно "само четно" (напр. за Si5351) -> последният бит да е винаги 0:
Цитат:
a &= 0xFFFFFFFE;

Автор:  LZ2WSG [ 13 Ное 2018, 11:21 ]
Заглавие:  Re: Arduino: кратки въпроси и отговори без обсъждане

LCD 16x1
С lcd.begin(16, 1); дисплеят показва първите 8 символа.

варианти: разбиване на части (два реда по 8 символа) и представяне като 16x2:
// http://forum.arduino.cc/index.php?topic ... msg3047069
Цитат:
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 13, 7, 6, 5, 4);
void setup() {
lcd.begin(16, 2);
lcd.print("First8ch");
lcd.setCursor(40, 0);
lcd.print("Last8ch.");
void loop() {
}

или като 8x2
Цитат:
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 13, 7, 6, 5, 4);
void setup() {
lcd.begin(8, 2);
lcd.print("12345678");
lcd.setCursor(0, 1);
lcd.print("12345678");
void loop() {
}

неудобство: трябва "да раделям" надписа на 2 по 8 символа :smt069

Автор:  User [ 08 Юли 2019, 11:09 ]
Заглавие:  Re: Arduino: кратки въпроси и отговори без обсъждане

ATMEGA328P-AU има ли вграден boot-loader и може ли да се програмира чрез Arduino IDE ?
T.e. идеята е може ли да се направи платка, на която вместо готов ардуино-нано модул,
се сложи ATMEGA328P-AU + USB-uart +.... другите нужни неща от модула и да се използва с готов firmware за Ардуино-ИДЕ,
без програматор и други фокуси ?

Харесал съм UR5FFR NWT, Si5351 Network Analyzer ( http://dspview.com/viewforum.php?f=25 ).
Искам ми се да го пусна на собствена платка, без модули, всички компоненти на основната платка.
ATMEGA328P-AU и Si5351 захранени с 3.3V, отпадат преобразувателите на ниво по I2C.
керамични филтри ФП1П-023 (измерих 5-6, не са лоши, има ги налични по 50 стотинки)
NE602, AD8307 захранени от добре филтрирано с дросели и FB и кондензатори 5V от USB...
Голям хубав USB-B конектор .... BNC-та на платката.

Автор:  LZ2WSG [ 08 Юли 2019, 14:41 ]
Заглавие:  Re: Arduino: кратки въпроси и отговори без обсъждане

Няма вграден bootloader. С помощта на AVR програматор, с Arduino IDE из менютата му "наливаш" bootloader в новия микроконтролер и си готов. Mоже да го програмираш i с друго Arduino, играещо роля на програматор. След това контролерът ще е достъпен през RX/TX - с USB/TTL конвертор към компютърното USB.

С Arduino, захранено на 3,3 волта не съм правил опити. Fclk max ATMEGA328 за 3,3V е ~ 13,3 MHz. Arduino Nano/Pro Mini на 3,3V са с кварцов резонатор 8 MHz.
Прикачени файлове:
outlaw_d.jpg
outlaw_d.jpg [ 80.07 KiB | Прегледано 525 пъти ]

UR5FFR Si5351 Network Analyzer работи добре. При мен - с керамични филтри 455 kHz / 15 kHz от cordless телефони на 46/49 MHz.
За измервателни цели предпочитам SMA конектори.

Автор:  User [ 08 Юли 2019, 15:17 ]
Заглавие:  Re: Arduino: кратки въпроси и отговори без обсъждане

Ясно. Благодаря.
Току що успях да достигна предела на ЛУТ и ецнах платчици за Si5351. 3 от 4 изглеждат годни.
Поръчах едно НАНО от OLX...

Автор:  LZ2WSG [ 10 Юли 2019, 21:15 ]
Заглавие:  Re: Arduino: кратки въпроси и отговори без обсъждане

брояч от 0 до 7, зануляване, пак от 0 до 7 ...
data = 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, ...

Цитат:
if ((data + 1) > 7)
data = 0;
else
data++;

по-късо:
Цитат:
data++;
data &= 0b00000111;


Прикачени файлове:
count_0_7.zip [468 Байта]
17 пъти

Автор:  LZ2WSG [ 23 Авг 2019, 15:26 ]
Заглавие:  Re: Arduino: кратки въпроси и отговори без обсъждане

Не харесвам тип данни float/double (в Arduino UNO/Nano/Pro Mini двата типа са еднакви).
Използвам ги ако няма какво друго да се направи (а то винаги има, само трябва време "да се сетиш" за начина :crazy)

От днес:
Управление на Si70, фрагмент от кода:

int32_t freq_center;
int32_t freq_delta_l;
int32_t freq_delta_h;
int32_t f;

интересната част:
--------------------
freq_center = freq;
freq_delta_l = freq_center - 3500 * 0.000001 * freq_center; // + 3500 ppm
freq_delta_h = freq_center + 3500 * 0.000001 * freq_center; // - 3500 ppm
--------------------
Заета памет: FLASH: 4288 байта / RAM: 264 байта

заменяме с
--------------------
freq_center = freq;
int32_t dF = (int32_t)((uint64_t)3500 * freq_center / 1000000);
freq_delta_l = freq_center - dF; // + 3500 ppm
freq_delta_h = freq_center + dF; // - 3500 ppm
--------------------
FLASH: 3578 байта / RAM: 264 байта

От "нищото" спестяваме 710 байта, ноооо ... и още:

Пример тестов:
Пресмятане на коефициенти за ресет при централна честота freq = 145775000 Hz

Код за потвърждение:
int32_t freq = 145775000;
int32_t freq_center;
int32_t freq_delta_l;
int32_t freq_delta_h;
//------------------------------------------------------------------------------------
void setup() {
  Serial.begin(57600);
 
  freq_center = freq;
  freq_delta_l = freq_center - 3500 * 0.000001 * freq_center;  // + 3500 ppm
  freq_delta_h = freq_center + 3500 * 0.000001 * freq_center;  // - 3500 ppm
 
  Serial.println(freq_delta_l);
  Serial.println(freq_delta_h);

  freq_delta_l = freq_center - (uint32_t)((uint64_t)3500 * freq_center / 1000000);  // + 3500 ppm
  freq_delta_h = freq_center + (uint32_t)((uint64_t)3500 * freq_center / 1000000);  // - 3500 ppm
 
  Serial.println(freq_delta_l);
  Serial.println(freq_delta_h);
}
//------------------------------------------------------------------------------------
void loop() {
}

Резултати:

В случая с float:
Fl = 145264800
Fh = 146285216

В случая с uint64_t:
Fl = 145264788
Fh = 146285212

В случай, изчислено с калкулатор:
Fl = 145775000 - 3500/1000000 * 145775000 = 145264787,5
Fh = 145775000 + 3500/1000000 * 145775000 = 146285212,5

В първия случай (с float) хем грешно смята (заради недост. разряди след запетаята), че и повече памет заема :biggrin .
Споменах ли, че не харесвам float ... :wink

Автор:  LZ2WSG [ 01 Окт 2019, 23:14 ]
Заглавие:  Re: Arduino: кратки въпроси и отговори без обсъждане

Консумация на ток на Arduino Pro Mini
Прикачени файлове:
pro_mini_p.jpg
pro_mini_p.jpg [ 146.25 KiB | Прегледано 171 пъти ]

http://www.home-automation-community.co ... l-battery/

Страница 1 от 1 Часовете са според зоната UTC + 2 часа [ DST ]
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/