Forum: Mikrocontroller und Digitale Elektronik Attiny - Variablenübergabe aus Subroutine erfolgt nicht


von Georg B. (schorschi)


Angehängte Dateien:

Lesenswert?

Hallo zusammen
ich habe da ein Problemm mit einem Attiny45.
An Port PB2 nehme ich mit dem INTO Interrupt einen externen Puls auf und 
Zähle ihn hoch. Nach einer abgelaufenen Zeit erzeugt der on Timer1 isr 
einen Überlauf und nach Durchlauf einer Schleife, da nur ein 8Bit Timer 
zur Verfügung steht und ich eine Zeit von 1 Sek brauche, erfolgt die 
Übergabe des Zählwertes an eine Variable in einer Subroutiine und setzt 
den Zählwert wieder auf Null. Die eigentliche Berchnung erfolgt im 
Hauptprogramm doch da kommt der Variablenwert nie an.

Kann mir einer eine andere Lösung aufzeigen ????
Gerne würde ich den kleinen Tiny beibehalten. Sofern es an der Schleife 
in der Interruptroutine liegt werde ich wohl einen größeren Tiny mit 16 
Bit Timer nehmen müssen !!!!

Danke für Eure Mühe

von Teplotaxl X. (t3plot4x1)


Lesenswert?

Gibt's bei Bascom auch sowas à la volatile?

von schorschi (Gast)


Lesenswert?

Hallo
was ist das ??? da habe ich keine Ahnung???, bin Anfänger auf Bascom.
kannst du das kurz erklären ???!!!

Danke

von derwarze (Gast)


Lesenswert?

Nach kurzen Überfliegen des Listings fälltmir auf das aus der IR auf 
eine Printausgabe gesprungen wird. Das ist aber nicht gut da Sprünhe aus 
der IR vermieden werden sollten und andererseits die Print Ausgabe 
verhältnissmässig viel Zeit beansprucht.
Eine Variable als solche wird ja gar nicht übergeben.
Setze doch einfach eine BitVariable die dann im Hauptprogramm wenn sie 
gesetzt ist in das Unterprogramm springt. So kommmt der Zeitablauf der 
IR nicht aus dem Tritt.

von schorschi (Gast)


Lesenswert?

Hallo,
selbst wenn ich die Print Ausgabe komplett herausnehme gehts nicht. Im 
Listung ist auch die INTO Isr versehntlich auskommentiert.
Die Variable um die es geht ist die Zaehlerirq0 die wird in "On Int0 
Irq0" hochgezählt und dann in der "On Timer1 Timer1_isr" mit einer 
Schleife zur Verlängerung der Zeit auf eine Sek. ausgegeben. Der Sprung 
in die Subroutine Aktu dient rein der Übergabe an die Variable 
"Bydrehfrequenz". die Variable Bydrehfrequenz soll mit in den 
Haupprogrammteil "Do - loop" übernommen werden und dort als Teil einer 
Berechnung dienen. Doch ist die Variable Bydrehfrequenz im 
Hauptprogrammteil wieder leer, also Null.
Die Variable habe ich mit DIM Bydrehfrequenz as Byte deklariert, es sind 
nur Frequenzen bis 150 Hz zuerwarten. Mit der DIM Deklarierung sollte 
die Variable doch überall im Programm verfügbar sein.???????

Zu meiner Schande......sehe ich gerade das ich ein Testprog angehängt 
habe in der ein Teil auskommentiert ist aber für meine 
Beschreibung/Berechnung gebraucht würde.

Vieleicht steige ich noch dahinter ich werde es mal mit einen Tiny26 
testen der hat einen 16 Bit Timer und sobrauche ich zumindest keine 
Schleife in der "On Timer1 Timer1_isr.

Hat noch einer ein guten Tipp für einen Anfänger

von Schorschi (Gast)


Lesenswert?

Hallo zusammen,
auch nach weiteren Tests gehts auch mit dem Tiny26 trotz 16-Bit Timer 
nicht.
Nach Hochzählen des Int0 mit incr in der Variable Zaehlerirq erfolgt der 
Timerüberlauf nach 1 Sek und der Wert von Zaehlerirq wird in eine 2te 
Variable geschrieben. Der Inhalt der Variablen sowohl Zaehlerirq als 
auch die 2te variable wird aber nicht im Hauptptrogramm übernommen. Ich 
habe schonmal was von Overlay in bascom gelesen und frage hier mal die 
Profis ob die mehr wissen.

Hilfe !!!!!!!!!!!1

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.