Проще экспериментально проверить - засечь с помощью millis() время входа в процедуру записи и потом время выхода. Но CRC перебор, IMHO.
Проще экспериментально проверить - засечь с помощью millis() время входа в процедуру записи и потом время выхода. Но CRC перебор, IMHO.
Вот поскреб по суссекам, вырезал что не нужно, оставил загрузки в знакогенератор дисплея, функции формирования верхней и нижней части строки, функцию формирования палки пикового значения,
но ее для начала лучше отключить, закомментарив вызов PeakLevel() в функции SynthesChar().
Удачи.
Спасибо от Integral
Товарищи, совсем каша перемещалась..
Хочу упихать кучу переменных в одну что бы ее одной коммандой отправить на запись в память. В примере от ардуины есть момент с такой штукой, как СТРУКТУРА. Вот она:
Но я не могу найти толком описания этой штуки. Вот в примере есть заполнение этой структуры данными и запись в память:struct MyObject {
float field1;
byte field2;
char name[10];
}
Что это? Вот именно это customVar? Почему пишется не MyObject? Я могу в строке MyObject customVar... в фигурных скобках писать не значения а переменные которые мне надо сохранить? НепонятноMyObject customVar = {3.14f, 65, "Working!"};
EEPROM.put(eeAddress , customVar);
Добавлено через 5 минут(ы):
Вот немножко прояснилось из перевода куска кода из примера EEPROM.get:
В момент объявления структуры, я могу вот так сделать, если у меня уже давно объявлены переменные field1, field2 и name[10]?
- struct MyObject {
- float field1;
- byte field2;
- char name[10];
- };
- void secondTest() {
- int eeAddress = sizeof(float); // перемещаемся к участку EEPROM-памяти, находящемуся вслед за тем, где хранится переменная «f»
- MyObject customVar; // переменная для хранения данных пользовательского объекта, извлеченных из EEPROM-памяти
- EEPROM.get(eeAddress , customVar);
Добавлено через 19 минут(ы):struct MyObject {
field1;
field2;
name[10];
};
Вот что надо было читать! не по ардуине а по с++!
Структура - это совокупность переменных, объединенных одним именем, предоставляющая общепринятый способ совместного хранения информации. Объявление структуры приводит к образованию шаблона, используемого для создания объектов структуры. Переменные, образующие структуру, называются членами структуры. (Члены структуры также часто называются элементами или полями.)
Обычно все члены структуры связаны друг с другом. Например, информация об имени и адресе, находящаяся в списке рассылки, обычно представляется в виде структуры. Следующий фрагмент кода объявляет шаблон структуры, определяющий имя и адрес. Ключевое слово struct сообщает компилятору об объявлении структуры.
struct addr {
char name[30];
char street [40]; char city[20];
char state[3];
unsigned long int zip;
};
Объявление завершается точкой с запятой, поскольку объявление структуры - это оператор. Имя структуры addr идентифицирует структуру данных и является спецификатором типа. Имя структуры часто используют как ярлык.
На данный момент на самом деле не создано никакой переменной. Определена только форма данных. Для объявления настоящей переменной, соответствующей данной структуре, следует написать:
struct addr addr_info;
В данной строке происходит объявление переменной addr_info типа addr. При объявлении структуры определяется переменная смешанного типа. До тех пор, пока не будет объявлена переменная данного типа, она не будет существовать.
Когда объявлена структурная переменная, компилятор автоматически выделяет необходимый участок памяти для размещения всех ее членов
Последний раз редактировалось UD0DAB; 10.11.2017 в 18:45.
Здравствуйте.
Хочу написать прошивку Цифрового Измерителя КСВ и Мощности в программе FLProg но вот формулы как правильно рассчитать показания мощности не знаю.
Как я понял что КСВ рассчитывается так: (прямаю+обратная)/(прямая-обратная) и вроде ксв получилось правильно вывести на экран.
А вот мощность не получается рассчитать.
Сейчас у меня при мощности 35ват с рэфлектрометра приходит 3,5 вольта а при 5 ватах где то 1.16 вольта.
Напишите Пожалуйста как правильно в рассчитать показания Мощности, максимальная мощность интересует пока до 50W.
С Уважением,Андрей.
Может падение на диодах уже сказывается при 1.16 вольта ? Можете еще пару точек замерить - 10 и 20 вт например.
Последний раз редактировалось R2DHG; 10.11.2017 в 22:35.
R2DHG, запустил градусник обратной волны с вашим кодом.
Программа измеряет КСВ и мощность, предел мощности выбирается автоматически.При превышении КСВ=3 на порт 13 выводится высокий уровень для подключения пьезика. Есть два предела 100 и 1000Вт. При превышении мощности 110Вт программа переключается на предел 1000Вт и подключает дополнительный входной делитель напряжения прямой и обратной волны, так же на LCD выводится значок "*". Если в течении 10-15с мощность не превышает 100Вт, то предел мощности возвращается на 100Вт. Кроме этого если мощность до 10Вт, то индикация с плавающей точкой, а выше 10Вт целочисленно.
Последний раз редактировалось D0ITC; 10.11.2017 в 23:30.
Спасибо от RW3ACQ
Приветствую всех! Сутки курил мануалы по сям и не проникся.
Вот есть у меня структура разных переменных. Я понял что именно раз она структура, то при объявлении элементы лежат в памяти вместе один за одним. Мне нужно посчитать контрольную сумму байтов ВСЕЙ структуры (ибо я ее так в ЕЕПРОМ и собираюсь выгрузить). Не нашел способа обратиться к этой структуре как к массиву из байтов.
Решил попробовать так:
Возвращаем адрес переменной структуры. (adr=&struct)
i=0
цикл i<sizeoff (пока не кончится структура)
{
контрольная сумма += *(adr + i)
}
Как думаете получится чего-нить?
Чтобы
нужно Вашу переменную adr (у меня sym_ptr) объявить указателем на байт (char) и привести к нему указатель на структуру после взятия ее адреса:
char *sym_ptr;
...
sym_ptr = (char *) &my_struct;
тогда смещение (+i) в цикле будет двигать указатель на следующий байт. Можно и совсем внаглую:
ctl_sum += *( ( (char*)&my_struct) +i);
Спасибо от UD0DAB
Спасибо! Я поначалу, когда узнал что есть структуры, думал можно к ней побайтно обратиться как к массиву (типа var[i])
Правда мне не ясно почему вы пишите что нужно указатель CHAR?
Сделал вот так, вроде работает...
Вот код.
Вывод в сериал для отладки...
Вот что выдает:
struct var {
int stp = 100;
int battcal = 220;
unsigned long freq = 1932000UL;
unsigned long lofreq = 497400UL;
unsigned long iffreq = 500000UL;
long calibration = 178700;
boolean LSB = true;
} varinfo;
void memwrite () {
long t = millis();
Serial.println("memw rite start");
int crc;
int i = 0;
int varsize = sizeof(varinfo);
byte * adr;
adr = (byte*)(& varinfo);
while (i < varsize )
{
crc += *(adr + i);
i++;
}
Serial.print("CRC ");
Serial.print(crc);
Serial.print(" ");
Serial.print((uint8_ t)adr);
Serial.print(" ");
Serial.print(varsize );
Serial.println( "Byte");
Serial.print((millis () - t));
Serial.println( " Ms");
}
Получается считает контрольную сумму 105 миллисекунд. А надо еще в епром успеть закинуть пока конденсатор разряжаетсяmemwrite start
21
845
845
1065
1065
1289
1411
1440
1440
1688
1838
1845
1845
1877
2038
2045
2045
2057
2243
2245
2245
2246
CRC 2246 5 21Byte
105 Ms
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)