Hallo,
Ich habe gerade erst angefangen mit Mikrocontroller-Programmierung. Ich
möchte über den Timer0 eine LED zum blinken bringen, dazu habe ich
folgendes Programm geschrieben.
1 | #include <avr/io.h>
|
2 | #include <stdint.h>
|
3 | #include <avr/interrupt.h>
|
4 |
|
5 | volatile char i=0;
|
6 |
|
7 |
|
8 | ISR(TIMER0_COMP_vect)
|
9 | {
|
10 | i++;
|
11 | PORTB ^= (1<<PB7);
|
12 | }
|
13 |
|
14 | int main(void)
|
15 | {
|
16 | DDRB = 0xff; //PortB als Ausgang
|
17 | DDRD = 0x00; //PortD als Eingang
|
18 | TCCR0 = 0x0D; //CTC-Modus Prescaler 1024
|
19 | OCR0 = 0x7F; //Zählerwert eingestellt
|
20 | TIMSK = 0x01; //Interrupt ermöglichen
|
21 | sei();
|
22 |
|
23 |
|
24 | PORTB = 0xff; //LED´s aus
|
25 |
|
26 | while(1)
|
27 | {
|
28 | if(i>4)
|
29 | {
|
30 | i=0;
|
31 | PORTB ^= (1<<PB3);
|
32 | }
|
33 | }
|
34 | }
|
Das ganze läuft mit einem ATmega8515 und einem 4MHz Quarz auf einem
STK500. Leider läuft blinken die Lampen aber zu schnell, die 4.LED
ungefähr 12mal in 10 Sekunden.
Irgendwie komm ich nicht so wirklich auf die Lösung warum der sowas mit
mir macht :(
Ich benutzte WinAVR-20070525.
Ich hoffe Ihr könnt mir helfen.
Gruß,
Icey