Guten morgen.
Hallo radbruch und alle anderen natürlich auch,
als Jäger und Sammler kann ich bei mir auf der Platte als erste Version mit Dateidatum vom 20.07.2005 folgendes finden:
Code:
SIGNAL (SIG_ADC)
{
static unsigned char tmp[2],flag[2],toggle;
static int speedcounter[2];
if (autoencode)
{
tmp[toggle]= ADCH;
if (toggle) ADMUX = (1 <<ADLAR) | (1 <<REFS0) | WHEEL_RIGHT;
else ADMUX = (1 <<ADLAR) | (1 <<REFS0) | WHEEL_LEFT;
// Hysteresis included 25.6.2005 stochri
if ( (tmp[toggle] < 150) && (flag[toggle] == TRUE)) // falling edge
{
encoder[toggle] ++;
Wheelspeed[toggle]=speedcounter[toggle];
speedcounter[toggle]=200; // preset speedcounter to maximum speed
flag[toggle] = FALSE;
}
if ( (tmp[toggle] > 160) && (flag[toggle] == FALSE)) // rising edge
{
encoder[toggle] ++;
flag[toggle] = TRUE;
}
toggle ^= 1;
if(speedcounter[toggle]) speedcounter[toggle]--; // if speecounter not zero
else Wheelspeed[toggle]=0;
}
}
Bis auf die Berechnung vom Wheelspeed ist aber der Code noch komplett in der aktuellen Forum-LIB vorhanden.
Zwei kleine Änderungen:
- Variable toggle wird mit FALSE initialisiert
- Der kleine Hysteresewert wurde von 150 auf 140 reduziert. (Etwas größere Hysterese zum oberen Wert von 160.)
Code:
SIGNAL (SIG_ADC)
{
static unsigned char tmp[2],flag[2],toggle=FALSE;
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;
}
}
Somit ist es erst einmal egal welche Version benutzt wird.
Aber interessant ist, dass nur der ADCH-Wert, also nur die oberen 8 Bit vom ADC-Wandler, benutzt werden. Dies war zumindest mir nicht so richtig bewußt.
OK, dein Testprogramm für die Liniensensoren ist hier ohne Source nicht so richtig.
Trotzdem ist deine Aussage: "Ähm, das ist mir jetzt echt peinlich, aber der Effekt tritt scheinbar nicht mehr auf." sehr interessant, da dann ja auch bei den Liniensensoren wohl irgendetwas nicht ganz in Ordnung ist.
Deshalb mal eine Frage: Sind die von dir geposteten Daten heute bei Sonnenlicht gewonnen worden? Und, kann es sein, dass du die ersten Tests mit deinem Programm bei Lampenlicht gemacht hast?
Dies würde ja für meine Theorie mit den 50 Hertz sprechen.
Mit deinem Programm bekomme ich nun, ohne Sonne
, folgende Messdaten: (Hattest du heute so etwas erwartet, als du vom 'nicht mehr auftretenden Effekt' sprachst?)
Code:
83 94
115 132
116 137
104 126
91 111
79 95
82 93
97 109
113 128
117 138
107 129
94 114
81 98
81 93
94 105
110 124
118 138
110 133
97 118
83 102
Und nun, Trommelwirbel, 50 Hertz betriebene Schreibtischlampe ausgeschaltet:
Code:
Ohne LED-Beleuchtung (Nur LCD-Monitor an)
1 1
1 1
0 1
0 0
0 0
0 0
0 0
0 0
0 0
Mit eingeschalteter LED-Beleuchtung
34 40
35 38
35 38
35 38
35 38
34 38
35 38
35 38
35 39
35 39
35 39
35 39
35 39
Dies ist der Effekt, den ich eben auch bei den Odometrie-Messung erwarte, und für den man halt noch ein Testprogramm schreiben muss. Aber nicht mit einem Messen, und sofort-Senden Zyklus, sondern wie oben beschrieben.
Lesezeichen