-         

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

Thema: K6 sagt nix

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    06.07.2007
    Beiträge
    31

    K6 sagt nix

    Anzeige

    Es ist ja allgemein bekannt, dass das Tastersystem beim Asuro seine Macken hat, so auch bei mir. Das hab ich allerdings schon software-technisch behoben, sodass ich überall stabile und feste Werte bekomme.

    Ich bekomme allerdings nie bei K6 einen Wert. (weder bei Selbsttest mit der normalen PollSwitch() funktion noch bei irgendwelchen modifizierten, die ich probiert habe, noch bei der, die in der Lib dabei ist)

    Ich hab daraufhin nochmal geguckt, ob alles vernünftig angeschlossen ist und dass alles leitet. Auch das funktioniert...

    Ich steh hier im Moment auf dem Schlauch, weil Taster K1-K5 funktionieren einwandfrei mit den richtigen Werten, bei K6 tut sich nichts (eigentlich sollte da ja 1 rauskommen, aber mir wird da nichts ausgegeben, wenn ich mir die Werte an den Transceiver schicken lasse)

    =(

  2. #2
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    03.07.2007
    Beiträge
    349
    Lass dir mal den Analogwert bei Tastendruck ausgeben!
    Die letzen Zeilen der PollSwitch Funktion sehen folgendermaßen aus:

    Code:
    	i = ADCL + (ADCH << 8);
    	
    	SWITCH_OFF;
    
    	return  ((unsigned char) ((( 1024.0/(float)i - 1.0)) * 63.0 + 0.5));
    }
    Der Analogwert steckt in der unsigned int Variable "i".
    Schreib einfach vor das return :
    SerWrite(itoa(i),7)

    Somit wird dir nun dauernd über die IR Schnittstelle der Analogwert gesendet. Dann siehst du auch ob sich bei Tastendruck von #6 garnichts tut oder ob sich was tut und somit einfach nur die Tastenwerte falsch berechnet werden.
    Berichte dann mal über die ausgegebenen Werte bei Tastendruck von #6.
    Grüße,
    Harri

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    06.07.2007
    Beiträge
    31
    so, ich bekomm immer 255, wenn ich nichts drücke, wenn ich dann K6 drücke verändert sichs nicht, bei allen anderen Schaltern schon :[

  4. #4
    Moderator Robotik Einstein Avatar von damaltor
    Registriert seit
    28.09.2006
    Ort
    Jena
    Alter
    31
    Beiträge
    3.912
    die funktion itoa lässt sich nciht schachteln. sie muss einzeln aufgerufen werden:

    itoa(zahlenvariable;stringvariable;zahlensystem);

    also zb. itoa (i,text[],10);
    kleinschreibung ist cool!

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    06.07.2007
    Beiträge
    31
    als ich hab das Return bei pollswitch einfach auf "return (float)i;" geändert und die Funktion dann alle 0.5 Sekunden aufgerufen

  6. #6
    Moderator Robotik Einstein Avatar von damaltor
    Registriert seit
    28.09.2006
    Ort
    Jena
    Alter
    31
    Beiträge
    3.912
    das geht glaub ich nit, da serwrite nur chars senden kann. die zahl, die zurückgegeben wurde, muss also zuerst in zeichen umgewandelt werden, bevor die gesendet werden können.

    ändere das mal zurück, und versuche es dann mit itoa.
    kleinschreibung ist cool!

  7. #7
    Benutzer Stammmitglied
    Registriert seit
    06.07.2007
    Beiträge
    31
    die pollswitch funktion
    Code:
    unsigned char PollSwitch (void)
    {
      unsigned int i;
      int ec_bak = autoencode;              // Sichert aktuellen Zustand
    
      /*
         Autoencode-Betrieb vom ADC-Wandler unterbinden.
      */
      autoencode = FALSE;
    
      DDRD |= SWITCHES;                     // Port-Bit SWITCHES als Output
      SWITCH_ON;                            // Port-Bit auf HIGH zur Messung
      ADMUX = (1 << REFS0) | SWITCH;        // AVCC reference with external capacitor
      Sleep (10);
    
      ADCSRA |= (1 << ADSC);                // Starte AD-Wandlung
      while (!(ADCSRA & (1 << ADIF)))       // Ende der AD-Wandlung abwarten
        ;
      ADCSRA |= (1 << ADIF);                // AD-Interupt-Flag zuruecksetzen
    
      i = ADCL + (ADCH << 8);               // Ergebnis als 16-Bit-Wert
    
      SWITCH_OFF;                           // Port-Bit auf LOW
      Sleep (5);
    
      /*
         Autoencode-Betrieb vom ADC-Wandler wiederherstellen.
      */
      autoencode = ec_bak;
    
      return (long)i;
    }
    und das Programm:

    Code:
    #include <stdlib.h>
    #include "asuro.h"
    
    int main(void)
    {
      uint8_t t1;
      unsigned char text[16];
    
      Init();
      SerPrint("\r\nTastsensor Test\r\n");
      while (1)
      {
        t1 = PollSwitch();
        itoa(t1, text, 10);     /* Tastenwert senden */
        SerPrint(text);
        Msleep(500);
      }
    }
    funktioniert jetzt so :>

  8. #8
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    03.07.2007
    Beiträge
    349
    Zitat Zitat von damaltor
    die funktion itoa lässt sich nciht schachteln. sie muss einzeln aufgerufen werden:

    itoa(zahlenvariable;stringvariable;zahlensystem);

    also zb. itoa (i,text[],10);
    Upps, stimmt, da war ich zu schnell.

    @AppeL: Du musst beim Funktionskopf von PollSwitch "int PollSwitch(void)" statt "unsigned char PollSwitch(void)" schreiben.
    Außerdem musst du in der asuro.h das selbe tun, auch dort wird bereits definiert, wie PollSwitch aussieht.

    Besser wäre es wenn du die IR Sache direkt in die Funktion reinschreibst, also in etwa so(nicht getestet):


    Code:
    unsigned char PollSwitch (void)
    {
    	unsigned int i;
    	unsigned char text[10]={'\0'};
    	
    	DDRD |= SWITCHES;				// Switches as Output
    	SWITCH_ON;						// Output HIGH for measurement
    	ADMUX = (1 << REFS0) | SWITCH;	// AVCC reference with external capacitor
    	Sleep(10);
    	
    	ADCSRA |= (1 << ADSC);			// Start conversion
    	while (!(ADCSRA & (1 << ADIF)));// wait for conversion complete
    	ADCSRA |= (1 << ADIF);			// clear ADCIF
    	i = ADCL + (ADCH << 8);
    	
    	itoa(i, text, 10);
    	SerWrite(text,10);
    	
    	SWITCH_OFF;
    
    	return  ((unsigned char) ((( 1024.0/(float)i - 1.0)) * 63.0 + 0.5));
    }
    Berichte dann von deinen Werten.
    Grüße,
    Harri

  9. #9
    Benutzer Stammmitglied
    Registriert seit
    06.07.2007
    Beiträge
    31
    soooo

    also ich hab normal 1023
    es geht halt bei k1-k5 immer runter auf unter 100, also 994 oder 675 oder so
    bei K6 tut sich weiterhin nichts, es bleibt auf 1023

  10. #10
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    03.07.2007
    Beiträge
    349
    Zitat Zitat von AppeL
    soooo

    also ich hab normal 1023
    es geht halt bei k1-k5 immer runter auf unter 100, also 994 oder 675 oder so
    bei K6 tut sich weiterhin nichts, es bleibt auf 1023
    Das hört sich schlecht an, da liegt dann ein Hardwarefehler vor(1023 bedeutet so viel wie "kein Taster gedrückt").
    Entweder der Taster ist kaputt(unwahrscheinlich), oder aber es ist irgendwo eine Verbindung wo keine sein sollte, das passiert schnell mal beim Löten der Taster.
    Schau dir das also nochmal genauer an(am besten ausgestattet mit einem Multimeter), ich bin mir sicher dass du den Fehler finden wirst!
    Grüße,
    Harri

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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