EEPROM label kérdés
EEPROM label kérdés
Ezt nem ide szántam eredetileg!

A hozzászólást 1 alkalommal szerkesztették, utoljára kapu48 2009. október 25. vasárnap, 9:22-kor.
Az alábbi részletből, hogyan tudhatom meg például „label2” értékét?
Mert itt a: „Restore Label2” nem működik!
Valami ilyesmi kellene:
Eepaddr = Label2
Eepaddr = Eepaddr + 1
Readeeprom B , Eepaddr
Mert az alábbi sem működi csak az első 2 értékig helyesen:
Ami helyesen működik:De ez változóadat hossznál nem jó!
Mert itt a: „Restore Label2” nem működik!
Valami ilyesmi kellene:
Eepaddr = Label2
Eepaddr = Eepaddr + 1
Readeeprom B , Eepaddr
Kód: Egész kijelölése
Dim Eepaddr As Word 'EEPROM cim
Dim B As Byte
$eeprom
Label1:
Data 1 , 2 , 3 , 4 , 5
Label2:
Data 10 , 20 , 30 , 40 , 50
$data
Kód: Egész kijelölése
Readeeprom B , Label2
Print B ; " " ; 'prints 10
For I = 1 To 4
Readeeprom B
Print B ; " " ; 'prints 20,20,20,20
Next IKód: Egész kijelölése
Readeeprom B , Label2
Print B ; "," ; 'prints 10
Readeeprom B
Print B ; "," ; 'prints 20
Readeeprom B
Print B ; "," ; 'prints 30
Readeeprom B
Print B ; "," ; 'prints 40
Readeeprom B
Print B ; ","; 'prints 50
Na ne már! Ez nem járható út!
Nem hiszem el, hogy ezt csak papíron lehet kiszámolni!
Nem mondhatom a laikus felhasználónak, hogy essen neki papíron kiszámolni.
Kel lenni a Bascomban valami változónak, amiben megjegyzi ezeket a számokat.
Különben nem is tudná kezelni az EEPROMOT.
Hogy melyik az első szabad Byte azt is tudnia kellene valahonnan?
Ezek szerint nem lehet elkerülni saját rutinban Bytes számlálást és a címek tömbben tárolását?
Nem hiszem el, hogy ezt csak papíron lehet kiszámolni!
Nem mondhatom a laikus felhasználónak, hogy essen neki papíron kiszámolni.
Kel lenni a Bascomban valami változónak, amiben megjegyzi ezeket a számokat.
Különben nem is tudná kezelni az EEPROMOT.
Hogy melyik az első szabad Byte azt is tudnia kellene valahonnan?
Ezek szerint nem lehet elkerülni saját rutinban Bytes számlálást és a címek tömbben tárolását?
Végül úgy oldottam meg a problémát, hogy szétválasztottam ketté a feladatott.
Először létrehozom és betöltöm az EEPROM-ba az adatokat.
Aztán a programban Ugyanezt a területet Eram tömbként használom.
Ami így már könnyen indexelhető
A program:
A ki írás:
START
Eep_label1: 1,2,3,4,5,
Eep_label2: 10,20,30,40,50,
Uj Eep_label2: 11,12,13,14,15,
(Ennél jobbat nem sikerült kitalálnom!!?)
Először létrehozom és betöltöm az EEPROM-ba az adatokat.
Aztán a programban Ugyanezt a területet Eram tömbként használom.
Ami így már könnyen indexelhető
Kód: Egész kijelölése
' Eeprom01.bas
'Itt külön létrehozzuk az Eeprom.eep hex fájlt.
'Ami tartalmazza az EEPROMBA kerülö adatokat.
'Ezt elöször külön folyamatként beírjuk az EEPROMba
$regfile = "m64def.dat" ' specify the used micro
$crystal = 14745600 'Külsö Q
$hwstack = 32 ' default use 32 for the hardware stack
$swstack = 32 ' default use 10 for the SW stack
$framesize = 40 ' default use 40 for the frame space
'first tell the compiler that we are using EEPROM to store the DATA
$eeprom
'EEPROM 0 címének lefoglalása
Eep_nul:
Data 0
'specify a label
Eep_label1:
Data 1 , 2 , 3 , 4 , 5
Eeep_label2:
Data 10 , 20 , 30 , 40 , 50
'Switch back to normal data lines in case they are used
$data
EndKód: Egész kijelölése
'Itt becsapjuk a Bascomot!
'Ugyan azt az EEPROM területet Tömbként definiáljuk.
'Igy már egyszerűen lehet indexeléssel kezelni az EEPROM adat olvasást, írást
$regfile = "m64def.dat" ' specify the used micro
$crystal = 14745600 'Külsö Q
$baud = 19200 ' use baud rate
$hwstack = 32 ' default use 32 for the hardware stack
$swstack = 32 ' default use 10 for the SW stack
$framesize = 40 ' default use 40 for the frame space
Dim Eep_nul As Eram Byte At 0 'EEPROM 0 címének lefoglalása
Dim Eep_label1(5) As Eram Byte 'EEPROM-ban létrehozott Tömbök
Dim Eep_label2(5) As Eram Byte
Dim B As Byte , I As Word
Print ""
Print " START "
'EEPROM Adat olvasás
Print "Eep_label1: " ;
For I = 1 To 5
B = Eep_label1(i)
Print B ; "," ;
Next
Print ""
Print "Eep_label2: " ;
For I = 1 To 5
B = Eep_label2(i)
Print B ; "," ;
Next
Print ""
'EEPROM Adat írás
For I = 1 To 5
B = I + 10
Eep_label2(i) = B
Next
'Ellenörzés
Print "Uj Eep_label2: " ;
For I = 1 To 5
B = Eep_label2(i)
Print B ; "," ;
Next
Print ""
End START
Eep_label1: 1,2,3,4,5,
Eep_label2: 10,20,30,40,50,
Uj Eep_label2: 11,12,13,14,15,
(Ennél jobbat nem sikerült kitalálnom!!?)
Sikerült a szekvencia alapú megvalósítást megoldanod 
De az ERAM-l vigyázz!
Komplex művelet esetén érdemes előtte egy temp változóba átemelni és úgy számolni tovább!
Pl. (fejből írom, ennél lehet h épp megy, de hasonlóval fejreálltam)
dim a as byte eram
dim temp1 as byte
dim eredmeny as byte
a=5
temp1=a*10 'elvileg temp1=50
printhex a 'elvileg 05
printhex temp1 'elvileg 32
nálam sokesetmen az a-t így kezelve 0-nak veszi!
Ezért:
dim a as byte eram
dim temp1 as byte
dim eredmeny as byte
a=5
temp1=a
printhex temp1 'elvileg 05
temp1=temp1*5 'elvileg temp1=50
printhex temp1 'elvileg 32
De az ERAM-l vigyázz!
Komplex művelet esetén érdemes előtte egy temp változóba átemelni és úgy számolni tovább!
Pl. (fejből írom, ennél lehet h épp megy, de hasonlóval fejreálltam)
dim a as byte eram
dim temp1 as byte
dim eredmeny as byte
a=5
temp1=a*10 'elvileg temp1=50
printhex a 'elvileg 05
printhex temp1 'elvileg 32
nálam sokesetmen az a-t így kezelve 0-nak veszi!
Ezért:
dim a as byte eram
dim temp1 as byte
dim eredmeny as byte
a=5
temp1=a
printhex temp1 'elvileg 05
temp1=temp1*5 'elvileg temp1=50
printhex temp1 'elvileg 32
Köszönöm!
Megfogadom a tanácsot.
Ezért is alkalmaztam a névadáskor a „Eep_ „ előtagot.
Ami felhívja a figyelmet, hogy EEPROM-ban történő műveletről van szó, ezért az írása lehetőleg kerülendő.
A fenti példában levő EEPROM írás is minden bekapcsoláskor lefutna. Ezért csak kimondottan tesztelési célra alkalmas.
Egyébként valamilyen feltétel vizsgálaton belülre kel rakni az EEPROM írást!

Megfogadom a tanácsot.
Ezért is alkalmaztam a névadáskor a „Eep_ „ előtagot.
Ami felhívja a figyelmet, hogy EEPROM-ban történő műveletről van szó, ezért az írása lehetőleg kerülendő.
A fenti példában levő EEPROM írás is minden bekapcsoláskor lefutna. Ezért csak kimondottan tesztelési célra alkalmas.
Egyébként valamilyen feltétel vizsgálaton belülre kel rakni az EEPROM írást!
A hozzászólást 1 alkalommal szerkesztették, utoljára kapu48 2009. november 10. kedd, 21:09-kor.
Az EEPROM ~100.000x írható. A minden bekapcsoláskor beírom nem vált be nálam...
Így meglesem, hogy az értéke 255-e vagy sem. És úgyis átrakom tömbbe. ha mind 255 (sosem volt feltöltve az EEPROM), akkor rakom tele. de sokszor csalok. Nem pazaroljuk a Flash helyet, így feltételezem h fel van töltve. ez a teszteléshez úgyis kell:)
Így az első futáskor / programozáskor beállítom kézzel az értéket...
Így meglesem, hogy az értéke 255-e vagy sem. És úgyis átrakom tömbbe. ha mind 255 (sosem volt feltöltve az EEPROM), akkor rakom tele. de sokszor csalok. Nem pazaroljuk a Flash helyet, így feltételezem h fel van töltve. ez a teszteléshez úgyis kell:)
Így az első futáskor / programozáskor beállítom kézzel az értéket...
Hello!
Kipróbáltam a Showpice utasítást, vagyis a belső eepromban eltárolt képet szeertném LCD-ra rakni, de a showpice működés a következő:
Ezzel az a baj, hogy én szoftveresen töltöm fel az eepromot a kép byte-jaival, vagyis az int.eeprom 0x01-es címtől felfelé van a BGF file.
Hogyan tudom megmondani a Showpice "valami" cimkének, hogy az eeprom egy adott címére mutasson?
Köszönöm!
Kipróbáltam a Showpice utasítást, vagyis a belső eepromban eltárolt képet szeertném LCD-ra rakni, de a showpice működés a következő:
Kód: Egész kijelölése
$eeprom
valami:
$bgf "valami.bgf"
$data
Showpice 1,1,valami
Hogyan tudom megmondani a Showpice "valami" cimkének, hogy az eeprom egy adott címére mutasson?
Köszönöm!
Hülye tipp, igaz favágómódszer (mert az RLE kódolással nem egységes a képed mérete).
meglesed mekkora lehet max a BGF file mérete amire szükséges van/lehet (helypazarlóan ugye X*Y/8 byte).
Létrehozol egy ekkora file-t, amit akarmikuka.bgf-nek nevezel.
A labelek közt ezt a file-t linkeled be.
Így ha a BGF tartományt felülíroda sajáttal, nem fog rálógnia másikra.
A képkirajzolás úgyis úgy megy, hogy veszed az adatot és az RLE kódolással kibontod és a byte-ket berakod a kijelzőre.... max. a fenntartott hely vége előtt fejezed be az olvasást....
meglesed mekkora lehet max a BGF file mérete amire szükséges van/lehet (helypazarlóan ugye X*Y/8 byte).
Létrehozol egy ekkora file-t, amit akarmikuka.bgf-nek nevezel.
A labelek közt ezt a file-t linkeled be.
Így ha a BGF tartományt felülíroda sajáttal, nem fog rálógnia másikra.
A képkirajzolás úgyis úgy megy, hogy veszed az adatot és az RLE kódolással kibontod és a byte-ket berakod a kijelzőre.... max. a fenntartott hely vége előtt fejezed be az olvasást....
Nem egészen erre gondoltam
..hanem arra, hogy mivel a Showpice (nem Showpic!) van egy cimke, ami az AVR belső eepromjának azon részére ugrik, ahol a bgf van letárolva, ez az előbbi példa, ami a "gyári" megoldás, vagyi betöltöm fordításkor a bgf-et az eepromba, s a cimke oda mutat, ahol a kép, de ezt a Bascom végzi, nem látok bele.
De nekem arra lenne szükségem, hogy a SHOWPICE 1,1,valami a 0x80 címre mutasson!
Alapból itt a "valami" ide mutat:
$eeprom
0_cim:
Data 0
Valami:
$bgf "valami.bgf"
$data
vagyis betöltené a fordításkor beírt kódokat.
De én most futás közben töltöm fel az eepromot és valahogy a cimkének az 80hex címre kellene mutatni...
u.i.: amugy nem rossz, amit mondtál, lehet, hogy feltöltöm egy 128byte-os képpel az első 128byte-ot
de azért szebb lenne valami más megoldás.
..hanem arra, hogy mivel a Showpice (nem Showpic!) van egy cimke, ami az AVR belső eepromjának azon részére ugrik, ahol a bgf van letárolva, ez az előbbi példa, ami a "gyári" megoldás, vagyi betöltöm fordításkor a bgf-et az eepromba, s a cimke oda mutat, ahol a kép, de ezt a Bascom végzi, nem látok bele.
De nekem arra lenne szükségem, hogy a SHOWPICE 1,1,valami a 0x80 címre mutasson!
Alapból itt a "valami" ide mutat:
$eeprom
0_cim:
Data 0
Valami:
$bgf "valami.bgf"
$data
vagyis betöltené a fordításkor beírt kódokat.
De én most futás közben töltöm fel az eepromot és valahogy a cimkének az 80hex címre kellene mutatni...
u.i.: amugy nem rossz, amit mondtál, lehet, hogy feltöltöm egy 128byte-os képpel az első 128byte-ot