Например TDA7294

Форум РадиоКот • Просмотр темы - Формирование случайной импульсной последовательности
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Чт мар 28, 2024 11:46:38

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 76 ]  1, , ,  
Автор Сообщение
Не в сети
 Заголовок сообщения: Формирование случайной импульсной последовательности
СообщениеДобавлено: Сб дек 02, 2017 19:18:47 
Открыл глаза

Зарегистрирован: Вс май 28, 2017 19:07:32
Сообщений: 63
Рейтинг сообщения: 0
Здарова, ребята.

Тут делаю небольшое устройство (пишу на сишке) на базе пичка (PIC18F1230). Его задачи:



В ходе работы возникли следующие вопросы:

1. Как выбрать правильно МК под мою задачу?



2. Где можно в даташите посмотреть требования к окружающим условиям и к источнику питания (я в английском слаб, хотел бы просто ключевые слова получить, если можно)?

3. Как сделать задержку на определенное время?



4. Как узнать, что кнопка нажата?

5. Является ли признаком быдло-кода использование оператора goto программировании МК на C?

6. Как правильно настроить биты конфигурации в МК (использую MPLAB X 4.05)? А то я фигню какую-то понастраивал.

7. Какой компилятор оптимальнее всего использовать для решения таких задач? И какие у него должны быть настройки?

Прикладываю все важные файлы (проект в протосе, мплабе, изображение пичка)

Картинка пичка:



Код:



Вложения:
Комментарий к файлу: Проект в PROTEUS
Proteus.rar [44.9 KiB]
Скачиваний: 254
Комментарий к файлу: Проект в MPLAB
Programm.X.rar [69.14 KiB]
Скачиваний: 255
Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Формирование случайной импульсной последовательности
СообщениеДобавлено: Вс дек 03, 2017 00:42:08 
Друг Кота
Аватар пользователя

Карма: 130
Рейтинг сообщений: 2707
Зарегистрирован: Чт янв 10, 2008 22:01:02
Сообщений: 21621
Откуда: Московская область, Фрязино
Рейтинг сообщения: 0
Задача действительно простая и может быть реализована практически на любом контроллере, желательно с модулем CCP (Capture-Compare-PWM). Этот модуль позволит аппаратно получать импульсы в 30 мкс. Но можно и без него, просто дергая ногой с программной задержкой в 30 мкс.
Единственное, что Вы не сможете получить - True Random. Любая случайная функция будет ПСЕВДОслучайной, то есть иметь какой то интервал повторения.
Узнать нажатие кнопки можно опросом порта и маскированием бита на котором висит кнопка. Опрос следует проводить с интервалом большим, чем время дребезга кнопки. Это позволит защититься от этого самого дребезга. Обычно хватает интервала 10...30 миллисекунд.
Совершенно непонятно зачем Вам goto для такой задачи. И таки да, на Си этот оператор применять не следует без каких то совершенно безвыходных случаев (я таких не встречал).
Температурный диапазон и требования к питанию указаны в разделе электрических параметров (в конце даташита). Факт того, что Вы их не нашли, означает, что Вы их и НЕ ПЫТАЛИСЬ искать. Достаточно посмотреть оглавление. Незнание английского тоже не аргумент, нынче гуглопереводчик доступен так же, как и сам гугол.
Выбор Вами контроллера совершенно не обоснован. Ну разве только он единственный есть в наличии. Это очень старый МК и весьма дорогой.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Формирование случайной импульсной последовательности
СообщениеДобавлено: Вс дек 03, 2017 02:45:09 
Первый раз сказал Мяу!

Карма: 2
Рейтинг сообщений: 0
Зарегистрирован: Чт май 01, 2014 07:28:15
Сообщений: 28
Рейтинг сообщения: 0
...
Единственное, что Вы не сможете получить - True Random. ...


Не так давно решено и описано по ссылке в сообщении #593469


.


Вернуться наверх
 
PCBWay - всего $5 за 10 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Онлайн просмотровщик Gerber-файлов от PCBWay + Услуги 3D печати
Не в сети
 Заголовок сообщения: Re: Формирование случайной импульсной последовательности
СообщениеДобавлено: Вс дек 03, 2017 05:00:55 
Друг Кота
Аватар пользователя

Карма: 130
Рейтинг сообщений: 2707
Зарегистрирован: Чт янв 10, 2008 22:01:02
Сообщений: 21621
Откуда: Московская область, Фрязино
Рейтинг сообщения: 0
Это не решение. Это хуже, чем псевдослучайная функция. Патамушта случайная функция подразумевает на выходе белый шум в спектральном интервале квантования, а с WDT получится корреляция с питанием и температурой. А это совсем не случайные величины. То есть матожидание будет следовать за этими величинами.
Если человек решает задачи криптографии, то простым будет генератор шума на стабилитроне и ОУ. Сигнал подаем на АЦП и имеем тот самый True Random. А если это типа" елочной гирлянды", то даже тупое повторение таблицы из 256 значений даст более чем отличный результат.


Вернуться наверх
 
Сравнительное тестирование аккумуляторов EVE Energy и Samsung типоразмера 18650

Инженеры КОМПЭЛ провели сравнительное тестирование аккумуляторов EVE и Samsung популярного для бытовых и индустриальных применений типоразмера 18650. Для теста были выбраны аккумуляторы литий-никельмарганцевой системы: по два образца одного наименования каждого производителя – и протестированы на двух значениях тока разряда: 0,5 А и 2,5 А. Испытания проводились в нормальных условиях на электронной нагрузке EBD-USB от ZKEtech, а зарядка осуществлялась от лабораторного источника питания в режиме CC+CV в соответствии с рекомендациями в даташите на определенную модель.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Формирование случайной импульсной последовательности
СообщениеДобавлено: Вс дек 03, 2017 06:52:37 
Открыл глаза

Зарегистрирован: Вс май 28, 2017 19:07:32
Сообщений: 63
Рейтинг сообщения: 0
Задача действительно простая и может быть реализована практически на любом контроллере, желательно с модулем CCP (Capture-Compare-PWM). Этот модуль позволит аппаратно получать импульсы в 30 мкс. Но можно и без него, просто дергая ногой с программной задержкой в 30 мкс.
Единственное, что Вы не сможете получить - True Random. Любая случайная функция будет ПСЕВДОслучайной, то есть иметь какой то интервал повторения.
Узнать нажатие кнопки можно опросом порта и маскированием бита на котором висит кнопка. Опрос следует проводить с интервалом большим, чем время дребезга кнопки. Это позволит защититься от этого самого дребезга. Обычно хватает интервала 10...30 миллисекунд.
Совершенно непонятно зачем Вам goto для такой задачи. И таки да, на Си этот оператор применять не следует без каких то совершенно безвыходных случаев (я таких не встречал).
Температурный диапазон и требования к питанию указаны в разделе электрических параметров (в конце даташита). Факт того, что Вы их не нашли, означает, что Вы их и НЕ ПЫТАЛИСЬ искать. Достаточно посмотреть оглавление. Незнание английского тоже не аргумент, нынче гуглопереводчик доступен так же, как и сам гугол.
Выбор Вами контроллера совершенно не обоснован. Ну разве только он единственный есть в наличии. Это очень старый МК и весьма дорогой.


1. Про рандом я знаю, что получаю псевдослучайное число.
2. Спасибо, некоторые нужные строчки в даташите нашел.
3. А какой тогда из современных и недорогих пичков (именно пичок хочу) можно взять?


Вернуться наверх
 
Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Формирование случайной импульсной последовательности
СообщениеДобавлено: Вс дек 03, 2017 07:07:10 
Друг Кота
Аватар пользователя

Карма: 130
Рейтинг сообщений: 2707
Зарегистрирован: Чт янв 10, 2008 22:01:02
Сообщений: 21621
Откуда: Московская область, Фрязино
Рейтинг сообщения: 1
3. Полагаю, что PIC12F1822 Вас устроит. Если кварцевая точность 30 мкс не нужна (1...2% разброса устроит), то можно еще понизить цену и взять PIC12F1501, а может и PIC10F322. Последний вообще в корпусе SOT23-6, что сделает устройство суперкомпактным.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Формирование случайной импульсной последовательности
СообщениеДобавлено: Вс дек 03, 2017 07:28:29 
Открыл глаза

Зарегистрирован: Вс май 28, 2017 19:07:32
Сообщений: 63
Рейтинг сообщения: 0
Спасибо, 1-2% вполне устроят.

Пока попробую на старом мк доделать полностью, а потом уже попробую на один из этих пичков перенести.

Таки да, компактный пичок:



ОПЪ:

Как заставить работать такую строчку:

Код:
__delay_us(K);


где:

Код:
int K = DELMIN + rand() % DELMAX;


Компилятор на это ругается:

main.c:5388: error: (800) undefined symbol "__delay$0"
main.c:5393: error: (800) undefined symbol "__delay"

Но такая строчка работает:

Код:
__delay_us(SIGNAL); // Длительность сигнала


SIGNAL - через #define объявлен.

Так же, задержка работает и при большИх значениях (400 000), хотя на форуме англоязычном говорили, что может из-за этого такая ошибка.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Формирование случайной импульсной последовательности
СообщениеДобавлено: Вс дек 03, 2017 10:54:42 
Модератор
Аватар пользователя

Карма: 90
Рейтинг сообщений: 1289
Зарегистрирован: Чт мар 18, 2010 23:09:57
Сообщений: 4510
Откуда: Планета Земля
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
__delay_us и __delay_ms - это не функции, а встроенные в компилятор макросы. По этому, переменную в них передавать нельзя.
Если хотите с переменной, то пишите свою функцию. Но учтите, что частота процессора при этом должна быть достаточной, чтобы отработать 1 цикл в функции задержки за 1 us.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Формирование случайной импульсной последовательности
СообщениеДобавлено: Вс дек 03, 2017 14:12:27 
Открыл глаза

Зарегистрирован: Вс май 28, 2017 19:07:32
Сообщений: 63
Рейтинг сообщения: 0
__delay_us и __delay_ms - это не функции, а встроенные в компилятор макросы. По этому, переменную в них передавать нельзя.
Если хотите с переменной, то пишите свою функцию. Но учтите, что частота процессора при этом должна быть достаточной, чтобы отработать 1 цикл в функции задержки за 1 us.

Вот проблема как раз в том, что я сам писал задержку через пустой цикл for, но увы, потерпел фиаско, слишком неточно.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Формирование случайной импульсной последовательности
СообщениеДобавлено: Вс дек 03, 2017 14:33:31 
Друг Кота
Аватар пользователя

Карма: 130
Рейтинг сообщений: 2707
Зарегистрирован: Чт янв 10, 2008 22:01:02
Сообщений: 21621
Откуда: Московская область, Фрязино
Рейтинг сообщения: 0
точные задержки делают на таймере и прерываниях.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Формирование случайной импульсной последовательности
СообщениеДобавлено: Пн дек 04, 2017 20:48:15 
Открыл глаза

Зарегистрирован: Вс май 28, 2017 19:07:32
Сообщений: 63
Рейтинг сообщения: 0
Я столкнулся ещё с одной неопределенностью. Как правильно назначить направление портов?

Я сделал так и все работает*:

Код:
    TRISA = 0b11111111; // Направление работы ножек порта А (вход)
    TRISB = 0b00000000; // Направление работы ножек порта В (выход)


Под работает я понимаю, что на выходе получаю то, что хочу.

Но в некоторых гайдах я встречал, что для входа наоборот, нужно ставить все нули, а для выхода - единицы.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Формирование случайной импульсной последовательности
СообщениеДобавлено: Вт дек 05, 2017 03:43:16 
Друг Кота
Аватар пользователя

Карма: 130
Рейтинг сообщений: 2707
Зарегистрирован: Чт янв 10, 2008 22:01:02
Сообщений: 21621
Откуда: Московская область, Фрязино
Рейтинг сообщения: 2
TRISA/TRISB - означает Tri-state - третье состояние, то есть отключенное состояние ВЫХОДНОГО буфера.
Таким образом, 1 в регистре TRIS означает чистый вход, а 0 - выход и вход одновременно (можно прочесть значение выхода).
Не забывайте, что помимо ТRIS ногой управляет аналоговая функция этой ноги, если она присутствует. Включение аналоговой функции отключает цифровой вход.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Формирование случайной импульсной последовательности
СообщениеДобавлено: Вт дек 05, 2017 04:49:49 
Потрогал лапой паяльник
Аватар пользователя

Карма: 3
Рейтинг сообщений: 3
Зарегистрирован: Ср май 03, 2017 03:22:26
Сообщений: 303
Рейтинг сообщения: 1
Как-то делал генератор случайных чисел . и за основу взял импульсы дребезга контактов вполне не плохо получается.

_________________
andrei23061996@gmail.com
.................................................................................................................


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Формирование случайной импульсной последовательности
СообщениеДобавлено: Вт дек 05, 2017 09:46:54 
Держит паяльник хвостом

Карма: 6
Рейтинг сообщений: 146
Зарегистрирован: Чт авг 10, 2017 20:57:51
Сообщений: 980
Рейтинг сообщения: 1
Посмотри здесь. После получения случайного числа используй модуля ССР в режиме "сравнение установка выхода в 1/0" (compare set/clear output) для получения своей последователности.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Формирование случайной импульсной последовательности
СообщениеДобавлено: Вт дек 05, 2017 15:37:49 
Открыл глаза

Зарегистрирован: Вс май 28, 2017 19:07:32
Сообщений: 63
Рейтинг сообщения: 0
Спасибо.

А вот я что ещё прикинул:

Есть функция srand(чиселка), которая выполняет инициализацию генератора случайных чисел rand(). С помощью неё я хочу и запустить псевдогенератор на пички, вставляя в srand предыдущее сгенерированное число. А первое число можно получить из rand(), например.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Формирование случайной импульсной последовательности
СообщениеДобавлено: Вт дек 05, 2017 19:59:33 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 97
Рейтинг сообщений: 2057
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18024
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
Первое число лично я получаю следующим образом: сразу после подачи питания (определяю по флагам), еще до того момента, когда Си очистит память статических переменных, подсчитываю CRC16 всей памяти, что доступна, ну или заметного её куска. И уже эту CRC использую в качестве стартового для srand. Так как после подачи питания RAM имеет случайное состояние, получается почти настоящая случайность. Во всяком случае получше srand(rand()), что вы предложили.

_________________
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

скушно, бабоньки!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Формирование случайной импульсной последовательности
СообщениеДобавлено: Ср дек 06, 2017 21:16:12 
Открыл глаза

Зарегистрирован: Вс май 28, 2017 19:07:32
Сообщений: 63
Рейтинг сообщения: 0
На PIC18F1230 я сделал, все работало, пусть и через костыли (не смог отключить АЦП на выводах RA0 и RA1, подключил к другим - все работало).
На PIC10F322 - все не так гладко. Почему-то не загорается красный светодиод при отсутствии входных сигналов.

Прикладываю схему из протоса и код.

Код:


Схема:



Вложения:
Комментарий к файлу: hex
PIC10F322.X.production.hex [2.46 KiB]
Скачиваний: 546
Комментарий к файлу: Проект в протосе
PIC10F322.rar [71.58 KiB]
Скачиваний: 258
Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Формирование случайной импульсной последовательности
СообщениеДобавлено: Ср дек 06, 2017 22:23:35 
Держит паяльник хвостом

Карма: 6
Рейтинг сообщений: 146
Зарегистрирован: Чт авг 10, 2017 20:57:51
Сообщений: 980
Рейтинг сообщения: 0
Читаем документацию на 10F322

LVP = 1 - MCLR/Vpp pin is MCLP. Weak Pull-Up is enabled.

Твой код не может определить 1 на входе. Там всегда есть 1.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Формирование случайной импульсной последовательности
СообщениеДобавлено: Чт дек 07, 2017 03:00:58 
Друг Кота
Аватар пользователя

Карма: 130
Рейтинг сообщений: 2707
Зарегистрирован: Чт янв 10, 2008 22:01:02
Сообщений: 21621
Откуда: Московская область, Фрязино
Рейтинг сообщения: 0
Вообще непонятна история с двумя кнопками на одном входе. Что автор хотел получить?
Впрочем, со светодиодами такая же история. Светодиоды нельзя будет погасить оба.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Формирование случайной импульсной последовательности
СообщениеДобавлено: Чт дек 07, 2017 05:07:25 
Открыл глаза

Зарегистрирован: Вс май 28, 2017 19:07:32
Сообщений: 63
Рейтинг сообщения: 0
Читаем документацию на 10F322

LVP = 1 - MCLR/Vpp pin is MCLP. Weak Pull-Up is enabled.

Твой код не может определить 1 на входе. Там всегда есть 1.


А как убрать её?

#pragma config LVP = OFF - не помогает.

КРАМ писал(а):
Вообще непонятна история с двумя кнопками на одном входе. Что автор хотел получить?
Впрочем, со светодиодами такая же история. Светодиоды нельзя будет погасить оба.


Нажатая кнопка включения - все работает. Не нажата кнопка включения или нажата кнопка выключения - МК не генерирует сигнал, только светодиод красный горит. На PIC18F1230 у меня все работало, тут же - нет.


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 76 ]  1, , ,  

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6


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

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y