Forum: Mikrocontroller und Digitale Elektronik ATMega88 Assemblerfproblem / Timer


von Wolfram (Gast)


Angehängte Dateien:

Lesenswert?

Hallo an alle, ich suche wieder einmal Hilfe, diesmal bei einem etwas
komischen Problem.

Der Code wurde im AVR-Studio für ATmega88 getestet. Ich schreibe mir
kleine Routinen, um in die Assemblerprogrammierung reinzukommen.

Der Code lief einwandfrei. Als ich Ihn auf das Notwendige reduzieren
wollte, gings nicht mehr. Ursache war die Zeile 36 "out PIND, temp"
(unten extra gekennzeichnet).

Mit dem 5-zeiligen Codeblock hatte ich im AVR-Simulator die Taster SW2
/ SW3 simuliert, weil ich zu faul war, die einzelnen Portbits mit der
Maus (im AVR-Workspace) anzuklicken.

Das Programm initialisiert den 16-Bit Timer 1, und lädt die
Vergleichsregister OCR1AL und H mit 40H. Erreicht der Timer die 40H
soll er in die ISR T1_MatchA laufen, und dort ein paar LED´s an Port B
toggeln.

Das funktioniert einwandfrei bis zu dem Zeitpunkt, an dem die Zeile 36
auskommentiert wird. Das Programm bleibt dann nicht mehr im Loop hängen
bis die 40H erreicht ist, sondern läuft in einer Schleife immer wieder
durch die IS-Routine ohne den Compare mit den Vergleichsregistern
abzuwarten.

Meiner Meinung nach hat die Zeile mit dem eigentlichen Programm gar
nichts zu tun, und sollte sich aus dem Ablauf raushalten. Aber so ist
es immer - ich hab überhaupt nix gemacht, aber es geht nicht mehr.

Für Hilfe im voraus vielen Dank, ich melde mich immer nur, wenn´s nach
längerem probieren, testen, Datenblatt verfluchen absolut nicht mehr
geht.

Danke, Servus, Wolfram

PS: Das funktionierende Programm läuft im übrigen auch mit Pescaler
1024 und ffffH in den Vergleichsregistern nicht. Die LED´s bleiben im
einmal maskierten Zustand. Das ist aber ein anderes Problem, da muß ich
vorher selber noch mal ran.

Der Vairniss halber weis ich wieder darauf hin, daß ich den gleichen
Beitrag im roboternetz poste.

von momo (Gast)


Lesenswert?

Vairniss ist falsch geschrieben.

out pind,temp

ergiebt überhaupt keinen sinn.
Der Befehl wird überhaupt nich compiliert
du kannst nicht auf einen input was rausschreiben

von ...HanneS... (Gast)


Lesenswert?

Doch, gibt Sinn...
Toggelt den Pin an den Bits, die in Temp gesetzt sind.

Neues Feature Mega48/88.

...

von Wolle (Gast)


Lesenswert?

[zitat von momo]
->Vairniss ist falsch geschrieben.

->out pind,temp

->*ergiebt* überhaupt keinen sinn.
->Der Befehl wird überhaupt nich_ compiliert
->du kannst nicht auf einen input was rausschreiben
[/zitat von momo]

Selber an Nase fassen,gell !?

von Wolfram (Gast)


Lesenswert?

Hallo,

kurze Anmerkung, ich habe den Befehl natürlich im AVR-Studio getestet,
das funktioniert schon. Wenn ich ein einzelnes Bit auf diese Art setze,
wertet das der Atmega wie einen Tasterdruck an diesem Portpin, das haut
beim Simulieren gut hin.

Warum das Programm mit dieser Zeile läuft, und ohne nicht möchte ich
halt kapieren. Ich könnte die Zeile auch drin lassen, damit hab ich´s
aber noch nicht verstanden.

Värness kann mann auch mit Ä schreiben, wenn mer net hinschaugt.

Servus, Wolfram

von dave (Gast)


Lesenswert?

Wo steht das im Datenblatt? Ich habs kurz überschaut und bei den I/O
unter den PINX-Registern steht wie bei allen anderen "R" = Read
(only).

Wo hast du die Infos her?

Und wenn du einfach die falsche INC-Datei hast? Oder die falsche
Debugger-Plattform gewählt wurde...

Wenn du: "Mit dem 5-zeiligen Codeblock hatte ich im AVR-Simulator die
Taster SW2
/ SW3 simuliert, weil ich zu faul war, die einzelnen Portbits mit der
Maus (im AVR-Workspace) anzuklicken. "
zu faul bist, dir den IO Space anzuschauen... dann kannste auch gar
keinen Fehler finden.
SP und ähnliches mal überprüfen.

dave

von ...HanneS... (Gast)


Angehängte Dateien:

Lesenswert?

Datenblatt Seite 64 ganz oben...

...

von Dirk (Gast)


Lesenswert?

Hi,

benutze auch diese Funktion ohne Probleme beim Tiny13. Diese neue
Funktion ist sehr gut in einigen Anwendungen.

Mfg
Dirk

von Wolfram (Gast)


Lesenswert?

Ich bin´s nocmal,

habe Debuggerplattform ... alles überprüft, meiner Meinung nach paßt
das alles. Das Problem ist nicht der PINX-Befehl, das Problem ist, daß
das Programm nach der Timerinitialisierung und dem Füllen der
Vergleichsregister sofort in die ISR läuft.

Die ISR sollte erst aufgerufen werden, wenn High- und Lowbyte der
Vergleichsregister (OCR1AL, OCR1AH) mit dem High- und Lowbyte des
Timer1 (TCNT1L, TCNT1H) übereinstimmen, und das tut das Programm leider
nicht.

Ist der PINX-Befehl im Code, arbeitet das Programm korrekt, das kann´s
aber nicht sein - oder ?

Kurz zur Faulheit - alle Programmierer sind faul, sonst gäbs kein Copy
und Paste im Editor, was andres mach ich auch nicht. Wenn Dave will,
kann er bei jedem Testlauf die richtigen Bit´s mit der Maus setzen. Ich
schreib 5 Zeilen, und brauch das nie mehr in meinem Leben tun, jetzt
stell dir mal vor ich werd 100 Jahre alt, das sind noch rund ein ganzer
Haufen, pro Tag 50 Clicks auf die Bit´s das sind ... Das hält keine Maus
aus. Du mußt an dir arbeiten Dave.

Trotzdem Danke für jeden Beitrag, Servus, Wolfram

von Uwe (Gast)


Lesenswert?

Hi!
Auch auf die Gefahr hin mich zu blamieren, muss ich denn doch mal
nachfragen.: STS speichert doch in's S-Ram? Wolltest du nicht den
Timer starten?
>  ldi temp, (1<<CS10)|(0<<CS11)|(0<<CS12)
>  sts TCCR1B,temp                             ; 010=8, 011=64,
TCCR1B hat in der .ink natürlich eine Adresse und für mich speicherst
du an eben jener Adresse im S-Ram.

Oder bin ich total von gestern?

MFG Uwe

von Wolfram (Gast)


Lesenswert?

Servus Uwe,

du hast teilweise recht, ein Teil der Register des ATMega88 liegen im
SRAM. Offizielle Bezeichnung ist "MEMORY MAPPED I/O REGISTER
DEFINITIONS (&FF-$60)". Im AVR-Studio sehe ich auch einwandfrei, wie
das Register gesetzt wird, das scheint recht gut zu klappen. Der Timer
startet auch, das paßt also.

Bei meiner ISR ist mir noch aufgefallen, daß ich SREG sichern und
wieder zurückschreiben muß. Ich muß mich noch in einiges einarbeiten,
wird aber immer besser.

Dank dir, Servus, Wolfram

von Dirk (Gast)


Lesenswert?

Hi,

dein Programm funktioniert aber auf der Zielhardware?

Avr Studio hat leider einige Bugs beim Debuggen.

Mfg
Dirk

von Wolfram (Gast)


Lesenswert?

Hallo Dirk,

auf der Zielhardware hatte ich gestern Probleme. Ich komme erst jetzt
wieder zum Testen, melde mich wieder, wenn ich mehr weis, ein paar
systematische Tests muß ich noch machen, oder mich erst mal mit dem
Timer0 ranarbeiten.

Ich bin erst seit ca 2 Wochen in diesem Forum und habe bereits ein paar
prima Beiträge von dir und übrigens auch HanneS und natürlich anderen
gefunden. Das hilft dann alles immer prima weiter.

Dank euch, jetz geh ich zum Bitpopeln.

Servus, Wolfram

von Uwe (Gast)


Lesenswert?

Hi!
Ok, muss ich wohl doch mal MEGA88 studieren, aber lösche mal
vorsichtshalber das Timerflag vor Einschalten desselbigen. Aber
erklärbar ist dein Probl. deswegen auch nicht.

MFG Uwe

von Wolfram (Gast)


Lesenswert?

Servus an alle,

es klappt, Code war richtig. Das AVR-Studio hatte Bugs beim debuggen.
Habe die neue Version heruntergeladen, jetzt klappt alles.

Und das End von der Geschicht, traue keinem Debugger nicht !

Servus, Wolfram

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
Noch kein Account? Hier anmelden.