This Project simply flashes the LED in random manner. It uses PRNG (Pseudo Random Number Generator) based on LFSR (Linear Feedback Shift Register) to generate 16-bit (pseudo) random numbers. The less significant bit of randomly generated number is a major factor in decision to on/off the LED. The code is on Github, click here
See also, ATtiny13 – randomly flashing LED with PRNG based on BBS
Parts Required
- ATtiny13 – i.e. MBAVR-1 development board
- Resistor – 220Ω, see LED Resistor Calculator
- LED
Circuit Diagram
Firmware
This code is written in C and can be compiled using the avr-gcc. More details on how compile this project is here.
#include <avr/io.h> #include <util/delay.h> #define LED_PIN PB0 #define LFSR_SEED (91) #define DELAY (64) static uint16_t prng_lfsr16(void) { static uint16_t cnt16 = LFSR_SEED; return (cnt16 = (cnt16 >> 1) ^ (-(cnt16 & 1) & 0xB400)); } int main(void) { /* setup */ DDRB = 0b00000001; // set LED pin as OUTPUT PORTB = 0b00000000; // set all pins to LOW /* loop */ while (1) { if (prng_lfsr16() & 1) { PORTB |= _BV(LED_PIN); // LED on } else { PORTB &= ~(_BV(LED_PIN)); // LED off } _delay_ms(DELAY); } }
Very usefull to biginers…Thank you and congrats