Skip to content
Snippets Groups Projects
Commit 18e0dbd6 authored by Erik Strand's avatar Erik Strand
Browse files

Add code (including various commented experiments)

parent 46bd8f77
No related branches found
No related tags found
No related merge requests found
blink.c 0 → 100644
#include <avr/io.h>
#define switch_pin (1 << PA7)
#define led_pin (1 << PB2)
int main(void) {
// Set the clock prescaler to 1.
CLKPR = (1 << CLKPCE);
CLKPR = (0 << CLKPS3) | (0 << CLKPS2) | (0 << CLKPS1) | (0 << CLKPS0);
// Set the 8 bit timer's prescaler to 1/1024.
TCCR0B |= 0b00000101;
// Configure led_pin as an output.
DDRB |= led_pin;
// Configure switch_pin as an input.
DDRA |= switch_pin;
// Activate switch_pin's pullup resistor.
PORTA |= switch_pin;
//int count1 = 0;
//int count2 = 0;
int bouncy_switch_state = 0;
int debounced_switch_state = 0;
while (1) {
// Turn on the led when the button is pressed
/*
if (PINA & switch_pin) {
PORTB &= ~led_pin;
} else {
PORTB |= led_pin;
}
*/
// ~5s blink period based on counting
/*
if (++count1 == 255) {
if (++count2 == 255) {
PORTB ^= led_pin;
count1 = 0;
count2 = 0;
}
}
*/
// ~2.5s second blink period
// 255 * 200 * (1024 / 20M) = 2.6112
/*
if (TCNT0 >= 200) {
TCNT0 = 0;
if (++count1 == 255) {
PORTB ^= led_pin;
count1 = 0;
}
}
*/
// the button toggles the led (with debouncing)
if ((PINA & switch_pin) != bouncy_switch_state) {
bouncy_switch_state = PINA & switch_pin;
TCNT0 = 0;
}
if (TCNT0 >= 195) {
// It's been 10ms since the switch changed.
if (bouncy_switch_state != debounced_switch_state) {
debounced_switch_state = bouncy_switch_state;
if (debounced_switch_state == 0) {
PORTB ^= led_pin;
}
}
}
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment