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.