Forum: Mikrocontroller und Digitale Elektronik Atmel AVR Menüsteuerung..Hilfe!!!


von Thomas B. (buzze)


Lesenswert?

Hallo zusammen,

nachdem ich begeistert im Mikrocontroller Forum gestöbert habe, hab ich
mich nun auch endlich mal angemeldet.
Seit einiger Zeit versuche ich mich "so viel die Zeit zulässt"
mit den Controllern der Atmel Familie auseinanderzusetzen.
Bin gelernter Kommunikationselektroniker, und hab somit zumindest das
Basiswissen und die Grundlagen...vieleicht kann man was draus machen...


...aber da ich neuling auf dem Gebiet uC bin, bitte ich hier und da um
viel Verständnis für blöde Fragen.. ;-)
Aller Anfang ist schwer..

An Equipment benutze ich das STK500, ein selbst zusammengestricktes
2 Zeilen / 16 Zeichen LCD für Ansteuerung im 4 Bit Mode...
Programmieren möchte ich bevorzugt(für den Anfang auschließlich) in
Assembler.
Oszi, Multimeter, Netzteil, Counter, Funktionsgenerator ist alles
vorhanden.

Nun zum Problem:

Ich möchte mit 5 Tasten (links, rechts, hoch, runter, Enter)
eine Menüsteuerung realisieren. Dazu möchte ich in verschiedene
Untermenüs springen können (hoch, runter, enter), und mit den links,
rechts Tasten Werte verändern... bzw. Unterprogramme starten.
Leider bin ich bisher am Lösungsweg kläglich gescheitert..!!

Ich habe solche Menüführungen bereits oft gesehen, allerdings habe ich
vergebens nach Tutorials/Source Codes gesucht, wie man das realisieren
kann...

Kann mir jemand von Euch weiterHELFEN??

Wie gesagt erstmal Hallo, und schonmal vielen Dank für Eure
Antworten...

Mfg Buzze

von Thomas P. (pototschnig)


Lesenswert?

Man kann sowas wie Baumstrukturen - zB für eine Menüstruktur - im Flash
ablegen, wenn man das so macht:

menu_root:
  .dw 2*menu_child1
  .dw 2*menu_child2
  .dw 2*menu_child3
  .dw 0

menu_child1:
  .dw 2*menu_childchild11
  .dw 0,0

menu_child2:
  .dw 2*menu_childchild21
  .dw 2*menu_childchild22
  .dw 0,0


usw ...

Per Assemblerprogramm können solche Strukturen ausgelesen werden
(kuckst du nach LPM im Befehlssatz) und damit lassen sich recht gut
Menünavigationen realisieren. Du kannst in der Struktur auch noch
zusätzliche Informationen wie Ausgabestring angeben, die du anzeigen
lassen willst. Zusätzlich kannst du dann auch noch die Adressen der
Funktionen angeben, die du dann per ICALL oder IJMP anspringen willst.

von Hannes L. (hannes)


Lesenswert?

Falls dich nicht die "ATMELS" (AT89xxx, AT91xxx, AT-weißderGeier)
interessieren, sondern nur die AVRs, und von denen vorrangig die
ATMegas, dann könntest du dich hier mal umschaun:
http://www.hanneslux.de/avr/stopuhr/index.html
http://www.hanneslux.de/avr/zuenduhr/index.html
Da werden Menüs mit interaktiver Bedienung über 4 Tasten in Assembler
auf ATMega8 und ATMega8535 und Textdisplay 8x24 Zeichen realisiert.
Dort gibt es zwar kein Tutorial, aber kommentierte Quelltexte.

...

von Thomas P. (pototschnig)


Lesenswert?

Oh ... richtig ... da stand ja garnichts von AVR-Controllern. Das hab
ich wohl nur angenommen, weil "Controllern der Atmel Familie" sich so
nach AVR anhört :-)

von Hannes L. (hannes)


Lesenswert?

> da stand ja garnichts von AVR-Controllern.

grins

Da stand aber was vom STK500, das mag aber keine ATMELs, sondern nur
AVRs.

Aber wenn man etwas Konkretes meint, dann sollte man das auch beim
Namen nennen. Alles Andere mag zwar cool klingen, führt aber zu
Missverständnissen. Deshalb meine etwas TROLLige Bemerkung in meinem
obigen Beitrag in diesem Thread dieses mikroconTROLLerforums...

Bit- & Bytebruch...
...HanneS...

(Duck & wech? - ist wohl besser...)

von Thomas B. (buzze)


Lesenswert?

Sorry für die späte Antwort, und danke für die Tips...
War leider dienstlich unterwegs, was meinen momentanen zeitlichen
spiegel wiedergibt :-( Also wie immer leider zu wenig Zeit...

Natürlich meinte ich die AVR`s

@Hannes: Danke für die LINKS, die Adressen waren mir in diesem
         Forum schon bekannt, aber...
         die Bedeutung "Bahnhof" ist dir denke ich ein begriff.. :-)
         und mit dem Zusatz "Neuling..." wird alles
         deutlicher. :-(

Was mich an Deinem (muß erwähnt werden) sehr gut kommentierten
Quelltext etwas stört, ist das restliche Programm.
Ich habe in solchen programmen irgendwie noch nicht die übersicht.

Zunächst wollte ich einfach mal damit anfangen, eine Menüstruktur mit 4
Tasten durchwandern zu können. Verzweigungen in UP kämen dann später,
Step by Step.. Also wenn Eure Zeit und Geduld das zulässt....
Hilfe!!

Gruß Buzze

("...Es ist noch kein Meister vom Himel gefallen...")

von Karl heinz B. (kbucheg)


Lesenswert?

Ganz ehrlich.
Für sowas würde ich C nehmen. Überhaupt wenn du noch Neuling
bist. Bei 'komplexeren' Datenstrukturen verliert man
in Assembler schnell mal die Übersicht. Wenn du aber
bei Assembler bleiben willst (kein Einwand dagegen,
ich bin der Meinung jeder sollte mal Assembler programmiert
haben, damit er eine Vorstellung davon kriegt was in der
Maschine abgeht), dann ist ein Menüsystem für den Anfang
schon etwas heftig.
Was hast du den bisher in Assembler gemacht? Wovon können
wir als Basis ausgehen?

von Oliver (Gast)


Lesenswert?

Such mal nach dem Sourcecode des Atmel Butterfly Systems. Da kann man
auch einiges abschauen. Es gibt im Netz auch eine Portierung für den
gcc, leider habe ich den link gerade nicht griffbereit.

Oliver

von Hannes L. (hannes)


Lesenswert?

@Buzze:
Ein Menü (auf einem Rechnersystem) ist ja nun ein Dialog zwischen
System und Benutzer.

Das Programm hat verschiedene Aufgaben zu erledigen:

- Abfrage der Tasten
  Dazu gehört eine wirksame Entprellung (wird im Timer-Interrupt
  erledigt) und die Auswertung erneut aufgetretener Tastendrücke
  (wird in Mainloop und der Menüpunktermittlung realisiert).

- Ausgabe eines Textes in Abhängigkeit vom aktuellen Menüpunkt.
  Dazu habe ich eine Ausgaberoutine, die aus einer Liste von Texten
  im Flash den gewünschten Text (über Indexnummer) auswählt und am
  Display ausgibt. Diese Routine wird über das Macro "printt" oder
  "printts" aufgerufen, und befindet sich in der Routinensammlung
  für formatierte Ausgabe "LCDprint.inc". Da ein Macro aus mehreren
  Befehlen besteht, setzt man es sinvoller Weise recht sparsam ein.
  Deshalb gibt nicht jede Menüpunktbehandlung ihren Menütext selbst
  aus, sondern die Routine "tastaus", die nach jeder Menüpunkt-
  Behandlung aufgerufen wird und auch die Tasstenflags (der
  Entprellung) löscht. Dies spart Redundanz im Code.

- Reaktion auf die Tasten in Abhängigkeit vom aktuellen Menüpunkt.
  Dies sind die vielen kleinen Routinen, die über "ijmp" und der
  Sprungtabelle aufgerufen werden und in denen z.B. Parameter
  verändert werden oder Handlungen (z.B. Speichern von Daten)
  ausgelöst werden. Diese Routinen sind in meinen Beispielen relativ
  klein, weil Displayausgabe und Tastenflags löschen ausgelagert
  wurde.

Eine Analyse der Programme sollte also auch ohne "Fahrkarte" möglich
sein, kostet allerdings etwas Zeit und Aufmerksamkeit.

Ich wollte anfangs auch mit 5 Tasten arbeiten, stellte dann aber fest,
dass 4 Tasten reichen.

...

von Wegstabenverbuchsler (Gast)


Lesenswert?

zum Ursprungsposting:

Display, Tasten, Menue etc. ist doch auch alles im Butterfly drin ....
vielleicht mal da gucken gehen in den Sourcen ....

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.