Hallo Fachleute, bin relativ "neu" in dem Gebiet Mikrocontroller. Arbeite mich gerade erst ein. Habe folgendes Problem. Hab ein LCD Display an ein Evolution Board eines LPC angeschlossen das über i²C kommuniziert. Das geschriebene Programm läuft einwandfrei. Wird während des Programmablaufs die Stromzufuhr oder dergleichen unterbrochen und danach sofort wieder angeschlossen müsste es doch eigenlich wieder "normal" weiterlaufen,oder? Wie und wo sage ich dem Programm das es das auch macht? Hat das irgendwas mit der Startadresse zu tun? Würde mich freuen wenn mir einer zu diesem Problam helfen könnte. Grüße
Hi, > Wird während des Programmablaufs die Stromzufuhr oder dergleichen > unterbrochen und danach sofort wieder angeschlossen müsste es doch > eigenlich wieder "normal" weiterlaufen,oder? Wenn die Hardware richtig designt ist, dann sollte das Programm immer von der Startadresse loslaufen. Alles andere wäre falsch. Das heisst, der Controller muss beim Einschalten einen Reset bekommen, der ihn zwingt, von ganz vorne loszulegen (alles andere führt zu unvorhergesehenen Ergebnissen). Alles andere wäre falsch und kann zu fatalen Ergebnissen führen, z.B. bei Maschinen. Wenn du es so haben willst, dass sich der Controller "merkt", wo er zuletzt war, dann geht das schon. Der Controller bekommt nach wie vor seinen Reset, aber du fragst ganz am Anfang einen Wert aus dem EEPROM oder dem RAM aus. Dieser Wert entspricht dem letzten Zustand. Das stellt aber zusätzliche Ansprüche an die Hardware, denn du musst erkennen können, dass die Spannung absäuft, und schnell genug den aktuellen Zustand speichern. Dazu brauchst du eine entsprechende Spannungsversorgung und je nachdem, wo du den Zustand speichern willst, eine zusätzliche Batterie. Es gibt ICs zur Spannungsüberwachung, die erkennen können, dass die Spannung absäuft, und für den Controller einen Interrupt generieren, so dass dieser noch wichtige Daten speichern kann, bevor die Spannung unters Minimum für den Controller sinkt. Sag doch einfach mal, was genau das Problem ist, dann kann dir auch ein bisschen besser geholfen werden. Ralf
hi, weiß nicht ob ich das in der Programmiersoftware(irgendwelche voreinstellungen), oder dem Programm selber sagen muss das er wieder richtig weiterarbeitet. ich glaub das liegt an der startadresse. wie mach ich das denn das er immer von dir startadresse startet. wenn ich das programm nach dem ausstecken neu compiliere funktioniert alles. nur es sollte auch gehen wenn ich es nach dem austecken nur noch einstecke muss ohne zu compilieren. das ist sicher nicht schwer, komme aber garnicht drauf. gruß
>Hab ein LCD Display an ein Evolution Board eines LPC angeschlossen >das über i²C kommuniziert. Wovon redest du eigentlich? LPC kann ein 8051er oder auch ein ARM sein. Falls es ein ARM ist: Lädst du den Code evtl. ins RAM, so dass er nach dem Ausschalten weg ist?
>weiß nicht ob ich das in der Programmiersoftware
in WELCHER denn?
Laßt dir doch nicht alles aus der Nase ziehen. ;-)
hi, das ist ein ARM7 controller. Ja soviel ich weiß geht der code dann ins RAM.Ich müsste nur irgendwie nach einem "Neustart" auf die Startadresse zugreifen können. Nach einem Neustart steht das Programm blind in der Landschaft.Wie würdet ihr das machen unabhängig von meinem "Projekt"? mach alles mit WinIDEA. Jeder fängt mal klein an*g*
Hi Ich vermute mal, dass er in seiner Entwicklungsumgebung es so eingestellt hat, dass der Programmcode aus dem RAM gestartet wird. Das würde auch das verhalten, das er beschreibt erklären. So sollte es sicher auch eine Möglichkeit geben, zwischen ROM/Flash Code und RAM Code umzuschalten bzw. die Startadresse für den Linker zu ändern. Saludos, Daniel
danielk wrote: > das ist ein ARM7 controller. Ja soviel ich weiß geht der code dann ins > RAM. Kann man so machen, vor allem beim Debugging, aber normalerweise läuft das Programm direkt aus dem ROM.
hi, wie könnte ich dann im Programm vorgehen?Welche Voreinstellungen müsste man bei der I²C Schnittstelle vornehmen? Auf dem LCD-Display muss bei mir immer "Betriebsbereit" erscheinen wenn das Programm neu compiliert wird.Die Meldung "Betriebsbereit" tut ja nichts zur Sache, diese eingestelle Meldung müsste halt bei jedem Start auf dem Display erscheinen. Aber wie ich das dem uC beibringe ist mir überhaupt nicht schlüssig. Hätte das Problem mehr mit der I²C Schnittstelle oder dem RAM zu tun?
Hi Wenn dein Programm läuft, ist am eigentlichen Programm alles korrekt und du musst ihm nichts mehr beibringen. Jetzt musst du noch lernen, wie deine Entwicklungsumgebung funktioniert, damit du dem Compiler beibringen kannst, für welchen Speicherbereich er es Compilieren muss. Bis jetzt wird dein Code nur für das RAM compiliert. Damit es nach einem Spannungsunterbruch wieder läuft, muss dein Programm im Flash stehen und das stellt man in der Entwicklungsumgebung ein und nicht im Mikrocontroller. Saludos Daniel
jetzt kommt langsam bisschen licht ins dunkle*g* könntest du mir evtl sagen wo man im WinIDEA das umstellt? danke schonmal für alle sehr hilfreichen tipps
Hi Bei WinIDEA weiss ich nicht, wo man es einstellen muss. Evtl. hilft dir dies weiter: http://arm.hsz-t.ch wenn du die IDE wechseln willst. bye, Daniel
ja danke,werd mal reinschaun. muss jetzt erstmal schaun, wie ich meine Daten wieder aus dem Flash bekomme nach einer Spgunterbrechung. Ist sicherlich nicht schwer wenn man sich auskennt. Grüße
hi, bins nochmal. Die Einstellung in WinIDEA bekomme ich igendwie nicht hin. Weiß jemand wo man in WinIDEA einstellt das deas Programm nach einer Unterbrechung im Flash steht und nicht nur im RAM? gruß
Ich kenne WinIDEA nur von einer Vorführung eines Vertreters. Kann also nix konkretes beitragen. Aber da ich davon ausgehe, dass du / deine Firma das gekauft hat, mußt du doch ein Manual dazu haben. Schau doch da mal rein. Ansonsten: Kann man vielleicht zwischen Debug/Release umschalten? Vielleicht ist das so konfiguriert, dass im Release-Modus in den Flash programmiert wird.
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.