- Akku Tests und Balkonkraftwerk Speicher         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 11

Thema: Problem mit encoder-funktion beim asuro

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    20.04.2006
    Beiträge
    10

    Problem mit encoder-funktion beim asuro

    Anzeige

    LiFePo4 Akku selber bauen - Video
    Moinsen zusammen,

    ich hab' ein Problem mit der Odometrie-Funktion "encoder" aus der erweiterten asuro.c, wie sie hier herunterzuladen ist. Ich hab' mehrere asuros da (für ein Praktikum) und will die Odometrie einsetzen.
    Aber weil von meinen Kleinen kaum einer eine gerade Linie fahren will, hab' ich mir jetzt mal ein kleines Progrämmchen geschrieben, das mir über PrintInt die mit encoder(LEFT) und encoder(RIGHT) abgefragten Werte ausgibt.
    Dabei ist mir aufgefallen, dass nur bei einigen meiner asuros die Zähler stehen bleiben, wenn auch die Räder still stehen, bei den meisten laufen die Zähler einfach weiter, ich hab' den Eindruck, es passiert immer dann, wenn das Zahnrad genau auf dem Hell/Dunkel-Übergang vor der Lichtschranke zum stehen kommt, aber weil die Bauteile der Schranke und der Abstand zwischen Scheibe und Sender/Empfänger ja relativ gross sind, lässt sich das nicht so genau beurteilen.

    Jetzt also drei bis vier Fragen an euch:

    1. Hilft es etwas, die Aufkleber mit den 12 Hell/Dunkel-Segmenten gegen die mit 8 zu tauschen ?
    2. Hilft es, den Fotottransistor und die LED abzuschirmen, ich hab' das gerade probeweise gemacht, aber hatte den Eindruck, dass es keinen Effekt hatte, im Dunklen rennen die Zähler ja auch manchmal einfach weiter ?
    3. Weil ich mich bisher noch nicht in den Assembler des ATM eingearbeitet habe - kann mir jemand hier kurz erklären, was in der Interrupt-Routine der (erweiterten) asuro.c eigentlich passiert ?

    Oder mache ich 4. noch irgend was anderes völlig verkehrt ?

    Code:
    /*******************************************************************************
    *
    * Asuro IR-Detektor Testprogramm
    * 
    * Es sind die Versionen der asuro.c und der asuro.h zu verwenden, wie sie bei 
    * https://www.roboternetz.de/phpBB2/viewtopic.php?t=11114
    * herunterzuladen sind
    *****************************************************************************/
    
    #include "asuro.h"
    #include <stdlib.h>
    #define avgspeed 120
    
    void PrintStr(unsigned char *data) {
    	unsigned char i = 0;
    	while(data[i++]!=0x00); 
    	SerWrite(data,i);
    }
    
    int main(void)
    {
       
       int el,er,diff,run = 0,sw = 0;
       PrintStr("Programm ENCODERTEST\r\n");
       Init();
       Encoder_Init();    
       MotorDir(FWD,FWD); 
       MotorSpeed(0,0); 
    
       while(1) {  		
    		sw = PollSwitch();
    		if ((sw>0)&(run==0)) run=1;
    		if ((sw>0)&(run!=0)) run=0;
    		el = encoder[LEFT];
    		er = encoder[RIGHT]; 
    		diff = el - er;		
    		if (run!=0) MotorSpeed(avgspeed-diff,avgspeed+diff); else MotorSpeed(0,0); 
    		PrintInt(el);
    		PrintStr(" | ");
    		PrintInt(er);
    		PrintStr(" | ");
    		PrintInt(diff);
    		PrintStr(" | ");
    		PrintInt(run);
    		PrintStr("\r\n");
    		
    	}
       return 0;
    }
    Grüsse vom ölgötz

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    12.06.2005
    Ort
    Südwestdeutschland
    Beiträge
    1.142
    Blog-Einträge
    3
    Hallo ölgotz,

    1. Hilft es etwas, die Aufkleber mit den 12 Hell/Dunkel-Segmenten gegen die mit 8 zu tauschen ?

    Zuverlässiger ist das auf jeden Fall.

    2. Hilft es, den Fotottransistor und die LED abzuschirmen, ich hab' das gerade probeweise gemacht, aber hatte den Eindruck, dass es keinen Effekt hatte, im Dunklen rennen die Zähler ja auch manchmal einfach weiter ?

    Wenn Du den ASURO bei starker Sonneneinstrahlung fahren läst, kannst Du unter umständen feststellen, dass die Odometrie gestört wird. Es gab hier schon Leute, die haben den ASURO in eine Dose eingebaut.

    3. Weil ich mich bisher noch nicht in den Assembler des ATM eingearbeitet habe - kann mir jemand hier kurz erklären, was in der Interrupt-Routine der (erweiterten) asuro.c eigentlich passiert ?

    Die Interruptroutine ist aber in C geschrieben. In einigen Verionen ist dort eine Hysterese eingebaut. Bei meinem ASURO musste ich die Grenzwerte für die Helligkeitswerte hell/dunkel anpassen. Es scheint bei den Odometriespannungswerten große Toleranzen zu geben.

    Gruss,
    stochri

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    20.04.2006
    Beiträge
    10
    Hallo Stochri,

    ...vielen Dank erstmal für Deine Antwort. Schwarze Pappe hab' ich schon gekauft, um die Optik abzuschirmen, werd' aber sicher erst am Nachmittag dazu kommen, die Dinger gemäss (1) und (2) zu ändern. Mit Frage 3 habe ich mich vielleicht falsch ausgedrückt:

    Zitat Zitat von stochri
    Die Interruptroutine ist aber in C geschrieben. In einigen Verionen ist dort eine Hysterese eingebaut. Bei meinem ASURO musste ich die Grenzwerte für die Helligkeitswerte hell/dunkel anpassen. Es scheint bei den Odometriespannungswerten große Toleranzen zu geben.
    ich weiss schon, dass das C ist, aber ich habe bisher nie so maschinennah programmiert und schrecke dann immer vor solchen Ausdrücken wie ADCH, ADMUX etc. zurück ... Hier ein Ausschnitt aus der asuro.c, von dem ich annehme, dass er die Werte für dei Helligkeitsunterschiede enthält, die du meinst, also die 140 und die 160? Und was verstehst du unter Hysterese, wie kann ich die ggf. ändern?

    Code:
    SIGNAL (SIG_ADC)
    {
    	static unsigned char tmp[2],flag[2],toggle;
    	if (autoencode){
    	tmp[toggle]= ADCH;
    	if (toggle)	ADMUX = (1 <<ADLAR) | (1 <<REFS0) | WHEEL_RIGHT;
    	else ADMUX = (1 <<ADLAR) | (1 <<REFS0) | WHEEL_LEFT;
    
    	if ( (tmp[toggle] < 140) && (flag[toggle] == TRUE)) {
    		encoder[toggle] ++;
    		flag[toggle] = FALSE;
    	}
    	if ( (tmp[toggle] > 160) && (flag[toggle] == FALSE)) {
    		encoder[toggle] ++;
    		flag[toggle] = TRUE;
    	}
    	toggle ^= 1;
    }}
    ... einstweilen vielen Dank vom ölgötz

  4. #4
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    12.06.2005
    Ort
    Südwestdeutschland
    Beiträge
    1.142
    Blog-Einträge
    3
    Ausdrücken wie ADCH, ADMUX etc. zurück ... Hier ein Ausschnitt aus der asuro.c, von dem ich annehme, dass er die Werte für dei Helligkeitsunterschiede enthält, die du meinst, also die 140 und die 160? Und was verstehst du unter Hysterese, wie kann ich die ggf. ändern?
    Relevant ist ADCH ==> der Wert den der AD-Wandler zurückliefert.

    Helligkeitswert 140: Übergang von hell nach dunkel
    Helligkeitswert 160: Übergang von dunkel nach hell

    Bei jedem Übergang wird der encoderwert um 1 erhöht.

    Die Differenz zwischen den beiden Werten bezeichnet man als Hysterese und ist im Programm nicht als extra Variable implementiert.

    Irgendwo im Forum gibt es ein kleines Programm, mit dem man die Helligkeitswerte über die serielle Schnittstelle auslesen kann. So ein Programm kannst Du verwenden um festzustellen, was die Fototranssitoren wirklich sehen und dann die beiden Schwellwerte entsprechend anpassen.

    Gruss,
    stochri

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    20.04.2006
    Beiträge
    10
    Zitat Zitat von stochri
    Irgendwo im Forum gibt es ein kleines Programm, mit dem man die Helligkeitswerte über die serielle Schnittstelle auslesen kann. So ein Programm kannst Du verwenden um festzustellen, was die Fototranssitoren wirklich sehen und dann die beiden Schwellwerte entsprechend anpassen.i
    Hallo Storchi,

    genau, da sitz' ich jetzt gerade drüber - hatte es gerade schon mal programmiert, bis mir aufgefallen ist, dass ich natürlich auf die Print-Befehle zwischen den Messungen verzichten muss, sonst kriegt er die Radumdrehungen ja gar nicht mit. Jetzt schreib' ich mir gerade eine neue version, die die Messwerte erst mal zwischenspeichert und sie dann an den PC überträgt.
    Aber so, wie's aussieht, sind 140 und 160 viel zu niedrig, schätze mal, dass es bei dem asuro, den ich gerade teste, auf 500 und 700 'rausgeht. Und dann ist die grosse Frage, ob das dann für die anderen 6 in der Garage auch noch zutrifft.
    Gibt's eigentlich einen Speicherbereich auf dem ATM, auf dern ich schützen kann, in dem z.B. so eine 'individuelle' Schwelle abgespeichert werden kann, die nicht jedesmal beim flashen überschrieben wird ?

    Grüsse vöm ölgötz

    PS: Schwarze Pappschächtelchen um die Sensoren und die 8er-Scheiben statt die 12er hat nur geringen Effekt gehabt ...

  6. #6
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    12.06.2005
    Ort
    Südwestdeutschland
    Beiträge
    1.142
    Blog-Einträge
    3
    Schwelle abgespeichert werden kann, die nicht jedesmal beim flashen überschrieben wird ?
    Klar, Du kannst ins EEPROM Daten schreiben, dazu ist es genau da. Das geht relativ einfach, wenn Du die entsprechenden Funktionen aus eeprom.h benutzt.

    Gruss

    sto - chri

  7. #7
    Neuer Benutzer Öfters hier
    Registriert seit
    20.04.2006
    Beiträge
    10
    eeprom.h ... danke für den Tipp! ...und wo krieg' ich die her ?

  8. #8
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    52
    Beiträge
    2.236
    Guckst Du

    Gruß Sebastian
    Software is like s e x: its better when its free.
    Linus Torvald

  9. #9
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    12.06.2005
    Ort
    Südwestdeutschland
    Beiträge
    1.142
    Blog-Einträge
    3
    Hallo ölgötz,
    der von Izsaseba gpostete Link ist eine gute Anleitung, hat es geklappt ?

    Noch ein kleiner Tip: Für die Programmentwicklung ist es ziemlich sinnvoll, AVR-Studio zu benutzen, weil dort ein gut funktionierender Simulator für die Fehlersuche drin ist und man die Make-Files nicht von Hand erstellen muss.

    Bevor Fragen entstehen ==> Bei Atmel downloaden, ist frei

    Gruss,
    stochri

  10. #10
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    29.04.2005
    Ort
    Weilburg
    Beiträge
    676
    Irgendwo im Forum gibt es ein kleines Programm, mit dem man die Helligkeitswerte über die serielle Schnittstelle auslesen kann. So ein Programm kannst Du verwenden um festzustellen, was die Fototranssitoren wirklich sehen und dann die beiden Schwellwerte entsprechend anpassen.
    Ich glaube ihr meint das:
    https://www.roboternetz.de/phpBB2/ze...=116847#116847
    Prostetnic Vogon Jeltz

    2B | ~2B, That is the Question?
    The Answer is FF!

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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

MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad