-         

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

Thema: Tasten an einem ADC, Versuch zu entprellen

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    24.06.2008
    Beiträge
    14

    Tasten an einem ADC, Versuch zu entprellen

    Anzeige

    hi Leute,
    ich versuche grade ein Board durch Tasten zu steuern.
    Ich habe Drei Tasten am Board die mit einem ADW eines Tiny45 verbunden ist.
    Taste 1 gibt 1,3 aus
    Taste 2 gibt 2,6 aus
    Taste 3 gibt 4,7 aus
    eine ADW funktion wurde so definiert so dass ich werte zwischen 0-5 bekomme.
    Ich habe folgendes Code erstellt damit ich die Tastenenprelle.

    nun Weiss ich nicht ob alles richtig ist
    bitte um Hilfe und Verbesserungvorschläge.
    Angehängte Dateien Angehängte Dateien

  2. #2
    Erfahrener Benutzer Roboter Experte Avatar von sternst
    Registriert seit
    07.07.2008
    Beiträge
    672
    Sorry, aber das funktioniert doch hinten und vorne nicht.

    1)
    ((adwert > 0.5) && (adwert < 1.5))

    adwert ist ein "unsigned short". Vergleiche mit "Komma-Zahlen" sind da ziemlich sinnfrei. Wie das am besten zu korrigieren ist, hängt davon ab, was aus ADkanallesen tatsächlich rauskommt.

    2)
    ((adwert < 0.5) && (adwert > 5))

    Ist immer False. Du meintest wohl eher "||".

    3)
    Taste = KeinKontakt | Taste = Taste1 | Taste = Taste2 | Taste = Taste3;
    ...
    ((Taste = Taste1) && (Taste = Taste1));

    Das macht garantiert nicht das, was du haben wolltest. Da ich aber nicht mal einen blassen Schimmer habe, was du eigentlich damit bezwecken wolltest, kann ich dir keinen Korrekturvorschlag machen.
    MfG
    Stefan

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    24.06.2008
    Beiträge
    14
    HI , DANKE FÜR DEINE ANTWORT:
    ADKANALLESEN HABE ICH SO GESCHRIEBEN DASS ICH DANN DIREKT WERTE ZWISCHEN 0 UND 5 BEKOMME. DIE DIGITALISIERTE WERTE WERDEN DIREKT IN DER FUNKTION DURCH 1024 DIVIDIERT
    ICH WOLLTE ES SO MACHEN.
    ZUERST VIER ZUSTÄNDE DEFINIEREN.

    ZUSTAND 1KEINKONTAKT) WO DER ANALOGWERT KLEINER ALS 0,5 "ODER" GRÖSSER ALS 5 (((adwert < 0.5) || (adwert > 5)) )
    ZUSTAND2TASTE1) 0,5<ADWERT<1,5
    ZUSTAND3TASTE2) 2<ADWERT<3
    ZUSTAND4TASTE3) 4<ADWERT<5

    DANACH WOLLTE ICH DIE TASTEN SO EINFACH WIE MÖGLICH ENTPRELLEN DURCH EINE SWITCH CASE FUNKTION:
    WENN NUR WERTE RAUSKOMMEN WEIL TASTE PRELLEN
    ZUM BEISPIEL WERTE ZWISCHEN 0 BIS 5 SOLLTE ES NICHT ALS EINEN TASTENDRUCK GESEHEN WERDEN:
    DESWEGEN
    Taste = KeinKontakt | Taste = Taste1 | Taste = Taste2 | Taste = Taste3;

    WENN ZWEIMAL WERTE: 0,5<ADWERT<1,5 ERKANNT WURDEN
    SOLLTE ES ALS TASTEEINS DEFINIEREN UND 10 MS WARTEN
    >>case TasteEins: ((Taste = Taste1) && (Taste = Taste1));
    _delay_ms(10);
    break;
    UND DAS GLEICHE FÜR TASTEZWEI UND TASTE DREI.

    WOLLTE SO EINE ART BESTÄTIGUNG DES TASTENDRUCKS SCHREIBEN
    ERST NACH ZWEIMAL ERKENNEN DANN WIRD ALS TASTE ERKANNT:
    ???

  4. #4
    Erfahrener Benutzer Roboter Experte Avatar von sternst
    Registriert seit
    07.07.2008
    Beiträge
    672
    ADKANALLESEN HABE ICH SO GESCHRIEBEN DASS ICH DANN DIREKT WERTE ZWISCHEN 0 UND 5 BEKOMME.
    Aber als was kommen die Werte da raus, Integer oder Float?

    WENN NUR WERTE RAUSKOMMEN WEIL TASTE PRELLEN
    ZUM BEISPIEL WERTE ZWISCHEN 0 BIS 5 SOLLTE ES NICHT ALS EINEN TASTENDRUCK GESEHEN WERDEN:
    DESWEGEN
    Taste = KeinKontakt | Taste = Taste1 | Taste = Taste2 | Taste = Taste3;
    Die eigentliche Absicht hinter der Zeile verstehe ich immer noch nicht.

    WENN ZWEIMAL WERTE: 0,5<ADWERT<1,5 ERKANNT WURDEN
    SOLLTE ES ALS TASTEEINS DEFINIEREN UND 10 MS WARTEN
    >>case TasteEins: ((Taste = Taste1) && (Taste = Taste1));
    _delay_ms(10);
    break;

    WOLLTE SO EINE ART BESTÄTIGUNG DES TASTENDRUCKS SCHREIBEN
    ERST NACH ZWEIMAL ERKENNEN DANN WIRD ALS TASTE ERKANNT:
    Ok, hier verstehe ich, was du bezwecken wolltest. Zweck und Sourcecode sind allerdings so dermaßen weit voneinander entfernt, dass ich gar nicht weiß, wo ich mit einer Erklärung anfangen sollte.

    Sorry, das mag für dich ziemlich hart klingen, aber der einzige Rat, den ich für dich habe, ist:
    Lege dieses Projekt beiseite, nimm dir ein C-Buch und einen PC mit C-Compiler zur Hand, und fange nochmal ganz von vorne mit dem C-Lernen an.
    MfG
    Stefan

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    24.06.2008
    Beiträge
    14
    danke dass du dir das angeschaut hast.
    und falls du es übersehen hast, da an meinem nich steht newbie.
    also hätte ich Verbesserungsvorläge erwartet, nicht so ein Rat als einziger Rat

  6. #6
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    01.08.2005
    Ort
    49.80248 8.59252
    Alter
    33
    Beiträge
    172
    Rat: Schliesse niemals einen Taster an einen ADC an, das ist Sinnfrei. Ein Taster liefert schon 0 und 1. Ein mC arbeitet mit 0 und 1. Warum erst den Taster als analoges Signal einlesen und umständlich wieder in ein digitales umrechnen. Das kostet Zeit, Speicherplatz und ist fehleranfällig. Siehe Asuro.

    Entprelle den Taster per RC Glid oder per Software mit einer kurzen Wartezeit

  7. #7
    Neuer Benutzer Öfters hier
    Registriert seit
    24.06.2008
    Beiträge
    14
    die Tasten habe ich jetzt leider schon an einem ADC, und ich nutze einem 8beinigen controller so dass ich auch nich viele möglichkeiten eine Taste in einem Pin anzuhängen.
    und gestern konnte ich dich leider nicht im Chat erwischen, finde ich eine sehr gute Sache von dir.
    Ich schaue mir dass nochmal an, habe auch paar Fehler entdeckt, und bessten Dank für die Hilfe

  8. #8
    Erfahrener Benutzer Roboter Experte Avatar von sternst
    Registriert seit
    07.07.2008
    Beiträge
    672
    Zitat Zitat von kater
    Rat: Schliesse niemals einen Taster an einen ADC an, das ist Sinnfrei.
    Für einen Taster mag das gelten, hier geht es aber um mehrere. Und da ist das sehr sinnvoll, denn mit dem ADC und ein paar Widerständen kann man gleich mehrere Taster über einen Pin einlesen.
    MfG
    Stefan

  9. #9
    Erfahrener Benutzer Roboter Experte Avatar von sternst
    Registriert seit
    07.07.2008
    Beiträge
    672
    Zitat Zitat von newbie1982
    also hätte ich Verbesserungsvorläge erwartet, nicht so ein Rat als einziger Rat
    Ich mache gerne Verbesserungsvorschläge, nur in diesem Fall ist es mit ein paar Verbesserungsvorschlägen nicht getan. Ein ausführlicher Kommentar zu deinem Sourcecode wäre gleich ein halber Programmier-Kurs.

    Mir ist völlig klar, dass dir eine solche Antwort nicht gefällt. Es geht hier aber ja auch nicht darum, dir zu gefallen, sondern darum, dir zu helfen. Und mein Rat war durchaus ernst gemeint, und wenn du ihn befolgst, würde dir das in meinen Augen bezüglich C am meisten weiterhelfen.
    MfG
    Stefan

  10. #10
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    01.08.2005
    Ort
    49.80248 8.59252
    Alter
    33
    Beiträge
    172
    Zitat Zitat von sternst
    Zitat Zitat von kater
    Rat: Schliesse niemals einen Taster an einen ADC an, das ist Sinnfrei.
    Für einen Taster mag das gelten, hier geht es aber um mehrere. Und da ist das sehr sinnvoll, denn mit dem ADC und ein paar Widerständen kann man gleich mehrere Taster über einen Pin einlesen.
    Also sind wir hier wieder im klassischen Software vs. Hardware. Mit etwas mehr Hardware könnte man auch mehere Taster an weniger Pins anschliessen. Aber per Software kann man alles machen

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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