Ich habe jetzt entsprechend den Tipps hier: http://www.mikrocontroller.net/topic/42716 CKOPT im Atmega aktiviert und bislang keine Probleme. Mal sehen, ob das auf Dauer hilft ...
Hallo,
beim Testen meiner Software habe ich ab und zu das Problem entdeckt, dass der Asuro scheinbar einen Reset erlebt. Das ganze spielt sich folgendermaßen ab:
Zu Beginn frage ich in einer Schleife die Tasten ab und lasse die Status-LED als Hinweis fröhlich blinken. Erst nach einem Tastendruck geht es weiter in das Hauptprogramm und damit in die Endlosschleife - es gibt softwareseitig keine Möglichkeit, dass das Programm wieder an den Start (also die "Tastendruckschleife" ...) springen kann.
Im laufenden Betrieb (ich vermute in Zusammenhang mit Tastendruck durch Kollision mit einem Hindernis) passiert es dann plötzlich, dass der Asuro wieder in besagter Schleife landet und die LED fröhlich blinkt. Ein Hardware-Reset durch Kurzschluss o.ä. müsste sich doch auch die kurze Bootloader-Phase mit der gelben Status-LED bemerkbar machen, oder?
Gibt es auch einen Software Reset im Atmega? Bspw. durch Zugriff auf ungültige Speicherbereiche oder sowas? Mir gehen die Ideen aus ...
Danke für Tipps und Gruß,
Florian
Ich habe jetzt entsprechend den Tipps hier: http://www.mikrocontroller.net/topic/42716 CKOPT im Atmega aktiviert und bislang keine Probleme. Mal sehen, ob das auf Dauer hilft ...
Mist ... zu früh gefreut.
Mein Asuro löst den Switch-Interrupt aus, wenn man mit dem Finger großzügig unter die Platine in der Nähe der Taster langt (anfasst, evtl. etwas rubbelt). Ist das normal? PollSwitch() sagt, keine Taste, aber für einen Interrupt langts scheinbar ...
der interrupt ist sehr empfindlich... es kann schon sein dass ein finger reicht.
einen softreset gibt es nicht, poste aber mal deinen programmcode. evtl kann man was sehen...
CKOPT bedeutet in verbindung mit einem quarz oder schwinger, dass die schwingung "rail-to-rail", also mit maximaler amplitude, ausgeführt wird. das braucht mehr strom als wenn CKOPT aus ist, ist aber in störungsreichen umgebungen (wie dem asuro: batteriebetrieben, in bewegung, und die extrem störenden motoren) hilfreich. es sollte also eingeschaltet bleiben, sofern du das bisschen strom nicht sparen musst... ansonsten hat es eigentlich keinen weiteren einfluss.
Code komplett posten ist schlecht, das ist einerseits zu umfangreich und andererseits möchte ich mein Diplomzeugs noch nicht veröffentlichen.
Aber mein main() sieht so aus:
Da die Initialisierung sowie das Warten auf den Tastendruck in "asuroConInit()" stattfindet und das sonst nirgends aufgerufen wird, dürfte es sich wirklich um einen Reset handeln... und somit vermutlich um ein Hardwareproblem.Code:int main(void) { asuroConInit(); for(;;) { asuroConUpdate(); } //infinite loop return 0; //unreachable ... }
sehr eigenartig. nochmal zum verständnis: der asuro resettet zum beginn des programms, aber nicht zum beginn des bootloaders?
ich tippe auf spannungsschwankungen, welche den prozessor in einen zu niedrigen bereich bringen. dadurch word der programmzähler auf 0000 zurückgesetzt, an dieser stelle ist das userprogramm. mit einem hardreset würde die adresse des bootloaders eingelesen werden, welche in der nähe des endes des speichers liegt.
schüttel ihn mal ein wenig... tritt das dann auch auf?
Schütteln probiere ich morgen mal ..
Evtl. ist es auch der Bootloader - da die ganze Zeit eine UART-Kommunikation läuft, bekommt man es evtl. nur nicht mit. Der Bootloader springt ja (so weit ich gelesen habe...) bei für ihn falschen Daten direkt zum Programm weiter.
hmm ich glaube der bootloader wartet eine halbe (ganze?) sekunde ob richtige daten kommen, und springt dann weiter...
Lesezeichen