Hallo liebe U-Controller Freunde,
ist es möglich, wie ich mir das denke,
Ich hab 1x Taster (Low Active, über Widerstand) an PD7 ganz normal
angeschlossen und funktioniert auch. Nun will ich den Taster parallel an
einen 2ten Pin des Atmega8 hängen und zwar den Externen Interupt PIN
INT0.
So dass im programm folgendes möglich ist ->
( normaler Programmbereich )
-keine Interupt freigabe
Taster wird normal über Eingang PD7 abgefragt
( spezielle Programmbereich )
- Interupt freigabe erteilt
Taster löst einen Interupt aus (PD7 ignorieren)
Ist dies Möglich bzw. Sinnvoll?(Alle Timer werden anderweitig benutzt)
Und funktioniert das auch, so wie ich das geschildert hab?
Vielen Dank für eure Hilfe!
Wenn Dein Programm vernünftig geshrieben ist, so wirds auch
funktionieren.
Resourcen-Verschwendung ists allemal.
Häng den Taster nur an den Interrupt-Eingang, den kannst sicher auch
abfragen, wenn die Interrupts gesperrt sind.
Danke Kurz,
der Taster hängt im Moment an PD7 ganz normal als Eingang.
Ja Ressourcen verschwendend mag es sein, aber immer noch Besser
(einfacher)
als wenn die Ressource gar nicht genutzt wird.
Du kannst den Taster einfach an den INT0 Pin hängen, in dem
Programmabschnitt, in dem du den Interrupt gesperrt hast, kanns du den
Taster "normal" abfraen, ohne ihn an einen zweiten Pin zu hängen...
Warum Hardwarewaufwand betreiben, wenn nicht nötig?
beim attiny2313 ist der int0 gleichzeitig auch PD2 ... und da ist es
total egal ob interrupts ausgelöst werden oder nicht... PD2 ist immer
abfragbar.
wenn du einen andern pin an den int0 mit anschließt hast du aber die
möglichkeit per software einen hardwareinterrupt auszulösen :P
^^ also funktioniert das so wie ich denke :-)
sehr schön.
Und ob ich jetzt umlöte oder eine Brücke ziehe, sprich in parallel an
einen 2ten Pin hänge, ist ja egal. vllt. ist es so eindeutiger,
ersichtlicher, weniger verwirrend wenn PD7 abfrage und INTO als Interupt
nehme.( 2 verschiedene Pins)
Aber alles in allem,es würde Funktionieren. Ausgezeichnet!
Wenn Du nicht nur Tastendrücke, sondern auch Störungen empfangen willst
(elektrostatische Aufladung, Schalten von Leuchtstoffröhren, Motoren
usw.), dann ist der Interrupt genau richtig.
Wenn Du allerdings die Taste noch entprellen mußt und Flankenerkennung,
dann ist der Interrupt witzlos.
Wer sich das Leben leicht machen will, der nimmt nen Timerinterrupt zum
Tasten einlesen.
Peter
Hey Namensfetter(peda),
als ob du es wusstest: Es hängt eine CCFL an der Schaltung. Und ja ich
muss den dann entprellen.
Aber warum ist es dann witzlos?
Es geht in meinen Fall darum
das ich:
1. Alle Timer schon benutze
2. nur >1< Taster hab
3. Trotz einen Taster ,der Normal benutzt wird, außerdem das Programm an
gewissen stellen sofort und unverzüglich "unterbrechen" will ->
Interupt.
Außerdem hätte ich gerne das er länger drücken oder mehrmaligen drücken
auch erkennt. Aber wie ich das genau realisiere weiß ich noch nicht.
Peter schrieb:
> 1. Alle Timer schon benutze
Das sagen alle.
Man muß mal genauer hinschauen. In der Regel brauche ich immer nur einen
Timer und der macht dann sämtliche Zeitsteuerungen (LED-Multiplex,
Tastenabfrage, Uhrzeit/Datum, Blink-LEDs ...).
> 3. Trotz einen Taster ,der Normal benutzt wird, außerdem das Programm an> gewissen stellen sofort und unverzüglich "unterbrechen" will ->> Interupt.
"sofort" ist für nen Menschen etwa 500ms. Ein Timerinterrupt von 10ms
ist für nen Menschen also viel schneller als "sofort".
> Außerdem hätte ich gerne das er länger drücken oder mehrmaligen drücken> auch erkennt. Aber wie ich das genau realisiere weiß ich noch nicht.
Da gibts doch schon was fertiges:
Beitrag "Universelle Tastenabfrage"
Peter
Hey danke Peda,
aber ich nutze, wie ich gerade feststelle, wirklich alle 3 Timer für
PWM... :(
Wäre echt ne sehr feine Sache gewesen mit deiner "Universelle
Tastenabfrage".
Der Atmega8-16 hat doch nur 3 Timer oder?
> aber ich nutze, wie ich gerade feststelle, wirklich alle 3 Timer für> PWM... :(
Auch ein für Hardware-PWM genutzter Timer kann nebenher noch einen
Überlauf-Interrupt auslösen... ;-)
...