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
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.
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
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.
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
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.
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.