Hallo ..
gibt es eine möglichkeit die lookupstr funktion mit eeprom daten zu nutzen ?
Gruß Daniel
Hallo ..
gibt es eine möglichkeit die lookupstr funktion mit eeprom daten zu nutzen ?
Gruß Daniel
Lookup /down() ist speziell für Flash gemacht.
Im SRAM und ERAM gibt's ja eigentlich keine (Bascom) Möglichkeit, solche String-Ketten zu erzeugen.
Aber es gibt einige Varianten, so ein Problem zu lösen.
Was konkret soll's denn werden ?
mfg robert
Wer glaubt zu wissen, muß wissen, er glaubt.
also ich wollte um flash zu sparen ,menue punkte im eeprom speichern
mit der $eeprom und data anweisung kann ich ja string ketten als .eep
in den eeprom schreiben
um dann die entsprechenden untermenuepunkte zu suchen hät ich dann lookupstr genutzt
also in etwa
data "u00 ",hauptmenu1","u01","hauptmenue2","u02","hauptmenu 3","u03"
data "u01 ", "untermenue1.1","untermenue1.2"
data "u02 ","untermenue2.1","u17","untermenue3.1","u18"
dabei ist zb u01 in der ersten zeile die sprungadresse wo er von dort aus hin soll da adiere ich n leerzeichen und Suche nach nem string der dann
also "u01 " ist und bin dann im entsprechenden untermenue
dieUxx am anfang ist also die startadresse für eine menueebene die zahl dahinter der zeiger zu nächsten unterebene
ich hoffe du verstehst was ich meine gruß daniel
Der Lookupstr() hantelt sich über die String-terminatoren (&H00) von einem String zum nächsten und zählt dabei mit. Dabei geht's von 0 weg (index für den ersten string)
Du mußt wohl mit "READEEPROM var, adresse" arbeiten und dir so eine Lookupstr() funktion selber machen.
Frage: Normalerweise hat man ja wenig SRAM, noch weniger ERAM aber massig FLash. Bist du sicher, du willst die strings im ERAM ablegen ?
mfg robert
Wer glaubt zu wissen, muß wissen, er glaubt.
naja ich hab nen tiny und ne menge code da ist jeder platz zu nutzen
Hallo,
da gebe ich Robert völlig recht. Zu solchen Kunstgriffen greife ich nur bei extrem großen Projekten mit viel, viel Text auf 40x4 Displays. Dann verwende ich aber auch nicht das interne EEprom des AVR, sondern ein externes 64k I2C-EEprom, das gesondert mit den Texten beschrieben wird. Dabei überlege ich mir vorher eine für das Projekt geeignete "Formatierung" des EEprom und rufe die Texte dann mit einer Sub ab, der nur ein Pointer auf den gewünschten Text/Bildschirminhalt übergeben wird.
Wenn ich das richtig verstanden habe, möchtest Du vor allem ein Menue haben, das den jeweiligen Menuepunkt anzeigt und auf Knofdruck in die entsprechende Routine verzweigt. Dafür füge ich mal ein Beispiel ein, das mit 3 Tastern auskommt und sich natürlich beliebig modifizieren lässt:
GrüßeCode:'Gerüst für Atmega 8 mit Menue - HR - AUGUST 2005 $regfile = "m8def.dat" $crystal = 7372800 $baud = 9600 Enable Interrupts 'Interrupts erlauben Config Adc = Single , Prescaler = Auto Config Pinc.0 = Input 'Für analog_key Keyboard Alias Pinc.0 'Aliasname Config Pinb.0 = 1 'Ausgang Beep Alias Pinb.0 Declare Function Analog_key() As Byte Dim Taste As Byte Dim Menue_current As Byte '------------------------------------------------------------------------------- Sound Beep , 400 , 450 'Bin wach -) Cursor Off Lcd " Menue Test" Wait 3 '------------------------------------------------------------------------------- Cls Menue: Menue_current = 1 Menue_1: Taste = Analog_key() Waitms 100 If Taste = 32 Then Menue_current = Menue_current + 1 End If If Taste = 33 Then Menue_current = Menue_current - 1 End If If Menue_current > 6 Then Menue_current = 1 If Menue_current < 1 Then Menue_current = 6 If Taste = 10 Then Goto Execute '------------------------------------------------------------------------------- Select Case Menue_current 'aktuelle Auswahl anzeigen Case 1 Locate 1 , 1 Lcd " Fall 1 " Case 2 Locate 1 , 1 Lcd " Fall 2 " Case 3 Locate 1 , 1 Lcd " Fall 3 " Case 4 Locate 1 , 1 Lcd " Fall 4 " Case 5 Locate 1 , 1 Lcd " Fall 5 " Case 6 Locate 1 , 1 Lcd " Fall 6 " End Select Taste = 255 Goto Menue_1 '------------------------------------------------------------------------------- Execute: 'aktuellen Menuepunkt ausführen Select Case Menue_current Case 1 Cls 'Call 1 Cls Case 2 Cls 'Call 2 Cls Case 3 Cls 'Call 3 Cls Case 4 Cls 'Call 4 Cls Case 5 Cls 'Call 5 Cls Case 6 Cls 'Call 6 Cls End Select Goto Menue_1 '------------------------------------------------------------------------------- End 'Hauptprogrammschleife Ende '------------------------------------------------------------------------------ 'Diese Unterfunktion fragt die Tastatur am analogen Port ab. 'Die Werte müssten ggf. natürlich angepasst werden und entsprechen hier 'meinem Schaltungsvorschlag. Function Analog_key() As Byte Local Ws As Word Analog_key = 255 Start Adc Ws = Getadc(0) If Ws < 900 Then Select Case Ws Case 0 To 100 Analog_key = 32 'Entspricht UP Case 400 To 600 Analog_key = 33 'Entspricht DOWN Case 650 To 750 Analog_key = 10 'Entspricht ENTER End Select Sound Beep , 400 , 450 'Quittungspiepser End If Waitms 100 End Function '------------------------------------------------------------------------------- ' ' '.... Hier folgen die durch das Menue aufgerufenen Subroutinen bzw. Funktionen
Henrik
Ach so, sag das doch gleich. Die Tinys sind aber (bis auf den Tiny45 mit Einschränkungen) so gut wie überhaupt nicht für solche Scherze geeignet.Zitat von molleonair
Henrik
hallo henrik solch einen code hab ich schon getestet und für viel zu uneffizient befunden
ich hab ein 4 zeilen display und wenn ich das menue durchblätter
zB die menuepunkte
Hauptmenue
Setup
--Tests--
Akkuspannung
Hauptmenue
Tests
--Akkuspannung--
Senoren
Hauptmenue
Akkuspannung
--Sensoren--
EIN/AUS
...
das ist 4 zeilen menue nach unten geblättert
wenn ich in einen eintrag nach rechts blätter komm ich ins entsprechende untermenue (wie bei den alten nokia handys)
dann muß ich für jeden eintrag den vorhergehenden und folgenden und das obermenue dazu anzeigen das heißt ich geb für jeden menuepunkt
4 zeilen strings im code ein die ich ausgebe obwohl ich nur jeden string einmal festlegen muß
ich wollte halt ein weg finden mit wenig code ein komplexes menue zu erzeugen
dazu erschien mir die srungmarkensache erfolgversprechend
ich werde jetzt versuchen mit readeeprom zu lesen und in den sprungmarken die entsprechende eepromadresse zu hinterlassen
Du kannst etwas sparen, indem du die Strings in teile teilst und sozusagen durch token ansprichst. Bascom hat die nette Eigenschaft, identische String nur einmal anzulegen, also wenn du das wort "menue" extra hast, kommt es nur einmal im Flash vor.
LCD "Haupt"; "menue"
LCD "Unter"; "menue"
speichert er "menue" nur einmal
Was du dir bei Strings im ERAM ersparst, pulverst du in den Code für den Privat-Lookup.
Ein Kampf ist es aber nunmal
ein kleines Gulasch wird nicht größer (sagt man bei uns)
mfg robert
Wer glaubt zu wissen, muß wissen, er glaubt.
naja da kannst du schon recht haben...
ich hoffe halt eine menuestruktur zu entwickeln die dann beliebig ausbaubar
ist ,einfach halt noch n menueeintrag am ende der datazeile anzuhängen und das wars .
wäre vieleicht für andere auch interesant,da einfach zubearbeiten mit wenig getippe ,am besten ne menue.lib bauen *lol
aber da bin ich mit meinen anfängerwissen noch weit entfernt
mal schauen was bei rumkommt aber danke für den tip mit dem stringteilen
Lesezeichen