|
Atmega8515 + внешний генератор через USART, Я вообще то делаю? О_о |
|
|
|
Nov 17 2010, 02:09
|
Участник

Группа: Участник
Сообщений: 42
Регистрация: 25-04-10
Из: г. Одесса
Пользователь №: 56 889

|
Доброго времени суток! Есть такое учебное задание - составить генератор случайных чисел (не псевдо случайных, а именно случайных). Все что есть - атмега и подключенный к PD4 R-C генератор частоты. Собственно генератор:  Частота генератора ~10кГц. Мне кажется, что нужно при помощи USARTа считать импульсы, хотя возможно и ошибаюсь. С USARTом почти не работал. Проверка будет проводится путем подачи RESETа на МК. Подскажите, у кого какие идеи еще могут быть. Желательно с кусочками кода :-) Заранее благодарен!
|
|
|
|
|
Nov 17 2010, 07:57
|
Участник

Группа: Участник
Сообщений: 37
Регистрация: 6-04-10
Из: Ryazan
Пользователь №: 56 444

|
генератор белого шума можно собрать на стабилитроне. И снимать сигнал АЦП меги. По другому как то не придумывается.
|
|
|
|
|
Nov 17 2010, 14:21
|
Участник

Группа: Участник
Сообщений: 51
Регистрация: 11-02-10
Пользователь №: 55 414

|
QUOTE (kovigor @ Nov 17 2010, 10:34)  ... в 8515 АЦП нету, сам такой купил когда вообще не знал ничего о контроллерах, теперь понял, нужно другой покупать(((
Сообщение отредактировал IgorKossak - Nov 17 2010, 15:31
Причина редактирования: Бездумное цитирование
|
|
|
|
|
Nov 17 2010, 15:24
|
Участник

Группа: Участник
Сообщений: 42
Регистрация: 25-04-10
Из: г. Одесса
Пользователь №: 56 889

|
Дело в том, что вся эта трагедия происходит на лабораторном стенде и само задание звучит как на этом генераторе собрать генератор случайных чисел. Мне почему-то в голову пришла мысль поотлавливать шумы с ножек. Как думаете, возможен ли такой вариант? --- UPD: а если каким-то образом выдать первое случайное число (пусть даже псевдослучайное). Записать его. Запустить таймер и складывать его счетчик с этим числом пока не нажмем reset. После нажатия reset'а мы заново считаем последнее сохраненное число и снова проводим манипуляцию с таймером.
Сообщение отредактировал Dante Krieger - Nov 17 2010, 15:28
|
|
|
|
|
Nov 17 2010, 18:00
|
Гуру
     
Группа: Свой
Сообщений: 5 273
Регистрация: 30-03-10
Пользователь №: 56 295

|
Цитата(Dante Krieger @ Nov 17 2010, 19:24)  Дело в том, что вся эта трагедия происходит на лабораторном стенде и само задание звучит как на этом генераторе собрать генератор случайных чисел. Мне почему-то в голову пришла мысль поотлавливать шумы с ножек. Как думаете, возможен ли такой вариант? --- UPD: а если каким-то образом выдать первое случайное число (пусть даже псевдослучайное). Записать его. Запустить таймер и складывать его счетчик с этим числом пока не нажмем reset. После нажатия reset'а мы заново считаем последнее сохраненное число и снова проводим манипуляцию с таймером. Вариантов масса. На вашей схеме нарисован простейший генератор. И частота этого генератора плавает в очень широких пределах, в зависимости от той же температуры и напряжения питания. Отсюда первое, что приходит на ум: подсчитывать, например, прерывания от кварцованного таймера, реализованного в вашем МК, в течение высокого уровня напряжения, поступающего от предлагаемого RC - генератора. Т.е., входим в обработчик и проверяем, единичка ли на линии, тактируемой генератором. Если да, увеличиваем счетчик на "1". Если нет, то считаем, что получено очередное случайное число; кладем его в массив или выводим по UART. Рекомендую второе. Ибо в этом случае вы можете передать массив чисел в компьютер и протестировать получившуюся последовательность случайных чисел. Немного подумав, вы и сами предложите не один десяток способов получения СЧ с помощью этого генератора. Но предупреждаю, что качество этих чисел будет весьма низким. В реальных генераторах для его повышения, в частноти, смешивают энтропию от разных источников. Например, вы можете дополнительно к этому генератору задействовать еще и АЦП или компаратор. Как это сделать ? Читайте того же Шнайера или Кнута. Тема эта очень обширная и сложная, и в двух словах ее не раскрыть ...
Сообщение отредактировал kovigor - Nov 17 2010, 18:06
|
|
|
|
|
Nov 17 2010, 18:15
|
Участник

Группа: Участник
Сообщений: 42
Регистрация: 25-04-10
Из: г. Одесса
Пользователь №: 56 889

|
ясно. Но в принципе, мне кажется, что гораздо проще будет обойтись без USART'а. А просто прочитать количество импульсов за какое-то время таймера. И просто вывести на индикацию - и вполне хватит, как для условия задания. Всем спасибо за ответы!
|
|
|
|
|
Nov 17 2010, 20:14
|
Участник

Группа: Участник
Сообщений: 42
Регистрация: 25-04-10
Из: г. Одесса
Пользователь №: 56 889

|
Не совсем сдать и забыть. Дело в том, что это лабораторный стенд EV8031, а задание было предложено на олимпиаде, но сейчас оно входит в лабораторный практикум. Меня просто смутила тема с USART'ом, т.к. он немного "дальше". Вообще эта тема идет в рамках темы сопряжения двух Атмег или Атмега + СОМ порт. Кстати, раз уж зашла такая тема, спрошу тут, чтоб потом не создавать новую тему. Этот же самый стенд предназначен для работы только с СОМ портом, но на ноуте у меня такового не имеется. С прошивкой нормально - шьюсь программатором AVR910. Но вот с обменом информацией будут проблемы. Есть идея использовать переходник COM2USB, но не знаю, будет ли работать?
|
|
|
|
|
Nov 17 2010, 20:18
|

Нечётный пользователь.
     
Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417

|
Цитата(zombi @ Nov 17 2010, 07:53)  Что то сомневаюсь что соорудить из того что есть генератор "не псевдо случайных, а именно случайных" чисел невозможно! Если нужен генератор именно случайный то необходим еще как минимум случайный раздражитель (человек,счетчик гейгера и т.д.) «Проверка будет происходить путём подачи RESET на МК» Вот и случайный раздражитель — генератор лупит от подачи питания, а кнопку сброса нжимают при проверке. При каждом сбросе старт программы будет в случайно-разной фазе генератора, подсчёт числа тактов до перепада на выходе генератора даст «истинно случайное число». Цитата(Dante Krieger @ Nov 17 2010, 22:14)  это лабораторный стенд EV8031, а задание было предложено на олимпиаде, но сейчас оно входит в лабораторный практикум. Да-да, именно так :-)
--------------------
Ну, я пошёл… Если что – звоните…
|
|
|
|
|
Nov 17 2010, 20:35
|
Участник

Группа: Участник
Сообщений: 42
Регистрация: 25-04-10
Из: г. Одесса
Пользователь №: 56 889

|
Тоесть, если я правильно понял, при RESET'е таймер не сбрасывается?
|
|
|
|
|
Nov 17 2010, 20:44
|

Нечётный пользователь.
     
Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417

|
Таймер сбрасывается, как и весь микроконтроллер. А вот генератор на инверторах — нет. И момент нажатия кнопки «сброс» асинхронен по отношению к генератору на инверторах и случаен. Поэтому случайно время от отпускания сброса до ближайшего перепада генератора.
Ну, если генератор на инверторах нигде больше не используется в обвязке микроконтроллера... Там, в альтеринке. Это надо обвязку смотреть... Если от этого же генератора кнопка сброса микроконтроллера подсинхронизируется, то числа окажутся от запуска к запуску почти одинаковыми, с точностью до шумка. Кажется, такая беда вполне может быть. Если в документации на стенд этого нет, спросите о нюансах на форуме у производителя стенда.
Тогда лучше брать тот второй генератор на стенде, который с переменным резистором.
--------------------
Ну, я пошёл… Если что – звоните…
|
|
|
|
|
Nov 17 2010, 21:02
|
Участник

Группа: Участник
Сообщений: 42
Регистрация: 25-04-10
Из: г. Одесса
Пользователь №: 56 889

|
Только что написал: Код int main() { init_hard(); _delay_ms(15); while(TCNT1 < 2000) { if(!(bit_is_set(PIND,4))) { a += TCNT1; } else if(bit_is_set(PIND,4)) { //; } } _delay_ms(12); *lefti = a; } Работает на "ура" :-) Причем и при нажатии RESET и при полном выключении питания. ВотЪ) ------ UPD: еще раз всем спасибо за советы) Еще только не остался отвеченным пост про COM2USB переходник)
Сообщение отредактировал Dante Krieger - Nov 17 2010, 21:03
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|