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.
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
Doch, gibt Sinn... Toggelt den Pin an den Bits, die in Temp gesetzt sind. Neues Feature Mega48/88. ...
[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 !?
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
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
Hi, benutze auch diese Funktion ohne Probleme beim Tiny13. Diese neue Funktion ist sehr gut in einigen Anwendungen. Mfg Dirk
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
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
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
Hi, dein Programm funktioniert aber auf der Zielhardware? Avr Studio hat leider einige Bugs beim Debuggen. Mfg Dirk
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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.