1. Use timer to print sinus of a number over serial connection.
This commit is contained in:
parent
180f4625a8
commit
15ff1cc339
17
src/timer.c
17
src/timer.c
@ -1,6 +1,9 @@
|
||||
#include <avr/io.h>
|
||||
#include <avr/interrupt.h>
|
||||
|
||||
#include <math.h>
|
||||
#include <stdio.h>
|
||||
|
||||
#include "include/timer.h"
|
||||
|
||||
void initCtcTimer0(void)
|
||||
@ -11,7 +14,7 @@ void initCtcTimer0(void)
|
||||
/* Enable Counter0 Compare Match A Interrupt */
|
||||
TIMSK0 |= (1 << OCIE0A);
|
||||
|
||||
/* Select clock. Prescaler of 8 */
|
||||
/* Select clock. Prescaler of 1024 */
|
||||
TCCR0B |= (1 << CS02) | (1 << CS00);
|
||||
|
||||
/* Use CTC Mode */
|
||||
@ -20,7 +23,7 @@ void initCtcTimer0(void)
|
||||
/*
|
||||
* OCR0A contains TOP value for counter:
|
||||
*/
|
||||
OCR0A = 100;
|
||||
OCR0A = 255;
|
||||
}
|
||||
|
||||
void initOverflowTimer0(void)
|
||||
@ -38,7 +41,15 @@ void initOverflowTimer1(void)
|
||||
TIMSK1 |= (1<<TOIE1);
|
||||
}
|
||||
|
||||
volatile double sin_op = 0.0;
|
||||
volatile uint8_t wait_cnt = 0;
|
||||
|
||||
ISR(TIMER0_COMPA_vect)
|
||||
{
|
||||
PORTB |= (1 << PB2);
|
||||
if (wait_cnt > 0) {
|
||||
printf("%.2lf\n\r", sin(sin_op));
|
||||
sin_op = ((sin_op + 0.01) > 2*M_PI) ? 0.0 : sin_op + .01;
|
||||
wait_cnt = 0;
|
||||
}
|
||||
wait_cnt++;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user