mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ATmega128 Stackproblem?


Autor: Ronny Schulz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe hier ein Problem mit meinem ATmega128. Auf dem ATmega32 lief
alles. Aber als ich umgestiegen bin lief garnichts mehr. Ich starte
mein Programm und Portausgaben werden auch im Hauptprogramm erledigt.
Aber sobald ich eine Funktion aufrufe oder eine Schleife anlege geht
nichts mehr.

Ich vermute da ein Stackproblem. Aber wo kommt das her? Oder muss ich
den vorher irgendwie initialisieren?

Autor: marcel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hast du den stack-pointer ordentlich initialisiert? (die 4 Anweisungen
am Anfang nach RESET wie im Datenblatt)

Wenn nicht, dann wundert es mich überhaupt das das läuft. Der Atmel
initialisiert den SP NICHT bei Reset.

Autor: dave (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn es beim 32 ging, dann wird er wohl auch beim 128 den Stack
initialisiert haben...

Wie merkst du, dass nichts mehr läuft?
Wenn durch LEDs etc.: die oberen oberen I/Os (von 0x60 bis 0x100?)
werden mit STS/LDS angesprochen.

Vielleicht mal nen Codeschnipsel.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
M103-Fuse


Peter

Autor: Rufus T. Firefly (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
R.T.F.M.

Autor: Jens (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ falscher "Rufus T. Firefly"

LDEB

Autor: Der Philosoph (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wer entscheidet, was falsch und was richtig ist?

Nach bürgerlichem Gesetzbuch sind jedenfalls Nicknames nicht schützbar
und somit ist jeder Rufus T. Firefly echt...

Autor: dave (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Argh... ich bin blöd.

Autor: Ronny Schulz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Achja vielleicht hätte ich erwähnen sollen, dass ich WinAVR nutze... Das
es wie oben funktioniert sehe ich daran, dass der Beeper an geht. Und
hier mal Codeschnipsel:

Geht:

DDRB |= 1<<PB4;
PORTB &= ~(1<<PB4);

Geht nicht:

DDRB |= 1<<PB4;
while(1) {
  PORTB &= ~(1<<PB4);
  delay_ms(2000);
  PORTB |= 1<<PB4;
  delay_ms(2000);
}

An den Delay-Funktionen liegt es nicht. Denn das geht auch nicht. Also
der Aufruf der Funktionen, wie ich es ja schon auf dem Atmega32 genutz
habe:

#define BUZZER_PORT_DDR        DDRB
#define BUZZER_PORT_OUT        PORTB
#define BUZZER_BIT_SET        PB4

#define BUZZER_OFF        0
#define BUZZER_ON        1
#define BUZZER_BEEP        2
#define BUZZER_ALERT        3

void buzzer_init(void)
{
  BUZZER_PORT_DDR |= 1<<BUZZER_BIT_SET;              /* SET auf Ausgang 
*/
  buzzer_switch(BUZZER_OFF);
  return;
}

void buzzer_switch(char mode)
{
  switch (mode) {
    case BUZZER_OFF:
    BUZZER_PORT_OUT |= 1<<BUZZER_BIT_SET;            /* Buzzer 
ausschalten */
    break;

    case BUZZER_ON:
    BUZZER_PORT_OUT &= ~(1<<BUZZER_BIT_SET);          /* Buzzer 
einschalten
*/
    break;
    }
  return;
}

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du liest nicht gerne Antworten ?

Bzw. wenn der Tip daneben lag, bricht man sich keinen ab, das auch zu
sagen.


Peter

Autor: Ronny Schulz (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Welchen der Tipps meinst Du? Ich ging davon aus im letzten Post darauf
reagiert zu haben.

Da der ATmega verbaut ist, kann ich auch nicht jeden der einzelnen
Ports antesten. Die M103-Fuse dachte ich, hätte irgendwas mit einem
Kopatibilitäts-Modus zu tun, sodass ich die ja garnicht bräuchte oder?

Aber hier nochmal meine Fusebits als Anhang.

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

eben. M103C ist ab Werk "programmed". Solange läuft der Mega128 im
Mega103 Modus was unter anderem den SRAM in einen anderen Adressbereich
verschiebt. Dein SP wird aber für einen Mega128 initialisiert. Beim
ersten ret krachts dann da der Controller seine Rücksprungadresse nicht
mehr richtig bekommt. Mach das Häckchen da weg und gut ist.

Matthias

Autor: dave (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich werd das zwar nie mit den Fuses blicken, aber wenn du nichts an der
M103 geändert hast, dann ist der M128 noch ein M103, d.h. er hat
weniger RAM, eingeschränkte Portfunktionen etc.
Du musst also das M103 ändern, dann ist es ein "echter" M128.

Autor: Ronny Schulz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
DANKE! Das Häkchen und es läuft. Nochmal vielen Dank für die Hilfe?

Aber ATMEL verstehe ich echt nicht. Die AVRs nerven mich langsam immer
mehr. Erst ist das MOSI und MISO nicht sofort ersichtlich und liegt auf
PDI und PDO. Und dann der blöde Kompatibilitätsmodus. Wenn den jemand
speziell einschalten will, also keinen normalen 128er haben will, dann
kann er das doch tun. Aber nicht andersherum. So sammeln sich die
Probleme, die nicht sein müssten immer weiter.

Autor: dave (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Eben nicht!

Sagen wir, du hast ne Schaltung, vielleicht Serienfertigung.. und jetzt
gibts keine m103 mehr und auf deinen 10.000 Platinen, die du schon
machen lassen hast, is keine möglichkeit für ISP oder JTAG oder einfach
keine Fuses veränderbar.
Dadurch, dass der AVR als 103 läuft, kann man den ohne Probleme da
einsetzen, will man halt nen 128, dann muss man eben in seinem neuen
Layout das einbeziehen und/oder beim Flashen das Fuse setzen.
Najut... den neuen m103 müsste man ja auch flashen, da könnte man das
Fuse ändern.

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.