Уважаемые посетители! Форум CQHAM.RU существует исключительно за счет показа рекламы. Мы будем благодарны, если Вы не будете блокировать рекламу на нашем Форуме. Просим внести cqham.ru в список исключений для Вашего блокировщика рекламы.
Страница 110 из 223 ПерваяПервая ... 1060100107108109110111112113120160210 ... ПоследняяПоследняя
Показано с 1,091 по 1,100 из 2227

Тема: ARDUINO

  1. #1091

    Регистрация
    28.04.2005
    Адрес
    Московская обл., г. Мытищи
    Сообщений
    3,923
    Позывной
    ex RW3DKC
    Проще экспериментально проверить - засечь с помощью millis() время входа в процедуру записи и потом время выхода. Но CRC перебор, IMHO.


  2. #1092
    Вот поскреб по суссекам, вырезал что не нужно, оставил загрузки в знакогенератор дисплея, функции формирования верхней и нижней части строки, функцию формирования палки пикового значения,
    но ее для начала лучше отключить, закомментарив вызов PeakLevel() в функции SynthesChar().
    Удачи.
    Вложения Вложения
    • Тип файла: zip scale.zip (2.2 Кб, Просмотров: 166)

  3. Спасибо от Integral

  4. #1093

    Регистрация
    23.07.2010
    Адрес
    ЕАО с.Белгородское
    Сообщений
    1,975
    Записей в дневнике
    2
    Позывной
    UD0DAB exUD0CAJ
    Товарищи, совсем каша перемещалась..

    Хочу упихать кучу переменных в одну что бы ее одной коммандой отправить на запись в память. В примере от ардуины есть момент с такой штукой, как СТРУКТУРА. Вот она:

    struct MyObject {
    float field1;
    byte field2;
    char name[10];
    }
    Но я не могу найти толком описания этой штуки. Вот в примере есть заполнение этой структуры данными и запись в память:

    MyObject customVar = {3.14f, 65, "Working!"};
    EEPROM.put(eeAddress , customVar);
    Что это? Вот именно это customVar? Почему пишется не MyObject? Я могу в строке MyObject customVar... в фигурных скобках писать не значения а переменные которые мне надо сохранить? Непонятно

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

    Вот немножко прояснилось из перевода куска кода из примера EEPROM.get:

    1. struct MyObject {
    2. float field1;
    3. byte field2;
    4. char name[10];
    5. };
    6. void secondTest() {
    7. int eeAddress = sizeof(float); // перемещаемся к участку EEPROM-памяти, находящемуся вслед за тем, где хранится переменная «f»
    8. MyObject customVar; // переменная для хранения данных пользовательского объекта, извлеченных из EEPROM-памяти
    9. EEPROM.get(eeAddress , customVar);
    В момент объявления структуры, я могу вот так сделать, если у меня уже давно объявлены переменные field1, field2 и name[10]?

    struct MyObject {

    field1;

    field2;

    name[10];

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

    Вот что надо было читать! не по ардуине а по с++!
    Структура - это совокупность переменных, объединенных одним именем, предоставляющая общепринятый способ совместного хранения информации. Объявление структуры приводит к образованию шаблона, используемого для создания объектов структуры. Переменные, образующие структуру, называются членами структуры. (Члены структуры также часто называются элементами или полями.)
    Обычно все члены структуры связаны друг с другом. Например, информация об имени и адресе, находящаяся в списке рассылки, обычно представляется в виде структуры. Следующий фрагмент кода объявляет шаблон структуры, определяющий имя и адрес. Ключевое слово 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.

  5. #1094

    Регистрация
    27.12.2005
    Адрес
    Саратовская область
    Сообщений
    561
    Здравствуйте.
    Хочу написать прошивку Цифрового Измерителя КСВ и Мощности в программе FLProg но вот формулы как правильно рассчитать показания мощности не знаю.
    Как я понял что КСВ рассчитывается так: (прямаю+обратная)/(прямая-обратная) и вроде ксв получилось правильно вывести на экран.
    А вот мощность не получается рассчитать.
    Сейчас у меня при мощности 35ват с рэфлектрометра приходит 3,5 вольта а при 5 ватах где то 1.16 вольта.
    Напишите Пожалуйста как правильно в рассчитать показания Мощности, максимальная мощность интересует пока до 50W.
    С Уважением,Андрей.

  6. #1095

    Регистрация
    28.04.2005
    Адрес
    Московская обл., г. Мытищи
    Сообщений
    3,923
    Позывной
    ex RW3DKC
    Может падение на диодах уже сказывается при 1.16 вольта ? Можете еще пару точек замерить - 10 и 20 вт например.
    Последний раз редактировалось R2DHG; 10.11.2017 в 22:35.

  7. #1096
    Аватар для D0ITC
    Регистрация
    16.11.2008
    Адрес
    г. Снежное
    Сообщений
    1,113
    Позывной
    D0ITC
    R2DHG, запустил градусник обратной волны с вашим кодом.

    Программа измеряет КСВ и мощность, предел мощности выбирается автоматически.При превышении КСВ=3 на порт 13 выводится высокий уровень для подключения пьезика. Есть два предела 100 и 1000Вт. При превышении мощности 110Вт программа переключается на предел 1000Вт и подключает дополнительный входной делитель напряжения прямой и обратной волны, так же на LCD выводится значок "*". Если в течении 10-15с мощность не превышает 100Вт, то предел мощности возвращается на 100Вт. Кроме этого если мощность до 10Вт, то индикация с плавающей точкой, а выше 10Вт целочисленно.
    Вложения Вложения
    Последний раз редактировалось D0ITC; 10.11.2017 в 23:30.

  8. Спасибо от RW3ACQ

  9. #1097

    Регистрация
    23.07.2010
    Адрес
    ЕАО с.Белгородское
    Сообщений
    1,975
    Записей в дневнике
    2
    Позывной
    UD0DAB exUD0CAJ
    Приветствую всех! Сутки курил мануалы по сям и не проникся.
    Вот есть у меня структура разных переменных. Я понял что именно раз она структура, то при объявлении элементы лежат в памяти вместе один за одним. Мне нужно посчитать контрольную сумму байтов ВСЕЙ структуры (ибо я ее так в ЕЕПРОМ и собираюсь выгрузить). Не нашел способа обратиться к этой структуре как к массиву из байтов.

    Решил попробовать так:

    Возвращаем адрес переменной структуры. (adr=&struct)
    i=0
    цикл i<sizeoff (пока не кончится структура)
    {
    контрольная сумма += *(adr + i)
    }

    Как думаете получится чего-нить?

  10. #1098
    Аватар для vadim_d
    Регистрация
    29.10.2006
    Адрес
    Санкт-Петербург
    Сообщений
    14,915
    Чтобы
    Цитата Сообщение от UD0CAJ Посмотреть сообщение
    посчитать контрольную сумму байтов ВСЕЙ структуры
    нужно Вашу переменную adr (у меня sym_ptr) объявить указателем на байт (char) и привести к нему указатель на структуру после взятия ее адреса:

    char *sym_ptr;
    ...
    sym_ptr = (char *) &my_struct;

    тогда смещение (+i) в цикле будет двигать указатель на следующий байт. Можно и совсем внаглую:

    ctl_sum += *( ( (char*)&my_struct) +i);
    Вадим

  11. Спасибо от UD0DAB

  12. #1099

    Регистрация
    23.07.2010
    Адрес
    ЕАО с.Белгородское
    Сообщений
    1,975
    Записей в дневнике
    2
    Позывной
    UD0DAB exUD0CAJ
    Спасибо! Я поначалу, когда узнал что есть структуры, думал можно к ней побайтно обратиться как к массиву (типа 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");
    }
    Вот что выдает:

    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
    Получается считает контрольную сумму 105 миллисекунд. А надо еще в епром успеть закинуть пока конденсатор разряжается


  13. #1100

    Регистрация
    28.04.2005
    Адрес
    Московская обл., г. Мытищи
    Сообщений
    3,923
    Позывной
    ex RW3DKC
    Цитата Сообщение от UD0CAJ Посмотреть сообщение
    Правда мне не ясно почему вы пишите что нужно указатель CHAR?
    Да все равно. Можно и byte.

    Цитата Сообщение от UD0CAJ Посмотреть сообщение
    Получается считает контрольную сумму 105 миллисекунд. А надо еще в епром успеть закинуть пока конденсатор разряжается
    Ну это вы сами придумали CRC считать

Страница 110 из 223 ПерваяПервая ... 1060100107108109110111112113120160210 ... ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •