- Akku Tests und Balkonkraftwerk Speicher         
Seite 4 von 6 ErsteErste ... 23456 LetzteLetzte
Ergebnis 31 bis 40 von 58

Thema: Probleme mit Tastern

  1. #31
    Moderator Robotik Einstein Avatar von damaltor
    Registriert seit
    28.09.2006
    Ort
    Milda
    Alter
    38
    Beiträge
    4.066
    Anzeige

    Powerstation Test
    bitte poste deinen code...
    Read... or die.
    ff.mud.de:7600
    Bild hier  

  2. #32
    ich hab befürchtet dass jemand das sehen will

    sieht leider ziemlich chaotisch aus, da ich ja nur am rumtesten bin..

    is eigentlich nur ein "multitasking" system von sternthaler, kombiniert mit dem geradeausfahr algorithmus von waste. dazu soll er noch ne led blinken lassen und eben mit den tastern einem hindernis ausweichen, code wie gesagt abgeleitet von der asuro lib (kollisionstest)

    Code:
    #include "asuro.h"
    
    int   main (void)
    {
             unsigned long  v_time = 0;
    
             unsigned long  v_P1_lasttime  = 0;  // PROZESS: Tasten auswerten
    #define                 d_P1_wartezeit   50; // Zeit in ms
    
             unsigned long  v_P2_lasttime  = 0;  // PROZESS: Status-LEDs blinken
    #define                 d_P2_wartezeit   200;// Zeit in ms
             unsigned char  v_P2_LEDonoff  = 0;
    
             unsigned long  v_P3_lasttime  = 0;  // PROZESS: Linien-Sensoren
    #define                 d_P3_wartezeit   5;  // Zeit in ms
        
    
             unsigned long  v_P4_lasttime  = 0;  // PROZESS: PID-REGLER
    #define                 d_P4_wartezeit   400;  // Zeit in ms
    
    		
    unsigned char  flagl=FALSE, flagr=FALSE;
    unsigned int data[2];
    int wegl, wegr, diff;
    
    int speed = 160;
    int speedLeft = 160;
    int speedRight = 160;
    wegl=0;  wegr=0;
     
    MotorDir(FWD,FWD);
    
    Init();
    
    unsigned char t1;
    unsigned char t2;
    
    
            // Multitasking teil von Sternthaler
            //
    
       while (1)
       {
          /*----------------------------------------------------------------------
             Zeitbasis fuer die Prozesse aktualisieren
          */
          v_time = Gettime ();
    
          /*----------------------------------------------------------------------
             PROZESS: Tasten auswerten.
          */
          if (v_time > v_P1_lasttime)
          {
             v_P1_lasttime = v_time + d_P1_wartezeit;
    
        t1 = PollSwitch();
        t2 = PollSwitch();
        if (t1 == 0 && t2 == 0)         /* keine Taste */
        {
         
        }
        else if (t1 && t2 && t1 == t2)
        {
          MotorDir(BREAK,BREAK);
           MotorDir(RWD,RWD);
                MotorSpeed(150,150);
                Msleep(200);
                
          //Hier fängt das problem an
          //
          // 
          if (t1 & 0x07) /* Tasten links gedrückt? */
          {
              MotorDir(FWD,RWD);
                MotorSpeed(150,150);
                Msleep(550);            //ca 90 Grad
                MotorDir(FWD,FWD);
          }
          if (t1 & 0x38) /* Tasten rechts gedrückt? */
          {
              MotorDir(RWD,FWD);
                MotorSpeed(150,150);
                Msleep(550);            //ca 90 Grad
                MotorDir(FWD,FWD);
          }
                 /* 1 Sekunde fahren */
          }
         } 
    
          /*----------------------------------------------------------------------
             PROZESS: Status-LED blinken lassen
          */
          if (v_time > v_P2_lasttime)
          {
             v_P2_lasttime = v_time + d_P2_wartezeit;
    
             if (v_P2_LEDonoff)
                StatusLED(YELLOW);
             else
                StatusLED(OFF);
             v_P2_LEDonoff ^= 1;
          }
    
          /*----------------------------------------------------------------------
             PROZESS: test
          */
          if (v_time > v_P3_lasttime)
          {
             v_P3_lasttime = v_time + d_P3_wartezeit;
                //leer
            
           } 
    
          /*----------------------------------------------------------------------
             PROZESS: 
             
             geradeausfahren von waste
             
             
          */
          if (v_time > v_P4_lasttime)
          {
           	OdometrieData(data);
    	if ((data[0] < 550) && (flagl == TRUE)) {flagl = FALSE; wegl++;}
    	if ((data[0] > 650) && (flagl == FALSE)) {flagl = TRUE; wegl++;}
    	if ((data[1] < 550) && (flagr == TRUE)) {flagr = FALSE; wegr++;}
    	if ((data[1] > 650) && (flagr == FALSE)) {flagr = TRUE; wegr++;}
    	diff=wegr-wegl;
    	if (diff>0) speedRight--;                  // fahre geradeaus
    	else if (diff<0) speedLeft--;
    	else {speedRight=speed; speedLeft=speed;}
    	if (speedRight<0) {speedRight=0;}
    	if (speedLeft<0) {speedLeft=0;}
    	MotorSpeed(speedLeft,speedRight);
    
    	  }
    	  
    	  
    
          /*----------------------------------------------------------------------
             PERMANTER RECHENPROZESS
          */
          // Volle Rechenleistung ist hier verfügbar, ohne sich um ein
          // 'Timing' zu kümmern.
          // Natürlich darf hier keine Endlosschleife sein.
       }
    }
    das ist die version, in der er nur in eine seite fährt, in die andere seite dreht er sich einmal und dann sofort wieder zurück..


    julian

  3. #33
    Benutzer Stammmitglied
    Registriert seit
    05.07.2007
    Beiträge
    44
    Hallo zusammen

    Ein Kurzschluß sollte durch die Lötbrücke nicht entstanden sein, denn dazwischen liegt ja noch der Widerstand R23 von 1M.
    Das Problem vom mic hatte ich auch schon einmal. Die Ursache war die Batterie.
    Jedesmal wenn ein Motor lief spielte der ASURO verrückt.

    Mit freundlichen Grüßen
    A.Hoffmann

  4. #34
    Moderator Robotik Einstein Avatar von damaltor
    Registriert seit
    28.09.2006
    Ort
    Milda
    Alter
    38
    Beiträge
    4.066
    hm du hast recht, den 1M habe ich nicht bedacht, trotzdem: niemals kondensatoren kurzschliessen! wenn du einen anderen erwischt hättest, hättest du evtl nicht so viel glück...

    sind deine batterien
    -wirklich voll
    -nicht alt
    -und von einer vernünftigen marke?

    billigbatterien halten oftmals die spannung nicht, diese bricht dann recht schnell zusammen. das kann schon ausreichen, um am adc eigenartige werte zu finden.
    Read... or die.
    ff.mud.de:7600
    Bild hier  

  5. #35
    Benutzer Stammmitglied
    Registriert seit
    05.07.2007
    Beiträge
    44
    Hallo damaltor

    Das Problem bei mir waren nicht nur die seltsamen ADC Werte.
    Bei einem von mir geschriebenen Testsystem funktionierte die
    IR Kommunikation nicht mehr richtig, Ohne eingeschaltete
    Motoren war alles in Ordnung. Immer wenn ich einen Motor
    eingeschaltet habe, brach die Verbindung vom ASURO zu dem
    Steuerprogramm auf dem PC ab. Ohne Motoren funktionierte alles
    wie gewohnt. Hat mich zwei Tage fehlersuche gekostet.
    Seit dem benutzte ich nur noch Markenbatterien.

    Mit freundlichen Grüßen
    A.Hoffmann

  6. #36
    Moderator Robotik Einstein Avatar von damaltor
    Registriert seit
    28.09.2006
    Ort
    Milda
    Alter
    38
    Beiträge
    4.066
    ja genau, das ist das problem... die billigen batterien sind gut für fernbedienungen und uhren, aber für die motoren des asuro, die doch recht großzügig mit strom und spannung umgehen, leider nichts. die spannung fällt zusammen, sowie die motoren eingeschaltet wurden. den µC ist das egal, ein atmega8L braucht bloß 2,7V, aber alles andere wird dann schwierig =)
    Read... or die.
    ff.mud.de:7600
    Bild hier  

  7. #37
    Benutzer Stammmitglied
    Registriert seit
    30.10.2007
    Ort
    Meensen
    Alter
    36
    Beiträge
    77
    das programm zum tastertest hat folgendes ergeben:

    Code:
    n0   
    n-   
    n0   
    nC   
    nW   
    n  
    n-   
    n+   
    n8   
    nK   
    nd   
    n&   
    n,   
    n,   
    nE   
    nY   
    n]   
    nd   
    nZ   
    nR   
    nX   
    nS   
    nX   
    n[   
    nW   
    n]   
    n 
    n-g 
    n,+ 
    n9, 
    nN6 
    neI 
    n*_ 
    n)# 
    n3+ 
    nE+ 
    nV> 
    nnQ 
    n,h 
    n++ 
    n8, 
    nK3 
    na: 
    n'B 
    n-G 
    n0
    n@
    nW
    nh
    n,
    n-
    n6
    nI
    nb
    n$
    n,
    n,
    n?
    nS
    nk
    n,
    n-
    n3
    nK
    n]
    n%
    n)
    n,
    erst beim drücken vom zweiten taster von links gesehen hat das terminal aufgehört wilde zeichen zu empangen!

    meine taster sind folglich nicht ganz ok.

    die baterien sind "Top Craft - Ultra Alkaline" ich weiß nicht wie gut diese sind. vielleicht hat ja jemand von euch erfahrungen mit dieser Marke?


    Andernfalls ist die Frage: sind kaltlötstellen, oder irgentein anderer pfusch daran schuld?

    Achja: der c7 ist durchgeknipst.

  8. #38
    Moderator Robotik Einstein Avatar von damaltor
    Registriert seit
    28.09.2006
    Ort
    Milda
    Alter
    38
    Beiträge
    4.066
    Ich habe deinen dreifachpost (!) gelöscht bzw. editiert.

    ich vermute eher einen fehler in meinem programm, da kam ja nur grütze an...

    probier mal das hier. kann da mal einer drüber schauen bitte?
    Code:
    #include "asuro.h"
    
    int main(void){
    unsigned char taster
    int radix=10;
    unsigned char wert[5];
    Init();
    while(1){
    taster=PollSwitch();
    itoa(taster,wert,radix);
    SerWrite(*wert,5);
    SerWrite("\n\r",2);
    }
    return 0;
    }
    und sag was dann kommt, wenn du die taster drückst. benutz mal den code-button, dann wird alles schön zusammengeschoben. oder du schreibst einfach auf, was bei den verschiedenen tastern kommt.
    Read... or die.
    ff.mud.de:7600
    Bild hier  

  9. #39
    @dalmator hast du meinen code angeschaut, oder hattest du garnicht mich gemeint mit "poste bitte deinen code"?

  10. #40
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    29.05.2005
    Beiträge
    1.018
    Hallo ElTransistor,
    ich habe mir mal deinen geposteten Code angesehen.
    Du hast dort ein
    ---> if (t1 & 0x07) /* Tasten links gedrückt? */
    ---> if (t1 & 0x3 /* Tasten rechts gedrückt? */
    eingebaut.
    Das Problem bei den Tasten ist, dass die Funktion PollSwitch(), bei einem nicht korrekt eingestelltem Wert für die Umrechnung des Tasten-ADC-Wert's in den zurückgegeben Tasten-Gedrückt-Wert, z.B. folgendes passieren kann:
    Gedrückt wird: 100000
    Berechnet wird: 011111
    Nun kommt es auf die Reihenfolge in deinem Hauptprogramm an ob du zuerst 0x07 oder 0x38 prüfst.
    Du prüfst ja erst 0x07, und somit könnte diese Seite 'bevorzugt' werden. (Oder andersherrum)

    Du solltest auf alle Fälle mal den Wert von t1 an die Terminalemulation senden, wenn du in den beiden IF-Codestellen bist und prüfen, ob das auch wirklich der Wert ist den du an den Tastern gedrückt hast.

    Gruß Sternthaler
    Lieber Asuro programieren als arbeiten gehen.

Seite 4 von 6 ErsteErste ... 23456 LetzteLetzte

Berechtigungen

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

LiFePO4 Speicher Test