PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Edit: Wie Wert in EEPROM speichern?



Maxxtro
17.02.2009, 19:44
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, 19: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

Maxxtro
17.02.2009, 21:02
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

Maxxtro
17.02.2009, 21:27
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

Jaecko
18.02.2009, 09:18
$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.

Maxxtro
18.02.2009, 14:38
Ah gut, vielen Danke auch Dir!

MfG,
Maxxtro

Maxxtro
22.02.2009, 16:33
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

TomEdl
22.02.2009, 18:23
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
;)

Maxxtro
22.02.2009, 18:47
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...

TomEdl
22.02.2009, 19:27
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

Maxxtro
22.02.2009, 20:15
Funktioniert leider nicht! Brauche ich vll. sonst noch etwaige besondere Anweisung für Bascom damit der Wert gespeichert wird?

TomEdl
22.02.2009, 20:24
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

Maxxtro
22.02.2009, 20:26
Neinein, das Programm lässt sich schon kompilieren! Es wird auch der Höchstwert angezeigt, aber nach dem ausschalten ist wieder alles weg :-k

Gento
22.02.2009, 20:27
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

Maxxtro
22.02.2009, 20:34
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?

TomEdl
22.02.2009, 20:41
@Maxxtro
Er meint warscheinlich du sollst mal diesen Code versuchen und sehen obs klappt. Vielleicht ist ja auch das EEPROM defekt.

Gruß
Thomas

Maxxtro
22.02.2009, 20:46
Funktioniert! Zählt bei jedem einschalten eins hoch!

TomEdl
22.02.2009, 20:48
Hmm. Zeig am Besten mal deinen kompletten nichtfunktionierenden Code.

Gruß
Thomas

Maxxtro
22.02.2009, 20:50
$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

Gento
22.02.2009, 21:22
Dim As Eram vermisse ich für's Eram beschreiben.

Gento

Maxxtro
22.02.2009, 21:24
Also quasi "Dim H2 As Eram Byte" und unten dann H in H2 kopieren und anschließend H2 mit writeeeprom speichern?

Gento
22.02.2009, 21:30
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, 22: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...

Gento
22.02.2009, 23:03
Die Frage ist , wie schnell bekomme ich das Eram kaputt , wenn Vergleiche/Rechnen damit erlaubt ist.

Gento

Maxxtro
23.02.2009, 10:03
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