__________________________________________________ _
| Sprache: C | Teensy 3.2 | Arduino 2.x | Status: EwigerAnfaenger |
Sorry das ist etwas zu kurzsilbig, ich versteh der Satz gerade nicht mal
Der ISR und auch das PIN Register funktionieren unabhängig vom DDR Register!
du musst den Interrupt also schon aus/blindschalten und dann den Pin über das PORT Register entsprechend setze.Observe that, if enabled, theinterrupts will trigger even if the INT0 or PCINT[5:0] pins are configured as outputs
Der Taster an einem auf output geschalteten Pin bedeutet natürlich auch ein Kurzschluss, ist also generell nicht empfehlenswert!
Es gibt 10 Sorten von Menschen: Die einen können binär zählen, die anderen
nicht.
@ceos
Bei meinem Timer-Interrupt werden innerhalb des ISR die Eingänge PA4, PA5 abgefragt.
Im main() werden für gewöhnlich die DDR einmalig als Ein- oder Ausgänge konfiguriert.
Nun möchte ich aber innerhalb der while(1) jeden einzelnen Eingang nach Bedarf "Stumm" schalten, so dass im ISR, if((PINA & (1<<PINA5)) != 0) //1=tu was, ins "leere" läuft.
Daher meine Idee, den entsprechenden Pin, "mal eben" als Ausgang zu konfigurieren.
@021aet04
5V==High==1
Kurzschluss auf der Ausgangsleitung? Wenn der uC/Out==low==0, uC-intern direkt mit dem Gnd verbunden ist, ist das tatsächlich möglich.
Geändert von frabe (14.08.2019 um 15:22 Uhr)
__________________________________________________ _
| Sprache: C | Teensy 3.2 | Arduino 2.x | Status: EwigerAnfaenger |
wie aus der Doku zitiert, das geht leider nciht, du kannst also nur den
PCMSK0 umkonfigurieren um deine ISR zu blockieren. Zusätzlich solltest du alelrdings in deinen Abfragen auch den Pin ausmaskieren, sonst löst er trotzdem aus, wenn du beide Taster drückst.
Du musst also alles maskieren
Es gibt 10 Sorten von Menschen: Die einen können binär zählen, die anderen
nicht.
Das 5V ein High ist, ist normal. Die Frage ist, wie hast du den Taster angeschlossen (gegen 5V oder Masse, Verwendest du einen Widerstand)?
Normalerweise gibt es kein Problem, solltest du aber versehentlich den Port schalten und du die Taste dürcken, hast du ein Problem (z.B. Ausgang auf high und Taste auf Masse). Es reicht schon wenn du dich verschreibst.
MfG Hannes
Du hast natürlich Recht - in diesem Fall kann nichts passieren - man/ich sollte aber "Narrensicher" entwickeln, könnte ja mal in andere Hände gelangen.
Mittlerweile halte ich die Lösung mit der Ein/Ausgangs-Umschaltung für praxisfern.
Vielleicht ist eine andere Variante mit dem "Stummschalten" durch volatile-Variablen sinnvoll.
Bsp:
Im main(), sequneziell PA4 und/oder PA5; Variable "PA4freischalt=1;", "PA5freischalt=1;"
Innerhalb des ISR (Timer) oder dessen Funktionsaufruf; if (PA4freischalt == 1) {} // Eingangsimpuls wird weiter verarbeitet
__________________________________________________ _
| Sprache: C | Teensy 3.2 | Arduino 2.x | Status: EwigerAnfaenger |
Bei solchen Dingen musst du aufpassen. Du kannst einen Kurzschluss erzeugen.
Wie sieht deine Schaltung aus?
Der Programmteil ist in Ordnung und sollte so funktioieren. Es kann sein das du es noch irgendwo anders änderst (ungewollt). Was macht "LEDgn_ein();" bzw "LEDgn_aus();" genau (Led ein/ausschalten ist klar, wie sieht aber die Funktion aus).
Ich würde das aber etwas anders lösen. Du hast einmal das Eingangsbit von PA5 und einmal ein "Merkerbit" mit dem du das einlesen "freigibst". Diese beiden Bits verknüpfst du mit einem "Und".
MfG Hannes
Lesezeichen