Atmega64 läuft nicht immer an, C code blink

OP #5063004
Lesenswert?

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?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren