Forum: Mikrocontroller und Digitale Elektronik CAN_Konfiguration des Kontrollers bei jeden Spannungsausfall neu initialisieren


von Sonne M. (dipoko)


Lesenswert?

Hallo Zusammen!

Ich nutze den AT90CAN128 als MCU, um Signale auf den CAN-Bus sowohl zu 
lesen als auch zu schreiben. Die Daten werden mit einem Interface 
gesendet und empfangen.
Mit diesem Bedienung-Interface wird die Konfiguration des Controllers 
initialisiert:

 NodeID, cmdID und StatusID

Diese Daten werden mit der Funktion:
main_SaveMotorData(m_byteNodeId, m_uint16CmdId, m_uint16StatusId);

gespeichert. Alles läuft perfekt und einwandfrei.

Problem: Wenn die Spannung ausfällt oder wenn ein reset manuell 
verursacht wird, kann ich keine Daten weder senden noch empfangen, wenn 
die Spannung wider vorhanden ist.
Damit alles erneut läuft, muss die Konfiguration des Controllers auf dem 
Bedienung-Interface neue initialisieren werden. Das Verhalten ist 
genauso bei jedem Spannungsabfall. Übrigens die MCU muss nicht neu 
programmiert werden.

Ich habe leider mehr Erfahrung in Hardwareentwicklung, bei der Software 
bin ich nur ein Einsteiger.


Vielleicht hat jemand ein Idee oder Erfahrung mit solch einem Problem
gemacht.

Grüß Sonne

von Weingut P. (weinbauer)


Lesenswert?

das ist normal, Spannungsabfall gibt auch nen Reset und Zweck eines 
Reset ist es ja den Controller auf Ausgangszustand zu setzen.
Die Register die zur Konfiguration gesetzt werden sind auch quasi nur 
RAM-zellen und RAM geht halt stromlos verloren.

Abhilfe ist die Konfiguration entweder in die Strtroutine des 
COntrollers zu coden oder die Konfigwerte im EEPROM ablegen und beim 
Start in die entsprechenden Register kopieren.

von Sonne M. (dipoko)


Lesenswert?

Hallo Ufzjjuz,

mit dem Vorgang des Spannungsabfalls und Reset bin ich einverstanden. 
Ich will aber diese Konfiguration aber bei jedem Neustart behalten und 
weiß nicht wie ich diesen Fall umgehen kann. Deswegen stelle ich das 
Problem hier im Forum.
Es wird ziemlich aufwendig, wenn ich mehrere Controller zum Testen oder 
in Betrieb habe und jedes Mal die Kennung für jeden neu initialisieren 
muss. Wie soll diese Abhilfe aussehen?

Danke Sonne

von Rolf Magnus (Gast)


Lesenswert?

Sonne Madiba schrieb:
> Es wird ziemlich aufwendig, wenn ich mehrere Controller zum Testen oder
> in Betrieb habe und jedes Mal die Kennung für jeden neu initialisieren
> muss. Wie soll diese Abhilfe aussehen?

Wurde doch schon genannt:

Fhutdhb Ufzjjuz schrieb:
> Abhilfe ist die Konfiguration entweder in die Strtroutine des
> COntrollers zu coden oder die Konfigwerte im EEPROM ablegen und beim
> Start in die entsprechenden Register kopieren.

Genau das ist der Standardweg, um dieses Problem zu lösen. Der EEPROM 
behält seine Daten über Reset und Stromausfall hinweg. Das kannst du dir 
ähnlich wie eine Konfigurationsdatei vorstellen, in der du die Werte 
abspeicherst, und aus der du sie beim nächsten Start wieder ausliest.

von Harald (Gast)


Lesenswert?

Ich glaube, ihr redet aneinander vorbei. Sprichst Du, Sonne, von der 
CAN-Kommunikation auf ANDEREN Seite, die jedesmal neu aufgesetzt werden 
muss?
Dann riecht das nach einem Bus-Off-Zustand, der dann zunächst einmal 
durch die komplette Neuinitialisierung beseitigt wird. Evtl. hat das

von Sonne M. (dipoko)


Lesenswert?

Harald schrieb:
> Ich glaube, ihr redet aneinander vorbei. Sprichst Du, Sonne, von der
> CAN-Kommunikation auf ANDEREN Seite, die jedesmal neu aufgesetzt werden
> muss?
nur wenn einer Spannungsfall oder Reset auftreten würde.
genau ist das  ! ! !

> Dann riecht das nach einem Bus-Off-Zustand, der dann zunächst einmal
> durch die komplette Neuinitialisierung beseitigt wird. Evtl. hat das
??? ich habe nichts verstanden.

von Weingut P. (weinbauer)


Lesenswert?

wenn ich Dich richtig verstanden habe verklickerst Du dem Controller auf 
irgendeine Weise seinen Konfiguration damit er funktioniert ... ein Menü 
oder serielle scchnittstelle, Tasteneingaben ... irgendwie eben und das 
funktioniert dann.

Die Konfigurationswerte schreibst Du in Deinem Programm ja in 
irgendwelche Register. Wenn Du nun zusätzlich zum Schreiben der Register 
die Werte ins EEPROM schreibst, dann bleiben die dort auch stehen über 
den Reset hinaus, genau das ist die Funktion des EEPROM.

Nun brauchst Du nurnoch am Anfang Deines Programmes beim Starten die 
Werte aus dem EEPROM zu lesen und eben wie bei einer Eingabe an die 
entsprechenden Stellen zu schreiben ... voila

von Rolf Magnus (Gast)


Lesenswert?

Harald schrieb:
> Ich glaube, ihr redet aneinander vorbei. Sprichst Du, Sonne, von der
> CAN-Kommunikation auf ANDEREN Seite, die jedesmal neu aufgesetzt werden
> muss?

Ich verstehe es so, daß er an seinem µC ein Bedienfeld hat, über das er 
bestimmte CAN-IDs, für die das Gerät zuständig ist, eingeben kann. Diese 
sind nach Stromausfall oder Reset weg, und das soll sich ändern. Die 
Frage ist allerdings nicht so ganz eindeutig formuliert. Deine Variante 
wäre auch möglich.

Sonne Madiba schrieb:
>> Dann riecht das nach einem Bus-Off-Zustand, der dann zunächst einmal
>> durch die komplette Neuinitialisierung beseitigt wird. Evtl. hat das
> ??? ich habe nichts verstanden.

CAN-Controller zählen die Übertragungsfehler mit, und wenn zu viele in 
kurzer Zeit hintereinander kommen, zieht sich der CAN-Controller 
schrittweise vom Bus zurück, um nicht die anderen Busteilnehmer zu 
stören.
Am Ende steht der Zustand "bus off", in dem sich der Controller komplett 
von CAN abklemmt. Ob und wann er aus diesem Zustand zurückfindet, hängt 
von der Firmware des Gerätes ab.
Wenn ein CAN-Teilnehmer Daten zu senden versucht und keiner da ist, der 
mit einem ACK antwortet, kann genau das passieren. Abhilfe könnte dann 
sein, einfach einen weiteren CAN-Teilnehmer parallell zu schalten, der 
am Bus alle Botschaften empfängt. So läuft die Kommunikation während der 
Ausfallzeit nicht ins Leere.

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.