PDA

Просмотр полной версии : ARDUINO



Страницы : 1 2 3 4 5 6 7 8 9 10 11 [12] 13 14 15 16 17 18 19 20 21 22 23

UD0DAB
11.11.2017, 17:41
Ну это вы сами придумали CRC считать
Странно что первый байт равен 845! Не может он таким быть!
Перезалил скетч, прописал в начале процедуры int crc=0; и стало похоже на правду



memwrite start

100
100
320
320
544
666
695
695
943
1093
1100
1100
1132
1293
1300
1300
1312
1498
1500
1500
1501
CRC 1501 5 21Byte
94 Ms



Да я даже на каком-то копирайт-ресурсе видел статейку про работу с еепром в ардуине и вот что написано!


А ведь ситуация, когда в EEPROM могут оказаться недостоверные данные вполне реальная.


При первом включении устройства данные в EEPROM недостоверны. Их просто никто еще не задавал.
В момент записи данных в EEPROM может отключиться питание платы и тогда часть данных запишется, а часть не успеет.
EEPROM имеет ограниченное число циклов записи, и это свойство также может привести к разрушению данных в этой памяти.

Поэтому крайне важно быть уверенными, что в EEPROM хранятся достоверные данные. В случае, если они ошибочны, программа должна принять определенные действия.

Хочу красиво!

Владимир_К
11.11.2017, 18:49
Да я даже на каком-то копирайт-ресурсе видел статейку про работу с еепром в ардуине и вот что написано!
Все что там написано, актуально для космического корабля, а не для синтезатора трансивера. Новый Ардуино, если в ЕЕПРОМ ничего не писали, содержит в ЕЕПРОМ нули.

UD0DAB
11.11.2017, 19:24
актуально для космического корабля
Все фунциклирует! Все сделал! Всем спасибо за помощь! Сохраняет все как надо! А главное, если в структуру добавлять/убирать переменные, все тоже работает! Гибкость же! Вдруг захочется плюшек добавить/убрать. Еще впереди менюшка настроек!

Владимир_К
11.11.2017, 19:48
Да будет работать. Но, к чему определять контрольную сумму? В ЕЕПРОМ пусть даже мусор записан будет. Если Вы знаете, что там мусор, тогда, до включения питания, нажимаете какую-нибудь кнопку. Включаете питание. При запуске программы обнаружив нажатую кнопку, программа запишет в ЕЕПРОМ "дефолтные" настройки. А дальше уже, при выключении, будет писать последние. И если там не совпадет контрольная сумма, трагедии не будет. В синтезаторе есть много других проблемных мест, с которыми придется бороться. И если на выходе синтезатора есть сигнал, на индикаторе меняются цифры и, вроде все хорошо, разочарование может наступить при первом включении трансивера.


Гибкость же!
Для гибкости есть флаговый автомат или диспетчер. Вот там получается нужная гибкость (хотя, пока сам толком не разобрался с этим делом).

UD0DAB
11.11.2017, 19:58
Трансивер уже пашет. Я под Готовое Железо пишу код :) Это синтезатор для Карат-2Н :ржач:

Кукин Николай Николаевич
11.11.2017, 20:40
UD0CAJ, прочитав Ваше сообщение о подсчете контрольной суммы, не поверил, что на это нужно порядка 100 мсек, ну не может 21 байт столько времени складываться, поэтому решил проверить в отладчике. Получилось, что чисто по Вашему тексту цикл подсчета crc занимает 188 тактов процика, что при 8 мгц занимает 23,5 мксек, а если crc, i, varsize объявить как byte, то получится 167 тактов, т.е. 20,8 мксек.
Ну и по сохранности данных еепром почитайте в даташите на процик про фьюзы BODEN,BODLEVEL. Выставив BODLEVEL в нужном диапазоне практически 100% защитите данные от перепадов напряжения.
Да, почитайте еще про union, тоже интересная вещь в Си, позволяющая к одной и той же области памяти обращаться как к разным типам данных.

UD0DAB
11.11.2017, 23:10
По времени записи - я уже увидел ошибку - я же в порт сливал каждый шаг при подсчете CRC. Поубирал отладочный вывод в сериал - полная процедура сохранения 23 байт информации с подсчетом и записью в епром занимает 10 миллисекунд. Ну так мне сообщает МК.

R2DHG
11.11.2017, 23:17
Еще впереди менюшка настроек!
Оставьте место для CAT или там RIT, а то с такими плюшками быстро кончится и придется перейти на 2560 :-P

UD0DAB
12.11.2017, 00:14
CAT в этом аппарате не будет - стоит ардуинка без USB а городить TTL-USB переходник я не буду - к ним личная неприязнь! USB как 15 лет есть а трансиверы до сих пор городят с кучей проводов и переходников!!! Ненавижу!!!:oops: .
RIT возможно, но никогда им не работал.. IF-SHIFT будет обязательно!:smile:

Кукин Николай Николаевич
12.11.2017, 00:55
UD0CAJ, А5 неверная оценка.
eeprom_write_byte (&EEMEM_crc,crc); //занимает 29 тактов


цикл
for (i=0;i < varsize;i++ )
{
eeprom_write_byte ((uint8_t *)(&EEMEM_varinfo+i),*(a dr + i));
}
требует 776 тактов, что в сумме при 8мгц занимает 0,1 мсек

vadim_d
12.11.2017, 01:19
Получается считает контрольную сумму 105 миллисекунд
Сдается мне, что это время вывода в отладочный канал, просто возьмите время до начала и в конце, а потом разность в канал

UD0DAB
12.11.2017, 02:18
776 тактов, что в сумме при 8мгц занимает 0,1 мсек
Почему-то пишут везде что для записи в еепром нужно 3,5 миллисекунды!

Я же за что купил за то и продаю, так мне код выдает. вот код:


void memwrite () {
long WriteTimer = millis();
int crc = 0;
byte i = 0;
byte * adr;
adr = (byte*)(& varinfo);
while (i < varsize )
{
crc += *(adr + i);
i++;
}
EEPROM.put(2, varinfo);
EEPROM.put(0, crc);
Serial.print( "Stored time ");
Serial.println((mill is()-WriteTimer));
}

Вот вывод:


Stored time 10


Сейчас там в переменных 23 байта.

Вместо millis() взял micros()
Получилось
Stored time 10452 микросекунды

Кукин Николай Николаевич
12.11.2017, 09:05
UD0CAJ, почитал даташит, получается то, что я считал в отладчике это чисто машинные циклы программы.
Согласно даташита тактирование записи байта в еепром осуществляется от внутреннего калиброванного RC генератора, и сам процесс требует 26368 тактов этого генератора, что при
8 мгц тактовой этого генератора занимает около3,3 мсек, так что Ваши замеры похожи на правду.

vadim_d
12.11.2017, 17:38
Почему-то пишут везде что для записи в еепром нужно 3,5 миллисекунды!
Обачно это самая долгая операция, подсчет суммы на ее фоне погоды не делает. Лет 25 назад решал схожую задачу, в клоне игрового автомата American Poker II отказались от батарейного ОЗУ и писали в EEPROM 93C46 или какой-то подобный, прерывание на начало сброса туда данных получали с компаратора питания до 5-вольтового стабилизатора, емкости фильтра выбирались по необходимому времени записи

RW3ACQ
12.11.2017, 18:56
US2IT, приветствую! Спасибо большое за скетч! У меня дисплей 20х4, не могли бы Вы "дорисовать" градусник для отражённой волны, пожалуйста.
Или, может быть, я неверно трактую интерфейс. Большой градусник - это мощность прямая, маленький градусник - КСВ или ?
UPD: разобрался, полистав тему назад. В общем мне бы хотелось третий градусник, чтоб место не пропадало))
Успехов Вам в проекте, с удовольствием протестирую, так как мой тандем матч наконец доведен до ума и работает, как полагается.
Благодарю заранее!

D0ITC
12.11.2017, 20:07
RW3ACQ, проверяйте.

RW3ACQ
12.11.2017, 20:20
Александр, приветствую, спасибо! Предыдущий скетч пошел без проблем, я только изменил строки инициализации для своего дисплея с моими библиотеками.
Здесь же пишет японской катаканой, и всё выглядит примерно вот так:
274818

D0ITC
12.11.2017, 21:54
RW3ACQ, возьмите из сообщения 1068 библиотеку, попробуйте с ней. Ну если не получится значит ваш дисплей не поддерживает кириллицу, тогда переделаю.

RW3ACQ
13.11.2017, 01:27
Александр, благодарю! Завтра вечером постараюсь все проверить.

D0ITC
13.11.2017, 13:47
Сергей, пробуй сразу эти варианты. Здесь ещё кое-что доделал. И в приветствии твой позывной.

RW3ACQ
13.11.2017, 21:29
Александр, приветствую! Вот результаты тестирования с фотографиями:

1) SWR_PWR_100W_1000W_1 602_Auto_V2
274867

2) SWR_PWR_100W_1000W_2 004_Auto_War
274868

3) SWR_PWR_100W_1000W_2 004_Auto_War_V1
274869

SWR_PWR_100W_1000W_2 004_Auto_RUS - так и не пошёл у меня, сколько я не подкладывал ему разных библиотек, и ту, которую вы указали и другие типа "LiquidCrystalRus_I2C" . У меня I2C дисплей, но я переписываю строки инициализации и Ваши скетчи у меня отображаются.
Выглядит инициализация вот так:
******************** ******************** ****
#include <Wire.h>
#include <LCD.h>
#include <LiquidCrystal_I2C.h>

#define I2C_ADDR 0x3F // <<- Add your address here.
#define Rs_pin 0
#define Rw_pin 1
#define En_pin 2
#define BACKLIGHT_PIN 3
#define D4_pin 4
#define D5_pin 5
#define D6_pin 6
#define D7_pin 7
LiquidCrystal_I2C lcd(I2C_ADDR, En_pin, Rw_pin, Rs_pin, D4_pin, D5_pin, D6_pin, D7_pin);

ну и в начале setup пишу:
void setup() {
lcd.setBacklightPin( BACKLIGHT_PIN, POSITIVE);
lcd.begin(20, 4);
******************** ******************** **
Спасибо Вам большое за внимание к моему дисплею! Покамест не отвлекайтесь, пишите код для Вашего экрана и сетапа, с моим позже попробуем.
Результаты измерения прямой мощности почти соответствуют моим, это очень удобно. Я так полагаю, у нас получилась одинаковая амплитуда напряжения на диодах? Или какова еще причина такого совпадения? Удачи Вам в продолжении проекта!

D0ITC
13.11.2017, 22:12
Я заметил, что градусники не очень дружат с I2C, выглядят не очень. Я немного доработал программу, сейчас выглядит так

exUA4ABS
13.11.2017, 22:57
Я заметил, что градусники не очень дружат с I2C, выглядят не очень. Я немного доработал программу, сейчас выглядит так

Ткните носом в схему, чтобы долго не искать.:-P

fedorenko28
14.11.2017, 03:28
Александр, приветствую! Вот результаты тестирования с фотографиями:


******************** ******************** ****
#include <Wire.h>
#include <LCD.h>
#include <LiquidCrystal_I2C.h>

#define I2C_ADDR 0x3F // <<- Add your address here.
#define Rs_pin 0
#define Rw_pin 1
#define En_pin 2
#define BACKLIGHT_PIN 3
#define D4_pin 4
#define D5_pin 5
#define D6_pin 6
#define D7_pin 7
LiquidCrystal_I2C lcd(I2C_ADDR, En_pin, Rw_pin, Rs_pin, D4_pin, D5_pin, D6_pin, D7_pin);

ну и в начале setup пишу:
void setup() {
lcd.setBacklightPin( BACKLIGHT_PIN, POSITIVE);
lcd.begin(20, 4);

Хм у меня все проще с i2c
#include <Wire.h> // подключаем библиотеку i2c
#include <LiquidCrystal_I2C.h> //подключаем библиотеку дисплея с i2c
LiquidCrystal_I2C lcd(0x27,16,2); // устанавливаем размерность дисплея и адрес

void setup()
{
lcd.init(); // инициализация дисплея
lcd.backlight(); // включение подстветки диплея
lcd.clear(); // очиска дисплея

Библиотека с githab

D0ITC
14.11.2017, 08:38
exUA4ABS, вот схема.

Добавлено через 34 минут(ы):

Последний скетч для 1602, вся распиновка для этой схемы, нужно только раскоментировать нужную строку инициализации LCD, там есть и для ардуино. Может кому пригодится.

RD3Q
14.11.2017, 12:52
Решил собрать мультитестер на ардуине по приведенной схеме с дисплеем 2,8 TFT ILI9341 SPI. Прошил, всю схему не собирал - только дисплей подключил, нет ни чего на экране, подсветка работает. Ардуино Нано. Документацию прилагаю, может кто-то чего посоветует?

RA9CMG
14.11.2017, 21:01
Уважаемые программисты.
Есть ли у Вас готовые схемы и скетчи для синтезатора на Arduino Nano+LCD 1602+SI5351 ?
Хочется для полевого трансивера минимальный синтезатор желательно с САТ.

Slav9n
14.11.2017, 21:16
http://www.youtube.com/watch?v=K5CXwd8p7TY
http://ur5yfv.com.ua/index.php/stati/raznoe/151-iz-modulya-na-si5351a-sintezator-generator-pomoshch-instruktsii-chast-2.html

R2DHG
14.11.2017, 21:27
Вот в этой теме были http://www.cqham.ru/forum/showthread.php?29944-%D1%E8%ED%F2%E5%E7%E 0%F2%EE%F0-%E7%E0-%EF%EE%EB%F7%E0%F1%E 0&highlight=%F1%E8%ED% F2%E5%E7%E0%F2%EE%F0 +%EF%EE%EB%F7%E0%F1% E0 в районе постов #360-370 например, если в целом пойдет - есть версия посвежее с CAT и "перекидыванием" частот между выходами при TX/RX для реверсивных аппаратов.

ru4ng
14.11.2017, 21:40
exUA4ABS, вот схема.

Добавлено через 34 минут(ы):

Последний скетч для 1602, вся распиновка для этой схемы, нужно только раскоментировать нужную строку инициализации LCD, там есть и для ардуино. Может кому пригодится.
Спасибо Сергей! Замечательный скетч. Смакетировал схему, скетч скомпилировался на ура с первого раза, залил в нано , замечательно работает. Попробовал разные дисплеи, черный на желтом, зеленый на черном, белый на синем, больше понравился зеленый. Можно приступать к изготовлению печатки, ну самого прибора в целом.

UB0WBL
14.11.2017, 21:55
exUA4ABS, вот схема.

Добавлено через 34 минут(ы):

Последний скетч для 1602, вся распиновка для этой схемы, нужно только раскоментировать нужную строку инициализации LCD, там есть и для ардуино. Может кому пригодится.

А где посмотреть описание ? Какие диоды, транзисторы, распиновка для Aрдуины ? Калибровка как выполняется ? Кнопка "MODE" что делает ?

D0ITC
14.11.2017, 23:20
UB0WBL, да какое же здесь описание, всё как в любом КСВ-метре. Эта схема взята с форума, автор Сергей 4Z5KY. Какой применить датчик КСВ это уже другой разговор, всё зависит от того где думаете применять прибор(КВ, УКВ). Распиновка для этой схемы, у меня применена атмега 8 в корпусе SMD. В скетче есть две строки инициализации дисплея, одна если применять с ардуино, вторая для этой схемы. Не нужное закоментировать. Кнопка ""MODE" здесь не используется, она нужна была для переключения пределов мощности, а здесь автоматический переход. Калибруется по общепринятой методике.

RA4HME
15.11.2017, 07:44
Здравствуйте! А может кто подсказать как писать код для панорамы, скажем для оценки полосы входного/выходного сигнала.Может есть решения дайте ссылку. За 4 дня в сети не нашёл ничего. Решения конечно есть, но пресловутый бизнес проект никто не выложит, хотя и вряд ли кто на этом заработает.

R2DHG
15.11.2017, 09:12
Т.е. SDR приемник ? самое близкое по теме вариант на teensy 3 (гуглится по "sdr teensy"). Обычная ардуина на atmega328 для обработки звука не очень.

Владимир_К
15.11.2017, 12:48
Arduino nano v3. Китайский клон с преобразователем на CH340. Есть такая проблема, не всегда запускается программа. Запустить можно нажав кнопку "сброс". Иногда запускается если включить и выключить питание. Проверил осциллографом, не генерит кварц. В сети нашел описание проблемы и ее решение. Там ребята заменили библиотеку вывода на дисплей, после чего девайс стал работать нормально:-(. Причем тут библиотека? А может и правда, есть какие-то неизвестные процессы.. При питании от USB также запускается нормально. В самодельном Ардуино, эта же программа работает и запускается без проблем. Что-то мне кажется, в девайсе я налепил конденсаторов по питанию много, может кварц не активный и при медленном нарастании питающего напряжения не запускается?

R2DHG
15.11.2017, 13:10
Проверил осциллографом, не генерит кварц. В сети нашел описание проблемы и ее решение. Там ребята заменили библиотеку вывода на дисплей, после чего девайс стал работать нормально:-(. Причем тут библиотека?
Очень странно :shock:

UD0DAB
15.11.2017, 14:52
Arduino nano v3. Китайский клон с преобразователем на CH340.
Было такое, кварц тупо не припаялся. Пропаял платку и пошло. Это была моя первая ардуина. Я тогда чуть не разочаровался в них :)

olbi
15.11.2017, 19:18
удалил .ошибочная запись

Владимир_К
15.11.2017, 20:11
Было такое, кварц тупо не припаялся.
Просмотрел, вроде нормально припаян. Параллельно кварцу (немного не правильно выразился, не параллельно кварцу, а параллельно конденсаторам) подпаял подстроечники (4 пф-20 пф), реакции практически никакой. Подключил программатор к Ардуино чтобы прочитать Fuse. На всякий случай, может не те установлены. Имею такое Hight - DA, Low-FF, Ext - 05. Программатор USBtinyISP, программа Sinaprog.
Что интересно, с подключенным программатором плата запускается без проблем. Раз 20 включал, выключал, все нормально. Питание 5 вольт от программатора не подается. Только сигналы и земля. Но, если отключить кабель USB от программатора, оставив обесточенный программатор к Ардуино, плата не запускается.

Vital R2GKH
15.11.2017, 20:25
Владимир, проверьте "подтяжку" ножки RST микроконтроллера на платке к +5В.

Коллега намучался, пока не нашли, что эта лапка тупо висела в воздухе. Как ни странно, ATMega8 это прощает, а вот 328 нет.

rx3apf
15.11.2017, 21:37
Линия "Reset" у всех AVR (в том числе M328) имеет встроенный pull-up с номиналом 30...60 kOhm. Если паршивый флюс с высокой остаточной электропроводностью - проблемы могут быть. Импеданс входа получается достаточно высоким, чтобы ловить мощные внешние помехи, но в общем случае и без дополнительной подтяжки ОБЯЗАНО работать, хоть бы и с болтающейся в воздухе ногой.

Владимир_К
15.11.2017, 23:47
Коллега намучался, пока не нашли, что эта лапка тупо висела в воздухе.
Браво Vital R2GKH! Прицепил 10 ком с питания на RESET и все стало как надо. Хотя, замер сопротивления между плюсом питания и ногой RESET, показывает 4,7 кома без этого резистора:-(. То есть, что-то там стоит, хотя тут визуально проследить наличие резистора, равно как и дорожки, трудно. И что обидно, такая проблема у меня уже была давно с 168 мегой. Там просто забыл впаять резистор, да и не придавал ему значения, уповая на наличие внутренней подтяжки. Честно говоря и сейчас не догоняю, какая связь между сбросом и кварцем? Если бы он генерил, а программа не работала, или начинала работать неизвестно с какого места, тогда бы вопросов не было... Кстати есть еще один не понятный факт.. Ext fuse в этом Ардуино 05, то есть 00000101. А последняя единица - указывает, что программа после RESET должна начинать работать с нулевого адреса. А как же тогда Bootloader работает? Вот например:
http://robocraft.ru/blog/arduino/51.html
Обратите внимание на дополнительный фьюзбайт по ссылке для 168-й. Он должен быть нулем, а здесь 1. В моей самоделке (Ардуино) как раз 0 и записан. Но работает и там и здесь... Чудны дела твои...
Вот выписка из даташита:

BOOTRST Reset Address
1 Reset Vector = Application Reset (address 0x0000)
0 Reset Vector = Boot Loader Reset (see Table 26-7 on page 289)
Кстати, проверил сейчас внимательнее, есть резистор 10 ком (4,7 к это с другой полярностью омметра было). Все дорожки целы, от плюса питания к резистору, к кнопке, от кнопки на землю на ногу контроллера. Все есть. Но 10 ком не хватает. Китайское качество видимо...

Добавлено через 45 минут(ы):

Выпаял резистор 10 ком, поставил 4,7 кома, все работает четко, хотя, скорее всего, это неправильно. Причина наверняка не здесь, разве что, действительно "китайское" качество и другого лечения этого пациента нет.

rx3apf
15.11.2017, 23:59
Кстати есть еще один не понятный факт.. Ext fuse в этом Ардуино 05, то есть 00000101. А последняя единица - указывает, что программа после RESET должна начинать работать с нулевого адреса. А как же тогда Bootloader работает?
"Ext fuse" - это настройка супервизора питания. BOOTRST, BOOTSZxx - это старший байт "основных" фьюзов.

Что же касается ноги сброса - интересно бы глянуть, сколько же там без внешнего резистора ? Напряжение, конечно (измерять сопротивление смысла нет).

Владимир_К
16.11.2017, 00:13
"Ext fuse" - это настройка супервизора питания. BOOTRST, BOOTSZxx - это старший байт "основных" фьюзов.
Я же выше выкопировку из даташита привел... А BOOTSZ- размер области памяти для бутлоадера. То Вы спутали с BODLEVEL.


Что же касается ноги сброса - интересно бы глянуть
Замерял я это. На выходе стабилизатора питания 5,04 вольта, на ноге "RESET" - 4,96. Измерял китайским тестером. И, сдается мне, падение это из-за входного сопротивления тестера. Я замечал это несколько раз, правда так и не измерил, какое же у него входное.

rx3apf
16.11.2017, 00:29
В даташите совершенно определенно указано, что в "ext fuse" задействованы только три младших бита, BODLEVELn. А BOOTRST, BOOTSZn - это в "fuse high byte", это другой байт.

Уровень "1" на ноге сброса корректный. Должно бы работать без проблем. Хотя плата может быть так разведена, что есть наводка от соседней ноги (проверяется включением конденсатора 10...100 nF между "землей" и сбросом).

Владимир_К
16.11.2017, 01:10
В даташите совершенно определенно указано, что в "ext fuse" задействованы только три младших бита, BODLEVELn. А BOOTRST, BOOTSZn - это в "fuse high byte", это другой байт.
Я ввел Вас в заблуждение, так как смотрел даташит Atmega168. И там как раз в таблице Extended Fuse Byte for ATmega88PA/168PA указаны BOOTSZn и BOOTRST. И честно говоря, не обратил внимание, что таблицы то разные. И по ссылке:
http://robocraft.ru/blog/arduino/51.html
также указана 168. И в моей самодельной Ардуине стоит 328, а прошита так как указано в ссылке. И я до сегодняшнего дня, считал, что 168 и 328 это одно и тоже, за исключением памяти...

rx3apf
16.11.2017, 12:55
Забавно - я-то не сообразил глянуть DS на 48/88/168, и тоже считал, что это одно и то же ;)

Да, к вопросу "незапуска" платы с подключенным и обесточенным программатором - ровно так и должно быть, нога RST подключена к программатору, и по ней платы пытается запитать программатор через защитный диод на портовой ноге контроллера в программаторе. Начиная с какого-то номинала дополнительной "подтяжки" это получается, но так делать не следует...

Владимир_К
16.11.2017, 13:10
Забавно - я-то не сообразил глянуть DS на 48/88/168, и тоже считал, что это одно и то же
Хорошо что RSTDISBL местами не поменяли, а то бы точно залетел:smile:. Вчера, кстати, глядя на даташит 168 обнаружил, что фьюзы BOOTSZn выставлены "неправильно". "Исправил", плата перестала запускаться с бутлоадера:smile:. Вернул назад..

Integral
16.11.2017, 15:17
К посту #1126 (http://www.cqham.ru/forum/showthread.php?12592-ARDUINO&p=1460866&viewfull=1#post14608 66), записал видео работы КСВ-метра и измерителя мощности с автомасштабированием . Для SSB надо на датчике прямой и обратной волны по электролиту поставить, что бы показания не "скакали".


https://www.youtube.com/watch?v=sx65Bc60buQ&feature=youtu.be

RA4HME
17.11.2017, 08:50
275061Здравствуйте! Я с вопросом по дисплею 3,2 дюйма? КОНТРОЛЛЕР HX8357C. Кто может подсказать-дисплей +мега 2560 заняты все пины (фото)или есть свободные.Если да, то можно обозначить какие пины не использует дисплей.

RW3ACQ
22.11.2017, 23:01
Приветствую всех!
Друзья, а подскажите, как на Arduino организовать показания средней мощности в SSB (average), чтобы выглядело как примерно вот здесь:


https://www.youtube.com/watch?v=xRvJqDo-4H0&amp;feature=youtu.be

UA0YAS
23.11.2017, 02:05
чуть увеличить емкость конденсатора на измерительном входе падающей волны и резистор для его разряда

D0ITC
23.11.2017, 08:17
Нужна помощь. При подключении Mega2560 с индикатором HX8357 с библиотекой UTFT.h получается зеркальное изображение по горизонтали, какой командой отзеркалить не нашел, может кто подскажет.

exUA4ABS
23.11.2017, 10:07
То RW3ACQ Вот так сделано.

275530

R2DNU
23.11.2017, 11:01
US2IT, я решил просто.
В библиотеке для ILI8341 (я ее использовал) заменил инициализацию Memory access control (адрес команады 36h)
c LCD_Write_COM(0x36); // Memory Access Control
LCD_Write_DATA(0x48) ;
на
LCD_Write_COM(0x36); // Memory Access Control
LCD_Write_DATA(0x88) ;

именно старший бит отвечает за режим чтения экранной памяти.

US2IT, я решил просто.
В библиотеке для ILI8341 (я ее использовал) заменил инициализацию Memory access control (адрес команады 36h)
c LCD_Write_COM(0x36); // Memory Access Control
LCD_Write_DATA(0x48) ;
на
LCD_Write_COM(0x36); // Memory Access Control
LCD_Write_DATA(0x88) ;

именно старший бит отвечает за режим чтения экранной памяти.

уточняю, в библиотеке ILI9341

R2DNU,

XENOMORPH
23.11.2017, 11:07
какой командой отзеркалить
Необходимо в файле initlcd.h, который находится в UTFT/tft_drivers/ili9481 отредактировать данные строчки, или скачать исправленный файл 275535

//LCD_Write_COM(0x21); // INVERT COLOR раскомментировать если требуется
LCD_Write_COM(0x36); // MIRROR закомментировать если требуется
LCD_Write_DATA(0x8A) ; // вставить (0x0A); или (0x8A);

D0ITC
23.11.2017, 12:36
XENOMORPH, большое спасибо, воспользовался исправленным файлом и "зеркало" пропало, но изображение перевернулось, как можно этим управлять. В библиотеке TFT_HX8357.h делается с помощью tft.setRotation(3); а здесь как?

XENOMORPH
23.11.2017, 13:19
Для поворота LCD на 180 градусов, нужно поменять значение в файле initlcd.h, который находится в UTFT/tft_drivers/ili9481 в одной из строчек (зависит от цвета ярлычка на защитной плёнке).

LCD_Write_COM(0x36); // попробовать поменять на (0x0D);
LCD_Write_DATA(0x8A) ; // попробовать поменять на (0x0D);......... у меня поворот работает в этой строке.........

на (0x0D);

D0ITC
23.11.2017, 13:55
R2DNU, спасибо за подсказку, в моём случае получилось так:
//LCD_Write_COM(0x21); // INVERT COLOR LCD_Write_COM(0x36); // MIRROR
LCD_Write_DATA(0x48) ; // MIRROR LCD_Write_DATA(0x0A) ;

Tolya
23.11.2017, 14:07
Так и не нашёл применение дисплея на чипе ILI9327..есть ли готовый скотч для изготовления ксв метра...направленный ответвитель имеется..

D0ITC
23.11.2017, 17:44
Переделал скетч с библиотеки TFT_HX8357.h на UTFT, но выбор шрифтов никакой, может кто подскажет как выйти из положения. В UTFT BigFont выглядит мелким, а SmallFont так вообще. А больше выбора нет.

exUA4ABS
23.11.2017, 19:00
US2IT Александр, я задумал встроить PWR_SWR_AUTO в усилитель.
И захотелось заодно на этой-же Ардуинке сделать реле задержки включения высокого.
Подправил ваш скетч из поста 1125. Добавил немного. Будет работать на PIN4?
Пока проверить не на чем.
//******************** *** Установочная часть программы ******************** ******************** ******************** *****
void setup() {

int ledPin = 4;
delay(180000); // 3 мин
pinMode(ledPin, OUTPUT);
digitalWrite(ledPin, LOW);
lcd.begin(16, 2); //устанавливаем размерность дисплея
pinMode(SoundPin,OUT PUT); //включаем вывод 10 на выход
pinMode(DivPin, OUTPUT); //включаем вывод 9 на выход
lcd.print(" SWR/PWR meter"); //выводим на дисплей надпись "SWR/PWR meter"
lcd.setCursor(5,1); //устанавливаем курсор
lcd.print("HI,RU4A!"); //выводим на дисплей надпись "HI,RU4A!"
delay(1000); //задержка 2с
lcd.clear(); //очищаем дисплей

D0ITC
23.11.2017, 19:08
exUA4ABS, если будете делать на ардуино, то выв.4 занят индикатором, а если будет отдельная конструкция то свободен.

UZ5DM
23.11.2017, 19:12
При подключении Mega2560 с индикатором HX8357 с библиотекой UTFT.h получается зеркальное изображение по горизонтали, какой командой отзеркалить не нашел, может кто подскажет.
Я использую библиотеку TFT_HX8357.h
Тогда все нормально
tft.init();
tft.setRotation(3);
tft.invertDisplay(1) ;


Переделал скетч с библиотеки TFT_HX8357.h

TFT_HX8357.h - намного быстрее работает с графикой. И фонты скачать в сети можно любые

Alex 1
23.11.2017, 21:59
Может не в тему, но таки испрошу, как будут выглядеть фьюзы в "дудке" из этой программы .. 275589 .. , так будет верно .. 275590 ..это для 32 меги.

ru4ng
09.12.2017, 21:31
exUA4ABS, вот схема.

Добавлено через 34 минут(ы):

Последний скетч для 1602, вся распиновка для этой схемы, нужно только раскоментировать нужную строку инициализации LCD, там есть и для ардуино. Может кому пригодится.

Сергей возник вопрос. Скетч компилится все хорошо, пробовал скомпилить под нано, но полученный размер не входит в 8 мегу как на схеме. Подскажите как быть,может я чтото не правильно делаю. Можете поделитесь хекс файлом

R2DHG
09.12.2017, 23:56
Поищите в платах "Arduino NG or older" тогда можно будет выбрать именно 8 мегу - может так влезет.

Integral
10.12.2017, 03:04
Сергей возник вопрос. Скетч компилится все хорошо, пробовал скомпилить под нано, но полученный размер не входит в 8 мегу как на схеме.

Поищите в платах "Arduino NG or older"
Да, именно плата "Arduino NG or older":

276536

Затем во вкладке Скетч сделать Экспорт бинарного файла. В папке получите две прошивки - с бутлоадером и без него. Поскольку у меня отдельная конструкция на Mega8, то я использую без бутлоадера.
Кстати в том скетче нужно удалить библиотеку (строчку) #include <Wire.h>, она все равно не используется, а память использует хорошо.
Добавил у себя в Облаке схему КСВ и измерителя мощности с автомасштабированием (https://cloud.mail.ru/public/Jp61/ovAUFwvQn), там же и скетч с прошивкой.

276537 276538

elektronshik
10.12.2017, 08:59
Integral,
Здравствуйте! Подскажите, где можно подробнее ознакомиться с конструкцией фото реализации данные трансформаторов?

Integral
10.12.2017, 14:27
где можно подробнее ознакомиться с конструкцией фото реализации данные трансформаторов?
Зайдите еще раз по моей ссылке выше, я добавил фото и инфу.

elektronshik
10.12.2017, 14:55
Зайдите еще раз по моей ссылке выше, я добавил фото и инфу.
Благодарю, скачал полный архив.Хорошо у Вас получилось.

UT0UM
10.12.2017, 20:47
еще один ардуино тюнер (http://forums.qrz.com/index.php?threads/raspberry-pi-and-arduino-auto-antenna-tuner.590996/)


http://www.youtube.com/watch?v=-WujfV-f-do

olbi
13.12.2017, 05:11
а какую роль выполняют транзисторы vt1.vt2?


а какую роль выполняют транзисторы vt1.vt2?

D0ITC
14.12.2017, 14:30
Может кто подскажет как в библиотеке TFT_HX8357-master можно вывести "картинку". Подготовил файлы bmp и raw, но ни с тем ни с другим ничего не получилось. В библиотеке UTFT получается легко командой myGLCD.drawBitmap, файл с расширением .с, а здесь никак.

XENOMORPH
15.12.2017, 12:10
В библиотеке есть рабочий пример вывода "картинок", только в примере необходимо удалить строчку SdFat SD;, и иметь библиотеку SdFat, это если грузить с SD флешки, а не SPI.

D0ITC
15.12.2017, 14:06
XENOMORPH, я имел ввиду вывод картинки не с SD карты, а с внешнего файла с расширением .с, .h или raw формат.
Ещё вопрос: есть ли пример вывода градусника в библиотеке TFT_HX8357-master?

XENOMORPH
15.12.2017, 15:36
Внешний файл будет загружен в flash память, RAW файлик например, с разрешением 320x480 весит 300KB, стоит ли тратить столь драгоценную flash память на изображения?
я думаю нет))

276865
276866

Sergei12
15.12.2017, 21:08
Доброго времени суток всем! Не подскажут ли знатоки где и что изменить в скетче, чтобы в верхней строке s-meter включить с пина А7 ? Архив скетча прилагаю. Заранее спасибо.

Integral
18.12.2017, 21:43
Кто подскажет, как правильно в TFT_HX8357-master выводить на экран переменные типа tft.drawNumber и tft.drawFloat? Например, при выводе мощности приходится далеко ставить W и получается так P= 0 W. Значения могут быть от 0 до 1000, если ближе ставить, то идет накладка. И еще, от цифр остается "мусор" при изменении разрядности от 1000 до 100, как победить эту гадость.

R2DHG
19.12.2017, 09:51
Попробуйте в одной позиции 0 и 1 вывести. Если 0 останется виден вокруг 1 - надо или стирать полностью перед выводом числа (рисовать закрашенный фоном прямоугольник либо выводить пробелы, но пробелы некоторые библиотеки не рисуют, просто координаты меняются) или лучше переписать "draw" чтобы разряды без изменений (от предыдущей итерации) пропускать, а с изменениями стирать фоном / выводить (так мерцать не будет, прорисовка быстрее и можно фиксированную разрядность сделать чтобы W после последней цифры по фиксированным координатам была).


Доброго времени суток всем! Не подскажут ли знатоки где и что изменить в скетче, чтобы в верхней строке s-meter включить с пина А7 ? Архив скетча прилагаю. Заранее спасибо.
Так он вроде не дописан там.

В файле ubitx_ui нужно раскомментарить этот код

/*
//now, the second line
memset(c, 0, sizeof(c));
memset(b, 0, sizeof(b));

if (inTx)
strcat(c, "TX ");
else if (ritOn)
strcpy(c, "RIT");

strcpy(c, " \xff");
drawMeter(meter_read ing);
strcat(c, meter);
strcat(c, "\xff");
printLine2(c);*/

и добавить к нему сверху строку

meter_reading = analogRead(A7);

что получится фиг знает - в комментах кода написано, что с-метр в данном билде не работает

D0ITC
19.12.2017, 15:42
R2DHG, а нет ли в TFT_HX8357-master возможности сделать как в UTFT : myGLCD.printNumF(V1, 2, 150, 250, '.', 7, ' ');, чтобы приращение разрядов происходило слева?

R2DHG
19.12.2017, 17:33
там по идее есть вот такая функция

** Descriptions: draw string right justified to dX
int16_t TFT_HX8357::drawRigh tString(char *string, int16_t dX, int16_t poY, int16_t font)

если вот тут (TFT_HX8357.cpp) заменить drawString на drawRightString (или свою написать) - должно вправо выравнивать

int16_t TFT_HX8357::drawNumb er(int32_t long_num, int16_t pX, int16_t pY, int16_t font)
{
char str[12];
ltoa(long_num, str, 10);
return drawString(str, pX, pY, font);
}

Sergei12
19.12.2017, 18:49
Большое спасибо за совет и внимание к вопросу!:пиво:! Направление понял, буду разбираться. 73!

Integral
20.12.2017, 22:33
Вообщем решил задачу по выводу переменных значений типа tft.drawNumber и tft.drawFloat, может не совсем чего хотел, но хотя бы работает. Решить получилось вот таким образом:


tft.setTextPadding(6 5);
tft.setTextColor(TFT _GREEN,TFT_BLACK);
char buf[3]; byte len = 3;
dtostrf(PWR, len, 0, buf);
buf[len] = 'W'; buf[len+1] = 0;
tft.drawString(buf,2 35,68,4);

Для вывода значений типа Float достаточно в dtostrf(PWR, len, 0, buf) - ноль поменять на 1 (кол-во знаков после запятой). Короче говоря обычное преобразование значений в символьный массив.

RA4HME
23.12.2017, 07:44
Всем здравствуйтё! УВАЖАЕМЫЕ УЧАСТНИКИ ФОРУМА обращаюсь с вопросом по поводу анализатора антенного -вот ссылка http://www.instructables.co m/id/HF-Antenna-Analyser-With-Arduino-and-DDS-Module/ может кто делал по ссылке ? На сайте автора схему не нашёл, только рисунок соединения точек макетной платы

277517

UA0YAS
23.12.2017, 11:14
http://www.hamstack.com/hs_projects/antenna_analyzer_doc s.pdf
отличие только в подключении другого дисплея

Integral
23.12.2017, 11:57
В дополнение к своему посту, если команду dtostrf сделать вот так dtostrf(PWR, -len, 0, buf), то значения будут выводится с левой стороны от позиции курсора.

обращаюсь с вопросом по поводу анализатора антенного
Не тянет он на антенный анализатор, это диапазонный сканер КСВ. Схемы нету, автор ссылается на схему предыдущего проекта на ПИК-процессоре. Изменения коснулись цифровой части, в качестве которого выступает Arduino Nano. Подключение пинов DDS и Arduino в статье автора.

UD0DAB
24.12.2017, 03:44
Все равно приборчик лучше такой чем никакого :) Да на 50 Ом расчитан, но сейчас у всех трансиверов такой выход. Так что лучше сначала прогнать антеннку!
Все равно не пойму зачем там операционник. Неужто ловить мух меньше 50 мВ надо?

RA4HME
24.12.2017, 20:29
нашлась схема на которую ссылается автор-НЕ ВПЕЧЯТЛЯЕТ. загрузить весь документ не могу,размер превышает допустимый 2,77мб. прикрепляю только схему277663
Как то у иностранцев всё коряво,непонятно и клочками, а иногда наоборот,как будто для особо тупых расписывают.
Может кто владеет информацией,кто либо к такому анализатору делал модернизацию, чтобы кроме ПК можно было и смотреть показания на дисплее. ссылка http://ra4nal.qrz.ru/vna.shtml

elektronshik
24.12.2017, 22:15
Может кто владеет информацией,кто либо к такому анализатору делал модернизацию, чтобы кроме ПК можно было и смотреть показания на дисплее. ссылка http://ra4nal.qrz.ru/vna.shtml

Здравствуйте! Здесь на сайте есть тема по этому- ra4nal -анализатору, там ссылка на модернизацию от француза с четырёх строчным дисплеем.

D0ITC
25.12.2017, 15:32
Подключил к Mega 2560 модуль часов DS3231, в скетче использовал библиотеку DS1307RTC.h. Всё работает нормально кроме вывода года. Если прошиваю скетчем из примера то на мониторе COM порта всё выводится правильно(2017), а если прошиваю своим скетчем то год выводится как 47. Может кто подскажет как это победить?


#include <TFT_HX8357.h> //подключаем библиотеку
TFT_HX8357 tft = TFT_HX8357(); //вызов пользовательской библиотеки
#include <Time.h>
#include <TimeLib.h>
#include <Wire.h>
#include <DS1307RTC.h>
#define DS3231_I2C_ADDRESS 104
byte tMSB, tLSB;
float my_temp;
void setup() {
tft.init(); //инициализация дисплея
tft.setRotation(3); //альбомная ориентация дисплея
tft.fillScreen(TFT_B LACK); //очищаем экран, заливаем чёрным цветом
tft.drawString("temperature:",145,250,4);
}
void loop() {
tmElements_t tm;
tft.setTextColor(TFT _SILVER,TFT_BLACK);
int xpos=130;
int ypos=50;
int ysecs=ypos;
int xsecs=0;
int xpos1=130;
int ypos1=150;
int yYear=ypos1;
int xYear=0;
RTC.read(tm);
int hh=tm.Hour;
int mm=tm.Minute;
int ss=tm.Second;
int da=tm.Day;
int mo=tm.Month;
long ya=tm.Year;
tft.setTextPadding(6 5);
if (hh < 10) xpos += tft.drawChar('0',xpo s,ypos,7); //если показания часов меньше 10 дорисовываем незначащий ноль
xpos += tft.drawNumber(hh,xp os,ypos,7); //выводим значение часов
xpos += tft.drawChar(':',xpo s,ypos,7); //рисуем часовое и минутное двоеточие
if (mm < 10) xpos += tft.drawChar('0',xpo s,ypos,7); //если показания минут меньше 10 дорисовываем незначащий ноль
xpos += tft.drawNumber(mm,xp os,ypos,7); //выводим значение минут
xsecs = xpos;
xpos += tft.drawChar(':',xse cs,ysecs,7); //рисуем секундное двоеточие
if (ss < 10) xpos += tft.drawChar('0',xpo s,ypos,7); //если показания секунд меньше 10 дорисовываем незначащий ноль
tft.drawNumber(ss,xp os,ysecs,7); //выводим значение секунд
xpos1 += tft.drawChar(' ',xpos1,ypos1,7);
if (da < 10) xpos1 += tft.drawChar('0',xpo s1,ypos1,7);
xpos1 += tft.drawNumber(da,xp os1,ypos1,7);
if (mo < 10) xpos1 += tft.drawChar('0',xpo s1,ypos1,7);
xpos1 += tft.drawNumber(mo,xp os1,ypos1,7);
xYear = xpos1;
xpos1 += tft.drawChar(' ',xYear,yYear,7);
tft.drawNumber(ya,xp os1,yYear,7);
delay(1000); //задержка 1с
my_temp = (float)get3231Temp() ;
}
float get3231Temp(){
float temp3231;
Wire.beginTransmissi on(DS3231_I2C_ADDRES S); //временные регистры (11h-12h) обновляются автоматически каждые 64s
Wire.write(0x11);
Wire.endTransmission ();
Wire.requestFrom(DS3 231_I2C_ADDRESS,2);
if(Wire.available()) {
tMSB = Wire.read(); //2 в дополнение int часть
tLSB = Wire.read(); //часть фракции
temp3231 = (tMSB & B01111111); //сделать математику 2 на TMSB
temp3231 += ( (tLSB >> 6) * 0.25 ); //только забота о битах 7 и 8
tft.setTextFont(4);
tft.setCursor(295,25 0);
tft.print(my_temp,1) ;
}
else { //О, нет, никаких данных!
}
return temp3231;
}

veso74
25.12.2017, 16:30
В примери TFT_HX8357.h использовано TimeLib.h: tmYearToCalendar(Y)

PaulStoffregen/Time (https://github.com/PaulStoffregen/Time/blob/master/TimeLib.h): - на Y просто добавляют 1970:
#define tmYearToCalendar(Y) ((Y) + 1970) // full four digit year

С Вашего примера: 47 + 1970 = 2017

D0ITC
25.12.2017, 16:50
veso74, большое спасибо, всё получилось.

RA4HME
25.12.2017, 22:00
Здравствуйте уважаемые участники форума! С наступающим новым годом!
Обращаюсь с вопросом или просьбой. Интересует вариант переключения диапазонов двумя кнопками + и - на Ардуино с применением сдвиговых регистров для экономии портов.Нет ни у кого уже написанного скетча?

R2DHG
25.12.2017, 23:12
Попробуйте. Не проверял, может подкрутить нужно чего нибудь.


// Управление
#define KEY_UP 4
#define KEY_DN 5

// Регистры управления 595
#define BPF_CLK 13
#define BPF_DATA 11
#define BPF_LATCH 10

uint16_t bpf = 1;
uint8_t xKeyUp = HIGH;
uint8_t xKeyDn = HIGH;

void setup() {
pinMode(BPF_CLK, OUTPUT);
pinMode(BPF_DATA, OUTPUT);
pinMode(BPF_LATCH, OUTPUT);
sendReg(bpf);
}

void loop() {

if ((digitalRead(KEY_UP ) == LOW)&&(xKeyUp == HIGH)&&(bpf < 0xB1000000000000000) ) {
delay(20);
if (digitalRead(KEY_UP) == LOW) {
xKeyUp == LOW;
bpf = bpf << 1;
sendReg(bpf);
}
}
if ((digitalRead(KEY_UP ) == HIGH)&&(xKeyUp == LOW)) {
delay(20);
if (digitalRead(KEY_UP) == HIGH) {
xKeyUp == HIGH;
}
}

if ((digitalRead(KEY_DN ) == LOW)&&(xKeyDn == HIGH)&&(bpf > 0xB0000000000000010) ) {
delay(20);
if (digitalRead(KEY_DN) == LOW) {
xKeyDn == LOW;
bpf = bpf >> 1;
sendReg(bpf);
}
}
if ((digitalRead(KEY_DN ) == HIGH)&&(xKeyDn == LOW)) {
delay(20);
if (digitalRead(KEY_DN) == HIGH) {
xKeyDn == HIGH;
}
}

}

void sendReg(int_fast16_t dpf) {
digitalWrite(BPF_LAT CH, LOW);
tfr_byte(dpf & 0xFF);
tfr_byte((dpf >> 8) & 0xFF);
digitalWrite(BPF_LAT CH, HIGH);
}

void tfr_byte(byte data)
{
for (int i=0; i<8; i++, data>>=1) {
digitalWrite(BPF_DAT A, data & 0x01);
digitalWrite(BPF_CLK , HIGH);
digitalWrite(BPF_CLK , LOW);
}
}

RA4HME
25.12.2017, 23:23
Спасибо! Подкрутить это значительно быстрее ,чем писать всё с ноля.

ex8ai
26.12.2017, 07:19
Подскажите пожалуйста что это означает- мертвая Ардуино ?
277779
Или я что то делаю не правильно .

R2DHG
26.12.2017, 09:17
Как вариант, что то не так с библиотеками. Нужна более подробная информация. Нажмите "скопировать ошибку" и скопируйте сюда.

Можно еще включить галку как во вложенном файле - будет подробнее показывать ошибки внизу.

ex8ai
26.12.2017, 16:57
Прошил другим способом . А этот нужно ещё раз попробовать -поучится . Спасибо .

RV3ART
26.12.2017, 18:03
Такая же проблема. Только по вашим постам 1197 и 1199 совсем стало не понятно. У вас Ардуино - китайский клон на чипе 340? Прошу пояснить что прошивали? И как?