Автор Тема: Управление гетеродином на основе ADF4350/ADF4351  (Прочитано 20077 раз)

0 Пользователей и 3 Гостей просматривают эту тему.

Оффлайн R2GKH Виталий

  • Ветеран
  • *****
  • Сообщений: 4298
  • Репутация: +578/-354
  • the Truth is out There...
    • Мысли вслух :)
  • QRA: KO92GP
Re: Управление гетеродином на основе ADF4350/ADF4351
« Ответ #45 : 24 Январь 2022, 14:52:16 »
Пожалуйста, опубликуйте свои программные коды

+100500%
hex-дампы - моветон далеких 80х годов.
Уж если нет желания выкладывать исходники целиком, то хоть выделите алгоритм обсуждаемой функции. В данном случае - работа с SPI. Данные, какие туда засылаются. Информация, какая получается оттуда. Глядишь, кто то подскажет, как это сделать оптимальнее...     
Мы стояли на плоскости,
                  С переменным углом отражения...

Оффлайн SERBUZ

  • Старожил
  • ****
  • Сообщений: 384
  • Репутация: +93/-19
  • Подпись находиться в стадии разработки
  • QRA: LO62DQ
Re: Управление гетеродином на основе ADF4350/ADF4351
« Ответ #46 : 24 Январь 2022, 16:22:12 »
Пожалуйста, опубликуйте свои программные коды . Ето может быть для простых функций, а всегда будет  полезно для других .
2 года назад опубликовал и люди повторяли  - http://forum.vhfdx.ru/izmeritelnaya-apparatura/radioljubitelskij-ukv-gss/msg389281/#msg389281   
Исходник с подробными комментариями.  В коде есть все:   и управление частотой и мощностью ( без сторонних библиотек) и управление другим синтезатором и управление индикатором.
Куда уж проще.   Убрать что не нужно, оставить нужное.
то хоть выделите алгоритм обсуждаемой функции. В данном случае - работа с SPI. Данные, какие туда засылаются. Информация, какая получается оттуда. Глядишь, кто то подскажет, как это сделать оптимальнее...   
Там все есть..Минимум кода- без сторонних библиотек.
« Последнее редактирование: 24 Январь 2022, 16:24:31 от SERBUZ »

Оффлайн GM

  • Старожил
  • ****
  • Сообщений: 201
  • Репутация: +45/-9
  • QRA: KO85SK
Re: Управление гетеродином на основе ADF4350/ADF4351
« Ответ #47 : 24 Январь 2022, 21:41:29 »
Оптимизатор иногда творит чудеса

[Отвлекусь на минутку.
Пока писатели компиляторов недалеко продвинулись. Вот пример из вашего lst-файла

0000001c <__do_copy_data>:
__do_copy_data():
  1c:    10 e0       ldi    r17,0x00    ;0
  1e:    a0 e6       ldi    r26,0x60    ;96
  20:    b0 e0       ldi    r27,0x00    ;0
  22:    ee e2       ldi    r30,0x2E    ;46
  24:    f2 e0       ldi    r31,0x02    ;2
  26:    02 c0       rjmp   .+4         ;0x2c <__do_copy_data+0x10>
  28:    05 90       lpm    r0,Z+
  2a:    0d 92       st     X+,r0
  2c:    a2 36       cpi    r26,0x62    ;98
  2e:    b1 07       cpc    r27,r17
  30:    d9 f7       brne   .-10        ;0x28 <__do_copy_data+0xc>

Здесь копируются два байта из флеши с начальным адресом 0х02ЕЕ в ОЗУ 0х060
Программист просто бы коротко написал

  lpm r16,z+
  sts 0x060,r16
  lpm r16,z
  sts 0x061,r16

Ну и где тут пресловутая оптимизация?
Абсурд ситуации усиливается тем фактом, что в этих адресах ничего нет! Нечего копировать!

Далее очищается 5 байт ОЗУ, тоже никакой оптимизации

00000032 <__do_clear_bss>:
__do_clear_bss():
  32:    20 e0       ldi    r18, 0x00   ; 0
  34:    a2 e6       ldi    r26, 0x62   ; 98
  36:    b0 e0       ldi    r27, 0x00   ; 0
  38:    01 c0       rjmp   .+2         ; 0x3c <.do_clear_bss_start>
  3a:    1d 92       st     X+, r1
  3c:    a7 36       cpi    r26, 0x67   ; 103
  3e:    b2 07       cpc    r27, r18
  40:    e1 f7       brne   .-8         ; 0x3a <.do_clear_bss_loop>

Переход на главную программу мэйн. В конце мэйна стоит ловушка - бесконечный цикл, поэтому нет выхода.
Но нет, оптимизатор после мэйна ставит ещё одну ловушку! Это насмешка над оптимизацией!
 
  42:    01 d0       call   .+2         ; 0x46 <main>
  44:    f2 c0       rjmp   .+484       ; 0x22a <_exit>

И ещё за каким-то шутом в скомпилированную программу воткнули п/п обработку прерывания от таймера, хотя она и не используется! Тоже апофеоз оптимизации!

Извините за оффтоп, просто давно уже надоели эти разговоры про оптимизацию.]
Делать надо сразу хорошо, а плохо - само получится.

Оффлайн LZ2WSG

  • Пользователь
  • **
  • Сообщений: 43
  • Репутация: +16/-0
  • QRA: KN34PC
Re: Управление гетеродином на основе ADF4350/ADF4351
« Ответ #48 : 24 Январь 2022, 21:49:52 »
Вот и без оптимизации кода. Видно, делает он что-то или нет. Можно ли сделать это вручную лучше, я понятия не имею.
(Мне все равно, ассемблера не понимаю).
Цитировать
#pragma GCC push_options
#pragma GCC optimize ("O 0")
...
#pragma GCC pop_options
Цитировать
Скицата използва 760 байта (74%) от пространството за програми. Максимумът е 1024 байта.
Глобалните променливи ползват 7 байта (10%) от динамичната памет, оставяйки 57 байта за локални променливи. Максимумът е 64 байта.
« Последнее редактирование: 24 Январь 2022, 21:51:53 от LZ2WSG »
Веселин, LZ2WSG

Оффлайн GM

  • Старожил
  • ****
  • Сообщений: 201
  • Репутация: +45/-9
  • QRA: KO85SK
Re: Управление гетеродином на основе ADF4350/ADF4351
« Ответ #49 : 24 Январь 2022, 22:00:59 »
Мы все чего-то не понимаем. Но ответьте, почему оптимизатор не оставляет одну ловушку вместо двух или зачем в программу вставляется солидный кусок прерывания, если он в программе не используется? Это, этот, как его, волюнтаризм :-)!
Делать надо сразу хорошо, а плохо - само получится.

Оффлайн LZ2WSG

  • Пользователь
  • **
  • Сообщений: 43
  • Репутация: +16/-0
  • QRA: KN34PC
Re: Управление гетеродином на основе ADF4350/ADF4351
« Ответ #50 : 24 Январь 2022, 22:11:18 »
Есть загадки в кодировании :). Автор/и знает больше. Как говорил друг(SK): "Успокойся, неужели не работает?" (+ транслейт БГ -> РУ). А иногда это просто строка кода.
---
Например, в тот день в коде .bas (из другой теме ADF?) мне было интересно, почему автор загружают одну и ту же функцию дважды :).
У меня есть идея в голове, но так или нет ... вот почему и это интересно. Если это хобби. 
« Последнее редактирование: 24 Январь 2022, 22:13:33 от LZ2WSG »
Веселин, LZ2WSG

Оффлайн Mildi

  • Ветеран
  • *****
  • Сообщений: 1859
  • Репутация: +150/-366
  • Три дня расстрела и каждый день до смерти.
  • QRA: KP67lx
Re: Управление гетеродином на основе ADF4350/ADF4351
« Ответ #51 : 25 Январь 2022, 01:02:52 »
Вот если кому надо на С прошивка для схемы в первом сообщении.
Написана на CodeWizardAVR V3.12 (проект в папке code)
Также в корневой папке  проект для протеуса 8.8 сп.1 и авторский хекс.

В железе не проверял(нет тинек и нет необходимости), но в протеусе вроде все нормально, в любом случае если что не так можете поправить сами
Код передается по времени 15мс, за скоростью не гнался.

 
« Последнее редактирование: 25 Январь 2022, 01:07:34 от Mildi »
73! Василий (ex\RA1OGS/1)

Оффлайн Mildi

  • Ветеран
  • *****
  • Сообщений: 1859
  • Репутация: +150/-366
  • Три дня расстрела и каждый день до смерти.
  • QRA: KP67lx
Re: Управление гетеродином на основе ADF4350/ADF4351
« Ответ #52 : 25 Январь 2022, 07:55:23 »

Написана на CodeWizardAVR V3.12
Читать как CodeVisionAVR V3.12
Wizard это генератор шаблона в нем так называется...
73! Василий (ex\RA1OGS/1)

Оффлайн GM

  • Старожил
  • ****
  • Сообщений: 201
  • Репутация: +45/-9
  • QRA: KO85SK
Re: Управление гетеродином на основе ADF4350/ADF4351
« Ответ #53 : 25 Январь 2022, 17:59:33 »
Вот, если кому надо на С прошивка для схемы в первом сообщении

Это к уважаемому R2GKH, пусть сделает более оптимально, глядишь станет соавтором прошивки :-).

Кстати, Mildi,  в вашей программе вот эти строки мне кажутся лишними

   delay_us(10);
   CLRBIT(PORTB,1);

Делать надо сразу хорошо, а плохо - само получится.

Оффлайн Mildi

  • Ветеран
  • *****
  • Сообщений: 1859
  • Репутация: +150/-366
  • Три дня расстрела и каждый день до смерти.
  • QRA: KP67lx
Re: Управление гетеродином на основе ADF4350/ADF4351
« Ответ #54 : 25 Январь 2022, 18:54:26 »
Кстати, Mildi,  в вашей программе вот эти строки мне кажутся лишними

   delay_us(10);
   CLRBIT(PORTB,1);

Возможно. Это просто возврат шины данных в исходное состояние, чтоб более четко было разделение окончания передачи кода регистра. Стоило бы его конечно не там поставить а вынести в первый цикл, а то он каждый бит так выделяет.
Сегодня потрачу немного времени попробую кое что оптимизировать.
« Последнее редактирование: 25 Январь 2022, 19:46:19 от Mildi »
73! Василий (ex\RA1OGS/1)

Оффлайн GM

  • Старожил
  • ****
  • Сообщений: 201
  • Репутация: +45/-9
  • QRA: KO85SK
Re: Управление гетеродином на основе ADF4350/ADF4351
« Ответ #55 : 25 Январь 2022, 20:41:30 »
Это просто возврат шины данных в исходное состояние, чтоб более четко было разделение окончания передачи кода регистра

При отладке может быть и пригодится, а в штатном режиме только лишнее время и ненужное увеличение кода программы, а её всего 1024 байта. Я, конечно, уважаю П.Гайдука, сам лет 20 назад пользовался CodeVisionAVR, но код создаётся совершенно неоптимальный. Ваша программа занимает 458 байт (44%), а у меня - 246, ещё в два раза ужать могу. По слухам  компилятор ИАР хорош в оптимизации.

Ещё меня поразило использование трёхмерного массива. В программе по индексам вычисляется адрес данных в массиве, для чего используется п/п умножения! Попробуйте воспользоваться указателями, тогда и массивы станут одномерными.
« Последнее редактирование: 25 Январь 2022, 20:48:05 от GM »
Делать надо сразу хорошо, а плохо - само получится.

Оффлайн Mildi

  • Ветеран
  • *****
  • Сообщений: 1859
  • Репутация: +150/-366
  • Три дня расстрела и каждый день до смерти.
  • QRA: KP67lx
Re: Управление гетеродином на основе ADF4350/ADF4351
« Ответ #56 : 25 Январь 2022, 21:16:39 »
Насчет размера согласен, но тут не тот случай. Нет необходимости как таковой в экономии в связи с простотой задачи.
Если уж экономить то надо сразу на асм переходить. Да и по скорости также. Кодевижен мне нравится из его генератора начального шаблона. Графически очень удобно конфигурировать порты и перефирию, да и в комплекте много встроенных библиотек.
Вообще хотел сначала использовать двухмерный массив, но потом подумал что интересно попробовать трехмерный, тем более я его еще ни разу не применял. Так что это было больше ради проверки поддерживает ли его среда.
Единственное что по моему стоит сделать это добавить копирование констант из флеша в регистры, чтение оттуда происходит достаточно медленно, идет пауза между байтами (хотя может это из за трехмерного массива, надо поверить). Ну и добавить вариант динамической смены частот без ресета в процессе работы.
« Последнее редактирование: 25 Январь 2022, 21:48:22 от Mildi »
73! Василий (ex\RA1OGS/1)

Оффлайн R3GC Владимир

  • Ветеран
  • *****
  • Сообщений: 3257
  • Репутация: +614/-83
Re: Управление гетеродином на основе ADF4350/ADF4351
« Ответ #57 : 26 Январь 2022, 17:57:36 »
Например, в тот день в коде .bas (из другой теме ADF?) мне было интересно, почему автор загружают одну и ту же функцию дважды :).
Если это камень в мой огород - то мне так удобнее. Можно конечно для инициализации ADF сначала половину регистра залить, этого хватит, а потом целиком. Но смысл для инициализации отдельный код делать если проще 2 раза одно и тоже отправить?
Тем более к программистам никаким боком не отношусь и на конкурсы оптимизации ничего отправлять не планирую. Размер не главное. Главное чтобы работал  :laugh:

Оффлайн 4Z5CP

  • Ветеран
  • *****
  • Сообщений: 1439
  • Репутация: +341/-12
  • QRA: KM72mt
Re: Управление гетеродином на основе ADF4350/ADF4351
« Ответ #58 : 26 Январь 2022, 18:09:11 »
Моя сдеала по простому.
Написал на Васике интерактивную типа терминала программу.
С ADI simulator ввожу данные, проверяю устраевает меня такой сигнал или нет, записываю в EEPROM и на этом все.
144MHz - 2x10HV
432MHz - 4x16H
Тарелька 95см для QO-100 и 5 Ватт.

Димитрий.

Оффлайн UR8IP Андрей

  • Ветеран
  • *****
  • Сообщений: 1231
  • Репутация: +285/-38
  • QRA: kn87sc
Re: Управление гетеродином на основе ADF4350/ADF4351
« Ответ #59 : 26 Январь 2022, 18:16:27 »
С ADI simulator ввожу данные, проверяю устраевает меня такой сигнал или нет, записываю в EEPROM и на этом все.
Вот вот. И так думаю не ужели ни кто не может написать програмку для простого программирования.
Тестировал чип LTC6946 с помощью вот этой небольшой программы.
Так все видно не понравилось переписал.
Вот похожую програмку и надо сделать для ADF4350-51
P.S. при подключение Пик контроллера к ком порту - программа управляет синтезатором.

« Последнее редактирование: 26 Январь 2022, 18:20:29 от UR8IP Андрей »
73! Андрей