Модераторы: PILOT, ManiaK, Mazzi
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Генерация случайных чисел на PIC16F627, как реализовать? 
:(
    Опции темы
Partizan
Дата 20.3.2007, 11:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: нет
Всего: 67



задача: обеспечить генерацию последовательности псевдослучайных чисел с равномерным распределением величиной от 0h до FFh

как реализовать? 


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
black_priest
Дата 26.4.2007, 14:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 63
Регистрация: 19.3.2007
Где: Minsk

Репутация: нет
Всего: нет



Смотри как в IAR сделано для пиков, может натолкнет на что:
Цитата

#include "stdlib.h"

unsigned long int __next_rand = 1;

int rand(void)
{
  __next_rand = __next_rand * 1103515245 + 12345;
  return (unsigned int) (__next_rand >> 16) & RAND_MAX;
}


Еще одна идея, которая приходит на ум - оцифровка тепловых шумов (где-то с таким уже сталкивался), т. е. использовать АЦП, но здесь конкретно ничего не могу посоветовать, надо пробовать. Так что мегаомный резак на вход и вперед  smile .
ЗЫ: самого давно интересовал данный вопрос, но на практике с таким дело иметь не приходилось, поэтому если чего получиться интересного напиши. Удачи.
PM MAIL   Вверх
EnergoHokum
Дата 27.4.2007, 15:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 600
Регистрация: 10.11.2006
Где: Россия, Ставропол ь

Репутация: нет
Всего: 6



Делал на сях для AVR, но алгоритм общий, в пиковый асм перевести, думаю, проблем не составит. Итак:

Код

#define LOW(int_var)  (char)(int_var)
#define HIGH(int_var) (char)(int_var>>8)

uint16_t Shift;

char RandNum;

char Rand(void)
{//генерируем случайный char
    if(Shift==0x0000) Shift=0xFFFF;
    Shift>>=1;
    if((LOW(Shift)&0x01)^((HIGH(Shift)>>2)&0x01)) Shift|=0x4000;
    else Shift&=0xBFFF;
    RandNum=LOW(Shift);
    return RandNum;
}


Коротко говоря, это регистр сдвига, из двух разрядов которого выдираются и XOR-ятся два бита, результат подаётся на вход регистра
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Микроконтроллеры (MCU) и микропроцессоры (MPU)"
PILOT ManiaK
UniBomb Mazzi

На данный раздел помимо Правил форума распространяются текже следующие правила:


  • Прежде чем создать тему воспользуйтесь поиском или посмотрите в faq. Возможно на форуме уже есть ответ на ваш или близкий к вашему вопрос.
  • В заголовке темы в квадратных скобках обозначьте используемое семейство микроконтроллера: [avr],[pic],[arm].
  • При создании темы с вопросом указывайте участок кода с ошибкой, версию компилятора, схемы подключения, fuse биты и прочие данные, которые помогут найти правильный ответ. Для форматирования текста программ используйте кнопку код.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Для флуда, просьб выполнить задание, поиска партнёров или исполнителей существуют свои разделы.
  • Если вы заметили несовместимое с правилами сообщение, то можете уведомить об этом модератора раздела нажав кнопку Репорт у соответствующего сообщения.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, PILOT, ManiaK, UniBomb, Mazzi.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Микроконтроллеры (MCU) и микропроцессоры (MPU) | Следующая тема »


 




[ Время генерации скрипта: 0.0369 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.