- LiFePO4 Speicher Test         
Ergebnis 1 bis 10 von 15

Thema: Probleme mit 4x4 Tastatur am ADC

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Roboter-Spezialist Avatar von RolfD
    Registriert seit
    07.02.2011
    Beiträge
    414
    Ah.. so langsam kommts....
    Du verwendest eine/die Funkton ähnlich/gleich wie void task_ADC(void) zum Auslesen der Werte?
    Du fragst einen anderen ADC Port ab... ADC 7?
    Du hast aber auch gesehen:
    Code:
            if(current_adc_channel == 7)
                current_adc_channel = 0;
            else
                current_adc_channel++;
    Liest du also die Keys deiner 4x4 und der 1x5 parallel ein?
    Ich frage nicht umsonst nach der Verschaltung, weisst du...
    Warum nutzt du keinen der vielen freien ADC Ports statt den ADC0 2 mal zu belegen? Zumindest für die Fehlersuche...

    Die Auswertung... ist ja letztlich das :
    Code:
                         if(adcKeypad < 830) pressedKeyNumber = 5;
                        if(adcKeypad < 790) pressedKeyNumber = 4;
                        if(adcKeypad < 700) pressedKeyNumber = 3;
                        if(adcKeypad < 580) pressedKeyNumber = 2;
                        if(adcKeypad < 50) pressedKeyNumber = 1;
    Da hast du also deine Werte für die 16 keys eingegeben/erweitert?
    Ich sagte schon mal... du darfst keine genauen Zahlen abfragen sondern Bereiche
    Du gabst an: 208,221,233,246, ich würde also in der Abfrage auf jeder Zahl 5 oder 10 addieren... wird aber nicht das Problem sein...

    Du sprachst von Wert (ADC) 920 .. das klingt mir immer noch als sehr hoch... bist du sicher das nicht eine der Tasten klebt?
    Erzeugen alle Keys 920 ?
    Und wie bist du an die Werte um 230 gekommen wenn die Tastatur nun 920 produziert?

    hast du den Schaltplan mal darauf hin abgeklopft, ob evtl parasitäre Widerstände sich Gegenseituig beeinflussen? Bei dem Schaltplan aus dem tread liegt z.B. ein 3,3 K gegen GND, die anderen Widerstände dürften jedoch nicht wirken wenn keine Taste gedrückt ist...

    Sorry... langsam verstehe ich was du willst aber es fehlen immer noch Massenweise infos.
    Poste doch mal bitte wie Dirk sagte die komplette Funktion.

    Achso.. und wenn du schon von Anfang an das Gefühl hast wir verstehen es nicht.. wärs gut nachzudenken wie man das verständlicher darstellen kann, oder? Support ist kein Ratespiel.
    Geändert von RolfD (14.05.2011 um 06:32 Uhr)
    Sind Sie auch ambivalent?

  2. #2
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    22.05.2009
    Ort
    Berlin
    Beiträge
    450
    hier mal der code aus der m32 LIB nur eben mit meinen werten
    Code:
    // KeyLeiste:
    uint8_t getPressedKeyNumberLeiste(void)
    {
     uint16_t keysLeiste;
     keysLeiste = readADC(ADC_7);
     if(keysLeiste < 1020) {
      nop();
      nop();
      nop();
      keysLeiste += readADC(ADC_7);
      keysLeiste >>= 1;
     }
     // das ist der Teil der mit 1x5 Tastatur funktioniert
     if(keysLeiste < 50)       // gemessener Wert 0
      return 1;
     if(keysLeiste < 580)      // gemessener Wert 510
      return 2;
     if(keysLeiste < 700)      // gemessener Wert 682
      return 3;
     if(keysLeiste < 790)      // gemessener Wert 767
      return 4;
     if(keysLeiste < 830)      // gemessener Wert 818
      return 5;
     return 0;
    // 1x5 Code ENDE
     
     
     
    // Das ist der 4x4 Code, der nicht funktioniert
     /*
     
     if(keysLeiste < 210)       // gemessener Wert 208
      return 1;
     if(keysLeiste < 223)      // gemessener Wert 221
      return 2;
     if(keysLeiste < 235)      // gemessener Wert 233
      return 3;
     if(keysLeiste < 248)      // gemessener Wert 246
      return 4;
     if(keysLeiste < 262)      // gemessener Wert 260
      return 5;
     
     
     if(keysLeiste < 283)      // gemessener Wert 281
      return 6;
     if(keysLeiste < 304)      // gemessener Wert 302
      return 7;
     if(keysLeiste < 325)      // gemessener Wert 323
      return 8;
     if(keysLeiste < 361)      // gemessener Wert 359
      return 9;
     if(keysLeiste < 402)      // gemessener Wert 399
      return 10;
     if(keysLeiste < 444)       // gemessener Wert 442
      return 11;
     if(keysLeiste < 492)      // gemessener Wert 490
      return 12;
     if(keysLeiste < 550)      // gemessener Wert 548
      return 13;
     if(keysLeiste < 647)      // gemessener Wert 645
      return 14;
     if(keysLeiste < 768)      // gemessener Wert 766
      return 15;
     if(keysLeiste < 922)      // gemessener Wert 920
      return 16;
      */
     return 0;
     
    }
    //-----------------------------------------------------------------------
    uint8_t checkPressedKeyEventLeiste(void)
    {
     static uint8_t pressed_keyLeiste = 0;
     if(pressed_keyLeiste) {
      if(!getPressedKeyNumberLeiste()) 
       pressed_keyLeiste = 0;
     }
     else {
      pressed_keyLeiste = getPressedKeyNumberLeiste();
      if(pressed_keyLeiste)
       return pressed_keyLeiste;
     }
     return 0;
    }
    //-----------------------------------------------------------------------
    uint8_t checkReleasedKeyEventLeiste(void)
    {
     static uint8_t released_keyLeiste= 0;
     if(released_keyLeiste) {
      if(!getPressedKeyNumberLeiste()) {
       uint8_t tmp = released_keyLeiste;
       released_keyLeiste = 0;
       return tmp;
      }
     }
     else
      released_keyLeiste = getPressedKeyNumberLeiste();
     return 0;
    }
    hier die Programmfunktion, wo ich auf die Tasten reagiere

    Code:
     
    void tasterzwei(void)
    {
      uint8_t keyLeiste = getPressedKeyNumberLeiste(); 
     
      if(keyLeiste) // If a key is pressed... (key != 0)
     {
     
      while(getPressedKeyNumberLeiste());
      switch(keyLeiste)
      {
       case 1: 
          setLEDs(0b0001);
       clearLCD(); 
       showScreenLCD("Leiste", "Taste 1","",""); 
     
       break;
       case 2: 
        setLEDs(0b0010);
       clearLCD(); 
       showScreenLCD("Leiste", "Taste 2","",""); 
     
       break;
       case 3: 
        setLEDs(0b0100); 
       clearLCD(); 
       showScreenLCD("Leiste", "Taste 3","",""); 
     
     
    u.s.w
    Liest du also die Keys deiner 4x4 und der 1x5 parallel ein?
    Nein, entweder 4x4 oder 1x5

    statt den ADC0 2 mal zu belegen?
    zum lesen benutze ich den ADC 7 und nur dafür, sonst wird der Port nicht benutzt

    Du sprachst von Wert (ADC) 920 .. das klingt mir immer noch als sehr hoch... bist du sicher das nicht eine der Tasten klebt?
    Erzeugen alle Keys 920 ?
    Und wie bist du an die Werte um 230 gekommen wenn die Tastatur nun 920 produziert?
    also ich habe zuerst alle Tasten eingelesen. So kam ich auf 16 Werte so auch auf 233 und jeweils immer 2 dazu auf 235. Diese Werte habe ich dann in die LIB eingetragen. Das eine Taste klebt kann ich ausschliessen (gemessen)
    Nein es ist nur eine Taste gewesen und ist jetzt auch nicht mehr nachvollziehbar, da die Tastatur mit der Abfrage garnicht mehr reagiert. Wenn ich als Test die ADC Werte abfrage bekomme ich genau wieder die Werte die ich zuerst bekommen habe.

    mfG TrainMen

  3. #3
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.803
    @TrainMen:
    Der Code sieht auf den ersten Blick beim groben Überfliegen gut aus.

    Was ich checken würde:
    1. Um auszuschließen, dass es an deinem Main-Programm liegt, würde ich das Beispiel RP6Control_Buttons.c nur soweit umschreiben, dass es im "switch(key)" Konstrukt auf 16 Tasten reagieren kann und natürlich mit deiner Funktionsbezeichnung (getPressedKeyNumberLeiste) klar kommt.
    Wenn es damit funktioniert, muss es am Main Prog liegen.
    Was noch möglich wäre:
    2. Ich gehe davon aus, dass deine Hardware (neue 16-er Tastatur) in Ordnung ist. Prüfen würde ich da: Sind die Widerstände auch nicht zu hochohmig? Ein Längsstrom von ~1mA sollte es schon über jede Taste sein.
    Prellen die Tasten evtl.? Da kann ein 10nF Kondensator am ADC7 helfen.
    3. Du verwendest task_ADC() doch nicht gleichzeitig in deinem Main Prog? Das würde sich dann beissen!
    Gruß
    Dirk

  4. #4
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    22.05.2009
    Ort
    Berlin
    Beiträge
    450
    @Dirk
    zu 1
    Also am Main-Programm kann es eigentlich nicht liegen da ja die andere Tastatur funktioniert. Es gibt im Programm nur 2 Funktionen. Tastatur 1x5 und Tastatur 4x4 und in der while schleife wird zum Testen mal die oder die aufgerufen mehr gibt es da nicht, also Identisch mit der RP6Control_Buttons.c. ohne das gepiepe. Es funktioniert nicht mit der 4x4.
    zu 2
    Also ich geh auch davon aus das meine Bastelei in Ordnung ist. Ich stütze eben meine Aussage darauf das ich ja beim Lesen von ADC7 bei jedem Tastendruck einen unterschiedlichen Wert bekomme.
    Hmm Dein Längstrom macht mich Nervös. Ich habe leider gestern beim Messen die Sicherung vom Multimeter kaputt gemacht und habe keine da und flicken will ich da nichts. Aber als ich gestern gemessen habe hatte ich da irgendwas von 0,7? 0,5? 0,3? in Erinnerung ich kann aber beim besten willen nicht mehr sagen wie ich da gemessen habe. Ich hatte jedenfall beide Tastaturen gemessen und 1mA hatte ich nicht.
    Prellen bedeutet ja nichts weiter wie anausanausan ? Wenn es denn so wäre müsste ich doch auch bei der Ausgabe vom ADC7 zum Bsp: 200 0 200 0 200 bekommen. Ich bekomme aber nur saubere Ausgaben. Aber das mit dem 10nF Kondensator kann man sich merken.
    zu 3
    Nein task_ADC() wird nicht benutzt.
    mfG TrainMen

  5. #5
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.803
    @TrainMen:
    zu 1)
    Ok, das scheint es also nicht zu sein. In der Lib hast du also 2 Lesefunktionen, eine für 1x5 (die Original!) und eine für 4x4 (eine selbst geschriebene), die du beide benutzt ... und die 4x4 funktioniert nicht. Vielleicht testest du einmal mit den Original-Funktionen ALLEIN, aber geändert auf ADC_7 und mit deinen ADC-Werten für die Tasten 1..5 (ein etwas hilfloser Vorschlag, aber man hat schon "Pferde kotzen gesehen"!)
    zu 2)
    Nicht allzu ernst nehmen! Wenn du die Widerstandswerte von meinem Vorschlag (dein Link oben!) für eine ADC-Tastatur genommen hast, liegt der Längsstrom zwischen 0,6 und 1,4mA,- das ist ok.
    zu 3)
    Ok, wenn du mit der Lib V1.3beta unterwegs bist, dürfte es auch nicht task_RP6M32System() sein. Aber ich denke, du siehst das selbst.
    Gruß
    Dirk

  6. #6
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    22.05.2009
    Ort
    Berlin
    Beiträge
    450
    @Dirk
    zu 1
    ja auf die Idee bin ich auch schon gekommen mit den Original Funktionen, aber das funktioniert nicht. Ich habe da schon alles ausprobiert. Die Originale, meine Funktion nur mit 5 Werten. Ich weiss nicht mehr weiter. Ich habe auch alles immer neu compiliert.Ich glaube ich habe an alles gedacht.
    zu 2
    ja genau sind die Werte aus Deinem Vorschlag.
    zu 3
    genau

    mfG TrainMen

  7. #7
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.803
    @TrainMen:
    Zu 1
    Klingt so ...
    Zu 2
    Ok
    Zu 3
    ---

    Zwei ratlose Fragen/Anregungen:
    1. Poste doch mal das Prog, mit dem du die 4x4 Tastatur auslesen kannst!
    2. Welchen Wert liefert denn deine bisherige 4x4-Funktion bei den einzelnen Tasten (0? Oder abhängig von der Taste?) Definier doch mal eine globale Variable, der in getPressedKeyNumberLeiste() der Wert von keysLeiste zugewiesen wird. Den könnte man dann in Main anzeigen ...
    3. Aufpassen mit der Zeile "return 0;"! Die muss immer am Ende nach allen If-Abfragen stehen. Aber, daran hast du auch sicher gedacht. Ich schreibe das nur, weil die Zeile oben in deiner Funktion 2x drin ist ...
    Gruß
    Dirk

Ähnliche Themen

  1. Probleme mit PC-AT-Tastatur
    Von tiller im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 21
    Letzter Beitrag: 24.07.2008, 12:25
  2. Probleme beim Anschließen von Tastatur
    Von Aquafisch im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 6
    Letzter Beitrag: 02.09.2007, 20:18
  3. IO - PS/2 Tastatur
    Von uTang im Forum PC-, Pocket PC, Tablet PC, Smartphone oder Notebook
    Antworten: 1
    Letzter Beitrag: 04.01.2005, 17:16
  4. Probleme mit 4x3 Tastatur
    Von mathiasd. im Forum Controller- und Roboterboards von Conrad.de
    Antworten: 1
    Letzter Beitrag: 20.08.2004, 18:25

Stichworte

Berechtigungen

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

Labornetzteil AliExpress