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
Спасибо за внимание!