реклама на сайте
подробности

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Atmega8515 + внешний генератор через USART, Я вообще то делаю? О_о
Dante Krieger
сообщение Nov 17 2010, 02:09
Сообщение #1


Участник
*

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



Доброго времени суток!
Есть такое учебное задание - составить генератор случайных чисел (не псевдо случайных, а именно случайных).
Все что есть - атмега и подключенный к PD4 R-C генератор частоты.
Собственно генератор:

Частота генератора ~10кГц. Мне кажется, что нужно при помощи USARTа считать импульсы, хотя возможно и ошибаюсь.
С USARTом почти не работал.
Проверка будет проводится путем подачи RESETа на МК.
Подскажите, у кого какие идеи еще могут быть. Желательно с кусочками кода :-)
Заранее благодарен!
Go to the top of the page
 
+Quote Post
zombi
сообщение Nov 17 2010, 05:53
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 076
Регистрация: 10-09-08
Пользователь №: 40 106



Что то сомневаюсь что соорудить из того что есть генератор "не псевдо случайных, а именно случайных" чисел невозможно!
Если нужен генератор именно случайный то необходим еще как минимум случайный раздражитель (человек,счетчик гейгера и т.д.)

Сообщение отредактировал IgorKossak - Nov 17 2010, 15:29
Причина редактирования: Бездумное цитирование
Go to the top of the page
 
+Quote Post
_guardianangel
сообщение Nov 17 2010, 07:57
Сообщение #3


Участник
*

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



генератор белого шума можно собрать на стабилитроне. И снимать сигнал АЦП меги. По другому как то не придумывается.
Go to the top of the page
 
+Quote Post
kovigor
сообщение Nov 17 2010, 08:34
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 5 273
Регистрация: 30-03-10
Пользователь №: 56 295



QUOTE (Dante Krieger @ Nov 17 2010, 06:09) *
...


А почему бы, например, АЦП не использовать ? Таким путем генератор случайных (!!!) чисел сделать невозможно. Сделайте, а потом чисто для интереса посчитайте ту же энтропию. Вот смеху-то будет smile.gif Барахло все это. Разве что для студенческой поделки и сгодится. Если интересуют детали, то почитайте хотя бы того же Брюса Шнайера. Там и код есть, причем приводятся исходники на Си. А вот это вам просто для общего развития:

http://habrahabr.ru/blogs/python/62237/

Сообщение отредактировал IgorKossak - Nov 17 2010, 15:30
Причина редактирования: Бездумное цитирование
Go to the top of the page
 
+Quote Post
xxxdarksxx
сообщение Nov 17 2010, 14:21
Сообщение #5


Участник
*

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



QUOTE (kovigor @ Nov 17 2010, 10:34) *
...



в 8515 АЦП нету, сам такой купил когда вообще не знал ничего о контроллерах, теперь понял, нужно другой покупать(((

Сообщение отредактировал IgorKossak - Nov 17 2010, 15:31
Причина редактирования: Бездумное цитирование
Go to the top of the page
 
+Quote Post
Dante Krieger
сообщение Nov 17 2010, 15:24
Сообщение #6


Участник
*

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



Дело в том, что вся эта трагедия происходит на лабораторном стенде и само задание звучит как на этом генераторе собрать генератор случайных чисел. Мне почему-то в голову пришла мысль поотлавливать шумы с ножек. Как думаете, возможен ли такой вариант?
---
UPD: а если каким-то образом выдать первое случайное число (пусть даже псевдослучайное). Записать его. Запустить таймер и складывать его счетчик с этим числом пока не нажмем reset. После нажатия reset'а мы заново считаем последнее сохраненное число и снова проводим манипуляцию с таймером.

Сообщение отредактировал Dante Krieger - Nov 17 2010, 15:28
Go to the top of the page
 
+Quote Post
kovigor
сообщение Nov 17 2010, 18:00
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 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
Go to the top of the page
 
+Quote Post
Dante Krieger
сообщение Nov 17 2010, 18:15
Сообщение #8


Участник
*

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



ясно. Но в принципе, мне кажется, что гораздо проще будет обойтись без USART'а. А просто прочитать количество импульсов за какое-то время таймера. И просто вывести на индикацию - и вполне хватит, как для условия задания.
Всем спасибо за ответы!
Go to the top of the page
 
+Quote Post
kovigor
сообщение Nov 17 2010, 18:33
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 5 273
Регистрация: 30-03-10
Пользователь №: 56 295



Цитата(Dante Krieger @ Nov 17 2010, 21:15) *
ясно. Но в принципе, мне кажется, что гораздо проще будет обойтись без USART'а. А просто прочитать количество импульсов за какое-то время таймера. И просто вывести на индикацию - и вполне хватит, как для условия задания.
Всем спасибо за ответы!


Если сдать и забыть, то хватит. А если хотите хоть немного разобраться и хоть что-то отложить в голове, то очень советую все же передать полученные числа в машину и провести простейшие тесты. Поверьте, вы узнаете массу нового и интересного ...
Go to the top of the page
 
+Quote Post
Dante Krieger
сообщение Nov 17 2010, 20:14
Сообщение #10


Участник
*

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



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


Нечётный пользователь.
******

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



Цитата(zombi @ Nov 17 2010, 07:53) *
Что то сомневаюсь что соорудить из того что есть генератор "не псевдо случайных, а именно случайных" чисел невозможно!
Если нужен генератор именно случайный то необходим еще как минимум случайный раздражитель (человек,счетчик гейгера и т.д.)
«Проверка будет происходить путём подачи RESET на МК»
Вот и случайный раздражитель — генератор лупит от подачи питания, а кнопку сброса нжимают при проверке. При каждом сбросе старт программы будет в случайно-разной фазе генератора, подсчёт числа тактов до перепада на выходе генератора даст «истинно случайное число».


Цитата(Dante Krieger @ Nov 17 2010, 22:14) *
это лабораторный стенд EV8031, а задание было предложено на олимпиаде, но сейчас оно входит в лабораторный практикум.
Да-да, именно так :-)


--------------------
Ну, я пошёл… Если что – звоните…
Go to the top of the page
 
+Quote Post
Dante Krieger
сообщение Nov 17 2010, 20:35
Сообщение #12


Участник
*

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



Тоесть, если я правильно понял, при RESET'е таймер не сбрасывается?
Go to the top of the page
 
+Quote Post
ReAl
сообщение Nov 17 2010, 20:44
Сообщение #13


Нечётный пользователь.
******

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



Таймер сбрасывается, как и весь микроконтроллер. А вот генератор на инверторах — нет. И момент нажатия кнопки «сброс» асинхронен по отношению к генератору на инверторах и случаен. Поэтому случайно время от отпускания сброса до ближайшего перепада генератора.

Ну, если генератор на инверторах нигде больше не используется в обвязке микроконтроллера... Там, в альтеринке.
Это надо обвязку смотреть... Если от этого же генератора кнопка сброса микроконтроллера подсинхронизируется, то числа окажутся от запуска к запуску почти одинаковыми, с точностью до шумка.
Кажется, такая беда вполне может быть. Если в документации на стенд этого нет, спросите о нюансах на форуме у производителя стенда.

Тогда лучше брать тот второй генератор на стенде, который с переменным резистором.


--------------------
Ну, я пошёл… Если что – звоните…
Go to the top of the page
 
+Quote Post
ILYAUL
сообщение Nov 17 2010, 21:02
Сообщение #14


Профессионал
*****

Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339



Вот так всегда , когда не надо , генератор случайных чисел получается запросто. Достаточно допустить ошибку в коде biggrin.gif
Я бы всё таки использовал USART , загоняя ему в UBR число которое только что прочитал, отгадать , что получишь в следующий раз - невозможно.Конечно можно немного ещё "помудрив" с ним.
Т.е. прочитал чёрт знает что и ещё и режим установил черт знает какой.


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
Dante Krieger
сообщение Nov 17 2010, 21:02
Сообщение #15


Участник
*

Группа: Участник
Сообщений: 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
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 8th July 2025 - 01:10
Рейтинг@Mail.ru


Страница сгенерированна за 0.01474 секунд с 7
ELECTRONIX ©2004-2016