- Labornetzteil AliExpress         
Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 14 von 14

Thema: Probleme mit ATtiny2313A wärend Interruptroutine

  1. #11
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.692

    Pfeil

    Anzeige

    LiFePo4 Akku selber bauen - Video
    Hallo Alex!

    .. Werde mich dann mit dem Thema Tastenentprellung auseinandersetzen und diese dann implementieren ..
    .. besteht das Problem "ich blink wie ich will" immer noch. Was habe ich falsch gemacht? .. Ist das überhaupt der richtige Code .. ? ..
    Falsch gemacht? Du hattest davor geschrieben ".. auseinandersetzen .." danach ".. implementieren ..". Mir siehts umgekehrt aus: ".. implementieren .." danach ".. auseinandersetzen ..".

    Beim schnellen Hinsehen fälllt mir auf, Du hast ISC00 und ISC01 gesetzt. Da kommt der Interrupt INT0 bei rising edge. Wie schaltet denn der Taster/Button? Gegen GND oder Vcc? Dass Du den INT0-Pinn (PD2) auf Ausgang setzt macht ja nix aus, denn das Datenblatt schreibt ja auch ".. even if the INT0, INT1 or PCINT17..0 pins are configured as outputs .."; es sieht für mich nur überraschend aus. Meine Taster gehen (fast) immer auf Eingänge mit PullUp und schalten gegen GND.
    Ciao sagt der JoeamBerg

  2. #12
    Erfahrener Benutzer Robotik Visionär Avatar von 021aet04
    Registriert seit
    17.01.2005
    Ort
    Niklasdorf
    Alter
    36
    Beiträge
    5.074
    Was mir auffällt ist das du in der ISR schreibst "if (taster == r) ; {". Somit wird switch immer ausgeführt. Und warum prüfst du auf "r"? Du kannst einfach auf "1" oder "!0" prüfen.

    MfG Hannes

  3. #13
    Erfahrener Benutzer Robotik Einstein Avatar von Searcher
    Registriert seit
    07.06.2009
    Ort
    NRW
    Beiträge
    1.703
    Blog-Einträge
    133
    Zitat Zitat von Lichti01 Beitrag anzeigen
    Leider besteht das Problem "ich blink wie ich will" immer noch. Was habe ich falsch gemacht?

    Code:
    ISR(INT0_vect)
    
    {
        if (taster == r);    //Wenn Taster gedrückt
        {
            
            //switch case Abfrage
            switch(c)
      .
      .
    Ist das überhaupt der richtige Code für Tasterentprellung?
    Hallo Alex,
    weil ich in Bascom programmiere, kann ich C nur recht grob verstehen. Die "taster" Routine scheint Sinn zu machen, wenn sie ständig aufgerufen wird. Du rufst sie aber nur in Deiner ISR auf. Sie ist auch für Taster ausgelegt, die nach LOW schalten.

    Wie die anderen schon geschrieben haben sind dafür die ISC00 und ISC01 Bits noch nicht richtig eingestellt. Wenn die Bits dann auf fallende Flanke eingestellt sind, wird die ISR nur mit der fallenden Flanke aufgerufen und die "taster" routine kann die Zustände "Taster wird losgelassen" bzw "Taster losgelassen" nicht erreichen, da ja in dem Fall die ISR gar nicht aufgerufen wird. (Bitte ein Aufschrei wenn ich falsch liege )

    Die "taster" Routine muß also ständig unabhängig vom Taster Interrupt zB durch einen eigenen Timer aufgerufen werden. Bedeutet aber auch gößere Änderungen im Programm.

    Zum Testen Deiner main könntest Du Dein ursprüngliches Programm nehmen und zunächst auf eine unschöne aber einfache Entprellung zurückgreifen. Dazu ganz am Ende der ISR ein delay von 20ms einsetzen und danach noch das INTF0 Flag im GIFR durch Schreiben einer 1 auf das INTF0 löschen; Ende der ISR.

    Dadurch wird die ISR bei Tasterbetätigung aufgerufen, das INTF0 automatisch gelöscht, Aktionen durchgeführt und dann 20ms lang abgewartet, ob noch Tastenpreller auftreten. Wenn welche aufgetreten sind und das ist zimlich sicher, steht das INTF0 wieder. Das wird jetzt noch manuell gelöscht!, damit nicht sofort nach Beendigung der ISR diese sofort wieder aufgerufen wird.

    Bleibt der Finger auf der Taste oder wird sie losgelassen, tritt keine fallende Flanke auf und es passiert nichts weiter; nur eben dann wieder bei erneutem Tastendruck.

    Der Nachteil ist, daß wie schon mal von 021aet04 erwähnt wurde, das delay das Programm für 20ms aufhält und damit auch das 500ms Blinktiming während Tastendruck minimal verändern kann. Zum Testen würde ich das mal probieren und dann mich nochmal intensiv mit der Entprellung beschäftigen.

    Gruß und ein Frohes Neues an alle
    Searcher
    Geändert von Searcher (01.01.2018 um 11:52 Uhr) Grund: Registername für ATtiny2313A berichtigt
    Hoffentlich liegt das Ziel auch am Weg
    ..................................................................Der Weg zu einigen meiner Konstruktionen

  4. #14
    Neuer Benutzer Öfters hier
    Registriert seit
    04.06.2017
    Beiträge
    23
    HI zusammen und ein frohes neues Jahr,

    Hab die ISC00 und ISC01 Bits nun auf fallende Flanke gesetzt. Das If (taster == r) wurde aus der ISR gelöscht. Des weitern habe ich den PullUp-Widerstand noch in meine Schaltung mit eingebaut.
    Jetzt funktioniert alles prima.

    @oberallgeier
    Hab auf jeden Fall versucht es im voraus zu verstehen. Aber wie heißt es so schön learning by doing. Bin halt noch ganz am Anfang, was das programmieren von AVR's betrifft. Aber danke dir trotzdem für die Hilfreichen Tipps.

    Danke euch allen für eure Hilfe.

    LG
    Alex

Seite 2 von 2 ErsteErste 12

Ähnliche Themen

  1. ATTINY Spannung wärend Betrieb ändern
    Von .:markus:. im Forum AVR Hardwarethemen
    Antworten: 9
    Letzter Beitrag: 04.08.2010, 22:32
  2. Programmvariablen wärend Programmablauf ändern und speichern
    Von mat-sche im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 8
    Letzter Beitrag: 06.06.2007, 19:30
  3. Variablen aus Interruptroutine an Sub übergeben
    Von MarkusH im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 4
    Letzter Beitrag: 04.03.2007, 12:44
  4. Timer in interruptroutine nutzen?
    Von sebastian.heyn im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 1
    Letzter Beitrag: 12.01.2006, 21:04
  5. interruptroutine umschreiben in ASM
    Von emulein im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 2
    Letzter Beitrag: 15.02.2005, 07:20

Berechtigungen

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

LiFePO4 Speicher Test