ADC Calibration schlägt fehl

alterschwede

New member
Hallo,

ich bin Frederic, 30 Jahre und melde mich hier zum ersten Mal! Daher zunächst einmal ein riesen Lob an alle Entwickler und Tüftler für dieses großartige Projekt.

Zu meinem Aufbau:
mein "großer" Ardumower befindet sich noch im Bau. Um erste Erfahrungen sammeln zu können, habe ich einen "Mini" aufgebaut mit:

Mega 2560,
Sensorboard,
L298N Motortreiber,
2 optische Odosensoren,
1 Ultraschallsensor,
2S Lipo,
Perimeterreceiver

Nach dem Lösen anfänglichen Compilerfehler in der "Mini" Config, konnte ich die Software auf den Mini übertragen. Via PFod App und Concole bin ich in der Lage den Mega zu konfigurieren. Nach der Anleitung habe ich alle Sensoren deaktiviert, alle Fehler gelöscht und die ADC Calibration gestartet. Leider scheint der Mega danach nicht mehr zu reagieren und ich muss ihn reseten. In der Console wird permanent der Fehler " Error: missing ADC calibration data" ausgegeben, was Sinn macht.

Woran kann es liegen?

Meine Änderungen in der mini.cpp sind:

ursprünglicher Compilerfehler in dem Aufruf robot.setOdometryState.... :

Code:
ISR(PCINT2_vect){   
  ......
 ..... 
  robot.setOdometryState(timeMicros, odometryLeftState, odometryRightState, odometryLeftState2, odometryRightState2);
}

ersetzt durch den Code von der mower.cpp

Code:
#ifdef __AVR__
  // Neu Alex: 06.10.16
  volatile byte oldOdoPins = 0;
  ISR(PCINT2_vect, ISR_NOBLOCK)
  {
    const byte actPins = PINK;                				// read register PINK
    const byte setPins = (oldOdoPins ^ actPins);
    if (setPins & 0b00010000)                 				// pin left has changed 
    {
      if (robot.motorLeftPWMCurr >= 0)						// forward
        robot.odometryLeft++;
      else
        robot.odometryLeft--;									// backward
    }
    if (setPins & 0b01000000)                  				// pin right has changed
    {
      if (robot.motorRightPWMCurr >= 0)
        robot.odometryRight++;								// forward
      else
        robot.odometryRight--;								// backward
    }  
    oldOdoPins = actPins;
  }

#else

  ISR(PCINT2_vect)
  {
    unsigned long timeMicros = micros();
    boolean odometryLeftState = digitalRead(pinOdometryLeft);
    boolean odometryLeftState2 = digitalRead(pinOdometryLeft2);
    boolean odometryRightState = digitalRead(pinOdometryRight);  
    boolean odometryRightState2 = digitalRead(pinOdometryRight2);  
    boolean motorMowRpmState = digitalRead(pinMotorMowRpm);
    robot.setOdometryState(timeMicros, odometryLeftState, odometryRightState, odometryLeftState2, odometryRightState2);   
    robot.setMotorMowRPMState(motorMowRpmState);  
  }
#endif


Außerdem habe ich noch die Bluetoothimplementierung eingefügt, das funktioniert aber wunderbar.

Ich bin noch nicht tief genug drin in dem Code/ der Schaltung, aber könnte es an einer fehlenden Referenzspannung liegen? Die Angezeigte Batteriespannng wird falsch angezeigt bei 2S Lipo nur 3V, konnte über den Batfaktor korrigiert werden, allerdings bin ich unsicher, ob das so richtig ist.

Bin verwirrt, freue mich auf Hinweise.
Besten Dank, Frederic
 
Hallo Freeric,

schön das du es hinbekommen hast und Willkommen im Forum.

Was hast du für Bluetoothimplementierung eingefügt ?

Die Anfängliche Konfiguration machst du am beste erst mal über die Konsole. In der 1.07 hat Boliven da auc einen umfangreichen Odometrie test eingefügt.


Stefan
 
Hallo Frederic,

komisch, habs bei mir gerade mal ausprobiert. ADC-Cal über Konsole funzt.
Es gibt nur keine Rückmeldung, dass es geklappt hat bzw. wird der Menütext nicht noch einmal ausgegeben.
Ich habe bei der 1.07 versucht DUE support einzubauen. Mit Einschränkungen hat das bei Benjamin wohl funktioniert.

VG
Reiner
 
Hallo,

danke für Eure Antworten. Ich habe es nochmal mit der 1.0a7 getestet und komme immer wieder zum selben Ergebnis, dass sich der Mega komplett aufhängt nach der ADC Calibration.
Kann es sein, dass die Mini Conf noch nich geupdated wurde?

Gruß
 
Hallo Frederic,

ja, ich glaube da müssen wir noch mal ran.
Die habe ich bei meinen Änderungen erst mal ignoriert. Ich versuche das die Tage mal gerade zu ziehen B)

VG
Reiner
 
Hallo Frederic,

hab gerade mal geschaut. Die Mini.cpp ist wohl noch auf einem ziemlich alten Stand.
Das hat bei mir gar nicht kompiliert :dry:
Hast Du in der config.h auf auf


Code:
#define USE_MINI


umgestellt?
Ich habe die mini.cpp jetzt mal versucht auf den neuesten Stand zu bringen. Hab aber keine Hardware zum testen. Also bitte nicht schlagen wenns nicht funzt B)

Aktuelle Version im GIT. Hier
 
Hi Reiner,

vielen Dank für deine Arbeit. Echt klasse.
Ich konnte alles fehlerfrei kompilieren und aufspielen. Leider scheint sich der Mega bei der ADC Calibration immer noch aufzuhängen, ohne Reset gehts da nicht weiter. Da es auch in der Mower conf nicht besser funktioniert, gehe ich stark von einem Fehler in meinem Setup aus. Was nutzt der Mega eigentlich als Referenzspannung?

Offtopic: Mit eingeschalteter Odometrie scheint der Rechner immer noch zuviele Interrupts zu verarbeiten, er fährt zwar gerade aus, alles daaaauuuert.... aber deutlich länger in der Berechnung wie ohne! Ohne macht er seinen job deutlich fehlerfreier. Ans Perimeter Tracken ist leider mit eingeschalteter Odometrie nicht zu denken :-(
VG Frederic
 
Hallo Frederic,

wenn Du die serielle Konsole öffnest, stürzt er schon ab bevor Du die ADC Kalibrierung startest?
Bei mir reagiert er so, als würde man schon einige Zeichen über die serielle Konsole gesendent haben...

VG
Reiner
 
Hallo Reiner,

die Eingabe über die Konsole funktioniert prima, erst nach dem Aufrufen der ADC Calibration hängt er sich auf ( auch nach dem Aufruf aus der Pfod APP)
 
Ich habe die Ardumower-Fehlerausgaben auf der Console so geändert (Github) dass nur noch alle 5 Sekunden eine Fehler-Zusammenfassung erfolgt. Das Menü sollte jetzt auch wieder bei ADC-Kalibrierung angezeigt werden. Ein Test am Mega verlief ohne Probleme.
 
Jo, läuft bei mir jetzt auch.
Soll ich eigentlich die letzten Änderungen aus der mower.cpp mal in die mini.cpp einbauen oder wär das eher kontraproduktiv? Ich hätte da schon was vorbereitet B)

VG
Reiner
 
Sorry Kommando zurück:
Die mower.cpp funzt. Aber wenn ich auf mini.cpp umstelle, beibt die Konsole bei mir bei "sen_counters" kurz nach dem Menü stehen. Dann geht nix mehr...

Ich habe schon mal versucht die mower.cpp zu kopieren und dann in mini.cpp umzubenennen, dann die mini-spezifische konfig rein. Das hatte gefunzt... komisch

VG
Reiner
 
Wie wäre es wenn wir die Mini-spezifischen Sachen einfach mit in die mower.cpp (z.B. als Kommentar) einbauen und dann die mini.cpp ganz löschen? Dann müsste man nicht ständig zwei Sachen warten.
 
Hmm, das wird dann aber schnell unübersichtlich in der mower.cpp.
Ich wuschtel mal meine Änderungen mit ins GIT. Dann kann Frederic das mal ausprobieren...
 
Ok. Ich spiele mit dem Gedanken, Azurit modularer zu gestalten, so dass man wieder mehr Lust hat den Code anzufassen. Ich würde beispielsweise viel Code aus robot.cpp in neue Klassen für Ultrasonic, Battery, StateMachine, Menu, ModelRC, Motor kopieren. Die Funktionalität in mower.cpp (genauer: die Funktionen setup, SetActuator, readSensor) würde wegfallen, da dann die entsprechende Klasse diese Funktionalität übernehmen würde.

Was denkst Du?
 
Ja, das hört sich gut an.

Anderes Thema: Ich habe mal versucht mir die neuen Platinen 1.3 anzuschauen.
Dabei meckert KiCad immer an der Version rum wenn ich das PCB öffnen will. Kannst Du ja mal an die Kollegen weiterleiten B)

VG
 
Oben