ISR globale Variable

Gast #4947308
Lesenswert?
• ▲
▼
Hallo ich habe ein kleines Programmierproblem. Ich soll mit dem 
Mikrocontroller ATTiny24 eine Frequenz einlesen und ungefähr doppelt so 
schnell wieder ausgeben.
Zum Einlesen benutze ich den 16-Bit Timer mit einer Auflösung von 1us 
pro DigitalWert und den Input-Capture Interrupt.
Zum ausgeben benutze ich den 8 Bit Timer, der jedoch hier vernachlässigt 
werden kann.
Mein Problem ist, dass ich zwar das Eingangssignal mit einer 
Mittelwertbildung im ICR1 Interrupt berechnen kann, dieses Ergebnis 
jedoch nicht weitrhin in der main Routine zur verfügung steht. Mein 
Latein ist dabei am Ende, ich habe 1 Tag ununterbrochen getestet und ich 
verstehe nicht, warum mein berechnetes Eingangssignal in der Main 
Routine den Wert 0 besitzt. Ich hoffe ihr könnt mir helfen.
Im Anhang der abgespeckte Code (Port- und 8-Bit Timer Initialisierung 
fehlt), an dem ich verzweifel.

Zu erwähnen ist, dass ich mit einem Frequenzgenerator eine Testfrequenz 
von 50Hz eingestellt habe.
Angehängte Dateien:
Gast #4947359
Lesenswert?
• ▲
▼
wie darf ich das mit dem stichwort volatile verstehen? Ich benutze es 
doch für die Variable time...


Ok, wenn nichts sinnvolles rauskommt, dann würde trotzdem die Variable 
time nicht den Wert 0 besitzen oder täusche ich mich da?
Moderator (Firma: Titel) Persönliche Seite #4947372
Lesenswert?
• ▲
▼
Sven schrieb:
> Hallo ich habe ein kleines Programmierproblem.
Ja, offenbar. In Headerfiles werden keine Variablen deklariert. Dort 
werden sie bestenfalls definiert und mit dem Schlüsselwort "extern" 
bekannt gemacht.

Zum 65535*overflow zwei Worte:
1. Ist die Zahl  65535 mit an Sicherheit grenzender Wahrscheinlichkeit 
falsch und es ist 65536 gemeint
2. Wird diese Rechnung mit 16 Bit gemacht und erzeugt deshalb sicher 
einen Overflow
Gast #4947395
Lesenswert?
• ▲
▼
Okay, also kann ich das so verstehen, dass die Main als auch die ISR die 
Variable time kennen, aber einen unterschiedlichen Speicherbereich für 
diese Bereit halten?

Ja mit dem Overflow bzw. mit meiner Berechnung möchte ich nur die exakte 
Zeit bestimmen, da ich den 16-Bit Timer im Dauerlauf laufen lasse.
Gast #4947415
Lesenswert?
• ▲
▼
Ok, danke erstmal dafür, jedoch ist mir noch nicht klar, wieso meine 
Variable time ununterbrochen den Wert 0 besitzt. Zwar habe ich die 
Variable in der Header Datei definiert, müsste doch nach einer gewissen 
Zeit den Wert ändern oder täusche ich mich da?

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