#include <inttypes.h> #include <avr/io.h> #include <avr/interrupt.h> #include <util/delay.h> #include <stdlib.h> #include "main.h" static inline void init_pwm(void) { //PB1 set to output: DDRB |= 0b10; OCR1B = 0xefff; //preselect some default ICR1 = 0xffff; // TOP-wert TCCR1A = (1<<COM1B1) | (1<<WGM11); // only b-chan , fastpwm (mode 14) TCCR1B = (1<<WGM13)|(1<<WGM12) | (1<<CS10); //Fastpwm, no prescale return } static void init_leds(void) { //enable LED channels as output DDRC |= (1 << PORTC0) | (1 << PORTC2) | (1 << PORTC3) | (1 << PORTC1); PORTC = 1; //one led is on... return; } inline void setleds(uint8_t state) { //set leds according to PORTC |= (state | 0 b00001111); PORTC &= ~(state | 0 b11110000); return; } static void init_motor(void) { //vibration motor on B1: DDRB |= (1 << PORTB1); } static void stupid_pwmtest(void) { for (;;) { OCR1BH = 0; OCR1BL = 0; _delay_ms(1); OCR1BH = 0xff; OCR1BL = 0xff; _delay_ms(1); } return; //never } int main(void) { //hardware initialisation: init_leds(); init_motor(); init_pwm(); //just stupid test for now.... stupid_pwmtest(); //never get here return; }