Hallo zusammen,
ich habe ein komisches Problem mit einem Atmega64.
Ich habe diesen testweise mit einer Blink code mit zwei LEDs an PB6 und
PD7 programmiert. Wenn der code nur die main() Funktion enthält und
hierin die Initialisierung und liegt, läuft der Controller wie gewollt
und die LEDs blinken abwechselnd. Sobald ich eine weitere Funktion in
den code einfüge (kann leer sein und sogar nicht aufgerufen) stürzt der
Controller ab. Nur noch eine der LEDs blinzelt matt. Mit dem Scope sehe
ich hier zeitweise ein PWM-artiges Signal, nach einiger Zeit liegt hier
eine konstante Spannung von etwa 1,7 V an (Versorgung mit 5V, mit 3V3
das gleiche Problem).
VCC ist mit 3x 100nF gestützt, allerdings zentral unterhalb des
Controllers und von dort sternartig an die Pins. Reset mit 4k7
hochgezogen und mit 100 nF gestützt. Keinerlei anderen Pins beschaltet,
außer ISP, wobei der Stecker im Betrieb nicht angeschlossen ist.
Clock kommt von intern mit 1MHz, Atmega103 compatibility beide
Stellungen ausprobiert.
Hiermit blinken die LEDs
1 | #define F_CPU 1000000UL
|
2 |
|
3 | #include <avr/io.h>
|
4 | #include <util/delay.h>
|
5 | void test(void);
|
6 | void porttoggle(void);
|
7 |
|
8 |
|
9 | int main(void) {
|
10 | DDRB |= (1 << PB6);
|
11 | DDRD |= (1 << PD7);
|
12 | PORTB ^= (1 << PB6);
|
13 | while(1) {
|
14 | PORTB ^= (1 << PB6);
|
15 | PORTD ^= (1 << PD7);
|
16 | _delay_ms(1000);
|
17 | }
|
18 | return 0;
|
19 | }
|
20 |
|
21 | /*
|
22 | void test(void) {
|
23 | return;
|
24 | }
|
25 |
|
26 |
|
27 | void porttoggle(void) {
|
28 | PORTD ^= (1 << PD7);
|
29 | return;
|
30 | }*/
|
Hiermit nicht:
1 | #define F_CPU 1000000UL
|
2 |
|
3 | #include <avr/io.h>
|
4 | #include <util/delay.h>
|
5 | void test(void);
|
6 | void porttoggle(void);
|
7 |
|
8 |
|
9 | int main(void) {
|
10 | DDRB |= (1 << PB6);
|
11 | DDRD |= (1 << PD7);
|
12 | PORTB ^= (1 << PB6);
|
13 | while(1) {
|
14 | PORTB ^= (1 << PB6);
|
15 | PORTD ^= (1 << PD7);
|
16 | _delay_ms(1000);
|
17 | }
|
18 | return 0;
|
19 | }
|
20 |
|
21 | void test(void) {
|
22 | return;
|
23 | }
|
24 |
|
25 |
|
26 | void porttoggle(void) {
|
27 | PORTD ^= (1 << PD7);
|
28 | return;
|
29 | }
|
Wo mache ich den Fehler?