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)
Ich kann nicht entdecken wo du den Stackpointer initialisierst. Neuere Prozessoren machen das selbsttätig, ältere aber nicht.
Stack ist initialisiert? Poste doch bitte den gesamten Quelltext, oft ist der Fehler ganz woanders...
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)
Nicolas K. schrieb:
> Wie läuft das mit der Stack-Initialisierung?
1 | : |
2 | ldi r18, LOW(RAMEND) ;Stackpointer initialisieren |
3 | out SPL, r18 |
4 | ldi r18, HIGH(RAMEND) |
5 | out SPH, r18 |
6 | Haupt: |
7 | : |
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! ;)
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... ;-)
@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)
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...
;-)
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!
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...
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
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)
Hi Schon mal den ATMega32 in den Simulator Optionen eingestellt? MfG Spess
@ 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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.