Forum: Mikrocontroller und Digitale Elektronik I²C Problem bei LPC


von Daniel K. (danielk)


Lesenswert?

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

von Ralf (Gast)


Lesenswert?

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

von danielk (Gast)


Lesenswert?

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ß

von ARM-Fan (Gast)


Lesenswert?

>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?

von ARM-Fan (Gast)


Lesenswert?

>weiß nicht ob ich das in der Programmiersoftware

in WELCHER denn?

Laßt dir doch nicht alles aus der Nase ziehen. ;-)

von danielk (Gast)


Lesenswert?

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*

von Daniel S. (dschwab)


Lesenswert?

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

von (prx) A. K. (prx)


Lesenswert?

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.

von danielk (Gast)


Lesenswert?

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?

von Daniel S. (dschwab)


Lesenswert?

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

von danielk (Gast)


Lesenswert?

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

von Daniel S. (dschwab)


Lesenswert?

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

von danielk (Gast)


Lesenswert?

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

von danielk (Gast)


Lesenswert?

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ß

von ARM-Fan (Gast)


Lesenswert?

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