Котуинко

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Ответить
Друг Кота
Аватара пользователя
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Сообщение oleg110592 »

[uquote="BOB51",url="/forum/viewtopic.php?p=3979756#p3979756"]В отличии от DDS использован только базовый счётчик периода без формирования сигнала через массив данных в ПЗУ.[/uquote]
ФЕЭЭЭЭ!!!(c) туеву хучу регистров забрать вместо одной таблички :shock:
Спойлер

Код: Выделить всё

 .def kod_f01 = r1 ; оперативный буфер кода частоты генератора 0
             ; байт 1
             ;(mfr1 математика и обмен с ПЗУ/самопрограммирование)
 .def kod_f02 = r2 ; оперативный буфер кода частоты генератора 0
             ; байт 2
             ;(s_sreg зеркало SREGограниченный функционал)
 .def kod_f10 = r3 ; оперативный буфер кода частоты генератора 1
             ; байт 0
             ;(sys_flag системные флагиограниченный функционал)
 .def kod_f11 = r4 ; оперативный буфер кода частоты генератора 1
             ; байт 1
             ;(ограниченный функционал)
 .def kod_f12 = r5 ; оперативный буфер кода частоты генератора 1
             ; байт 2
             ;(ограниченный функционал)
 .def kod_f20 = r6 ; оперативный буфер кода частоты генератора 2
             ; байт 0
             ;(ограниченный функционал)
 .def kod_f21 = r7 ; оперативный буфер кода частоты генератора 2
             ; байт 1
             ;(ограниченный функционал)
;
 .def kod_f22 = r8 ; оперативный буфер кода частоты генератора 2
             ; байт 2
             ;(ограниченный функционал)
 .def bak_00 = r9 ; оперативный накопитель генератора 0 байт 0
             ;(ограниченный функционал)
 .def bak_01 = r10 ; оперативный накопитель генератора 0 байт 1
             ;(ограниченный функционал)
 .def bak_02 = r11 ; оперативный накопитель генератора 0 байт 2
             ;(ограниченный функционал)
 .def bak_10 = r12 ; оперативный накопитель генератора 1 байт 0
             ;(ограниченный функционал)
 .def bak_11 = r13 ; оперативный накопитель генератора 1 байт 1
             ;(ограниченный функционал)
 .def bak_12 = r14 ; оперативный накопитель генератора 1 байт 2
             ;(ограниченный функционал)
 .def bak_20 = r15 ; оперативный накопитель генератора 2 байт 0
             ;(ограниченный функционал)
;
; область полного функционала
 .def bak_21 = r16 ; оперативный накопитель генератора 2 байт 1
             ;(tmp0 рабочий регистр полный функционал)
 .def bak_22 = r17 ; оперативный накопитель генератора 2 байт 2
             ;(tmp1 рабочий регистр полный функционал)
 .def g_flags = r18 ; флаги управления каналами
             ; (tmp2 рабочий регистр полный функционал)
 .def gm_input = r19 ; дубликат текущего статуса выходных линий генераторов
             ; (tmp3 рабочий регистр полный функционал)
 .def tmp0 = r20 ; РВХ общего назначения

Код: Выделить всё

    add bak_00,kod_f00
    adc bak_01,kod_f01
    adc bak_02,kod_f02
    brbc SREG_C,tone1
    sbrs gm_input,g0_out
    sbi genoutport,g0_out
    sbrc gm_input,g0_out
    cbi genoutport,g0_out

Код: Выделить всё

add r28, r24 ' 1 cycle
adc r29, r25 ' 1 cycle
adc r30, r26 ' 1 cycle
sbrc r30,7    ' 1/2
rjmp m1      ' 2/0
cbi PortD,0  ' 0/2
rjmp m2     ' 0/2
m1:
Реклама
Друг Кота
Аватара пользователя
Сообщения: 15792
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

Так это практически одно и то же - только в Вашем случае ОДИН генератор, а у меня ТРИ
:wink:
(используется один источник тактирования на Т0 для всех трех "генерирующих модулей").
И каждый из трех может "бежать" самостоятельно.
Посему и регистров больше используется.
8)
В принципе можно до четырех одновременно работающих генераторов дотянуть...
Насчет таблички... чей-то она мне не сильно понравилась - меандр можно получить и из двух полупериодов - для выходных данных только инвертируем текущее значение выходного сигнала. И то у 15 КГц "джиттер" на осциллограмме наблюдается...
Другое дело - была бы генерация синуса или чего другого...
Тогда можно хоть к каждому из "генерирующих модулей" свою табличку прикошмарить...
:dont_know:
А чего б таки "прикладного" на той основе замутить... Пока не придумалось...
ЛЕЕНЬ...
:sleep:
Реклама
Друг Кота
Аватара пользователя
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Сообщение oleg110592 »

[uquote="BOB51",url="/forum/viewtopic.php?p=3979864#p3979864"]Так это практически одно и то же - только в Вашем случае ОДИН генератор, а у меня ТРИ[/uquote]
а если пять и более (для пианино пальцев 10) - регистров не хватит. Придется из ОЗУ в регистры нужный канал загрузить, надо всего 6 регистров временно.

Код: Выделить всё

lds r24,{Fincr+0} 'LSB passa incremento frequenza
lds r25,{Fincr+1} 'usa 24 dei 32 bit
lds r26,{Fincr+2} 'MSB
а таблица будет то одна
з.ы. прикладное - такое же пианино как на PIC16 с OSA, AVR то пошустрее будет
Друг Кота
Аватара пользователя
Сообщения: 15792
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

Один генератор ведёт одну частоту.
Таблица даёт только форму одного периода частоты для данного генератора.
А замена параметров для частоты одинакова как для одного комплекта регистров с одним генератором, так и для нескольких. Лишь бы регистров хватило и время для замены содержимого вписывалось в остаток времени тактового интервала (то, что останется от обработки прерывания по переполнения Т0).
Собственно тот вопрос "запаса по времени" меня и интересовал. Остаётся проверить хотя-бы каким-нибудь "перебором частот"...
Все же интересно - сколько возможного можно выдавить из ресурса АВРки с удобоваримыми параметрами без особого изврата.
Регистров то особо не жалко - "нижний" участок с "ограниченными возможностями" в большинстве случаев "лежит без дела" - а так вроде бы при делах (в основном для подавляющего большинства программ нагрузка на R16-R25 и указатели). Зато выигрыш в объёме ПЗУ - параметры генерации могут быть и вычисляемыми/фиксированными для большинства "примитивов" применения. А это и ПИКовые малютки и АВР 8-лапки.
8)
Реклама
Эиком - электронные компоненты и радиодетали
Друг Кота
Аватара пользователя
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Сообщение oleg110592 »

[uquote="BOB51",url="/forum/viewtopic.php?p=3980100#p3980100"]Таблица даёт только форму одного периода частоты для данного генератора.[/uquote]
ну для меандра таблица то и не нужна - следим за старшим битом аккумулятора
вместо

Код: Выделить всё

		lpm						; 3
		out		PORTB,r0		; 1
используется

Код: Выделить всё

sbrc r30,7    ' 1/2
универсальность это хорошо - для пианино на слух синусоида звучит "мягче".
сколько "выдавить" - тут надо технически(с), посчитать можно

Код: Выделить всё

; Output frequency (using 24 bit accumulator) :
;
;	f = deltaPhase * fClock/2^24
;
;   fClock is in this case the CPU clock divided by the
;	number of cycles to output the data ( 9 cycles )
;
;	f = r24/r25/r26 * (11059200/9)/16777216
;
;	f = r24/r25/r26 * 0.073242188
;
;	fMax (theoretical) = 0.5 * fClock
в случае больше каналов будет уже не 9 циклов
Реклама
Друг Кота
Аватара пользователя
Сообщения: 15792
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

Вопрос в том, чего удобнее использовать из имеющегося арсенала:
аппаратный таймер (в разных режимах);
аппаратно - программный таймер "по классике" (счетчик досчета);
аппаратно - программный таймер с "модулем DDS";
возможность одновременного использования нескольких программных модулей на базе единого аппаратного предделителя...
Зависит и от начинки соответствующего семейства (возможная тактовая частота, аппаратная поддержка) и от допусков на результат - стабильность, разрешающая способность, дискретность шага перестройки частоты.
Так что неплохие заготовки получились.
:beer:
Реклама
Друг Кота
Аватара пользователя
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Сообщение oleg110592 »

наткнулся на "пищание на разные голоса" с помощью голубой пилюльки, на ардуино:

Код: Выделить всё

// пример для stm32f103c8t6 Генерация 4 - х разных частот одним таймером.
/* Генерации одним таймером нескольких частот за счёт перепрограммирования
 *  регистров сравнения в прерываниях. Выходы PA8,9,10,11 Частоты с данными параметрами
 *  549,36Hz 1098Hz 2197 Hz 4394Hz компилить в ардуине (аддон от STM) без UART и без USB
 */
uint16_t CCR1_Val = 32768;
uint16_t CCR2_Val = 16384;
uint16_t CCR3_Val = 8192;
uint16_t CCR4_Val = 4096;
void setup()
{
    HardwareTimer *MyTim = new HardwareTimer(TIM1);
    RCC->APB2ENR |= (1 << 11) | (1 << 2); //tim1, gpioa clock enable
    GPIOA->CRH &= ~0xFFFF;
    GPIOA->CRH |= 0xBBBB;                                    //PA8,9,10,11 output altfunc
    TIM1->CCER = (1 << 12) | (1 << 8) | (1 << 4) | (1 << 0); //pin enable
    TIM1->CCMR1 = (3 << 12) | (3 << 4);                      //toogle mode
    TIM1->CCMR2 = (3 << 12) | (3 << 4);                      //toogle mode
    TIM1->PSC = 1;
    TIM1->ARR = 65535;
    TIM1->CCR1 = CCR1_Val;
    TIM1->CCR2 = CCR2_Val;
    TIM1->CCR3 = CCR3_Val;
    TIM1->CCR4 = CCR4_Val;
    TIM1->BDTR = 1 << 14; //output enable
    TIM1->CR1 = 1;
    MyTim->attachInterrupt(1, tim1_ch1);
    MyTim->attachInterrupt(2, tim1_ch2);
    MyTim->attachInterrupt(3, tim1_ch3);
    MyTim->attachInterrupt(4, tim1_ch4);
}
void tim1_ch1() { TIM1->CCR1 += CCR1_Val; }
void tim1_ch2() { TIM1->CCR2 += CCR2_Val; }
void tim1_ch3() { TIM1->CCR3 += CCR3_Val; }
void tim1_ch4() { TIM1->CCR4 += CCR4_Val; }

void loop() {}
Друг Кота
Аватара пользователя
Сообщения: 15792
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

Пока занимаюсь экспериментальной проверкой портабельности по мотивам
https://radiokot.ru/forum/viewtopic.php?f=59&t=175573
8)
Друг Кота
Аватара пользователя
Сообщения: 15792
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

Итак... Краткий отчет по вопросу реанимации ардуиноIDE (1.8.9) на компьютерах с виндовс ХР (х32):
резервнаякопия ардуино IDE.pdf
(72.83 КБ) 432 скачивания
вот такой фокус-покус... оченно симпатяшный...
:hunger:
Вот с размещением "вручную" там еще поразбираться надо - несколько иная раскладка внутренних каталогов.
:roll:

Поскольку ни один вменяемо - разумный КОТ не станет гробить имеющееся у него на компе программное обеспечение, а затравку иным способом можно только на еще одном "лишнем" пустом ПК с виндовсХР сотворить....
В то же время резерв делать надо ДО факта непланируемого сбоя....
Я выкладываю подготовленную "чистую" затравку ардуиноIDE 1.8.9 для размещения в корне резервной флешки (вышеуказанная методика).
Пользователь самостоятельно сможет ее "нашпиговать" под свои интересы. А уж затем или использовать в режиме дублера или сделать замену в случае катастрофического отказа основной IDE/
Ссылка на архив на яндекс-диске
https://disk.yandex.ua/d/zrYPVougRHG0VA
:hunger:
(попробую еще этот архивчик в СУНДУК положить - там доступ "демократичнее" будет)
:roll:

всех старых КОТОВ родом из СССР с праздничком!
:beer:
Друг Кота
Аватара пользователя
Сообщения: 15792
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

А вот и ссыль на СУНДУК КОТА подоспела
https://sunduk.radiokot.ru/view/?id=1613887033
это архив для создания резервной копии ардуиноIDE 1.8.9 на автономной флешке.
Комплект-минимум.
:beer:
Друг Кота
Аватара пользователя
Сообщения: 15792
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

Дополнительные замечания по применению "резервной копии" (виндовс ХР х32)
Собственно при автозагрузке может не производится корректной установки драйверов для программаторов.
Это касается платформ STM8/STM32 относительно программатора STLink...
Обнаружилось при проработке STM8.
Для устранения необходимо скачать новые драйвера вот тут:
https://static.chipdip.ru/lib/163/DOC001163692.zip
и установить их.
Далее работа с платформой sduino позволяет работать с платкой
https://img.radiokot.ru/files/20529/2g9hc95yn3.jpg (stm8s105k4t6 brekout board)
используя "народный" вариант STLink V2
https://img.radiokot.ru/files/20529/2g9hmcjxkn.jpg
:hunger:
Теперь с ним (stm8s105k4t6 brekout board и stm8s105c6 discovery board) поэкспериментировать надо бы...
:roll:

С платкой
https://img.radiokot.ru/files/20529/2g9hc84gx2.jpg (stm8s103f3 brekout board)
придется еще разбираться - напрямую чего-то нехватает...
А старая версия STVP похоже не определяет stlink V2...
:roll:

И таки можно и с https://img.radiokot.ru/files/20529/2g9hc84gx2.jpg (stm8s103f3 brekout board) поработать...
Просто старая версия ST TOOLS stlink V2 не ведала...
Пришлось переустановку сделать
дистрибутив брал на этой страничке
https://www.drive2.ru/b/520221558250144309/
собственно сам дистрибутив
http://umat.ru/files/en.stvp-stm8.zip
после переустановки STVP работает как с "устаревшей"
stm8s105c6 discovery board (там своя платка с STLink старой версии)
так и с stlink V2.
Посему можно прошивку для stm8s103f3 brekout board через "внешний программатор" протащить.
(Не путать с программатором в ардуинке!).
:beer:
Друг Кота
Аватара пользователя
Сообщения: 3386
Зарегистрирован: Пн окт 11, 2010 19:00:08

Сообщение Мурик »

BOB51 писал(а):Собственно при автозагрузке может не производится корректной установки драйверов для программаторов.
Это касается платформ STM8/STM32 относительно программатора STLink...
Ни разу такого не замечал.
Драйвер не находится в автозагрузке, а запускается при обнаружении связанного с ним устройства.
BOB51 писал(а):Для устранения необходимо скачать новые драйвера вот тут
Предлагаете ставить устаревшие (2011 год) драйверы с неизвестного сайта, вместо тех что на сайте-производителе?
BOB51 писал(а):Далее работа с платформой sduino позволяет работать с платкой https://img.radiokot.ru/files/20529/2g9hc95yn3.jpg (stm8s105k4t6 brekout board)
Разве что просто попробовать. Для практического использования, лучше взять плату с STM32F103C8T6. Стоит столько же, а возможностей больше.
Друг Кота
Аватара пользователя
Сообщения: 15792
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

Драйвера периферии некоторые платформы (при автоматической установке/обновлении) таки ставят.
Причём иногда в самый неподходящий момент - когда надоело следить за окном обновления.
:(
Относительно "старых" драйверов/программ от stm из "сторонних источников"...
Речь то об аварийном резерве под ХР - там к сожалению не все " самое современное" работать будет.
Приходится "старье" разыскивать и перепроверять...
То, что указано на своих "подопытных" проверил - работает.
Кому удастся более качественное добыть(да в свободном доступе без регистраций) - надеюсь положит дополнением.
Для 7-10ки этих проблем не возникает - там все современное и так ставится.
:beer:

ГЫММ...
Ежли уж SDCC пристроили один раз, то возможно его кто-нибудь адаптирует и для продукции STC
http://www.stcmcu.com/
http://stcmicro.com/rjxz.html
...?
Ядро там от MCS51 (SDCC), а "прошивалка" весьма "демократично-доступна"...
:roll:
:tea:
Друг Кота
Аватара пользователя
Сообщения: 15792
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

Графические добавления для парка платок от адуринки:
https://img.radiokot.ru/files/20529/2gdn70xljm.GIF
и архивчик с сплан и лэйоут заготовками
GRAF.zip
(68.19 КБ) 218 скачиваний
добавлены платки для STM8.
8)
Друг Кота
Аватара пользователя
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Сообщение oleg110592 »

Путь от простой IDE к продвинутой IDE

Хотя Arduino IDE предоставляет простой и понятный интерфейс, который идеально подходит для начинающих пользователей, более продвинутые пользователи часто сообщают, что возможности редактирования немного ограничены по сравнению с современными редакторами. Сюда входят такие функции, как отступ кода, сворачивание блоков, автоматическое закрытие скобок, поиск и замена регулярных выражений, переключение комментариев. В дополнение к этому, многие пользователи просили отладку в реальном времени , то есть возможность запускать код на подключенной плате и останавливать его на заданной строке для проверки содержимого переменных, памяти и регистров.

IDE 1.x разработана на Java, и ее монолитная кодовая база затрудняет реализацию таких функций. Java также становится устаревшей технологией для настольных приложений и постепенно вытесняется новыми операционными системами и магазинами приложений, что заставляет нас тратить время на решение проблем совместимости.

Пришло время: поприветствуйте Arduino IDE 2.0 (бета)

Мы рады сообщить, что с сегодняшнего дня бета-версия Arduino IDE 2.0 доступна для загрузки, а ее репозитории кода становятся открытыми . Он оснащен современным редактором и обеспечивает лучший пользовательский интерфейс благодаря адаптивному интерфейсу и более быстрому времени компиляции . Не бойтесь попробовать это сегодня: обновление будет простым, так как интерфейс будет выглядеть очень знакомым. Но давайте посмотрим, какие вкусности вы найдете...
вкусности тут:
https://blog.arduino.cc/2021/03/01/anno ... -2-0-beta/
з.ы. Проверил - ядра устанавливаются, похожим (как ранее) способом, примеры компилятся. Редактировать код стало намного приятнее. Из коробки есть темная тема. Фокус с папкой "portable" не проходит - в линуксе образуется 2 дополнительных папки, правда в местах для этого предназначенных
Друг Кота
Аватара пользователя
Сообщения: 15792
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

Жаль таки тянет на системный блок с 10-кой...
:roll:
Друг Кота
Аватара пользователя
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Сообщение oleg110592 »

на просторах есть обрезанный образ вин10х64, называется "tiny10 b4 x64.iso". Памяти после загрузки 447мб занимает, на винте около 3Гб, процессов в диспетчере задач - всего 32. Пробовал на слабом ноутбуке - вполне норм. шевелится, VSCode там работал, а новая ардуино ИДЕ на такой же основе. Правда интерфейс английский, но мы ж программисты - народ мясистый, если Си и ассемблер знаем - значит и английский знаем.
Друг Кота
Аватара пользователя
Сообщения: 15792
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

То ужшшш лучше подождать до обновления системника - все равно когда-то да придется тратиться...
:sleep:
Друг Кота
Аватара пользователя
Сообщения: 15792
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

Как-то уже пережевывали с ARV тему UNION...
Однако глянул вот тут
https://radiokot.ru/forum/viewtopic.php ... 0#p3990790
Да решил под адуринку проверить... (а заодно посмотреть куда выравнивает вомпилятор - к старшим или к младшим байтам)...
То все теория "как разместить?" а кусманчика "как применить" и нету...
Тем более, что симулятор (UnoArduSim 2.9.1) подобную конструкцию не понимает...
Получился вот такой тестик симпатяшный:
Спойлер

Код: Выделить всё

union {
  long my_long;
  struct
   {
    unsigned int my_int1;
    unsigned int my_int2;
   };
  struct
   {
    unsigned char my_char1;
    unsigned char my_char2;
    unsigned char my_char3;
    unsigned char my_char4;
   };
} my_sptp;

void setup() {
  // put your setup code here, to run once:
 Serial.begin(9600);
/* my_sptp.my_char1 = 1;
 my_sptp.my_char2 = 2;
 my_sptp.my_char3 = 3;
 my_sptp.my_char4 = 4;
 */
}

void loop() {
  // put your main code here, to run repeatedly:

  for (long test_cnt=0; test_cnt<=300000; test_cnt++)
  {
 my_sptp.my_long=test_cnt;
 Serial.println(my_sptp.my_long, HEX);
 Serial.print(my_sptp.my_int2, HEX);Serial.print(F(" : "));
 Serial.println(my_sptp.my_int1, HEX);
 Serial.print(my_sptp.my_char4, HEX);Serial.print(F(" : "));
 Serial.print(my_sptp.my_char3, HEX);Serial.print(F(" : "));
 Serial.print(my_sptp.my_char2, HEX);Serial.print(F(" : "));
 Serial.println(my_sptp.my_char1, HEX);
 delay(500);
  }
 
  while (1)
  {
    
  }
}
Вполне себе работоспособный (проверено на адуринке-нано).
Однако от того, что тут https://radiokot.ru/forum/viewtopic.php ... 0#p3990790 явно отличается...
неуж-то компиляторы столь разные??...
:roll:
Модератор
Аватара пользователя
Сообщения: 4618
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля

Сообщение Аlex »

BOB51, что от чего отличается ?
Код разный ? Тогда причём тут компилятор ? Или код одинаковый, но результат разный ?
Напиши всё в одном месте, связанно и осмысленно. Без ссылок туда-сюда и всяческих загадок ... :dont_know:
Ответить

Вернуться в «Разные вопросы по МК»