www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ATmega32 will nicht springen! AVR-Studio schuld?


Autor: Nicolas K. (nico33hh)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Wissende (die anderen natürlich auch)!

Vorweg, ich benutze:
- AVR-Studio (Ver. 4.18) => Assembler-Programmierung
- Pollin ATMEL-Eval.-Board Ver. 2.0.1 (Fertigmodul)
- USB-ISP-Programmer (Marke weiß ich jetzt nicht, ist auch egal)
- ATmega32-16 DIP40
- ATtiny2313 DIP20
- Viel Wissen über AT89S8253 (Prog. in ASM)
- Wenig Wissen über Prog von AVR (rel. Neuling)

Folgendes Problem:

Hier (m)ein simples Programm:
(Zeilennummerierung nur hier im Beitrag!)

PD5 = LED1, PD6 = LED2, (PD2-4 = 3 Taster)

=====================
01  ldi r16,0b11100011
02  out DDRD,r16

03  Haupt:
04  ldi r16,0b00100000
05  out PORTD,r16
06  rcall Warte
07  ldi r16,0b01000000
08  out PORTD,r16
09  rcall Warte
10  rjmp Haupt

11  Warte:
12  ldi r18,250
13  ldi r19,100
14  clr r21
15  Warte1:
16  clr r20
17  Warte2:
18  inc r20
19  cpse r20,r18
20  rjmp Warte2
21  inc r21
22  cpse r21,r19
23  rjmp Warte1
24  ret
=====================

So. Wenn ich den Code compil. und in den ATtiny2313 schiebe, ist das 
kein Problem. Die LEDs blinken abwechselnd.

Wenn ich den Code aber für den ATmega32 compil. und ihn dann in diesen 
brenne (ohne Probleme, Verify=OK), dann leuchtet LED1 auf - und das 
war's.

Bei meiner Fehlersuche habe ich dann ein Semikolon vor das rcall (Zeilen 
06+09) gemacht, damit der Befehl inaktiv ist. Resultat: LED1 und LED2 
leuchten (scheinbar) statisch.

Im laufe meiner weiteren Fehlersuche habe ich festgestellt, daß Sprünge 
und Verzweigungen im ATmega32 garnicht ausgeführt werden.
Woran kann das liegen?
Im ATtiny2313 funktioniert das hervorragend.
Ich habe übrigens auch mal die beiden HEX-Codes (ATtiny2313 + ATmega32) 
verglichen. Sie sind exakt gleich.

Was mache ich also falsch?

Wie immer danke ich Euch für Eure Unterstützung!

Schönen Gruß -

 Nico  :o)

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

Bewertung
0 lesenswert
nicht lesenswert
Ich kann nicht entdecken wo du den Stackpointer initialisierst.
Neuere Prozessoren machen das selbsttätig, ältere aber nicht.

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Stack ist initialisiert?
Poste doch bitte den gesamten Quelltext, oft ist der Fehler ganz 
woanders...

Autor: Nicolas K. (nico33hh)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Lothar Miller schrieb (und Karl heinz Buchegger im Prinzip auch):
> Stack ist initialisiert?
> Poste doch bitte den gesamten Quelltext, oft ist der Fehler ganz
> woanders...

Hm. Den Stack habe ich nirgendwo initialisiert.
Außer
.include "m32def.inc"
.device atmega32
vor meinem geposteten Quelltext war das auch schon der ganze Quelltext. 
Ist ja nur ein kurzes Test-Programm...

Wie läuft das mit der Stack-Initialisierung?


P.S.: Ihr seid aber verda..t schnell !!! :o)

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nicolas K. schrieb:
> Wie läuft das mit der Stack-Initialisierung?
      :
      ldi   r18, LOW(RAMEND)           ;Stackpointer initialisieren
      out   SPL, r18
      ldi   r18, HIGH(RAMEND)
      out   SPH, r18                  
Haupt:
      :

Autor: Volker Schulz (volkerschulz)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nicolas K. schrieb:
> [...]
> Wie läuft das mit der Stack-Initialisierung?

Blaetter doch bitte mal selbstaendig im AVR-Tutorial.

Da findest Du dann auch den wesentlich eleganteren Weg fuer 
(Warte-)Schleifen mit dec und brne.

Volker

P.S.: Ich bin der Meinung in AVR-Studio (Ver. 4.18) auch schonmal 
irgendwo einen Debugger gesehen zu haben! ;)

Autor: Nicolas K. (nico33hh)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Volker Schulz schrieb:
> Blaetter doch bitte mal selbstaendig im AVR-Tutorial.
>
> Da findest Du dann auch den wesentlich eleganteren Weg fuer
>
> (Warte-)Schleifen mit dec und brne.

Hallo Volker,

ich halte mich schon für sehr selbständig und habe schon div. Tutorials 
durchforstet. Aus einem dieser AVR-Tutorials habe ich auch die gepostete 
Warteschleife (die ja anscheinend nicht elegant ist).

Eine Initialisierung des Stacks habe ich bisher nicht 
gefunden/registriert.

@Lothar Miller:
Danke, ich werde es gleich mal ausprobieren, wenn meine beiden 
Kleinkinder-Jungs mich lassen... ;-)

Autor: RW (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Fuse Bits sind die gleichen? wie beim tiny?

Autor: Nicolas K. (nico33hh)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ALLE BISHER BETEILIGTEN und vor allem
@Lothar Miller:

VIELEN DANK!
Die Initialisierung war's.

Jetzt läuft es einwandfrei... ;-)
Danke für die schnelle und tolle Hilfe!



Nochmal @Volker Schulz:

Der Debugger war schon bei mir im Einsatz. Aber DEN Fehler hat er nicht 
gefunden...
Von den 8051ern her bin ich auch Schleifen mit dec gewohnt. Ich werde 
mir das nochmal gründlich ansehen...


Da ich generell gern experimentiere, frage ich hier im Forum erst, wenn 
ich wirklich nicht weiterkomme und auch nichts über die Suchmaschine 
entdecken konnte.
Von daher finde ich Antworten a la Lothar Miller oder Karl heinz 
Buchegger am hilfreichsten (obwohl ich weiß, daß es genügend "unechte" 
Hilfesuchende gibt, die alles fertig und ohne Suchen serviert bekommen 
wollen)...

Also:
Vielen Dank, das Problem ist beseitigt..!

Nico  :o)

Autor: Nicolas K. (nico33hh)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kam wohl während meines Abschluß-Beitrags:

RW schrieb:
> Fuse Bits sind die gleichen? wie beim tiny?

Die Fuse-Bits sind i.O., nachdem ich den üblichen Anfänger-Fehler 
begangen habe und auf den ext. Takt-Generator umgeschaltet habe.

Aber 2 Pins hochgebogen und im gleichen Pollin-Board den ATtiny2313 als 
Taktgeber benutzt - und schon konnte ich die Fuse-Bits wieder richten... 
;-)

Autor: Volker Schulz (volkerschulz)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nicolas K. schrieb:
> ich halte mich schon für sehr selbständig und habe schon div. Tutorials
> durchforstet. Aus einem dieser AVR-Tutorials habe ich auch die gepostete
> Warteschleife (die ja anscheinend nicht elegant ist).

Ich meinte ja auch DAS AVR-Tutorial (Link!), nicht irgendeins. Gibt 
bestimmt auch schlechte davon. ;)

Bei einer Warteschleife kannste halt einige Zeilen einsparen. Sowas wie 
folgendes wird auch hier im Tutorial benutzt:
ldi   temp, 255
Warte:
dec   temp
brne  Warte

> Eine Initialisierung des Stacks habe ich bisher nicht
> gefunden/registriert.

In DEM AVR-Tutorial gibt es einen Punkt namens:
•Der Stack: Was ist der Stack und wie funktionieren 
Unterprogrammaufrufe?


>
> @Lothar Miller:
> Danke, ich werde es gleich mal ausprobieren, wenn meine beiden
> Kleinkinder-Jungs mich lassen... ;-)

Gruesse an die Kleinen!

Autor: Nicolas K. (nico33hh)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Volker Schulz schrieb:
> In DEM AVR-Tutorial gibt es einen Punkt namens:
>
> •Der Stack: Was ist der Stack und wie funktionieren
>
> Unterprogrammaufrufe?

Der Gag ist, DAS Tutorial habe ich auch gelesen - aber die 
Initialisierung des Stacks habe ich total vernachlässigt/überlesen. 
Jetzt bei einem weiteren Durchlesen fiel es mir wie Schuppen aus den 
Haaren/Augen... ;-)
Kommt wohl, weil ich kein Ini von den MCS-51ern gewohn war (und der Tiny 
das wohl auch nicht braucht).

Danke an alle!

  Nico  :o)

P.S.: Weiß zufällig jemand, warum das AVR-Studio rechts in der 
Simulation kein PORTD hat? A-C sind da...

Autor: Volker Schulz (volkerschulz)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nicolas K. schrieb:
> P.S.: Weiß zufällig jemand, warum das AVR-Studio rechts in der
> Simulation kein PORTD hat? A-C sind da...

Bei mir ist da auch ein PORTD... Jedenfalls wenn ich ein Device mit 
PORTD eingestellt habe. ;)

Volker

Autor: Nicolas K. (nico33hh)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das verstehe ich nicht. Wenn ich ein Projekt mit einem 2313 
öffne/erstelle, habe ich die Ports A, B und D.
Bei einem mega32 aber nur die Ports A, B und C...
Wo ist der Port D geblieben?
Da ich mit dem Port D im mega32 arbeite, ist er zumindest definitiv 
vorhanden...

Hm... :o)

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Schon mal den ATMega32 in den Simulator Optionen eingestellt?

MfG Spess

Autor: Route_66 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Nico
Wenn ein "Programmierer" sich so wenig Gedanken um den Stack macht:

>Kommt wohl, weil ich kein Ini von den MCS-51ern gewohn war (und der Tiny
>das wohl auch nicht braucht).

dann muß man sich überhaupt nicht mehr wundern, daß Hacker so offene 
Scheunentore vorfinden, in fremde Computersysteme einzudringen.

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.