Atmega64 läuft nicht immer an, C code blink

OP #5063004
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

Eine eigene Frage? Dieser Thread ist über 9 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.