Генерируем случайные числа в CVAVR

2. Программный таймер.

Данный способ похож на предыдущий, но использует только таймер. Сделано для экономии места программы.

#include <tiny13.h> 
#include "stx.c" 
#include <delay.h>

#define BTN PINB.1

#define RAND_MAX 15 //максимальное число

#include <stdlib.h> //библиотека для генератора случайных чисел

volatile unsigned char num=0; //переменная в которой хранится число 
volatile unsigned char tik=0; //счётчик для генератора случайных чисел

unsigned char buf[3]={0,0}; //буфер для отправки данных 
char i=0;

void pr() 
{ 
  tik++; //таймер для настройки генератора случайных чисел.
  if(tik>RAND_MAX){tik=0;} 
 if(BTN==0) //нажата кнопка 
 { 
  delay_ms(10); 
  while(!BTN){;}; 
  num = tik; //берём число 
  //далее идет все то что касается отправки данных в порт.
  stx_char(' '); //делаем пробел 
  itoa(num,buf); //преобразуем число в строку 
  for(i=0;i<1;i++) //последовательно отправляем    данные из буфера 
  { 
   stx_char(buf[i]); //отправляем текущую позицию буфера 
   buf[i]=0; //и сразу обнуляем его 
  } 
 } 
}

void main(void) 
{ // Crystal Oscillator division factor: 1 
#pragma optsize- 
 CLKPR=(1<<CLKPCE);
 CLKPR=(0<<CLKPCE) | (0<<CLKPS3) | (0<<CLKPS2) | (0<<CLKPS1) | (0<<CLKPS0); 
#ifdef _OPTIMIZE_SIZE_ 
#pragma optsize+ 
#endif

// Input/Output Ports initialization 
// Port B initialization 
// Function: Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=Out 
DDRB=(0<<DDB5) | (0<<DDB4) | (0<<DDB3) | (0<<DDB2) | (0<<DDB1) | (1<<DDB0); 
// State: Bit5=P Bit4=P Bit3=P Bit2=P Bit1=P Bit0=0 
PORTB=(1<<PORTB5) | (1<<PORTB4) | (1<<PORTB3) | (1<<PORTB2) | (1<<PORTB1) | (0<<PORTB0);

while (1) { pr(); } }

3. Использование наводок от АЦП.

В принципе тут все просто — ножку микроконтроллера удлиняем, делаем что то типа антенны, а потом при помощи АЦП считываем уровень эфирных помех. Может придется приделать усилитель и ФНЧ чтобы исключить наводку 50 Гц.

Настраиваем АЦП и с некой периодичностью считываем значение.

Значение будет меняться хаотически , но будет зависеть от эфирных помех.

Данный метод в представлении кода я думаю не нуждается)

_____________________________________________________________

Скачать архив проектов с двумя способами генерирования случайного числа и файлами  Proteus 8. — Random Attiny13 UART

Спасибо за внимание!

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *