Forum: Mikrocontroller und Digitale Elektronik ATMEGA128 resetet permanent


von Michael Schankin (Gast)


Lesenswert?

Hallo alle zusammen,

ich hab da mal ein kleines Problem mit einem Atmega128.
Solange ich im Programm Befehle in der Main-Routine ausführe macht er 
was er soll.
Bsp.:
1
// **********************************************************************************
2
// includes
3
// **********************************************************************************
4
  #include <ecu.h>
5
  #include <atmel/io.h>
6
  #include <ecu.h>
7
  #include <mlx_90109.h>
8
  #include <timer.h>
9
  #include <atmel/interrupt.h>
10
  #include <dio.h>
11
  #include <comparator.h>
12
  #include <switch_pos.h>
13
  #include <rolling_dir.h>
14
  
15
16
// **********************************************************************************
17
// main program
18
// **********************************************************************************
19
20
int main (void)
21
{
22
  DDRB = 0xFF;
23
        PORTB = 0x0F;
24
        PORTB = 0xF0;
25
        PORTB = 0x0F;
26
        PORTB = 0xF0;
27
        PORTB = 0x0F;
28
        PORTB = 0xF0;                
29
30
  while (1)
31
    {
32
    }
33
           
34
  return 0;
35
}

Werde diese Befehle jedoch in einer Funktion ausgeführt, welche über ein 
header-file includiert wurde, dann spring der Controller in die 
Funktion, führt dort die Befehlszeilen aus und springt am ende der 
Funktion ins Nirvana.
Bsp.:
1
/ **********************************************************************************
2
// includes
3
// **********************************************************************************
4
  #include <ecu.h>
5
  #include <atmel/io.h>
6
  #include <ecu.h>
7
  #include <mlx_90109.h>
8
  #include <timer.h>
9
  #include <atmel/interrupt.h>
10
  #include <dio.h>
11
  #include <comparator.h>
12
  #include <switch_pos.h>
13
  #include <rolling_dir.h>
14
  
15
16
// **********************************************************************************
17
// main program
18
// **********************************************************************************
19
20
int main (void)
21
{
22
  ecu_Init();                
23
24
  while (1)
25
    {
26
    }
27
           
28
  return 0;
29
}
 Die Zeilen, welche vorher über der whileschleife standen werden jetzt 
in der ecu_Init() ausgeührt. Der Controller springt auch in die 
Funktion, springt aber am ende nicht heraus, sondern ins Nirvana.

Dieser Code war nur ein Beispiel, das gleiche geschieht immer, sobald 
irgendwelche Befehle in einer externen Funktion ausgeführt werden 
sollen.

Seltsam ist jedoch, dass ich genau die gleiche Hardware nochmal am 
laufen hab, mit genau der selben Software, und da gehts.
Den Controller habe ich bereits gegen einen neuen ersetzt, das hat auch 
nichts gebracht.

Kann denn so ein Phänomen durch einen schaltungsfehler verursacht 
werden?
Hat jemand schonmal so ein Problem gehabt?

Schonmal im voraus

Gruß Micha

von Severino R. (severino)


Lesenswert?

Stackpointer (falls es beim Atmega128 so etwas gibt) nicht 
initialisiert?

von klausy (Gast)


Lesenswert?

na dann wirds wohl anner hardware liegen. software is ok und wenns auf 
nem anderen läuft...

von Michael Wilhelm (Gast)


Lesenswert?

Ich würde auch sagen, dass der Stack angekratzt wird. Oder das üble M103 
Kompabilitätsbit.

MW

von Michael Schankin (Gast)


Lesenswert?

DANKE, DANKE, DANKE

Genau dieses blöde Bit wars. Manchmal sieht man eben den Wald vor lauter 
Bäumen nicht.

Vielen Herzlichen Dank und ein schönes WE.

Gruß Micha

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.