Forum: Compiler & IDEs TCNT1H zurücksetzen und Overflow-Routine


von Patrick Weber (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

ich versuche gerade eine ABS-Regelung auf einem 8515 zu programmieren,
das klappt auch alles soweit ganz gut, nur leider zeigen sich nun
Probleme auf zu denen ich keine Antwort weiß...

Zum Einen benutze ich den 16-bit Counter welchen ich auch starten kann.
Nur beim Zurücksetzen will er nicht so wie ich will. Ich setze erst den
TCNT1L über folgende Zeile zurück: outp(0x00, TCNT1L); und in der
nächsten Zeile dann: outp(0x00, TCNT1H); und damit doch das High
Register oder? Nur leider macht er das nicht, sondern bleibt munter auf
diese Zahl stehen. Hab ich da was falsch gemacht?

Zum Anderen hänge ich immer noch mit der Overflow Routine... Ich
möchte, wenn der 8-biter überläuft einfach ein Variable hochzählen und
diese dann auf den LEDs ausgeben. Ich habe diese Variable auch mit
volatile deklariert aber es geht leider nicht. Auch wenn ich in die
outp Zeile einfach eine Zahl hineinschreibe macht er das auch nicht,
ich stehe vor einem Rätsel...

Vielleicht kann sich einer meiner annehmen und mir dabei helfen.
BITTE...

Ich hänge auch mal die vorläufige Datei an...

Vielen Dank

Patrick Weber

von Andreas Wiese (Gast)


Lesenswert?

Warum ~wert und nicht wert_r?
Zu dem 16 bit Register: Es muss beim schreiben immer zuerst das
High-Register geschrieben werden, dann low. Ich habe es bei WinAVR noch
nicht ausprobiert, aber der Compiler unterstütz doch sicher 16bit
Zugriff auf die Register, oder nicht?

Gruß
Andreas

von Patrick Weber (Gast)


Lesenswert?

Hallo,

wenn der wert_r negiert wird, bedeuten die LEDs die an sind eine 1! Das
ist der einzige Grund ;-)

Ja das habe ich auch gelesen und auch befolgt, aber dennoch köscht er
mir nur den Low-Register, der High bleibt unverändert...

MfG Patrick

von Peter Fleury (Gast)


Lesenswert?

Verwende neue Schreibweise (ohne outp()), und mit WinAVR kannst du 16bit
Registern direkt lesen/schreiben:
TCNT1 = 1213;

von Patrick Weber (Gast)


Lesenswert?

Hallo,

ich habe das jetzt so geschrieben:

TCNT1H = 0;
TCNT1L = 0;

Aber das Ergebniss ist dasselbe....

Grüsse

Patrick

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.