www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik mega128 hängt sich auf


Autor: Marcus W (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich hab ein blödes Problem.

Ich versuch ein Display mit einem mega128 anzusteuern, allerdings 
scheint es so, dass sobald das Programm zu lang wird ("lang" ist 
relativ, eigentlich ist es nur ein Paar Zeilen kurz) der Controller sich 
aufhängt oder Resettet oder sowas ähnliches.

Ich hab den Code im Anhang, da wird beim initialisieren eine LED 
angeschalten. Diese sollte normalerweise nach Abschluss des Prozesses 
wieder ausgehen. Das tut sie aber nicht. Kürze ich den Code um ein paar 
Zeilen, nehme z.B. das  PORTA &= ~(1<<RS); raus, dann geht die LED am 
Ende auch aus.
Das ganze begreif ich derzeit nicht so richtig. Im AVR-Studio Simulator 
funktioniert alles wie von mir gedacht, nur in der realen Schaltung 
schaut es ganz anders aus.

Die restlichen Pins vom mc waren zur Testzeit offen, also keine externen 
Faktoren die da reinspielen könnten.

Habt ihr eine Idee?

Gruß Marcus

Autor: abaa (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
watchdog aktiv?

Autor: Marcus W (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das hatte ich auch schon überlegt, allerdings ist das ein Fabrikneuer 
mc, hab trotzdem die Fuse kontrolliert, WD is default off.
Ich hab derzeit noch die M103C Fuse im Verdacht, allerdings hat das 
Abschalten des Kompatibilitätsmodus auch keinen direkten Erfolg 
gebracht.

Autor: Michael Wilhelm (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie sieht denn der Stack aus bzw. wie hast du den initialisiert?

MW

Autor: xlomx (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hast du den prototypen von
void lcd_send_data(unsigned int TxData)
{
}
auch mit (unsigned int TxData) angelegt?

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die M103C Fuse muss abgeschaltet werden!
Wenn du das nicht tust und im Compiler einen Meg128
eingestellt hast, dann kann nichts funktionieren!
Der Compiler setzt sonst den Stack falsch auf.


Also: M103C abschalten, im Compiler einen Mege128 einstellen


Dann schiebst du in deinem Source Code mal die main()
ganz nach unten. Dein Compiler müsste jede Menge Warnungen
und Fehler ausgespuckt haben, da du für keine einzige
der restlichen Funktionen einen Prototypen hat. Dadurch
muss der Compiler Standardannahmen treffen, die - wie
könnte es anders sein :-) - in deinem Fall völlig falsch
sind.

Die beste Lösung ist es, wenn du keine Prototypen brauchst.
Das bedeutet aber auch, dass jede Funktion definiert sein
muss, bevor sie verwendet wird. Die einfachste Varianbte dies
zu erreichen besteht darin, main() ganz nach unten zu schieben.
Dadurch kommt im Quelltext jede Funktion vor, bevor sie verwendet
wird.

Autor: Marcus W (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für eure Antworten.

Ich glaube langsam, dass es doch an der M103C Fuse liegt. Hatte leider 
nicht mehr die Zeit das genau zu testen und komm leider erst wieder am 
Montag dazu.
Wenns garnicht hinhaut werd ich das ganze mal in Assembler anschaun, da 
sieht man das glaub ich eher.

@MW
Unter C muss ich den Stack doch nicht manuell initialisieren

@Karl Heinz
Die Prototypen existieren in der main.h, die hab ich nur nicht 
angehangen :)
Wird wohl wirklich an der Fuse liegen.

@xlomx
Ja, der Prototyp ist genau so definiert.

Wieso fällt dieser Mega128 nur so aus der Reihe :)

Gruß Marcus

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Marcus W wrote:

> Wieso fällt dieser Mega128 nur so aus der Reihe :)

Weil irgendjemand bei Atmel entschieden hat, dass der Mega128
so ausgeliefert wird, dass er sich wie ein 103 verhält.
Wodurch alle Leute, die leichtsinnig in ihren Entwicklungs-
umgebungen einen 128-er eingestellt haben, auf die Schnauze
fallen.

Autor: Otto Richter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Marcus,
hatte exakt das gleiche Problem mit einer komplexen Schaltung mit einem 
ATMega128. Die Ursache bei mir: zu viele Variablen im Ram (LCD-Texte). 
Habe diese dann ins Flash verbannt, damit waren die Probleme weg.
hoff s hilft,
Otto

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Der ATMega128 ist nicht der einzige, der ein 'compatibility mode'- 
Fusebit besitzt. Beispielsweise kann der ATMega162 als ATMega161 
betrieben werden. Allerdings scheint der 128 der einzige zu sein, bei 
dem das Fusebit werksseitig gesetzt ist.

MfG Spess

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]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [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.