-         

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 16

Thema: Taster reagieren nur schleppend

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    23.12.2013
    Beiträge
    5

    Taster reagieren nur schleppend

    Anzeige

    Hallo Forumsgemeinde,


    Ich bin ein AVR Greenhorn, dass mit C und einem ATmega8 zur Zeit am
    experimentieren ist.

    Mein Problem sieht zur Zeit wie folgt aus:

    Ich arbeite mich in die Region der Timer und Taster vor.

    Mein Problem liegt zur Zeit darin, dass meine Taster nie wirklich auf Anhieb reagieren.....Sie sind gegen GND geschaltet und am µC die Pullups aktiviert. Ansprechen tue ich sie mit

    if (bit_is_clear)......

    Wie baue ich ein Taster, der egal an welcher Stelle das Programm sich befindet, reagiert wenn er gedrückt wird???


    Vielen Dank im Voraus für eure Hilfe

  2. #2
    Erfahrener Benutzer Roboter Genie Avatar von BMS
    Registriert seit
    21.06.2006
    Ort
    TT,KA
    Alter
    26
    Beiträge
    1.192
    Hallo und willkommen im Roboternetz
    Taster gegen GND und Pullup klingt auf jeden Fall schon richtig.
    Eventuell hast du ja eine ungünstige Verschachtelung oder Wartezeiten im Programm, die die Abarbeitung stören.
    Für eine Diagnose wäre ein Codeausschnitt praktisch, damit wir das nachvollziehen können
    Zu beachten wäre auch noch, dass Taster prellen können, d.h. bei einem Tastendruck sind meist mehrere Impulse messbar.
    Wie baue ich ein Taster, der egal an welcher Stelle das Programm sich befindet, reagiert wenn er gedrückt wird???
    Das wiederum kann man mit Interrupts lösen. Oder das Programm geeignet umstellen.
    Grüße, Bernhard
    "Im Leben geht es nicht darum, gute Karten zu haben, sondern auch mit einem schlechten Blatt gut zu spielen." R.L. Stevenson

  3. #3
    Erfahrener Benutzer Robotik Visionär Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching OÖ
    Beiträge
    6.183
    Es gibt grundsätzlich zwei Möglichkeiten eine Taste abzufragen.
    Die eine ist per Interrupt, wenn es mehrere Tasten sind muss man sich beim Mega8 was einfallen lassen, neuere wie Mega88 haben bereits ein Pinchange-Interrupt.
    Die andere Möglichkeit ist Pollen. Hier werden bei jedem Programmdurchlauf die Tasten abgefragt. Dafür muss das Programm allerdings optimal laufen, also keine delay, lange while, usw.
    Dein if(bit is clear) deutet auf einen älteren Compiler hin, vielleicht mal Üpdaten.
    Grüsse Hubert
    ____________

    Meine Projekte findet ihr auf schorsch.at

  4. #4
    Neuer Benutzer Öfters hier
    Registriert seit
    23.12.2013
    Beiträge
    5
    Ich baue zur Zeit eine Tischuhr.....also das Programm ist sehr überschaubar.....Aber wenn die Taster die Variablen, also die Uhr stellen sollen oder die Uhr genau einstellen, dann gibts halt schon Probleme wenn die Taster nicht auf Anhieb funktionieren.

    Aus diesem Grund würde ich das gerne über Interrupts machen, allerdings habe ich damit 0 Erfahrung, da müsstet ihr mir helfen!!!

    Ich Programmiere mit dem AVR-Studio 5.1

  5. #5
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    09.02.2005
    Ort
    München
    Alter
    32
    Beiträge
    389
    Würde auch kein bisschen schaden wenn du den aktuellen Code mal posten würdest .


    Gruß Matthias

  6. #6
    Neuer Benutzer Öfters hier
    Registriert seit
    23.12.2013
    Beiträge
    5
    Nun ja, dann bitte:

    volatile int tc;
    char hr=00, min=0, sec=0;
    char str[5];

    ISR(TIMER1_OVF_vect)
    { TCNT1 = 34286; tc++;
    }

    int main(void)
    { TIMSK |= _BV(TOIE1); // aktivate overflowinterrupts of timer1
    TCCR1B |= (1<<CS12); // prescaler = 256
    TCNT1 = 0xFFFF; // FFFF for start
    sei();

    while(1)
    {
    sec=tc;
    if (sec==60)
    { tc=0; sec=0; min++;
    if (min==60) {min=0; hr++; if (hr==24) hr=0;}
    sprintf(str,"%02d",min); lcd_set_cursor (1, 7); lcd_write (str);
    sprintf(str,"%02d",hr); lcd_set_cursor (1, 4); lcd_write (str);
    }
    sprintf(str,"%02d",sec); lcd_set_cursor (1, 10); lcd_write (str);
    while(sec == tc);
    }
    return(0);
    }
    Die Frage dann nochmal......wie sage ich dem Timer mit einem Taster: Jetzt starte und jetzt stoppe....und das Ganze Interrupt gesteuert, damit er direkt reagiert??

  7. #7
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    22.06.2009
    Beiträge
    1.266
    Und nun erzählst du bitte wo du der Meinung bist einen Taster auszulesen. Davon ist in deinem Code nämlich nichts zu finden. Zum Thema Tasterauslesen gibt es 2 Möglichkeiten:
    1. Gepollt:
    Code:
    //Zuerst: Pullups auf High und Pin auf Eingang setzen
    
    if(!(PINX & (1<<PXX)))
    {
         _delay_ms(100); //Zum Entprellen
         if(!(PINX & (1<<PXX)))
         {
             //Pin wurde gedrückt
         }
    }
    2. Interrupt basiert: (Ich skizziere nur kurz das Vorgehen)
    2.1 Man hängt den Taster an einen der Interrupt Pins (INT0 oder INT1)
    2.2 Man Programmiert den Interrupt handler für INT0 oder INT1
    2.3 Man Programmiert die Einstellungsregister für INT0 oder INT1

    Zum Timer:
    Der Timer startet bzw. stopt wenn man das TCNT1 Register Programmiert.

  8. #8
    Neuer Benutzer Öfters hier
    Registriert seit
    23.12.2013
    Beiträge
    5
    Ja so oder

    Code:
    if (bit_is_clear()1<<PXX)
    {
       "Mach Was"
    }
    2.2 Man Programmiert den Interrupt handler für INT0 oder INT1
    Das heißt ich sage ihm, dass er auf eine steigende Flanke reagieren soll???

    2.3 Man Programmiert die Einstellungsregister für INT0 oder INT1
    Und wie macht man das???

    Der Timer startet bzw. stopt wenn man das TCNT1 Register Programmiert
    Wie genau.....???

  9. #9
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    09.02.2005
    Ort
    München
    Alter
    32
    Beiträge
    389
    Man liest die Beschreibung der Register im Datenblatt des Atmega 8.
    Hier wird dir keiner jedes Register vorkauen, da gehört schon etwas Eigeninitiative dazu.


    Gruß Matthias

  10. #10
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    22.06.2009
    Beiträge
    1.266
    Oder schaut auf mikrocontroller.net im avr-gcc tutorial nach.

Seite 1 von 2 12 LetzteLetzte

Ähnliche Themen

  1. Asuro - Nur 2 Taster funktionieren.
    Von Fisch'air im Forum Asuro
    Antworten: 0
    Letzter Beitrag: 18.05.2011, 18:53
  2. Einfach nur mit Taster eine LED ein und aus schalten ?
    Von Ferdinand im Forum Assembler-Programmierung
    Antworten: 2
    Letzter Beitrag: 13.06.2008, 10:08
  3. Bei Taster auf Flanke reagieren bzw. wie Softkeys sperren
    Von elcapitano im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 7
    Letzter Beitrag: 02.04.2008, 22:27
  4. Taster senden nur 196, Hilfe!
    Von BlazeX im Forum Asuro
    Antworten: 7
    Letzter Beitrag: 09.02.2008, 19:07
  5. Antworten: 17
    Letzter Beitrag: 03.02.2007, 21:51

Berechtigungen

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