Forum: Mikrocontroller und Digitale Elektronik Atmega64 läuft nicht immer an, C code blink


von Philipp K. (plopp)


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?

: Bearbeitet durch User
von Jim M. (turboj)


Lesenswert?

Philipp K. schrieb:
> Sobald ich eine weitere Funktion in
> den code einfüge (kann leer sein und sogar nicht aufgerufen) stürzt der
> Controller ab.

Schau mal ob der korrekte Controller beim Linken ausgewählt ist. Der 
Fehler deutet auf flaschen Stack (wegen falscher RAM Size) hin.

von Philipp K. (plopp)


Lesenswert?

Beim linken hab ich bisher gar keinen Typ definiert, nur beim 
kompilieren. Werde ich Morgen mal probieren, danke!

von Peter D. (peda)


Lesenswert?

M103 Fuse

von Philipp K. (plopp)


Lesenswert?

Guten Morgen,

schien der nicht definierte Controller beim linken zu sein, jetzt 
läufts.
Die M103 war schon deaktiviert.

Danke!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.