Hallo zusammen, ich stehe hier im Moment etwas auf dem Schlauch! Folgender Programmcode führt auf meinem ATMEGA168 einen Reset aus:
1 | /*
|
2 | * main.c
|
3 | *
|
4 | * Created on: 16.08.2011
|
5 | * Author: Frank
|
6 | */
|
7 | #include <avr/io.h> |
8 | #include <util/delay.h> |
9 | |
10 | void init( void ) |
11 | {
|
12 | // Eingänge definieren inkl. interner Pull-Up Widerstände
|
13 | // DDRD &= ~(1<<PIND6);
|
14 | // DDRD &= ~(1<<PIND7);
|
15 | // PORTD |= (1<<PD6);
|
16 | // PORTD |= (1<<PD7);
|
17 | |
18 | // Ausgänge definieren
|
19 | DDRB |= (1<<PB3); |
20 | DDRB |= (1<<PB4); |
21 | DDRB |= (1<<PB5); |
22 | // Alles aus
|
23 | PORTB &= ~(1<<PB3); |
24 | PORTB &= ~(1<<PB4); |
25 | PORTB &= ~(1<<PB5); |
26 | }
|
27 | |
28 | int main( void ) |
29 | {
|
30 | init(); |
31 | |
32 | // Test auf Reset durch Programmfehler
|
33 | PORTB |= (1<<PB5); |
34 | _delay_ms( 100 ); |
35 | PORTB &= ~(1<<PB5); |
36 | |
37 | while(1) |
38 | {
|
39 | PORTB |= (1<<PB3); |
40 | _delay_ms( 100 ); |
41 | PORTB &= ~(1<<PB3); |
42 | _delay_ms( 100 ); |
43 | }
|
44 | }
|
Ergänze ich den Code um die folgenden Zeilen:
1 | /*
|
2 | * main.c
|
3 | *
|
4 | * Created on: 16.08.2011
|
5 | * Author: Frank
|
6 | */
|
7 | #include <avr/io.h> |
8 | #include <util/delay.h> |
9 | |
10 | void init( void ) |
11 | {
|
12 | // Eingänge definieren inkl. interner Pull-Up Widerstände
|
13 | // DDRD &= ~(1<<PIND6);
|
14 | // DDRD &= ~(1<<PIND7);
|
15 | // PORTD |= (1<<PD6);
|
16 | // PORTD |= (1<<PD7);
|
17 | |
18 | // Ausgänge definieren
|
19 | DDRB |= (1<<PB3); |
20 | DDRB |= (1<<PB4); |
21 | DDRB |= (1<<PB5); |
22 | // Alles aus
|
23 | PORTB &= ~(1<<PB3); |
24 | PORTB &= ~(1<<PB4); |
25 | PORTB &= ~(1<<PB5); |
26 | }
|
27 | |
28 | int main( void ) |
29 | {
|
30 | init(); |
31 | |
32 | // Test auf Reset durch Programmfehler
|
33 | PORTB |= (1<<PB5); |
34 | _delay_ms( 100 ); |
35 | PORTB &= ~(1<<PB5); |
36 | |
37 | while(1) |
38 | {
|
39 | PORTB |= (1<<PB3); |
40 | _delay_ms( 100 ); |
41 | PORTB |= (1<<PB4); |
42 | _delay_ms( 100 ); |
43 | PORTB &= ~(1<<PB3); |
44 | _delay_ms( 100 ); |
45 | PORTB &= ~(1<<PB4); |
46 | }
|
47 | }
|
ist alles in Ordnung. Ursprünglich wollte ich eigentlich nur IRMP und debounce über Interrupt zusammenbringen. Dabei bin ich auf dieses merkwürde Verhalten gestossen. Auf einem ATMEGA8 ist alles ok. Nur hat der leider zu wenig Speicher für mein Vorhaben. Entwicklungsumgebung: Eclipse mit AVR-Toolchain und WinAvr20100110 Gruß Frank