
carlhako virtual wall
By: a guest on Aug 14th, 2010 | syntax:
C | size: 1.22 KB | hits: 256 | expires: Never
#define F_CPU 14745600
#include <stdio.h>
#include <stdlib.h>
#include <avr/io.h>
#include <avr/interrupt.h>
#include <inttypes.h>
// PIN DEFINITIONS:
void realtimeclock_setup() {
// setup Timer0:
// CTC (Clear Timer on Compare Match mode)
// TOP set by OCR0A register
TCCR0A |= (1<<WGM01);
// no pre scaler
TCCR0B |= (1<<CS00);
// generate 70.217khz which i can use every 2nd cycle to generate aprox 35khz (35108hz)
OCR0A = 210;
// enable interrupt on compare event
TIMSK0 |= (1<<OCIE0A);
}
volatile int8_t counter1;
volatile int8_t counter2;
SIGNAL(SIG_OUTPUT_COMPARE0A) {
counter1++;
counter2++;
}
int main() {
realtimeclock_setup();
// set pin as output
DDRC |= (1<<PC5);
// turn on interrupt handler
sei();
int8_t led_status;
while(1) {
if (counter1 == 2) { // generate 35khz carrier signal
if (led_status) PORTC |= (1<<PC5); // turn on ir led
}
if (counter1 > 3) {
PORTC &= ~(1<<PC5); // turn off ir led
counter1 = 0; // reset counter1
}
if (counter2 == 34) { // generate 500hz signal
led_status = 1;
//counter2 = 0;
}
if (counter2 > 69) {
led_status = 0;
counter2 = 0;
}
}
return 0;
}