Jag håller på och fixar med en laddare för batterier och har en LED som ska tala om hur det går för laddningen.
Dock jag kom till då jag ska skriva själva "blink" delen och funderade på hur man på bästa sätt löser detta.
Det jag ville göra var att kunna "blinka" i olika mönster, tex:
Snabb blink - Kort paus - Snabb blink - Lång paus (Repeat)
Lång blink - Kort paus - Snabb blink - Lång paus (Repeat)
osv...
(Kort = 100ms, Lång = 500ms)
Jag löste det med en timer som räknar upp en variabel med 160Hz och sedan bestämde jag hur det skulle fungera där ifrån.
Det jag funderar på är om det finns något enklare sätt att göra detta?
Kod på hur jag gör det nu:
Kod: Markera allt
#include <avr/io.h>
#include <avr/interrupt.h>
void delay_100();
void delay_500();
volatile uint8_t cnt = 0;
int main(void)
{
DDRB |= (1<<0);
TCCR1 |= (1<<CTC1)|(1<<CS11)|(1<<CS13); //Timer1, CTC mode, 512 prescaler
OCR1C = 98; // 8000000Hz / 512 / 98 = ~160Hz
TIMSK = (1<<OCIE1A); //Compare interupt
sei();
while (1)
{
PORTB |= (1<<0);
delay_100();
PORTB &= ~(1<<0);
delay_100();
}
}
void delay_100()
{
cnt = 0;
while (cnt <= 16);
}
void delay_500()
{
cnt = 0;
while (cnt <= 80);
}
ISR(TIMER1_COMPA_vect)
{
cnt++;
}