Hallo Allerseits Ich habe einen ATMEGA8 mit 8MHz Atmelstudio 6 und folgendes Problem, normalerweise solte sich bei im Vergleich zu BP0 bei PB1 nichts ausser der Frequenz ändern. Aber wenn ich "Presc_250ms >= 250" verwende ist PB1 low und wenn ich "Presc_250ms >= 10" verwende wird PB1 getoggelt (PB0 wird sichtbar immer von der ISR getoggelt)
1 | #include <avr/io.h> |
2 | #include <avr/interrupt.h> |
3 | #include <util/atomic.h> |
4 | #include <stdint.h> |
5 | |
6 | #define Tog_Char(Byte,Bit) Byte ^= (1<<Bit) //Toggeld Charbit
|
7 | #define Set_Char(Byte,Bit) Byte |= (1<<Bit) //Bit setzen
|
8 | #define Clr_Char(Byte,Bit) Byte &= ~(1<<Bit) //Bit löschen
|
9 | #define Cpy_Char(Byte1,Bit1,Byte2,Bit2) if(Byte1 & (1 << Bit1)) Byte2 |= (1 << Bit2); else Byte2 &= ~(1 << Bit2);
|
10 | |
11 | //Prescaler-Variablen (Pointer)
|
12 | volatile uint8_t Presc_250ms = 0; |
13 | |
14 | ISR (TIMER0_OVF_vect) |
15 | {
|
16 | /* Interrupt Aktion alle
|
17 | (8000000/8)/256 Hz = 488,28125 Hz
|
18 | bzw.
|
19 | 1/488,28125 s = 2,048 ms
|
20 | */
|
21 | TCNT0 = 124; |
22 | |
23 | Tog_Char (PORTB,PB0); |
24 | Presc_250ms++; |
25 | if (Presc_250ms >= 250) |
26 | {
|
27 | Tog_Char (PORTB,PB1); |
28 | Presc_250ms = 0; |
29 | }
|
30 | |
31 | |
32 | }
|
33 | |
34 | |
35 | int main(void) |
36 | {
|
37 | ATOMIC_BLOCK(ATOMIC_FORCEON) |
38 | {
|
39 | // Timer 0 konfigurieren
|
40 | TCCR0 |= /**(1<<CS00) | (1<<CS01) | **/ (1<<CS02); // Prescaler 256 |
41 | |
42 | // Overflow Interrupt erlauben
|
43 | TIMSK |= (1<<TOIE0); |
44 | |
45 | DDRB |= (1<<PB0) | (1<<PB1); |
46 | |
47 | |
48 | }
|
49 | // Global Interrupts aktivieren
|
50 | sei(); |
51 | |
52 | while(1) |
53 | {
|
54 | /* Sonstige Aktionen */
|
55 | //Cpy_Char(m0,5,PORTB,PB0);
|
56 | //Set_Char(PORTB,PB0);
|
57 | //Tog_Char (PORTB,PB0);
|
58 | }
|
59 | }
|
Kann mir bitte Jemand helfen dieses simple Blink-LED-Projekt zum laufen zu bringen?