Forum: Mikrocontroller und Digitale Elektronik mehrere Parameter nachträglich einstellen


von Joachim (Gast)


Lesenswert?

Hallo,

ich wollte mal fragen, wie man das realisiert, wenn man nachträglich 
bestimmte Parameter im Programmcode verändern kann. Dies sollte über die 
RS232 Schnittstelle geschehen.

Als Beispiel wäre hier ein temperaturgesteuerter Motor, für den die 
Werte
"untere Schwelle" (nicht drehen)
"obere Schwelle" (maximale Drehzahl)
"Sensibilität" (lin Beschleunigung)

Um einen Wert zu verändern, würde ich einfach diesen über das UART 
Register zum MC senden. Dieser Wert wird dann ins EEPROM abgespeichert, 
ins Ram geladen und verarbeitet.
Das Problem ist nur, dass ich das so nicht bei mehreren Parametern 
hinkriege. (vgl. Bsp.)

Eine andere Möglichkeit, die ich noch nicht ausprobiert habe, wäre die 
Parameter der Reihenfolge nach zu übermitteln und jeweils, wenn einer 
vom UART empfangen wurde, einen Index hochzählen lasse, welcher dann 
angibt, wo die Werte hingeschrieben werden sollen.

Ich benutze übrigens den MEGA8.

von Severino (Gast)


Lesenswert?

Gute Idee, probier doch mal die andere Möglichkeit aus.

Und welches Bsp. sollen wir vergleichen?

Wenn's mit einem klappt und mit mehreren nicht, ev. Timing-Problem beim 
Speichern ins EEPROM?

von G. Nicht (Gast)


Lesenswert?

> wenn man nachträglich bestimmte Parameter im Programmcode verändern kann

Falls Du AVRs meinst, da kann man den Programmcode nicht so ohne 
weiteres ändern. Bei anderen µPs ist soetwas ebenfalls mehr als heikel.

Am einfachsten schickst Du eine Zeichenkette (printf(.....)), wo die 
Parameter nacheinander durch Kommata getrennt sind und zerpflückst den 
String im µP wieder.
Soll es anspruchsvoller werden, kann man seine Daten auch z.B. in einen 
String mit Intel-Hex-Format packen. Die Prüfsumme macht die Sache 
sicherer, die Speicheradresse zeigt gleich das richtige Ziel an.

von Joachim (Gast)


Lesenswert?

>>Und welches Bsp. sollen wir vergleichen?


Ich wollte nochmal auf das Beispiel der 3 Parameter bei der 
Motorsteuerung verweisen.

>>Gute Idee, probier doch mal die andere Möglichkeit aus.

Das Problem hierbei ist nur, dass immer alle 3 Werte eingegeben werden 
müssen. Ich könnte natürlich jeweils vom UART zu PC einen Abfragestring 
senden, damit man weis, welche Werte man eingeben soll.

Vorerst probiere ich das mit eine Terminalprogramm. Später will ich 
allerdings die Parameter über ein Visual C Programm übergeben. Ich habe 
fertige Produkte gesehen, wo man konfortabel Werte eingeben konnte, die 
dann an die Schaltung gesendet wurden. Ich verstehe nur nicht wie diese 
vielen Werte richtig zugeordnet werden konnten, da die Daten auch über 
RS232 übermittelt wurden.

von Werbungverschmäher (Gast)


Lesenswert?

Wie wär's mit einer Art Protokoll?
Du schickst den Daten dann immer einen Index mit.

MfG

von Severino (Gast)


Lesenswert?

Ach so, das Beispiel. Sorry.

Ja, Du musst entweder eine Kombination aus Parameter und Wert senden, 
also z.B.:

"untere Schwelle" (nicht drehen):
USnnn
"obere Schwelle" (maximale Drehzahl)
OSnnn
"Sensibilität" (lin Beschleunigung)
SEnnn

wobei US, OS, SE den Parameter kennzeichnen und nnn den zu setzenden 
Wert.

Oder Du liest alle Parameter über die Schnittstelle aus, zeigst sie auf 
Wunsch auch in Deinem Programm an und sendest nach erfolgter Änderung 
einzelner oder aller Parameter immer alle Parameter an den Controller.

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

Definiere ein Zeichen (Byte), welches in den Parametern nicht vorkommen 
kann (zum Beispiel 0 oder 255). Dies nimmst Du als Startbyte. Daran 
hängst Du Deine 3 Parameter. Eventuell schickst Du noch eine Prüfsumme 
hinterher. Der µC empfängt alle 4 Bytes + Prüfsumme, schreibt sie 
zunächst in einen RAM-Puffer und weiß anhand des Startbytes, welches 
Datenbyte letztlich wohin muß. Dann speicherst Du nacheinander alle 
Bytes in die passenden EEPROM-Zellen, wobei dieser Vorgang pro Byte etwa 
4ms Zeit braucht (gibt es ein Flag für, das abgefragt und kontrolliert 
werden muß, bevor ein neues Byte geschrieben werden kann).

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.