-
Постов
1 590 -
Зарегистрирован
-
Посещение
Репутация
0 ОбычныйИнформация о =GM=
-
Звание
Ambidexter
Контакты
-
ICQ
Array
Информация
-
Город
Array
Retained
-
Звание
Array
Посетители профиля
3 604 просмотра профиля
-
У вас много ошибок и неточностей в коде. Основные: 1) Мастер после подачи старт-условия должен дождаться появления флага SB, вдруг шина занята... 2) Мастер после передачи адреса слейва+0, должен дождаться появления флага ADDR=1. 3) Чтобы передать байт от мастера к слейву, надо дождаться флага TxE=1, и только потом передавать байт. 4) Чтобы принять байт от слейва, надо дождаться флага RxNE=1, и только после этого принять байт. 5) После каждого ивента надо чистить флаги. Учтите слейв передаёт столько байт, сколько требует мастер, не больше, не меньше.
-
Генерация ФМ сигнала
=GM= ответил aBoomest тема в ARM, 32bit
Попробуйте сделать так. 1) Программируете один таймер1 на несимметричный шим с fШИМ=33 кГц с заполнением 50%. Для примера, если системная частота 56 МГц, то таймер должен считать до 56000/33=1697. Соответственно, регистр сравнения равен 848. Пока запускать в работу не надо. Примерный код настройки таймера1 ниже. Не забываем его включить и ноги настроить. TIM1->CCMR2=0x0068; //OC3S output TIM1->CCER=0x0400; //CC3N enable on PB1 TIM1->CNT=0x0000; //to be on the safe side TIM1->PSC=0; //48000/1=48MHz TIM1->ARR=1919; //48000/1920=25kHz TIM1->EGR=0x0001; //UG=1 TIM1->BDTR=0xD800; //moe=aoe=1 TIM1->CCR3=768; //value to compare-duty TIM1->CR1=0x0081; //APRE=1,CEN=1 2) Программируете таймер2 на 5 мс (200 Гц). Запускаете таймер2 по прерыванию. В первом прерывании запускаете таймер1 (после запуска таймер1 начнет генерить частоту 33 кГц) и начинаете подсчитывать прерывания. 3) При каждом следующем прерывании добавляете к таймеру1 половину периода таймера1 (естественно, по модулю 1697), если нужна инверсия частоты, и ничего не добавляете (для симметрии можно добавлять 0), если не нужна инверсия. 4) На последнем прерывании останавливаете таймер1, ну и таймер2. -
Пиковый детектор
=GM= ответил Dima1060 тема в В помощь начинающему
На входе детектора кажется R4 стоит, а не R1? Уравнять токи смещения через R4 и R3 не пробовали? Поставьте, скажем R4=10кОм. Ещё можно поиграться напряжением смещения через R4, оно должно быть такое же, как и через R3. -
Экономичная внешняя память.
=GM= ответил Tanya тема в В помощь начинающему
1) AT25DF081A, 1 Mбайт, 5 мкА в глубокой спячке 2) M24M02-DR, 256 Кбайт, 3 мкА в спячке. -
Ну прямо в лоб-то считать не надо. Ваша таблица по рядам (и по столбцам) будет многократно повторяться. Лучше составьте таблицу одного периода синуса на N=500 точек (для двоичного ЦПУ практичнее брать число N степени двойки, например N=512). Для первой палки считаете МАКи, беря синусы: 0,1,2,..,499 (всего 500), для второй палки берете каждый второй: 0,2,4,..,498,0,2,4,..,498 (всего 500). Для третьей палки берете каждый третий:0,3,6,.. (всего 500) и так далее. Ну и не надо считать компоненты спектра (пресловутые "палки") выше частоты Найквиста, поскольку амплитудный спектр симметричен.
-
Ну так, заранее вычислите эти коэффициенты и разместите их в таблице. У меня на 100 МГц ДСП двойной МАК для преобразования Фурье вычисляется за 10 нс. Т.о., для 200-500 точек время счёта Re/Im одной палки составит порядка 2-5 мкс. Для 30 частот время счета составит 60-150 мкс. Но это прикид для 100 МГц тактовой, а у вас 168 МГц тактовая, так что о каких секундах может идти речь?
-
Ну вообще-то, при вашем подходе к эмуляции можно легко поднять частоту до примерно 5 МГц. Ещё несколько вопросов. 1) Почему отказались от эмулятора звука? 2) Выдача меандров вместо гармонического сигнала (отрезок синуса) не напрягает? 3) А неустранимая разница частот меандра и гармонического ряда устраивает?
-
Да, речь не идёт о Z80, речь идёт о тактах (машинных циклах-МЦ) эмулятора. Тут на форуме уже было обсуждение протокола XMEM применительно к чипу памяти, надо поискать. А как насчёт микроконтроллера эмулятора? Давайте поглядим попристальнее, где показан цикл выборки команды. Например, выполняется команда чтения LD R16,Z, где Z указывает на ячейку внутреннего озу, команда выполняется за 2 МЦ. Во время первого цикла выбирается команда, во время второго читается байт из внутреннего озу, есть соответствующие рисунки (документ 2467X-AVR-06/11, стр.20, рис. 10). Теперь как будет выглядеть та же команда, когда Z указывает на внешнее озу? Опять должна быть выборка кода команды и его расшифровка (1 цикл), затем выдача ALE, это Т1 на картинке XMEM (с.331, рис.157), возможно, это ещё один цикл, затем 3 цикла на чтение озу, итого набегает 4-5 циклов...Ну не 3 цикла, по крайней мере.
-
Василий, позвольте задать пару вопросов. 1) Какова эффективная частота сэмулированного проца? Где-то прочитал, что 2.33 МГц, это верно? 2) Можно ли поднять частоту эмулирования до 4-6-8-10 МГц, и где и какие могут быть ограничения? 3) В описании авр зх спектрум вы пишете, что цикл обращения к озу составляет 3 такта, хотя вроде бы должно быть 4 такта, где правда?
-
модуль и фаза двух АЦП
=GM= ответил rf_pcb тема в Математика и Физика
Преобразование Фурье обоих сигналов должно помочь -
FSK декодер
=GM= ответил rimidalv тема в Алгоритмы ЦОС (DSP)
Обычно, в начале сообщения передают синхрослово (СС) определенной длины. Вашего байта 0x55 маловато будет для синхронизации. В своё время я использовал СС длиной 32 бита (на фидерной линии), причем программа допускала приём несколько неверных бит в любом месте СС, и то, на шумах каждые 18 минут появлялось ложное СС. Да, добавлю, что 32 битная последовательность имела хорошую АКФ, ну не как у кодов Баркера, а как у М-последовательностей... В вашем случае последовательность будет состоять из N*32 точек, вот с ней и сравнивать. Можно и определенный процент искажений допустить. Для современных процов легко делается в реале. -
Варианты есть, можно получить частоты 48 МГц, 24 МГц, 12 МГц и 6 МГц только средствами STM32F103RB6 следующим образом. Выставляем тактовую частоту 48 МГц и выдаём её на пин МСО. Далее, берём TIM1 (или TIM8), ставим три его канала в режим COMPARE, ремапим соответствующие выходы TIM1_CH1, TIM1_CH2, TIM1_CH3. Затем записываем в регистры TIM1_CCR1, TIM1_CCR2 и TIM1_CCR3 значения 2, 4 и 8. Ву а ля. Само собой разумеется, надо настроить пины на выход, всё что надо и где надо разрешить и т.д.
-
управление питанием на ПТ
=GM= ответил Dima1060 тема в В помощь начинающему
Ну, если у вас от 3,3 вольта всё работало, то единственное объяснение - это a five-volt tolerant I/O port bit. Там прямо на входе ножки стоят два диода, тот который подключен анодом, катодом подключен к спецсхеме, которая сливает излишки выше 3.3 + падение на диоде. Бороться трудно. Как вариант, если скорости вкл/выкл небольшие, можно поставить фотовольтаическую оптопару, например, PVI5033. PC817X тоже может подойти.