www.mikrocontroller.net

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


Autor: Joachim (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Severino (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: G. Nicht (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Joachim (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Werbungverschmäher (Gast)
Datum:

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

MfG

Autor: Severino (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Knut Ballhause (Firma: TravelRec.) (travelrec) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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).

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.