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


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Philipp K. (plopp)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


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

von Peter D. (peda)


Bewertung
0 lesenswert
nicht lesenswert
M103 Fuse

von Philipp K. (plopp)


Bewertung
0 lesenswert
nicht lesenswert
Guten Morgen,

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

Danke!

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.