www.kn34pc.com

Форум на силистренските радиолюбители
Дата и час: 23 Окт 2019, 10:12

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




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

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

static uint8_t m;

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


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

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

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

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


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

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


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

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

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


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

Регистриран на: 09 Юли 2017, 13:53
Мнения: 57
Местоположение: Благоевград
Ясно. Благодаря.
Току що успях да достигна предела на ЛУТ и ецнах платчици за Si5351. 3 от 4 изглеждат годни.
Поръчах едно НАНО от OLX...


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

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

Регистриран на: 07 Дек 2006, 18:24
Мнения: 1010
Местоположение: Силистра
Не харесвам тип данни 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
Мнения: 1010
Местоположение: Силистра
Консумация на ток на Arduino Pro Mini
Прикачени файлове:
pro_mini_p.jpg
pro_mini_p.jpg [ 146.25 KiB | Прегледано 70 пъти ]

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


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

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


Кой е на линия

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


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

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