-         

Ergebnis 1 bis 6 von 6

Thema: Tasten auswertung Fehler?

  1. #1
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    04.01.2005
    Ort
    Rendsburg
    Alter
    32
    Beiträge
    306

    Tasten auswertung Fehler?

    Anzeige

    Moin

    Ich hab ein Tastenfeld gebaut was mir die gedrückte Taste als 4 bit signal an den Atmega 16 liefert .

    Aber so wie es aussieht hab ich ein fehler in der auswertung im Programm gemacht und ich find denn Fehler nicht.

    Bin in Sachen C programmierung noch ein Anfänger!

    Code:
    /  **  Präprozessor  **  //
    
    #include <avr/io.h>
    #include <stdint.h>
    
    //  **  Prototypen  **  //
    
    void kp_init (void);
    char kp_taste (void);
    
    
    //  **  Funktionen  **  //
    
    void kp_init (void)         // Initialisierung des Keypads
       {
     
       DDRA = 0b00000000;        //Port A Pin 1,2,3 als Ausgang , Pin4-8 als Eingang
       PINA = 0x00;              //Port A auf low setzen
       }
       
    char kp_taste (void)         //Routine zur Abfrage der Tasten
      { 
       
       while (!PINA) {
             
         
    	 switch (PINA){
    	 
    		 case 0b00000001:
    		     return '1';
    		 case 0b00000010: 
    			 return '2';
    		 case 0b00000011:
    			 return '3';
    		 case 0b00000100:
    			 return '4';
    		 case 0b00000101:
    		     return '5';
    		 case 0b00000110: 
    		     return '6';
    		 case 0b00000111: 
    		     return '7';
    		 case 0b00001000:
    		     return '8';
    		 case 0b00001001:
    		     return '9';
    		 case 0b00001010:
    		     return '0';
    		 case 0b00001011:
    		     return 'z';
    		 case 0b00001100:
    			 return 'e';
    		 case 0b00001101: 
    		     return 'a';
    		 case 0b00001110:
    		     return 'b';
    		 case 0b00001111:
    		     return 'c';
    	} 
      }	
    }
    Danke schonmal im vorraus für eure Hilfe

    Cybrix

  2. #2
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    Das scheint mir nicht richtig:
    DDRA = 0b00000000; //Port A Pin 1,2,3 als Ausgang , Pin4-8 als Eingang
    PINA = 0x00; //Port A auf low setzen
    du setzt das komplette port auf Input und beim setzen solltest du "PORTA" sagen (PIN ist immer input)
    Beim Lesen und Auswerten von Pina darfst du nur die input-Bits abfragen.
    Wenn der Kommentar-Text deine Absicht darstellt, empfehle ich dir:
    Code:
    void kp_init (void)         // Initialisierung des Keypads 
       { 
        DDRA = 0b00001111;    //Port A Pin 1,2,3 als Ausgang , Pin4-8 als Eingang 
       PORTA = 0x00;              //Port A auf low setzen 
       } 
        
    char kp_taste (void)         //Routine zur Abfrage der Tasten 
    { 
    char bTmp;
       do {
           bTmp = PINA >> 4;    // Tasten code in das untere Nibble
           switch (bTmp)
           {
            case 1:
            case 2:
            case 3:
            case 4:
            case 5:
            case 6:
            case 7:
            case 8:
            case 9:
                   return(bTmp | 0x30);  // 0x0n --->  0x3n --> ascii: 'n'
                   break;
            case 10:           return '0'; break;
            case 11:           return 'z'; break;
            case 12:          return 'e'; break;
            case 13:           return 'a'; break;
            case 14:           return 'b'; break;
            case 15:           return 'c'; break;
           default: break;
       }  while (1);
       return'X';    // das ist nur, falls der Compiler meutert.
    }
    kp- taste läuft ewig, bis irgendein "case" return durchführt.
    von 1-0 reicht eine einfache Umsetzung auf ascii
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  3. #3
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    04.01.2005
    Ort
    Rendsburg
    Alter
    32
    Beiträge
    306
    Danke werde ich gleich mal ausprobieren!

    Und mich dann nochmal melden ob es geklappt hat!

    Ach ja das mit dem Kommentar beim definieren, PORTA soll insgesamt als eingang beschaltet sein, kam noch von einem anderem Versuch

  4. #4
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    04.01.2005
    Ort
    Rendsburg
    Alter
    32
    Beiträge
    306
    Moin

    Also im Programm ist irgendwie ein fehler hab ihn aber noch nicht gefunden.

    Das Tastenfeld ist an PIN 0-3 angeschlossen.

    Ich hab mal eine auswahl dafür geschrieben! Wäre nett wenn du mir sagen könntest ob das so klappt.

    Code:
      void auswahl_ah (void){
      
      int run=0;
      char taste='x';
      taste=kp_taste();
      
      kp_taste();
     
      if ((taste='a')) {
           men_auto();
    	   run=0;
    	   }
      else if ((taste='b')) {
           men_hand();
    	   run=0;
    	   }
      else {
           men_fehler();
           }
      }
    men_hand()
    men_auto()

    sind funktion fürs display

  5. #5
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    Na ja, wenn die Tasten doch auf Pin 0-3 sind, muß ">>4" entfallen, dafür wäre gut
    bTmp = PINA & 0x0F; // nur das untere Nibble

    sonst sieht das ok aus, (einen kp-taste() hast du zuviel)
    ich persönlich würde halt auch einen "switch" machen, weil ich diese "else-Bäume" nicht so mag (Geschmackssache)
    taste = kp_taste();
    switch(taste)
    {
    case 'a': ..
    break;
    case 'b': ..
    break;
    default:
    fehler
    break;
    }
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  6. #6
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    04.01.2005
    Ort
    Rendsburg
    Alter
    32
    Beiträge
    306
    danke es funz jetzt! Hast mir echt weitergeholfen!

    Ich hab das jetzt auch in ne switch anweisung verändert!

Berechtigungen

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