- 3D-Druck Einstieg und Tipps         
Seite 2 von 3 ErsteErste 123 LetzteLetzte
Ergebnis 11 bis 20 von 27

Thema: Tasterauswertung

  1. #11
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    01.03.2008
    Ort
    Niederlanden
    Beiträge
    1.170
    Anzeige

    E-Bike
    Laut dem Schaltplan ist K1 an R25 verbunden. Die sitzt auch Links gleich daneben.

    Eine andere möglichkeit könnte sein das dein Asuro nicht ganz an dem PollSwitch Widerstand-Zahl-Formel halt. Das ist möglich durch die Ungenauigkeit de Widerstanden in dem Schaltung. Die erweiterte lib hat einer wert in den Formel der man anpassen kann. Wie man das heraus finden kann und anpassen kann in dem Originale PollSwitch weis ich nicht. Vielleicht ist dar schon uber geschrieben tief in das Forum.

  2. #12
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    62
    Beiträge
    5.799
    Blog-Einträge
    8
    Hallo

    Wenn die Zuordnung der Taster zu den jeweiligen Bits im Ergebniss von PollSwitch() nicht stimmt kann man das in der Datei asuro.c am Ende der Funktion PollSwitch() kalibrieren:

    http://www.asurowiki.de/pmwiki/pmwiki.php/Main/Tasten
    https://www.roboternetz.de/phpBB2/ze...=419056#419056

    Trotz richtig kalibrierten Tasten können die Werte noch schwanken, deshalb sollte man das Ergebniss von PollSwitch() überprüfen:

    Code:
    sw1=PollSwitch();
    sw2=PollSwitch();
    
    if(sw1==sw2)
    {
       if(sw1 & 1) {} // K6
       if(sw1 & 2) {} // K5
    ...
       if(sw1 & 32) {} // K1
    }
    So funktioniert es nicht:
    Code:
          sw1 = PollSwitch();
          sw2 = PollSwitch();
          if ((sw1 & 0b000001) || (sw2 & 0b000001)){
             StatusLED(RED);
          }
    Weil es für eine rote Statusled ausreicht, wenn entweder in sw1 oder in sw2 Bit0 gesetzt ist. Das ist z.B. auch bei der Kombination sw1=0b111111 und sw2=0 der Fall. Korrekt wäre diese Formulierung:

    Code:
          sw1 = PollSwitch();
          sw2 = PollSwitch();
          if ((sw1 & 0b000001) && (sw2 & 0b000001)){
             StatusLED(RED);
          }
    Gruß

    mic
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken asuro-k6_163.jpg  

  3. #13
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    07.07.2010
    Alter
    35
    Beiträge
    228
    Habe jetzt die Taster kalibriert und bekomme dabei den Wert 63 angezeigt. In der myasuro.h stand 62L, habe es auf 63L geändert.

    Mein jetziger Code:

    Code:
    unsigned char sw1, sw2;
    	while(1){
    		sw1 = PollSwitch();
    		sw2 = PollSwitch();
    		if(sw1==sw2){
    			if (sw1 & 0b100000){
    				StatusLED(RED);
    			}
    			else if (sw1 & 0b010000){
    				StatusLED(YELLOW);
    			}
    			else if (sw1 & 0b001100){
    				StatusLED(GREEN);
    			}
    			else if (sw1 & 0b000010){
    				BackLED(ON,ON);
    			}
    			else if (sw1 & 0b000001){
    				StatusLED(OFF);
    				BackLED(OFF,OFF);
    			}
    		}
    Probleme:
    K5 -> BackLed's an, StatusLed aus
    BackLed's an -> K2 wird betätigt = StatusLed grün oder K1 wird betätigt = StatusLed gelb oder K5 wird betätigt = BackLed's gehen aus oder bleiben an

    Hoffe mein Problem ist verständlich

  4. #14
    Neuer Benutzer Öfters hier
    Registriert seit
    19.09.2010
    Beiträge
    9
    Zitat Zitat von Valen
    In dem datei Test.c von den SelbTest quell code steht wie das beim Selbtest gemacht wird:

    Code:
    /* ---------------------- */
    /* ----- Switch Test ---- */
    /* K1 -> Status LED Green */
    /* K2 -> Status LED RED   */
    /* K3 -> Line LED         */
    /* K4 -> Break LED Left   */
    /* K5 -> Break LED Rigth  */
    /* K6 -> Motor Left       */
    /* ---------------------- */
    void SwitchTest(void)
    {
    	unsigned char sw,tmp;
    	MotorDir(FWD,BREAK);
    
    	sw = PollSwitch();
    	StatusLED(OFF);
    	FrontLED(OFF);
    	BackLED(OFF,OFF); 
    	MotorSpeed(0,0);
    	tmp = 0;	
    
    	if (sw & 0x01) 
    		MotorSpeed(200,0);
    	if (sw & 0x02) {
    		BackLED(OFF,ON);
    		tmp = ON;
    	}
    	if (sw & 0x04) 
    		BackLED(ON,tmp);
    	if (sw & 0x08) 
    		FrontLED(ON);
    	if (sw & 0x10) 
    		RED_LED_ON;
    	if (sw & 0x20) 
    		GREEN_LED_ON;
    }
    /* END Switch Test ------------------------------ */
    Das geht bei mir nicht!
    egal welchen Taster ich drück, nichts passiert.
    und was sagt eigentlich die Init() Funktion?

  5. #15
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    01.03.2008
    Ort
    Niederlanden
    Beiträge
    1.170
    Zitat Zitat von -guenny-
    Zitat Zitat von Valen
    In dem datei Test.c von den SelbTest quell code steht wie das beim Selbtest gemacht wird:

    Code:
    /* ---------------------- */
    /* ----- Switch Test ---- */
    /* K1 -> Status LED Green */
    /* K2 -> Status LED RED   */
    /* K3 -> Line LED         */
    /* K4 -> Break LED Left   */
    /* K5 -> Break LED Rigth  */
    /* K6 -> Motor Left       */
    /* ---------------------- */
    void SwitchTest(void)
    {
    	unsigned char sw,tmp;
    	MotorDir(FWD,BREAK);
    
    	sw = PollSwitch();
    	StatusLED(OFF);
    	FrontLED(OFF);
    	BackLED(OFF,OFF); 
    	MotorSpeed(0,0);
    	tmp = 0;	
    
    	if (sw & 0x01) 
    		MotorSpeed(200,0);
    	if (sw & 0x02) {
    		BackLED(OFF,ON);
    		tmp = ON;
    	}
    	if (sw & 0x04) 
    		BackLED(ON,tmp);
    	if (sw & 0x08) 
    		FrontLED(ON);
    	if (sw & 0x10) 
    		RED_LED_ON;
    	if (sw & 0x20) 
    		GREEN_LED_ON;
    }
    /* END Switch Test ------------------------------ */
    Das geht bei mir nicht!
    egal welchen Taster ich drück, nichts passiert.
    und was sagt eigentlich die Init() Funktion?
    Funktioniert den Taster test von dem SelbTest nicht? Oder kannst du keine bit-test hin bekommen in dein Programm?

  6. #16
    Neuer Benutzer Öfters hier
    Registriert seit
    19.09.2010
    Beiträge
    9
    wie gesagt, wenn ich den selbst test ausführe, funktioniert alles super!
    wenn ich jetzt aber nur den switch code übernehme, dann geht nichts.
    genauso wie das beispiel programm aus dem manuel, das geht auch nicht.

  7. #17
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    01.03.2008
    Ort
    Niederlanden
    Beiträge
    1.170
    Bitte las dein Programm sehen. Ohne kann man nichts sagen. In dem Anleitung gibt es kein komplett Programm das bestimmte Tastern auswertet.

  8. #18
    Neuer Benutzer Öfters hier
    Registriert seit
    19.09.2010
    Beiträge
    9
    void SwitchTest(void)
    {
    unsigned char sw,tmp;
    MotorDir(FWD,BREAK);

    sw = PollSwitch();
    StatusLED(OFF);
    FrontLED(OFF);
    BackLED(OFF,OFF);
    MotorSpeed(0,0);
    tmp = 0;

    if (sw & 0x01)
    MotorSpeed(200,0);
    if (sw & 0x02) {
    BackLED(OFF,ON);
    tmp = ON;
    }
    if (sw & 0x04)
    BackLED(ON,tmp);
    if (sw & 0x0
    FrontLED(ON);
    if (sw & 0x10)
    RED_LED_ON;
    if (sw & 0x20)
    GREEN_LED_ON;
    }
    /* END Switch Test ------------------------------ */

    Das geht nicht!

    und folgendes geht auch nicht.

    int main(void)
    {
    Init(); //Welche Bedeutung?
    unsigned char Taster;
    Taster = PollSwitch();
    if(Taster > 0 )
    {
    SerWrite("Hallo du da!",12);
    }
    while(1);
    return 0;
    }

  9. #19
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    01.03.2008
    Ort
    Niederlanden
    Beiträge
    1.170
    Den SwitchTest Funktion allein kann nicht in ein Programm verwendet werden. Das muss irgendwie in den Hauptfunktion main (oder weitere Sub-funktionen) angerufen werden. Ich habe das nur damals in meiner Bericht geschrieben um den "sw & 0x_wert" anschaulich zu machen.

    Den Init() Funktion initialisiert eine menge von Interne Registern der notwendig sind fur das korrektes funktionieren der IC1 (de Atmega8 chip). Es setzt den anfangs wert und Kommunikation-richtung und Anfangswert von verschiedene pins. Dazu setzt es auch den Timer einstellungen fur den Motor-kontrol und den serielle komunikation und analoge Messungeinrichtung (ADC). Die Funktion muss am Anfang angerufen werden sonnst werden die andere Asuro Funktionen nicht richtig funktionieren.

    Dein Program geht schon, aber es tut es nur ein mal. Es macht den PollSwitch Messung nur einmal. Dan testet es mit den If abfrage ob einer Taster bemerkt is (und sendet über den IR stelle wenn das stimmt). Danach geht es in einer unendliche schleife mit while(1); Du bekommst aber keine Zeit einer der Taster ein zu drücken. Es geht zu schnell.

    Den folgende code muss besser gehen:
    Code:
    int main(void) 
    { 
    Init();
    unsigned char Taster;
    
    While(1) { //wiederhol  fur immer 
       Taster = PollSwitch(); 
       if(Taster > 0 ) 
          { 
              SerWrite("Hallo du da!",12); 
          } // Ende von if, irgend eine Taster geprellt.
    
       } // Ende von while(1);
     
    return 0; 
    
    } //Ende main

  10. #20
    Neuer Benutzer Öfters hier
    Registriert seit
    19.09.2010
    Beiträge
    9
    so hab das mal getestet... nichts geht!
    der Kondensator läd sich zwar auf, aber es tut sich nichts!

Seite 2 von 3 ErsteErste 123 LetzteLetzte

Berechtigungen

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

Solar Speicher und Akkus Tests