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


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Michael (Gast)


Bewertung
0 lesenswert
nicht 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 Arduino Fanboy D. (ufuf)


Bewertung
-1 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.