Forum: Mikrocontroller und Digitale Elektronik RESET als "ready"


von Sebastian G. (spencer)


Lesenswert?

ich bin neu im Gebiet der µC-Programmierung. Zur Zeit mache ich meine 
ersten Gehversuche. Momentan setze ich u.a. einen Raspberry Pi als 
"Kommandostation" ein, welches über die GPIOs den µC über seine I/Os 
antriggert. Jedoch werden die GPIOs beim Booten des Raspberry PIs auf 0 
gesetzt (wenn ich das gerade richtig im Kopf habe). Dies würde aber beim 
µC für unkontrollierte Aktionen sorgen. Ist es daher möglich, denn RESET 
solange auf GND zu ziehen, bis der Raspberry gebootet ist und die GPIOs 
mit gültigen Werten initialisiert sind?
Wenn ja, wie bewerkstellige ich dies am besten (Hardwareseitig)?
Der RESET-Pin soll dabei auch RESET bleiben, ich möchte nicht die 
FUSEbits ändern.
Vielen Dank schon einmal im Voraus für Eure Hilfe!

von S. R. (svenska)


Lesenswert?

Üblicherweise werden beim Boot die Pins nicht auf "0" gesetzt, sondern 
auf "input" (also High-Impedance / Tristate). Was der Empfänger sieht, 
hängt dann eher von Störfeldern in der Umgebung ab.

Ob das für den Raspberry genau so gilt, weiß ich aber nicht.

Um einen definierten Zustand extern zu erzwingen, nimmt man Pullup- oder 
Pulldown-Widerstände (ein paar kOhm), die einen nicht getriebenen GPIO 
passiv auf "high" bzw. "low" ziehen.

von Sebastian G. (spencer)


Lesenswert?

Hallo Svenska,

kannst du mir dies mit einem kleinen Schaltungbild visuell darstellen?

von DraconiX (Gast)


Lesenswert?

Ein Pull-Down z.b. hält den Pin auf 0 - Beidseitig.
1
GPIO Rasp <----------> GPIO µC
2
              |
3
              |
4
              [] 10kOhm
5
              |
6
              |
7
             --- GND
8
              -

von Sebastian S. (amateur)


Lesenswert?

Auch Null ist ein Zustand und ich kann mir nicht vorstellen, dass dies 
immer der Richtige ist.

Normalerweise ist aber "Reset" der Zustand der auch den Ausgangspunkt 
beim Einschalten bildet.

Das heißt, der µP hat üblicherweise keine Ahnung, wie er dahin gekommen 
ist. Also war Reset-Pin aktiv, oder hat es einen Stromausfall gegeben, 
oder hat das ganz normale Einschalten stattgefunden, eventuell war’s 
auch ein Programmsprung auf die Adresse 0.

Natürlich gibt es ein paar Tricks, wie man z.B. durch das setzen einiger 
Speicherstellen erkennen kann was Sache war. Oder so-schnell-wie-möglich 
(a.s.a.p) einen definierten Zustand herstellen kann. Dies bedingt aber 
einen Eingriff in den Start-Code des Systems plus einem sehr tiefen 
Einblick in das gerade laufende System. Meist Linux. Nicht zu vergessen, 
man sollte auch die hier angesprochenen Quellen haben und wissen, was 
man damit anfangen kann...

von Sebastian G. (spencer)


Lesenswert?

Hallo Sebastian,

ist es denn für den Microcontroller so wichtig, wie er jetzt in diesen 
Zustand gekommen ist , oder verstehe ich dich gerade falsch? Der µC soll 
ja einfach nur warten, bzw. nichts tun, bis der Raspberry Pi mit dem 
Booten fertig ist.

1. Power On
2. RESET auf LOW &  Raspberry bootet
3. Raspberry ist gebootet, GPIOs gesetzt
4. RESET auf HIGH
5. Raspberry und µC machen ihre Arbeit

: Bearbeitet durch User
von S. R. (svenska)


Lesenswert?

Sebastian G. schrieb:
> ist es denn für den Microcontroller so wichtig, wie er jetzt in diesen
> Zustand gekommen ist

Das hängt von der Anwendung ab. Viele Mikrocontroller haben z.B. einen 
Watchdog, der das System automatisch resettet, wenn die Software nicht 
mehr korrekt arbeitet (d.h. den Watchdog nicht regelmäßig streichelt).

Wenn die Software nun startet, kann es wichtig sein, zu wissen, ob das 
System einfach nur "eingeschaltet" wurde, oder ob es "wegen Absturz neu 
gestartet" wurde.

Für deine einfache Sequenz (halte den Mikrocontroller im Reset, bis der 
Raspberry läuft) reicht ein Pulldown-Widerstand, wie von DraconiX 
aufgemalt.

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.