24 bites adat EEPROM-ban (mentés, olvasás)

Hogyan programozzak AVR chipet? Programozók beállításai...
Bascom nyelvű programok...
Válasz küldése
Avatar
dummy
Chipgyilok
Hozzászólások: 264
Csatlakozott: 2008. május 24. szombat, 6:00

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

Az alábbi problémára tudtok-e megoldást?

Egy 24 bites változó értékét kellene a proci EEPROM-jában tárolni, ill. visszaolvasni.
Azaz, egy 24 bites számot 3 bájtosra kellene alakítani, ill. vissza. Eddig csak 16 bitig csináltam ilyen, de ebbe a feladatba beletört a bicskám.

Mindenféle megoldás jöhet! :)
Avatar
nobody_hun
Bitfaragó
Hozzászólások: 425
Csatlakozott: 2005. november 14. hétfő, 7:00

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

Lehet, hogy gagyi megoldás:
24 karakternyi stringre alakítanám, majd felbontanám 3*8 karakterre, ezeket vissza bájtra és úgy az eepromba.

Visszafelé ugyenez fordítva...
"Az IC-k füsttel működnek. Ha kijön belőlük a füst, nem működnek tovább." - ismeretlen szerző
"Az ID:FFFFFF egyenlő az Atmel még nem kiadott processzorával."
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

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

Direkt EEPROM kezeléssel:

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

dim nulla as ERAM byte 'a 0. EEPROM hely lefoglalása
Dim a as ERAM Long
Dim temp_a as long

'Mentes EEPROMba
a=temp_a

'Kiolvasas
temp_a=a
Low/High/HighW játékkal:

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

Dim X As Word , L As Long
dim X1 as byte
dim X2 as byte
dim X3 as byte
dim X4 as byte
L = &H12345678
X = Highw(l)     '&H1234
X1=low(x)        '&H34
x2=high(x)      '&H12
x=L                 '&H5678
x3=high(x)      '&H56
x4=low(x)       '&H78
Avatar
dummy
Chipgyilok
Hozzászólások: 264
Csatlakozott: 2008. május 24. szombat, 6:00

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

Na, közben megoldódott!

A DIM parancs OVERLAY opciójával oldottam meg. Azért köszönöm a tippeket!
Avatar
sajokutya
Újonc
Újonc
Hozzászólások: 9
Csatlakozott: 2010. január 15. péntek, 7:00

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

nobody_hun írta:Lehet, hogy gagyi megoldás:
24 karakternyi stringre alakítanám, majd felbontanám 3*8 karakterre, ezeket vissza bájtra és úgy az eepromba.

Visszafelé ugyenez fordítva...
Sziasztok!

Egy hasonló elvű megoldás nekem kapóra jönne. A különbség annyi, hogy esetemben 1 bájtot kell 8 bitre szétszedni, mivel utána a biteket független változókként használnám fel.

Pl.:
Byte = &B01110010 -->
Bit1 = 0
Bit2 = 1
Bit3 = 1
...
Bit8 = 0

(A "Byte" értékei a chip flash-ben vannak: DATA-ként, LOOKUP utasítással beolvasva.)

Az én programozási szótáramban a gagyi = érthető, úgyhogy a fent idézett megoldáshoz valamilyen iránymutatást kérek. :)

Köszönöm!
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

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

A leg1*űbb a sima értékadás lenne:
Pl.:
Byte = &B01110010 -->
Bit1 = Byte .0
Bit2 = Byte .1
Bit3 = Byte .2
...
Bit8 = Byte.7

8)
Avatar
sajokutya
Újonc
Újonc
Hozzászólások: 9
Csatlakozott: 2010. január 15. péntek, 7:00

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

Köszi! Kicsit fától az erdő érzésem van... :D

Viszont akadt itt még egy bökkenő: megírtam a programot a bitek beolvasásához, és leszimuláltam Bascomban. Az adatsorból a kijelölt sorszámú bájtot szépen beolvassa, viszont a biteknél már jóformán egy sem stimmel (jobbról és balról nézve is rossz a bitek sorrendje).
A Bin(Hbyte) utasítást azért tettem bele, mert enélkül mindent mindig 0-ra ír ki a teszt. Ezzel legalább már látok 1-eseket is, csak rossz helyen...

Szerintetek mit szúrtam el?

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

$regfile = "m8def.DAT"
$crystal = 16000000
$baud = 9600
$hwstack = 32
$swstack = 8
$framesize = 24

Dim C As Word
Dim Hbyte As Byte
Dim Hbytebin As Byte
Dim Hbit1 As Bit
Dim Hbit2 As Bit
Dim Hbit3 As Bit
Dim Hbit4 As Bit
Dim Hbit5 As Bit
Dim Hbit6 As Bit
Dim Hbit7 As Bit
Dim Hbit8 As Bit


Restore Adat
C = 0
Hbyte = Lookup(c , Adat)
Hbytebin = Bin(hbyte)
Hbit1 = Hbytebin.0
Hbit2 = Hbytebin.1
Hbit3 = Hbytebin.2
Hbit4 = Hbytebin.3
Hbit5 = Hbytebin.4
Hbit6 = Hbytebin.5
Hbit7 = Hbytebin.6
Hbit8 = Hbytebin.7

End

Adat:
Data &B00110111 , &B11110001 , &B00011100
Avatar
sajokutya
Újonc
Újonc
Hozzászólások: 9
Csatlakozott: 2010. január 15. péntek, 7:00

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

Probléma megoldva! Nem tudom, hogy kavartam így össze, úgyhogy újraírtam a programot, és ez működik.

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

$regfile = "m8def.DAT"
$crystal = 16000000
$baud = 9600
$hwstack = 32
$swstack = 8
$framesize = 24

Dim C As Word
Dim Hbyte As Byte
Dim Hbytebin As Byte
Dim Hbit1 As Bit
Dim Hbit2 As Bit
Dim Hbit3 As Bit
Dim Hbit4 As Bit
Dim Hbit5 As Bit
Dim Hbit6 As Bit
Dim Hbit7 As Bit
Dim Hbit8 As Bit


Restore Adat
C = 0
Hbyte = Lookup(c , Adat)
Hbit1 = Hbyte.7
Hbit2 = Hbyte.6
Hbit3 = Hbyte.5
Hbit4 = Hbyte.4
Hbit5 = Hbyte.3
Hbit6 = Hbyte.2
Hbit7 = Hbyte.1
Hbit8 = Hbyte.0

End

Adat:
Data &B00110111 , &B11110001 , &B00011100
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

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

Szerintem meg tök jó!

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

$regfile = "m8def.DAT"
$crystal = 16000000
$baud = 9600
$hwstack = 32
$swstack = 8
$framesize = 24
$sim

Dim C As Word , I As Byte
Dim Hbyte As Byte
Dim Hbytebin As Byte
Dim Hbit1 As Bit
Dim Hbit2 As Bit
Dim Hbit3 As Bit
Dim Hbit4 As Bit
Dim Hbit5 As Bit
Dim Hbit6 As Bit
Dim Hbit7 As Bit
Dim Hbit8 As Bit


Restore Adat
C = 0
For I = 0 To 2
Print
Hbyte = Lookup(i , Adat)
Print Bin(hbyte)
Hbit1 = Hbyte.0
Hbit2 = Hbyte.1
Hbit3 = Hbyte.2
Hbit4 = Hbyte.3
Hbit5 = Hbyte.4
Hbit6 = Hbyte.5
Hbit7 = Hbyte.6
Hbit8 = Hbyte.7
Print Hbit8 ; Hbit7 ; Hbit6 ; Hbit5 ; Hbit4 ; Hbit3 ; Hbit2 ; Hbit1
Next I
End

Adat:
Data &B00110111 , &B11110001 , &B00011100

Print:
00110111
00110111

11110001
11110001

00011100
00011100


:lol:
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

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

És a Bin() függvény stringet ad vissza! (String = Bin(n) )

Var = Bin(source)

Remarks
Var The target string that will be assigned with the binary representation of the variable source.

Source The numeric variable that will be converted.
8)
Válasz küldése