EEPROM label kérdés

Hogyan programozzak AVR chipet? Programozók beállításai...
Bascom nyelvű programok...
Válasz küldése
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

EEPROM label kérdés

Hozzászólás Szerző: kapu48 »

Ezt nem ide szántam eredetileg!
:D
A hozzászólást 1 alkalommal szerkesztették, utoljára kapu48 2009. október 25. vasárnap, 9:22-kor.
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Hozzászólás Szerző: kapu48 »

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

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
Mert az alábbi sem működi csak az első 2 értékig helyesen:

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 I
Ami helyesen működik:

Kó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
De ez változóadat hossznál nem jó!
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

Lesd meg az EEP file felépítését....
Abban látod, hogy sorban tölti fel a helyeket.
Így papíron könnyen kiszámolható....
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Hozzászólás Szerző: kapu48 »

Na ne már! Ez nem járható út! :evil: :cry: :roll:
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? :twisted:
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

A Label belso cimke. A felhasznalonak _semmi_ koze hozza, forditaskor keletkezik a tenyleges EEPROM cím.

Hasznalj TOMB-ot, vagy EEPROM szekvencialis adatirast. Igy tudod a "labelhatarokat".
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Hozzászólás Szerző: kapu48 »

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ő

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

End
A program:

Kó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                        
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!!?) :oops:
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

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
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Hozzászólás Szerző: kapu48 »

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!
:wink:
A hozzászólást 1 alkalommal szerkesztették, utoljára kapu48 2009. november 10. kedd, 21:09-kor.
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

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...
Avatar
norbi
Chipgyilok
Hozzászólások: 308
Csatlakozott: 2006. augusztus 3. csütörtök, 6:00

Hozzászólás Szerző: norbi »

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ő:

Kód: Egész kijelölése

$eeprom
valami:
$bgf "valami.bgf"
$data

Showpice 1,1,valami
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!
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

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....
Avatar
norbi
Chipgyilok
Hozzászólások: 308
Csatlakozott: 2006. augusztus 3. csütörtök, 6:00

Hozzászólás Szerző: norbi »

Nem egészen erre gondoltam 8)

..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 :wink: de azért szebb lenne valami más megoldás.
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

Berakod a $BGF-t egy &H80 hosszú bináris szemétként....
Úgyis felülírod, nem ? :)
Válasz küldése