Archiv verlassen und diese Seite im Standarddesign anzeigen : Edit: Wie Wert in EEPROM speichern?
Hallo zusammen,
ist es mit Bascom möglich, eine einzelne Zeile eines Displays zu löschen? Oder kann immer nur das ganze Display mit Cls gelöscht werden?
MfG,
Maxxtro
Edit: Titel geändert!
mat-sche
17.02.2009, 20:56
Hallo Maxxtro,
zu erst wäre schön zu wissen was Du für ein LCD hast: alphanumerisch oder Grafik?
Aber im Grunde genommen kannst Du keine einzelne Zeile löschen. Du musst diese mit Lehrzeichen überschreiben oder du sendest einfach einen neuen Text, der den alten überschreibt.
Lehrzeichen:
locate 1 , 2
lcd "-hier die Anzahl der Lehrzeichen-" => einfach mit der Tabtaste die Anzahl
Neuer Text:
Locate 1 , 2
lcd "____123___"
Hoffe geholfen zu haben!
Gruß MAT
Hab kein Grafikdisplay....
Naja, danke! Du hast mir sehr geholfen! Einfach überschreiben - wäre ja so einfach gewesen #-o
Trotzdem vielen Danke für Deine schnelle Hilfe!
MfG,
Maxxtro
So, eine neue Frage :-s
Ich messe mit meinem Mega32 einige Daten und schreibe diese in eine normale Variable um sie am Display ausgeben zu können.
Nun möchte ich die jeweiligen Höchstwerte dauerhaft speichern können - nur wie?
>Dim X As Eram Byte
>X = ....
Habe ich schon verstanden, jedoch ist das wohl nur die halbe Wahrheit, da ich in meinem Programm vorher wohl mindestens die Anweisungen "$eeprom" und "$data" brauche.
Ist das alles oder muss ich z.B. vor jdem schreiben noch eine spezielle Anweisung geben?
MfG,
Maxxtro
$eeprom und $data brauchst du nur, wenn dir die Werte schon vorher bekannt sind und die schon beim Programmieren drin liegen sollen.
Ansonsten reicht die Zuweisung an ne ERAM-Variable.
Und ich glaub, dass man Werte nur kopieren kann, also nicht direkt zuweisen.
D.h. ist X eine ERAM-Variable, Y ne normale im RAM, dürfte X = a + b nicht gehen. Zuerst Y = a + b, danach X = Y müsste dann klappen.
Ah gut, vielen Danke auch Dir!
MfG,
Maxxtro
hab mir nun gedacht dass ich mit folgendem kurzen Code
Dim H As Eram Byte
If T > H Then
H = T
End If
Ganz einfach einen evtl. Höchstwert in den EEPROM schreibe - denkste! Da meckert Bascom dann "Numeric parameter expected [H]"
Wie kann ich dieses Problem nun umgehen? #
MfG
Versuchs mal damit:
Dim A as Byte
Dim B as Byte
If A > B then Writeeeprom B
Oder alternativ:
Dim A as Byte
Dim B as Byte
Dim Flag as Bit
If A > B then Set Flag
If Flag = 1 then
Writeeeprom B
Reset Flag
End If
Grüße
Thomas
;)
Also, sieht bei mir jetzt so aus:
$eeprom
Dim H As Byte
If T > H Then
H = T
Writeeeprom H
End If
Locate 4 , 1
Lcd H
Wobei "H" der Höchstwert und "T" die aktuelle Temperatur sind.
Allerdings speichert der Mega32 die Werte so nicht, nach jedem neuen Einschalten ist "H" = 0...
Sorry, war wohl mein Fehler.
Dim A as Byte
Dim B as Byte
Dim Flag as Bit
If A > B then Set Flag
If Flag = 1 then
B = A
Writeeeprom B
Reset Flag
End If
Funktioniert leider nicht! Brauche ich vll. sonst noch etwaige besondere Anweisung für Bascom damit der Wert gespeichert wird?
Funktioniert leider nicht! Brauche ich vll. sonst noch etwaige besondere Anweisung für Bascom damit der Wert gespeichert wird?
Passiert gar nichts? Oder kommt beim Kompilieren eine Fehlermeldung?
Grüße
Thomas
Neinein, das Programm lässt sich schon kompilieren! Es wird auch der Höchstwert angezeigt, aber nach dem ausschalten ist wieder alles weg :-k
Dim Eram_bootzaehler As Eram Long ' Adr 02,03,04,05
Dim Ram_bootzaehler As Long
/---------------------------------------------------
Ram_bootzaehler = Eram_bootzaehler
Incr Ram_bootzaehler
Eram_bootzaehler = Ram_bootzaehler
/--------------------------------------------------
Das geht sicher .
Bei jedem Booten wird der Zaehler um eins hochgezählt.
Gento
Und das hat WAS mit meiner Aufgabe, eine Variable zu speichern, zu tun? 8-[
Soll ich den Teil einfach oben mit ins Programm kopieren? Was bewirkt das ganze?
@Maxxtro
Er meint warscheinlich du sollst mal diesen Code versuchen und sehen obs klappt. Vielleicht ist ja auch das EEPROM defekt.
Gruß
Thomas
Funktioniert! Zählt bei jedem einschalten eins hoch!
Hmm. Zeig am Besten mal deinen kompletten nichtfunktionierenden Code.
Gruß
Thomas
$regfile = "m32def.dat"
$crystal = 16000000
' LCD konfigurieren Port auf Ausgabe setzten und Pin's entsprechend zuordnen
Config Lcdpin = Pin , Db4 = Portc.2 , Db5 = Portc.3 , Db6 = Portc.4 , Db7 = Portc.5 , E = Portc.1 , Rs = Portc.0
Config Lcd = 16 * 4
Config Lcdbus = 4
Config Portd.0 = Output
Portd.0 = 1
Deflcdchar 1 , 8 , 20 , 8 , 32 , 32 , 32 , 32 , 32
Cursor Off
' Pin für 1wire Schnittstelle festlegen, Schnittstelle wird von BASCOM durch Software realisiert
Config 1wire = Portd.7
Dim Dsid(24) As Byte
' Die Adresse meines DS1820 die ich vorher ermittelt habe
Dsid(1) = &H10 : Dsid(2) = &H99 : Dsid(3) = &H4E : Dsid(4) = &H71 : Dsid(5) = &H01 : Dsid(6) = &H08 : Dsid(7) = &H00 : Dsid(8) = &H6D
'^= 1
Dsid(9) = &H10 : Dsid(10) = &H3D : Dsid(11) = &H48 : Dsid(12) = &H71 : Dsid(13) = &H01 : Dsid(14) = &H08 : Dsid(15) = &H00 : Dsid(16) = &H71
'^= 2
Dsid(17) = &H10 : Dsid(18) = &H4D : Dsid(19) = &H47 : Dsid(20) = &H71 : Dsid(21) = &H01 : Dsid(22) = &H08 : Dsid(23) = &H00 : Dsid(24) = &H86
'^= 3
Dim Sc(9) As Byte
Dim Sc2(9) As Byte
Dim Sc3(9) As Byte
Dim T As Byte
Dim T2 As Byte
Dim T3 As Byte
Dim H As Byte
Dim Flag As Bit
Do
Wait 1
' Alle angeschlossenen DS1820 zum Messen veranlassen
1wreset
1wwrite &HCC
1wwrite &H44
Waitms 750
' Den gewünschten Sensor auswählen
1wverify Dsid(1)
' Kommando READ SCRATCHPAD
1wwrite &HBE
Sc(1) = 1wread(9)
If Sc(9) = Crc8(sc(1) , 8) Then
T = Sc(1)
If Sc(2) > 0 Then
T = 256 - T
End If
T = T / 2
Locate 1 , 1
Lcd "T:"
If Sc(2) > 0 Then Lcd "-";
Lcd T;
If Sc(1).0 = 1 Then
Lcd ".5" ; Chr(1) ; " / "
Else
Lcd ".0" ; Chr(1) ; " / "
End If
End If
Waitms 1
1wreset
1wwrite &HCC
1wwrite &H44
Waitms 750
' Den gewünschten Sensor auswählen
1wverify Dsid(9)
' Kommando READ SCRATCHPAD
1wwrite &HBE
Sc2(1) = 1wread(9)
If Sc2(9) = Crc8(sc2(1) , 8) Then
T2 = Sc2(1)
If Sc2(2) > 0 Then
T2 = 256 - T2
End If
T2 = T2 / 2
Locate 1 , 11
If Sc2(2) > 0 Then Lcd "-";
Lcd T2 ;
If Sc2(1).0 = 1 Then
Lcd ".5" ; Chr(1)
Else
Lcd ".0" ; Chr(1)
End If
End If
' Ausgabe alle 0,75 Sekunden
Waitms 1
If T > H Then Set Flag
If Flag = 1 Then
H = T
Writeeeprom H
Reset Flag
End If
Locate 4 , 1
Lcd H
Loop
End
Dim As Eram vermisse ich für's Eram beschreiben.
Gento
Also quasi "Dim H2 As Eram Byte" und unten dann H in H2 kopieren und anschließend H2 mit writeeeprom speichern?
Also man darf mit Eram nicht rechnen oder vergleichen.
Nur holen und schreiben.
Wende es so an wie meine Zeilen oben.
Nur an Deine Soft angepast.
Gento
Sauerbruch
22.02.2009, 23:54
Laut Bascom-Hilfe braucht der Befehl Writeeeprom auch noch eine Angabe, wohin der Wert geschrieben werden soll.
WRITEEEPROM var , address
var
The name of the variable that must be stored
address
The address in the EEPROM where the variable must be stored.
Und das scheint bei Dir zu fehlen. Versuch´s doch mal so:
Dim H as Eram Byte
...
Do
...
If T > H then
H = T
End if
...
Loop
Dann müsste es eigentlich klappen...
Die Frage ist , wie schnell bekomme ich das Eram kaputt , wenn Vergleiche/Rechnen damit erlaubt ist.
Gento
Dazu kommt, das Bascom das vergleichen (also If T > H) mit Eram-Variablen nicht zu lässt! Da hab ich dann wieder das Problem mit "Numeric parameter expected"...
Edit: Bevor ichs vergesse, das ganze funktioniert jetzt! Vielen Dank an euch! :wink:
MfG
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.