Forum: Mikrocontroller und Digitale Elektronik Ordnerstruktur auf Speicherkarte anlegen und auf LCD anzeigen lassen (AVR und C)


von Achim (Gast)


Lesenswert?

Hallo,

ich habe das Forum nach meinem Problem durchsucht, aber irgendwie habe 
ich nicht die passenden Antworten gefunden. Ich weiß auch nicht, wonach 
ich gezielt suchen soll. :(

Es geht um folgendes Problem:
Ich habe an einen Mega32 ein LCD angeschlossen. Nun möchte ich ein Menü 
mit mehreren Submenüs erstellen und dieses auf dem LCD anzeigen lassen.
Da das Menü sehr groß werden könnte und ich nicht jedes Mal bei einer 
Änderungen den C-Quelltext im AVR Studio 4 ändern und übertragen möchte, 
dachte ich mir, dass ein Einsatz einer Speicherkarte komfortabel wäre.
Im Grunde möchte ich eine Ordnerstruktur auf dem PC erstellen, auf die 
Speicherkarte übertragen und mit dem Mega32 auf dem LCD-Display anzeigen 
lassen.
Da das Display ein 4x16-zeiliges ist, kann ich jeweils nur vier 
Menüpunkte gleichzeitig anzeigen lassen.
Als Eintrag im letzten Ordner ist eine Datei (ohne Endung).
Wenn diese Datei ausgewählt wird, sollen dem Mega32 Variablen übergeben 
werden, d.h. es soll dann eine Funktion aufgerufen werden, die mit den 
übergebenen Werten arbeitet.
Die Ordnerstruktur ist immer gleich aufgebaut, d.h. es gibt immer eine 
gleiche Anzahl der Ordnertiefe.
So in der Art möchte ich gerne die Struktur aufbauen:

Fotos
+ Weihnachten
++ Jahr 2010 (Funktionsübergabe)
Musik
+ Volksmugge
++ Flippers (Funktionsübergabe)
++ Amigos (Funktionsübergabe)
+ Pop
++ Lady Gaga (Funktionsübergabe)

Erklärung: Es gibt immer mehrere Obermenüs (Fotos, Musik). Zu den 
Obermenüs gibt es Untermenüs (Weihnachten, Volksmugge, Pop).
Wenn ein Untermenü angeklickt wird, werden die Dateien mit den 
Funktionsübergaben angezeigt. Wählt man nun eine Datei an, soll eine 
Funktion aufgerufen werden, welche die Parameter aus der Datei übergeben 
bekommt.
Ist sowas mit einem Mega32 zu realisieren oder ist sogar eine andere 
Ordnerstruktur vorteilhafter?

Über Ratschläge und Hinweise würde ich mich sehr freuen.

MfG,
Achim

von Jannis C. (kabelwurm)


Lesenswert?

Hallo,
Hast du schon eine fertige Schaltung mit SD-Card oder änlichem oder hast 
du nur das LCD?
Wenn du nur das LCD hast schau mal hier vorbei:
Beitrag "Universelles Evaluation-Board mit ATMega32"
Die Menüführung lässt sich sicher mit einer langen Reihe von casexxxx 
break; verwirklichen,
wobei die jeweiligen Namen auf der SD-Card gespeichert sind.

von Karl H. (kbuchegg)


Lesenswert?

Achim schrieb:
> Hallo,
>
> ich habe das Forum nach meinem Problem durchsucht, aber irgendwie habe
> ich nicht die passenden Antworten gefunden. Ich weiß auch nicht, wonach
> ich gezielt suchen soll. :(

Hast du dein Problem schon in Teilprobleme zerlegt?

Welche davon kannst du alleine bewältigen und bei welchen brauchst du 
Hilfe?
Dein komplettes Problem ist viel zu komplex als dass man hier gezielt 
irgendwelche Hilfen geben könnten. Also teil erst mal in Subprobleme auf 
und bearbeite eines nach dem anderen.

> Erklärung: Es gibt immer mehrere Obermenüs (Fotos, Musik). Zu den
> Obermenüs gibt es Untermenüs (Weihnachten, Volksmugge, Pop).
> Wenn ein Untermenü angeklickt wird, werden die Dateien mit den
> Funktionsübergaben angezeigt. Wählt man nun eine Datei an, soll eine
> Funktion aufgerufen werden, welche die Parameter aus der Datei übergeben
> bekommt.
> Ist sowas mit einem Mega32 zu realisieren

Klar ist das realisierbar.
Aber es ist kein Kindergeburtstag mehr. Hier weiß keiner, wie gut du 
programmieren kannst, von daher ist das schwer einzuschätzen.

> oder ist sogar eine andere
> Ordnerstruktur vorteilhafter?

Die Ordnerstruktur ist piepegal. Die ist variabel und wird von der 
SD-Karte eingelesen. Dein Programm muss mit jeder beliebigen variablen 
Ordnerstruktur klarkommen, solange du sie in den Speicher kriegst. D.h. 
ein wenig Erfahrung im Umgang und im Aufbau mit Datenstrukturen wären 
schon ganz gut.

von Roland (Gast)


Lesenswert?

Achim schrieb:

> So in der Art möchte ich gerne die Struktur aufbauen:
>
> Fotos
> + Weihnachten
> ++ Jahr 2010 (Funktionsübergabe)
> Musik
> + Volksmugge
> ++ Flippers (Funktionsübergabe)
> ++ Amigos (Funktionsübergabe)
> + Pop
> ++ Lady Gaga (Funktionsübergabe)

Das ist ein Baum. Den musst Du irgendwie speichern. Das 
Standardverfahren dafür sind Zeiger, über die die Elemente des Baums 
(Knoten, Blätter) verknüpft werden. Das können simple Adresszeiger sein 
(Nachteil: eventuell hoher Speicherbedarf) oder verkürzte Adresszeiger 
(reale Adresse = verkürzte Adresse x konstanter Faktor) oder gar nur ein 
Index in einem Array.

Ein brauchbarer Startpunkt: 
http://de.wikipedia.org/wiki/Baum_%28Graphentheorie%29

von Achim (Gast)


Lesenswert?

Jannis C. schrieb:
> Hast du schon eine fertige Schaltung mit SD-Card oder änlichem oder hast
> du nur das LCD?
Ich habe noch keinen SD-Card Adapter in meine Schaltung integriert.
Ich spiele mit dem Gedanken diesen hier zu erwerben:
http://www.shop.display3000.com/elektronikmodule/sd-speicherkartenplatine.html

Karl Heinz Buchegger schrieb:
> Hast du dein Problem schon in Teilprobleme zerlegt?
Ja, habe ich.
Es geht mir im ersten Schritt um die Erstellung der Ordnerstruktur und 
ob es möglich ist diese Struktur mit einem Mega32 o.ä. auszulesen.
Wie dann nun die Ordner auf dem LCD angezeigt werden, ist 
programmiertechnisch zu bewältigen.
Darum interessiert es mich vorerst, wie man am einfachsten eine 
Ordnerstruktur aufbauen kann, damit das Auslesen nicht zu kompliziert 
wird.
Es sollen nur die Menüpunkte mit dem Mega32 ausgelesen werden.
Natürlich gibt es noch Taster, die einen Ordner markieren (hoch/runter) 
und einen Taster für Enter.

Karl Heinz Buchegger schrieb:
> Hier weiß keiner, wie gut du
> programmieren kannst, von daher ist das schwer einzuschätzen.
Ich habe in PHP ein Menü-Array mit Ober- und Unterpunkten angelegt. Das 
funktioniert sehr gut, allerdings möchte ich nun kein Menü-Array für die 
SD-Karte verwenden, sondern Ordner mit einer ausführbaren Datei (also 
eine Datei mit den Funktionsübergaben) erstellen.
FAT16 würde sich da anbieten, richtig? (Windows-Rechner)

Gruß,
Achim

von Lehrmann M. (ubimbo)


Lesenswert?

Achim schrieb:
> Karl Heinz Buchegger schrieb:
>> Hast du dein Problem schon in Teilprobleme zerlegt?
> Ja, habe ich.
> Es geht mir im ersten Schritt um die Erstellung der Ordnerstruktur und
> ob es möglich ist diese Struktur mit einem Mega32 o.ä. auszulesen.
> Wie dann nun die Ordner auf dem LCD angezeigt werden, ist
> programmiertechnisch zu bewältigen.
> Darum interessiert es mich vorerst, wie man am einfachsten eine
> Ordnerstruktur aufbauen kann, damit das Auslesen nicht zu kompliziert
> wird.
> Es sollen nur die Menüpunkte mit dem Mega32 ausgelesen werden.
> Natürlich gibt es noch Taster, die einen Ordner markieren (hoch/runter)
> und einen Taster für Enter.

Wie man dir bereits versucht hat nahezulegen. Teilprobleme bilden. Schon 
das was du hier schreibst ist sehr aufwändig. Also aufteilen: 
Dateisystem, Einlesen, Indexerstellung, Menüführung, ...

Ich glaube nicht, dass du dir dessen bewusst bist, wie weitreichend 
deine Fragestellung geht. Hast du dich schonmal mit Dateisystemen 
beschäftigt? http://de.wikipedia.org/wiki/File_Allocation_Table
Hast du schonmal ein Menü programmiert?
Hast du schonmal Daten aus einer SD Karte gelesen?
...
Wenn nein, dann würde ich das schleunigst machen.

Achim schrieb:
> allerdings möchte ich nun kein Menü-Array für die
> SD-Karte verwenden, sondern Ordner mit einer ausführbaren Datei (also
> eine Datei mit den Funktionsübergaben) erstellen.

Ausführbare Dateien gibt es auf Mikrocontroller nicht. Du kannst in 
einer Datei Werte ablegen, die dein Mikrocontroller nach einem festen 
Muster auslesen kann. Wenn man will so will, ist das dann auch eine 
Datei. Die wirst du allerdings unter Windows mit einem Hex-Editor 
anlegen müssen.

Achim schrieb:
> FAT16 würde sich da anbieten, richtig?

Gute Idee.

von Achim (Gast)


Lesenswert?

Lehrmann Michael schrieb:
> Wie man dir bereits versucht hat nahezulegen. Teilprobleme bilden. Schon
> das was du hier schreibst ist sehr aufwändig. Also aufteilen:
> Dateisystem, Einlesen, Indexerstellung, Menüführung, ...
Das habe ich ja erstmal auf die Erstellung einer geeigneten 
Ordnerstruktur beschränkt. :)
Aber es stimmt, ich bin deswegen noch einen Schritt weiter nach hinten 
gegangen und begutachtete die Leistungsaufnahme der SD-Karten.
Schlussfolgerung: In meinem System kann ich keinesfalls eine SD-Karte 
einsetzen, da diese zu viel Strom zieht.
Ich habe für meine gesamte mobile Schaltung 90mA zur Verfügung.
Dann muss ich wohl auf ein externes EEPROM ausweichen, Mist.

Lehrmann Michael schrieb:
> Ausführbare Dateien gibt es auf Mikrocontroller nicht. Du kannst in
> einer Datei Werte ablegen, die dein Mikrocontroller nach einem festen
> Muster auslesen kann. Wenn man will so will, ist das dann auch eine
> Datei.
Genau so meinte ich das auch!

Danke,
Achim

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.