So allgemine gesagt: .......JA
Das der Controller nicht mehr reagiert kann aber ganz andere Gründe haben.
Könnte zb. auch ein Überlauf sein oder ein Programfehler der ins Nirvana zeigt.
Hallo Leute!
Ich habe ein Platinchen gebaut, mit dem man sich am CAN-Bus vom Auto spielen kann.
Verwendete Hardware:
Mikrocontroller: ATMega32
CAN-Controller: MCP2515
Nunja, bei längerem Betrieb reagiert auf einmal der CAN-Controller nicht mehr.
Um "genau" zu sein, nach ca. 3Tagen.
Mache ich ein AEG (Ausschalten, Einschalten, Geht), dann funktioniert es wieder für 3 Tage.
Nun ist die Frage:
Ist es Möglich, dass der MCP2515 CAN-Controller seine
Registereinträger auf irgendeine Weise verliehrt nach 3 Tagen?
Gruß,
Franz
So allgemine gesagt: .......JA
Das der Controller nicht mehr reagiert kann aber ganz andere Gründe haben.
Könnte zb. auch ein Überlauf sein oder ein Programfehler der ins Nirvana zeigt.
Gruß
Ratber
Hallo Ratber,
Danke für Deine Antwort!
Einen Programmfehler oder Pufferüberlauf schließe ich in diesem Fall mal aus,
Das Programm läuft ständig im "Kreis" und macht innerhalb
von Sekunden die gleichen Aufgaben.
Aber generell ist sowas möglich sagst Du oder?
Weil ich werd jatzt mal eine zeitlich gesteuerte Re-Initialisierung einbauen
für die CAN-Controller.
Gruß,
Franz
Ja,wie gesagt,Prinzipiell möglich aber die genaue Ursache kann vielfältig sein.
Irgendein Stack im Spiel oder vieleicht knappe Timings ?Das Programm läuft ständig im "Kreis" und macht innerhalb
von Sekunden die gleichen Aufgaben.
Was noch sein könnte wäre ein unterbrochenes Protokoll so das der Contr. in einer Schleife klebt ?
Irgendeine Fehlerabfrage eingebaut ?
Breakpoints mit Ausgabe auf LCD/LED etc. wären vieleicht angesagt.
Der Zeitrahmen ist ja scheinbar reproduzierbar.
Hast du schon rausgefunden ob der Ausfall Zeitlich bedingt oder von der Zahl der Operationen abhängig ist ?
Edit:
Die grausligsten Schreibfehler entfernt
Gruß
Ratber
Tritt dieser Fehler immer nach ganz genau der gleichen Zeitspanne auf? In dem Fall ist es wahrscheinlich doch ein Puffer oder Zählerüberlauf.
Hallo,
Der Atmel macht auch noch andere Sachen, wie auch ein
LCD ansteuern. Diese Aufgaben erfüllt er weiterhin.
Nur gesendet und empfangen wird nichts mehr.
Der Puffer ist aber gegen Überlauf geschützt.
Nagut was heißt geschützt, er verweirft das was nicht reinpasst...
Aber dann muß er trotzdem anstehende Sachen senden...
(Normalerweise)
Ich werd mal mehr Beobachtungspunkte einbauen.
Aber ein Verlust der Registerenträge kann ja auch plausiebel klingen oder?
Aber immer so gleich...
Ich kann es zeitlich nicht genau messen, wann der Fehler eintritt,
aber su um die 3 Tage dauert es...
Gruß,
Franz
Ja,wie gesagt,die Zeit oder die Zahl bis zum ausfall wäre ein hinweis.
Das der Controller weiterarbeitet würde das mehr auf den CAN-Treiber verschieben oder doch auf das Programm wenn vieleicht aufgrund eines Fehlers unsinn geschrieben würde.
Wie gesagt,Wenn,wenn,wenn.
So aus dem Stehgreif nicht einfach.
Dazu das der Can-Bus Fluch und Segen zugleich ist.
Naja,schau mal in Ruhe.
Gruß
Ratber
Jo, aber jetzt geh ich mal ins Betti.
Danke für die Hilfe!
Gruß,
Franz
Aus ser Ferne kann man da wenig sagen. Neben Silicon-Bugs (also Fehler in der Hardware) können es Fehler in der Software oder durch andere Ereignisse sein, zB Transienten auf der Spannungsversorgung oder ein alpha-Teilchen zischt durch den Speicher.
Die häufigsten SW-Fehler wurden schon aufgezählt. Daneben ist ein häufiger Fehler, daß bei Interrupt-Programmierung nicht-atomar auf Variablen zugegriffen wird. zB wird auf einer 8-Bit-Architektur ein 16-Bit-Wert gelesen/geschrieben, was die Architektur von Haquse aus nicht kann. Der Zugriff muss daher auf zwei 8-Bit-Zugriffe aufgeteilt werden. Geschieht zwischen diesen Zugriffen ein Interrupt, der die Variable verändert, hat man schon 8 Bit gelesen, die anderen 8 noch nicht *autsch*.
Auffällig ist, daß es alle 3 Tage passiert. Evtl auch eine Interrupt-Bedingung, daß 2 Interrupts zusammen auftreten oder einer verloren geht oder oder oder....
Disclaimer: none. Sue me.
Moin moin,Zitat von Kaiser-F
Es gibt bei den CAN Bausteinen Fehlertolerannte Typen welche einen Selbsttest sowie Bus Test eingebaut haben. Dort werden interne Fehlerzähler hochgezählt und wenn die "überlaufen" geht der Kontroller vom Bus um den "Rest der Welt" nicht zu blockieren. Ob und wie man diese Fehlerzähler auslesen kann um zu prüfen das Fehler vorgefallen sind? Siehe auch http://de.wikipedia.org/wiki/Controller_Area_Network
Gruß Richard
Lesezeichen