Compare commits
2 commits
dc31d518c1
...
f85fd1a929
Author | SHA1 | Date | |
---|---|---|---|
f85fd1a929 | |||
d9e84c1034 |
2 changed files with 63 additions and 0 deletions
2
.clangd
Normal file
2
.clangd
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
CompileFlags:
|
||||||
|
Add: -I/usr/avr/include
|
61
timer/main.c
Normal file
61
timer/main.c
Normal file
|
@ -0,0 +1,61 @@
|
||||||
|
/*
|
||||||
|
* Control PB5 with the two buttons. One button disables, the other enables.
|
||||||
|
* The board uses interrupts for this. PB5 will quickly oscilate between on and
|
||||||
|
* off to make cool sounds with a summer.
|
||||||
|
*/
|
||||||
|
#define F_CPU 16000000UL
|
||||||
|
#define __AVR_ATmega328P__
|
||||||
|
#include <avr/interrupt.h>
|
||||||
|
#include <avr/io.h>
|
||||||
|
#include <util/delay.h>
|
||||||
|
|
||||||
|
#define MINUTE 60 * 1000
|
||||||
|
const int TIME = 45 * MINUTE;
|
||||||
|
|
||||||
|
int volatile reset = 0;
|
||||||
|
|
||||||
|
int alarm();
|
||||||
|
|
||||||
|
// code for INT0
|
||||||
|
ISR(INT0_vect) { reset = 1; }
|
||||||
|
|
||||||
|
int main(void) {
|
||||||
|
|
||||||
|
DDRB = 0xff; // write to B
|
||||||
|
DDRD = 0; // read from D
|
||||||
|
|
||||||
|
PORTD |= (1 << PORTD2) | (1 << PORTD3); // pull up D2 and D3
|
||||||
|
|
||||||
|
PORTB = 0; // pull down port B
|
||||||
|
|
||||||
|
// enable external interruprs
|
||||||
|
EIMSK |= (1 << INT0);
|
||||||
|
EIMSK |= (1 << INT1);
|
||||||
|
|
||||||
|
// trigger when anything changes
|
||||||
|
EICRA |= (1 << ISC00); // for INT0
|
||||||
|
EICRA |= (1 << ISC10); // for INT1
|
||||||
|
|
||||||
|
sei(); // interrupt magic macro
|
||||||
|
while (1) {
|
||||||
|
_delay_ms(TIME);
|
||||||
|
alarm();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int alarm(void) {
|
||||||
|
int sound = 0;
|
||||||
|
while (!reset) {
|
||||||
|
PORTB |= (1 << PORTB5);
|
||||||
|
_delay_us(sound);
|
||||||
|
PORTB &= ~(1 << PORTB5);
|
||||||
|
_delay_us(sound);
|
||||||
|
sound++;
|
||||||
|
if (sound > 1000) {
|
||||||
|
sound = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
reset = 0;
|
||||||
|
PORTB &= ~(1 << PORTB5);
|
||||||
|
return 0;
|
||||||
|
}
|
Loading…
Add table
Reference in a new issue