- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 15 von 15

Thema: Weiß jemand wo hier der Prpgrammierfehler liegt?

  1. #11
    Benutzer Stammmitglied
    Registriert seit
    17.06.2007
    Ort
    Landau
    Alter
    31
    Beiträge
    54
    Anzeige

    Praxistest und DIY Projekte
    Irgendwie sprint der immer in else. Der Läuft das Programm einfach von oben nach unten durch.

    Woran kann das liegen?

    Hier noch mal das Programm:

    Code:
    
    #include "asuro.h"
    
    int main(void)
    {
      unsigned char taste;
       
      Init();
      while(1)
      {
        PollSwitch();    
        PollSwitch();
        PollSwitch();
        PollSwitch();
        PollSwitch();
        PollSwitch();
        taste = PollSwitch();
        if(taste == 0)         
        {
    	StatusLED(GREEN);
          MotorDir(FWD,FWD);
          MotorSpeed(150,150);} 
        else                   
        {
          MotorSpeed(0,0);     
          MotorDir(RWD,RWD);
          MotorSpeed(150,150); 
          Sleep (36);                     
          	 MotorDir(FWD,RWD);
    		 StatusLED(RED);
    	 MotorSpeed(100,90);
    	 Sleep (36);
    	 SerWrite("Mann ich hab zu tun, verschwinde! Ich muss weiter!",40);
          MotorSpeed(0,0);     
        }
      }
    }
    Lg christoph[/code]

  2. #12
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    26.11.2006
    Ort
    Hamburg
    Alter
    32
    Beiträge
    384
    Hast du mal geprüft welche Werte die Taster zurückgeben? Vielleicht sind bei dir die Taster werte falsch und er bekommt immer einen Wert zurück der größer als null ist.

    mfg
    Erik

  3. #13
    Benutzer Stammmitglied
    Registriert seit
    17.06.2007
    Ort
    Geretsried
    Alter
    34
    Beiträge
    43
    Hallo ostoff,

    ich hatte bei meinen ersten Versuchen auch erstmal ein paar Rückschläge zu verkraften, wie ich jetzt weiß oft aufgrund von falschen Vorstellungen was die Sensoren zurückgeben würde. Naiv wie ich war glaubte ich, ich könnte in etwa mit den Werten aus dem Handbuch rechnen.(Blasphemie, zumindes bei odo und line Sensoren ^^)
    Nachdem ich mir ein paar Programme gebastelt hatte um die einzelnen Sensorwerte auszulesen und über das Hyperterminal auszugeben, lief es dann besser.

    Hier das Programm um die Taster auszulesen, im Anhang das hex-File.
    Eigentlich einfach, nur müssen die Zahlen die die Sensoren liefern in einen string, sozusagen die Ziffern aufgedröselt werden.

    Code:
    #include "asuro.h" //die asuro-funktionen
    #include <stdlib.h> // hier kommt itao() her
    
    int main(void) {
    	unsigned char taste; //der taster-wert
    	unsigned char ctaste[3]; //taster-wert als string
    	Init();
    	while(1) { //endlosschleife
    		PollSwitch(); //tasterwerte auslesen
    		PollSwitch(); //tasterwerte auslesen
    		PollSwitch(); //tasterwerte auslesen
    		taste = PollSwitch(); //tasterwerte auslesen und speichern
    		
    		if (taste != 0) { //wenn was gedrückt wurde
    			itoa((int)taste,ctaste,10); //zahl in string(ziffern) umwandeln
    			SerWrite(ctaste,3); //string uber IR senden
    			SerWrite("\n\r",2); //neue zeile, return zum zeilen-anfang
    			}
    		}
    	return 0;
    	}
    Ach ja die Taster-Werte sollten sein, von rechts nach links (wieder von hinten): 1, 2, 4, 8, 16, 32
    Ich habe das große Glück, dass bei mir alle Taster-Werte passen.

    Ich habe dein proggi mal in meinen Asuro geflasht, was mir auffällt:

    1. Deine Verzögerungen mit sleep sind zu kurz, die Zeit die gewartet wird ergibt sich aus "übergebene Zahl" / 72000 in Sekunden. (bei Verwendung der lib aus dem RN 36000)

    2. Wenn man einen der drei rechten Taster (von hinten gesehen) erwischt, wechselt die StatusLED mal mehr mal weniger oft zu rot, obwohl der Taster schon längst wieder losgelassen wurde. Vielleicht kommt das vom prellen der Taster, obwohl ich dachte die wären mechanisch entprellt.
    Angehängte Dateien Angehängte Dateien
    Gruß datobbs

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

    Was der mehrfache Aufruf von PollSwitch() bewirken soll, habe ich nie kapiert. Die Tastenwerte zum Terminal zu senden ist schon mal ein guter Ansatz. Wenn die Werte nicht genau 1,2,4,8,16 oder 32 sind, kann man die Taster auch kalibrieren. Dazu muss man in asuro.c die Formel am Ende der Funktion PollSwitch() ändern. Meist reicht es, wenn man mit dem 60er-Wert etwas spielt. Beispiel für meinen asuro:
    return ((10240000L/(long)i-10000L)*63L+5000L)/10000;
    Wirklich sinnvoll ist auch die mehrfache Überprüfung der von PollSwitch() zurückgelieferten Werte:
    https://www.roboternetz.de/phpBB2/viewtopic.php?t=36760

    Übrigends ist das Forum voll von asuro-Tastenproblemen und Lösungen dafür, man sollte mal die Suchfunktion verwenden: "asuro AND tasten AND werte" oder "asuro AND pollswitch AND falsch" (ohne "" eingeben)

    Sleep(36) verzögert eine tausendstel Sekunde, das ist kaum merklich. Deshalb kann man es in eine Schleife packen:

    unsigned int i;
    for (i=0;i<1000;i++) Sleep(36);

    Gruß

    mic
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  5. #15
    Moderator Robotik Einstein Avatar von damaltor
    Registriert seit
    28.09.2006
    Ort
    Milda
    Alter
    38
    Beiträge
    4.064
    der mehrfache aufruf vom pollswitch entlädt den kondensator C6 (?) welcher mitschuld an den fehlerhaften werten hat.
    Read... or die.
    ff.mud.de:7600
    Bild hier  

Seite 2 von 2 ErsteErste 12

Berechtigungen

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

12V Akku bauen