Forum: Mikrocontroller und Digitale Elektronik AVR Mega 16 T0 Interrupt bei externen Signal


von Frank G. (frankg)


Lesenswert?

Ich habe vor, eine Markisensteuerung mit einem AT Mega16 zu bauen.
Die Schaltung ist betriebsbereit. Probleme habe ich mit dem Geber für 
die
Windgeschwindigkeit, da Impulse sehr langsam und unregelmäßig kommen
------------------------------------------------------------------------ 
-------
Eigenschaften der Geber::   Windsensor WIS01:
Bei einer Umdrehung/s = 1Hz für 20km/h Windgeschwindigkeit geht bis 7Hz 
= 140km/h
erzeugt ein Impuls nach High; konstante Länge = 50ms (erfaßtt werden 
müssten die Anzahl der Impulse in z.B.
10 Sekunden) und dann Mittelwert * 20km/h // ist jedoch bei kein Wind 
unendlich = kein Impuls

Jetzt ist folgendes angeschlossen:
Wind an T0  (PB0) (INT0 wäre auch noch frei)
------------------------------------------------------------------------ 
---------
Der Timer 2 läuft und erzeugt 1 Sek Takt/Interrupt und führt Anzeigen 
usw durch.
INT2 ist mit Regensensor besetzt.   PROBLEM:
Ich dachte zuerst man bekommt bei T0 einen Interrupt (wenn z.B. CS0 123 
auf eins
=steigende Flanke) und kann damit 10 Sekunden zählen und addieren. Das 
geht aber scheinbar nicht,
weil ja kein konstanter Impulsstrom da ist (kein Wind = kein Impuls)
Ich habe auch keine Interruptroutine dazu gefunden (TiMER0_COMP_vect und 
auch
TIMER0_OVF_vect) gehen nicht weil ja ein Vergleichswert erreicht werden 
soll und den
kennt man ja vorher nicht (Timer 1 und ICP ist auch schon besetzt, dazu 
melde ich mich später)
Eigentlich will ich nur Wissen ob die T0 oder INT0 richtig gedacht ist?

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

T0 ist ein Eingang, der den Timer 0 bei jedem Puls eins hochzählt, also 
ein externer Takteingang. Das ist vermutlich nicht das was du willst, es 
sei denn, du fragst dann Timer 0 in gleichmässigen Zeitabständen ab, mit 
Hilfe eines anderen Timers.

von Frank G. (frankg)


Lesenswert?

Matthias S. schrieb:
> Das ist vermutlich nicht das was du willst, es
> sei denn, du fragst dann Timer 0 in gleichmässigen Zeitabständen ab, mit
> Hilfe eines anderen Timers.

OK dann sollte INT0 funktionieren

von Frank G. (frankg)


Lesenswert?

Frank G. schrieb:
> du fragst dann Timer 0 in gleichmässigen Zeitabständen ab, mit
>> Hilfe eines anderen Timers.

Was ich da noch rauslese: Dann bekomme ich bei T0 keinen Interrupt, d.h.
ich brauche auch keine ISR (bei Flankenwechsel)
In meiner Hautschleife (1 x pro Sek zähle ich 10 Mal) und lese dann 
TCNT0 aus und setze das dann wieder auf 0 und zähle erneut

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Frank G. schrieb:
> Dann bekomme ich bei T0 keinen Interrupt

So isses. T0 zählt erstmal nur den Timer 0 hoch. Einen Interrupt gibt 
es, wenn entweder ein OC Ereignis anliegt oder ein Überlauf stattfindet 
(und der Interrupt freigegeben ist).

Das Verhalten ist genau wie bei einem Timer mit internem Takt, nur das 
der Takt von extern kommt.

von Frank G. (frankg)


Lesenswert?

Matthias S. schrieb:
> So isses. T0 zählt erstmal nur den Timer 0 hoch. Einen Interrupt gibt
> es, wenn entweder ein OC Ereignis anliegt oder ein Überlauf stattfindet
> (und der Interrupt freigegeben ist).

Danke, da hat ich umsonst nach dem Interrupt gefahndet.... aber jetzt 
hab ich's verstanden

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.