- fchao-Sinus-Wechselrichter AliExpress         
Ergebnis 1 bis 10 von 12

Thema: Flankenwechsel erkennen, aber wie?

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1

    Frage Flankenwechsel erkennen, aber wie?

    Hallo, zusammen!

    Ich habe da nur ein "ganz kleines" Problem.

    Wie kann ich in Bascom einen Flankenwechsel LOW>HIGH oder HIGH>LOW erkennen und auswerten?

    Der Hintergrund: Ich möchte erkennen ob ein Schalter (KEIN TASTER!) betätigt wurde und daraufhin einen kurzen Impuls ausgeben.

    Hat jemand eine Idee?

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    08.09.2007
    Ort
    Berlin
    Alter
    32
    Beiträge
    1.578
    Hallo,

    dafür gibts 2 Möglichkeiten:
    1. mittels Polling, d.h. du fragst die ganze Zeit ab, ob sich der Zustand des Pins geänder hat
    2. mittels Interrupt, dieser tritt auf, wenn der Flankenwechsel stattfindet! (Config INTX)

    Die 2. Lösung ist meist die bessere, da dadurch das restliche Programm unbeeinflusst weiterlaufen kann!

    Gruß
    Chris

  3. #3
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    19.05.2005
    Ort
    Berlin
    Beiträge
    316
    Würd ich auch per Interrupt machen. Musst halt bei jedem Auslösen den Interrupt neu konfigurieren (von steigende auf fallende Flanke und dann wieder zurück).

  4. #4
    Ich danke Euch!

    Die Idee per Interrupt hatte ich ja eigentlich auch schon.
    Ich muß wohl meine Aufgabe etwas präzisieren!

    Ich möchte einen Atmega8 verwenden und muß 4 Schalter abfragen. Also kommt Int nicht in Frage!

    Mit einer LOGO! von SIE(ne)MENS wäre es ja kein Problem, aber ich will es anders und preiswerter schaffen!

    Helft Ihr mir?

    Danke und Grüße

    Karsten

  5. #5
    Erfahrener Benutzer Robotik Einstein Avatar von wkrug
    Registriert seit
    17.08.2006
    Ort
    Dietfurt
    Beiträge
    2.236
    Es bestünde noch die Möglichkeit die schalter per Pin Change Interrupt abzufragen.
    Aber nicht alle ATMEL Controller stellen den zur Verfügung.
    Bei jedem Zustandswechsel an einem der beteiligten Pins wird dabei ein Interrupt ausgelöst.
    Ob von L->H oder von H->L musst Du allerdings per Software rauskriegen.

    Bei einigen Controllern laufen mehrere Pins auf einen Interrupt Vektor.
    Das bedeutet, Du musst auch konkret den Pin per Software rauskriegen, der das Interrupt Ereignis ausgelöst hat.

    Abe ansonsten wäre Pin Change sicher eine gute Lösung.

  6. #6
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.01.2006
    Beiträge
    4.555
    Zitat Zitat von karstenl Beitrag anzeigen
    Ich danke Euch!

    Die Idee per Interrupt hatte ich ja eigentlich auch schon.
    Ich muß wohl meine Aufgabe etwas präzisieren!

    Ich möchte einen Atmega8 verwenden und muß 4 Schalter abfragen. Also kommt Int nicht in Frage!

    Mit einer LOGO! von SIE(ne)MENS wäre es ja kein Problem, aber ich will es anders und preiswerter schaffen!

    Helft Ihr mir?

    Danke und Grüße

    Karsten
    Du fragst einfach kontinuierlich einen kompletten Port ab, speicherst den Wert in einer Variable und vergleichst auf Änderung. Je nachdem welches Bit sich geändert hat, kannst Du den Schalter zu ordnen. Damit der Prozessor auch noch etwas anderes machen kann, lässt Du diese Abfrage in einem Timer IRQ z.B. alle 50 ms ablaufen. ODER Du nimmst einen AVR bei dem alle Pin's IRQ fähig sind, das ist noch eleganter. PIC Prozessoren konnten das schon vor über 10 Jahren....

    Gruß Richhard

  7. #7
    Erfahrener Benutzer Robotik Einstein Avatar von wkrug
    Registriert seit
    17.08.2006
    Ort
    Dietfurt
    Beiträge
    2.236
    ODER Du nimmst einen AVR bei dem alle Pin's IRQ fähig sind, das ist noch eleganter.
    Also wieder Pin Change Interrupts. Es kommt halt auf die Latenz Zeiten an, die in seinem Programm noch akzeptabel sind.
    Wenn karstenl ewig lange Wait Schleifen in seinem Hauptprogramm hat wirds schwierig mit dem pollen.
    Ausserdem muss er ja noch den Puls erzeugen. Wenn dieser auch in der Interrupt Routine erzeugt werden soll würde das nur mit Wait Schleifen gehen und das wäre in einer Interrupt Routine fatal.

    Wenn die Latenz keine Rolle spielt würde ich es per Polling in der Hauptroutine machen.
    Die alte Bit Kombination wird in einer Byte Variable gespeichert und invertiert ( aus allen 1 wird 0 und umgekehrt ) und mit der neuen Abfrage Exclusiv verodert.
    Wenn sich dann ein Bit Verändert hat kriegt man ein Ergebnis das >0 ist raus.
    Auf das kann man abfragen und den Puls generieren. Danach wird der aktuelle Zustand wieder in der Hilfsvariable gespeichert und invertiert.
    Das ist mit wenigen Programmzeilen zu machen. Allerdings ist die Reaktionszeit zwischen Tastenänderung und Impulsgenerierung dabei von der Durchlaufzeit der Hauptroutine abhängig. Ist dabei ein Schleifendurchlauf ziemlich kurz, dürfte das keine große Rolle spielen.

Ähnliche Themen

  1. 12V mit AVR erkennen
    Von phyro im Forum AVR Hardwarethemen
    Antworten: 10
    Letzter Beitrag: 01.07.2009, 21:45
  2. Ball erkennen
    Von Luca im Forum Sensoren / Sensorik
    Antworten: 8
    Letzter Beitrag: 17.09.2008, 16:26
  3. flankenwechsel detektieren
    Von alper im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 1
    Letzter Beitrag: 10.05.2007, 13:04
  4. Kondensatorkapazität erkennen
    Von MischaMV im Forum Elektronik
    Antworten: 6
    Letzter Beitrag: 28.02.2006, 17:49
  5. gcc erkennen?
    Von bluebrother im Forum C - Programmierung (GCC u.a.)
    Antworten: 6
    Letzter Beitrag: 09.11.2005, 12:10

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Solar Speicher und Akkus Tests