www.kn34pc.com

Форум на силистренските радиолюбители
Дата и час: 05 Дек 2023, 11:24

Часовете са според зоната UTC + 2 часа [ DST ]




Напиши нова тема Отговори на тема  [ 15 мнения ] 
Автор Съобщение
МнениеПубликувано на: 02 Сеп 2018, 19:14 
Offline
Аватар

Регистриран на: 07 Дек 2006, 18:24
Мнения: 1447
Местоположение: Силистра
Статична променлива, използвана във функция:

static uint8_t m;

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


Върнете се в началото
 Профил  
 
МнениеПубликувано на: 13 Ное 2018, 11:17 
Offline
Аватар

Регистриран на: 07 Дек 2006, 18:24
Мнения: 1447
Местоположение: Силистра
четно-нечетно:
Цитат:
if (a % 2)
{ четно };
else
{ нечетно };

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

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


Върнете се в началото
 Профил  
 
МнениеПубликувано на: 13 Ное 2018, 11:21 
Offline
Аватар

Регистриран на: 07 Дек 2006, 18:24
Мнения: 1447
Местоположение: Силистра
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


Върнете се в началото
 Профил  
 
МнениеПубликувано на: 08 Юли 2019, 11:09 
Offline
Аватар

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


Върнете се в началото
 Профил  
 
МнениеПубликувано на: 08 Юли 2019, 14:41 
Offline
Аватар

Регистриран на: 07 Дек 2006, 18:24
Мнения: 1447
Местоположение: Силистра
Няма вграден 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 | Прегледано 19065 пъти ]

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


Върнете се в началото
 Профил  
 
МнениеПубликувано на: 10 Юли 2019, 21:15 
Offline
Аватар

Регистриран на: 07 Дек 2006, 18:24
Мнения: 1447
Местоположение: Силистра
брояч от 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 Байта]
626 пъти
Върнете се в началото
 Профил  
 
МнениеПубликувано на: 23 Авг 2019, 15:26 
Offline
Аватар

Регистриран на: 07 Дек 2006, 18:24
Мнения: 1447
Местоположение: Силистра
Не харесвам тип данни 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


Върнете се в началото
 Профил  
 
МнениеПубликувано на: 01 Окт 2019, 23:14 
Offline
Аватар

Регистриран на: 07 Дек 2006, 18:24
Мнения: 1447
Местоположение: Силистра
Консумация на ток на Arduino Pro Mini
Прикачени файлове:
pro_mini_p.jpg
pro_mini_p.jpg [ 146.25 KiB | Прегледано 18711 пъти ]

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


Върнете се в началото
 Профил  
 
МнениеПубликувано на: 13 Фев 2020, 13:00 
Offline
Аватар

Регистриран на: 07 Дек 2006, 18:24
Мнения: 1447
Местоположение: Силистра
Arduino симулатор:
https://www.sites.google.com/site/unoardusim

Без инсталация.


Прикачени файлове:
UnoArduSim.jpg
UnoArduSim.jpg [ 290.89 KiB | Прегледано 16701 пъти ]
Върнете се в началото
 Профил  
 
МнениеПубликувано на: 13 Апр 2020, 13:57 
Offline
Аватар

Регистриран на: 07 Дек 2006, 18:24
Мнения: 1447
Местоположение: Силистра
Печат на 64-битови променливи в серийния порт.
-на 2 части: старша, младша

Код за потвърждение:
void setup() {
  Serial.begin(57600);
  uint64_t num = UINT64_MAX;
 
  uint32_t aa = (uint32_t)(num >> 32);
  Serial.println(aa);
  aa = (uint32_t)(num);
  Serial.println(aa);
}

void loop() {
}


Върнете се в началото
 Профил  
 
МнениеПубликувано на: 07 Авг 2020, 17:57 
Offline
Аватар

Регистриран на: 07 Дек 2006, 18:24
Мнения: 1447
Местоположение: Силистра
Не използвайте тип unsigned int/int16_t/uint16t (и др. "нискоразрядни") типове данни при измерване на време :smile.
Само unsigned long, uint32_t да е.

Няколко дневно търсене ми струва предното съобщение (писане на код: по някоя минура, повече и др.) на странна, слуайно изглеждаща грешка в кода, с безкрайно изпълнение на кода стъпка по стъпка :smt069 :smt041.


Върнете се в началото
 Профил  
 
МнениеПубликувано на: 30 Ное 2022, 00:02 
Offline
Аватар

Регистриран на: 07 Дек 2006, 18:24
Мнения: 1447
Местоположение: Силистра
Не знаех, че серийния монитор можел на пише на БГ :) (кирилица):
Код за потвърждение:
Serial.begin(57600);
Serial.println("тест")

Цитат:
22:57:16.515 -> тест


Върнете се в началото
 Профил  
 
МнениеПубликувано на: 02 Дек 2022, 17:07 
Offline

Регистриран на: 05 Юни 2020, 16:51
Мнения: 27
LZ2WSG написа:
брояч от 0 до 7, зануляване, пак от 0 до 7 ...
data = 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, ...

++a;
a%=8;


Върнете се в началото
 Профил  
 
МнениеПубликувано на: 02 Дек 2022, 17:53 
Offline
Аватар

Регистриран на: 07 Дек 2006, 18:24
Мнения: 1447
Местоположение: Силистра
Хах, един компилатор за PIC хич не му пука как съм записал израза. :mail
Оптимизира все до едно и също:

Код за потвърждение:
....................   a++;
000E:  INCF   20,F
....................   a &= 0b00000111;
000F:  MOVLW  07
0010:  ANDWF  20,F

Код за потвърждение:
....................   ++a;
000E:  INCF   20,F
....................   a %= 8;
000F:  MOVLW  07
0010:  ANDWF  20,F


Върнете се в началото
 Профил  
 
МнениеПубликувано на: 25 Фев 2023, 14:13 
Offline
Аватар

Регистриран на: 07 Дек 2006, 18:24
Мнения: 1447
Местоположение: Силистра
скорост на TWI, I2C:
TWBR = ((F_CPU / TWI_FREQ) - 16) / 2;
TWI_FREQ = F_CPU / (16 + (2 * TWBR))

How to make Arduino do High Speed I2C

Код за потвърждение:
void i2cInit() {
    TWBR = 92;  // <--- тук: в пример 80 kHz            
    TWSR = 0;
    ТWDR = 0xFF;
    PRR = 0;
}


Върнете се в началото
 Профил  
 
Покажи мненията от миналия:  Сортирай по  
Напиши нова тема Отговори на тема  [ 15 мнения ] 

Часовете са според зоната UTC + 2 часа [ DST ]


Кой е на линия

Потребители, разглеждащи този форум: 0 регистрирани и 1 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Форумът се задвижва от phpBB® Forum Software © phpBB Group
Преведено от yarnaudov.com