Forum: Mikrocontroller und Digitale Elektronik Arduino Leonardo: Erkennung Power-On Reset


von Michael (Gast)


Lesenswert?

Hallo,

gerade bastle ich an einem kleinen Projekt, in dem der Leonardo mit ein 
paar Tastern als Makro-Tastatur verwendet werden soll. Funktioniert auch 
schon einigermaßen.
Jetzt habe ich das Problem, dass nach dem Hochfahren des PCs der 
Leonardo gestartet wird und dann nicht vom PC als Tastatur erkannt wird. 
Dazu muss ich den Leonardo resetten.

Die Idee ist jetzt, das Power-On Reset (POR) in der Software zu 
erkennen, eine fixe Zeit, z.B. 2 Minuten abzuwarten bis der PC 
hochgefahren ist. Dann soll ein Reset per Software ausgelöst werden 
(z.B. über Watchdog Timeout) und der Leonardo wird dann vom PC erkannt.

Es gibt da auch ein Status-Register MCUSR (Datenblatt Seite 59: 
http://ww1.microchip.com/downloads/en/devicedoc/atmel-7766-8-bit-avr-atmega16u4-32u4_datasheet.pdf).

Allerdings funktioniert die Erkennung eines POR damit nicht. Der Grund 
dafür scheint zu sein, dass der Bootloader dieses Register löscht (Zeile 
119):
https://github.com/arduino/ArduinoCore-avr/blob/master/bootloaders/caterina/Caterina.c

Am Bootloader will ich nicht rum pfuschen. Deshalb die Frage: Gibt es 
noch eine andere Möglichkeit, einen POR zu erkennen als das Register 
auszulesen?

Vielen Dank und Grüße
Michael

von Einer K. (Gast)


Lesenswert?

Michael schrieb:
> Am Bootloader will ich nicht rum pfuschen.
Warum nicht?
Da es doch offensichtlich keine andere Möglichkeit gibt.
z.B. könntest du MCUSR in einem der GPIOR zwischenlagern

Die Alternative wäre, ganz auf den Bootloader zu verzichten.

von Michael (Gast)


Lesenswert?

Naja, die Leute, die den Bootloader geschrieben haben, dachten sich 
sicher was dabei. Und bevor ich mir da Probleme einhandle, fasse ich da 
lieber nichts an.
Darauf verzichten will ich aber nicht, sonst muss ich mir einen 
Programmer besorgen.

Habe aber diese Lösung gefunden:
Man schreibt eine Signatur ins RAM und schaut nach einem Reset, ob sie 
schon da ist. Beim POR ist sie nicht da, bei andern Resets schon.

https://forum.arduino.cc/index.php?topic=364549.0

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.