- 3D-Druck Einstieg und Tipps         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 15

Thema: Probleme mit 4x4 Tastatur am ADC

  1. #1
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    22.05.2009
    Ort
    Berlin
    Beiträge
    450

    Probleme mit 4x4 Tastatur am ADC

    Anzeige

    Powerstation Test
    Ich habe mir eine 4x4 Matrix Tastatur gebaut und nun einige Probleme.
    Ich hatte vor dieser 4x4 Tastatur eine 1x5 Tastatur gebaut (die von der M32) und diese Erfolgreich eingebunden. Ich hatte einfach in den LIBs die Keyabfrage kopiert und an die entsprechenden Variablen und Funktionen die Buchstaben xyz zugefügt. Alles funktionierte. Ich hatte nun 5 zusätzlich Tasten.
    Meine 4x4 Tastatur kann ich wunderbar über einen ADC einlesen und bekomme von jeder Taste einen Wert (208,221,233,246 die erste Reihe) diese 16 Werte habe ich nun in meiner vorigen (1x5) eingegeben (und natürlich ergänzt). Ich bekomme aber nur von der Taste einen Ausgabe, die den Wert (ADC) 920) hat. Auf die anderen Tasten wird bei der Ausgabe garnicht reagiert.
    Ich weiss garnicht wie ich das alles in Worte fassen soll.
    Ich hoffe ihr habt mich verstanden, sonst fragt nach.
    mfG TrainMen

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.803
    Ich hoffe ihr habt mich verstanden, sonst fragt nach.
    Eigentlich must DU dein Problem so beschreiben, dass es verständlich ist.
    Bei deiner Beschreibung fehlt z.B. die Lesefunktion, die du für die 4x4 Tastatur geschrieben hast.
    Gruß
    Dirk

  3. #3
    Erfahrener Benutzer Roboter-Spezialist Avatar von RolfD
    Registriert seit
    07.02.2011
    Beiträge
    414
    "diese 16 Werte habe ich nun in meiner vorigen (1x5) eingegeben"

    Die Werte sind ja Ergebnisse eines Spannungsteilers vermute ich mal.. und abhängig von den genauen Werten der Widerstände... mal abgesehn davon, das du Wertebereiche prüfen müsstest und keine genauen Zahlen versteh ich nicht was das mit der 1x5 Tatstatur zu tun hat. Die wird natürlich andere Werte erzeugen und 920 klingt nach sehr weit gegen + gezogen... oder nach nem Fehler beim zusammensetzen von 2 Byte zu einem 16-bit Int.

    Sorry aber mit der Fehlerbeschreibung ist nichts anzufangen.
    Mich würde daher auch der Schaltplan neben dem korrekt beschriebenen Fehler interessieren.
    Geändert von RolfD (14.05.2011 um 02:03 Uhr)
    Sind Sie auch ambivalent?

  4. #4
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    22.05.2009
    Ort
    Berlin
    Beiträge
    450
    Ich ahnte das man das nicht versteht.
    @Dirk
    Es ist die selbe Lesefunktion der Keys die in der M32 Lib benutzt wird nur lese ich hier den ADC 7 ein und wenn die 1x5 Tastatur da dran hängt funktioniert ja auch alles. Zum Auswerten nehme ich dann auch die Keyabfrage aus dem M32 Beispiel.
    @Rolf
    Die Tastatur wird hier beschrieben.
    https://www.roboternetz.de/phpBB2/viewtopic.php?t=20625
    Natürlich erzeugt die 4x4 andere Werte wie die 1x5. Ich wollte damit nur sagen das die 1x5 funktioniert. Ich habe doch nichts anderes getan als die ersten 5 Werte aus der Funktion der Lib an die 4x4 Tastatur angepasst und dann noch 11 hinzugefügt. Wie ich ja schon beschrieben habe, bekomme ich ja auch für jede Taste einen Wert. Also gehe ich doch davon aus das mit der Tastatur alles in Ordnung ist. Nur mit der Auswertung klappt es eben nicht.
    mfG TrainMen

  5. #5
    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?

  6. #6
    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

  7. #7
    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

  8. #8
    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

  9. #9
    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

  10. #10
    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

Seite 1 von 2 12 LetzteLetzte

Ä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
  •  

Solar Speicher und Akkus Tests