ATmega32 will nicht springen! AVR-Studio schuld?

OP #1579921
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)
OP #1579950
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)
OP #1579972
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... ;-)
OP #1580005
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)
OP #1580012
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... 
;-)
#1580016
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:
1
ldi   temp, 255
2
Warte:
3
dec   temp
4
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!
OP #1580657
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...
Gast #1581617
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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren