Többdimenziós tömb (EEPROMban)

Hogyan programozzak AVR chipet? Programozók beállításai...
Bascom nyelvű programok...
Válasz küldése
Avatar
kefeur
Tranzisztorgyógyász
Hozzászólások: 187
Csatlakozott: 2008. február 17. vasárnap, 7:00

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

Sziasztok !

Felbuzdulva az olvasottakon elkezdtem 1 kód írását..
Először data sorokba a változókkal , amim működik .
Viszont ezt szeretném attenni eepromba

A fentebb olvasottak alapján elkezdtem , de hibába ütköztem .

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

Dim Program(7(16)) As Eram Byte
 C = Program(a(b))   
hibaüzenet :nem összeegyeztethető változó.

A változók byte nagyságrendbe beférő értékek pl: 8,120,200

Itt mit rontottam el? :oops:
Kefeur
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

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

Esetleg Igy :

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

 C = Program(a).b   
 Program(a).b   = C
:?:
Avatar
kefeur
Tranzisztorgyógyász
Hozzászólások: 187
Csatlakozott: 2008. február 17. vasárnap, 7:00

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

Ahh
Ez az eredeti :
B = Eep_label1(i)

Itt sincs pont köztük

Nem tudom mi a roszz.

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

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

Ezt találtam ki 2 dimenzios tömbnek:

:wink:

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

Const Block = 7 * 16
Dim Program(block) As Eram Byte

Dim A As Byte , B As Byte , C As Byte , D As Byte

For A = 0 To 6
   C = A + 1
   Print C
   For B = 1 To 16
      D = A * 16
      D = D + B
      Program(d) = D
      C = Program(d)
     Print C ; "," ;
   Next B
   Print
Next A

End
Igy mükszik! csak kicsit bonyolult indexelni!
1
1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,
2
17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,
3
33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,
4
49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,
5
65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,
6
81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,
7
97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,
:wink:
A hozzászólást 3 alkalommal szerkesztették, utoljára kapu48 2009. október 28. szerda, 0:00-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 nem 2 dimenzios tömb!
A "Label1" a neve "(I)" az index!

Te itt a zárójelben 2 értéket adsz meg:

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

Dim Program(7(16)) As Eram Byte
Igaz nem kapsz hibajelzést, de a Bascomnál ez még nem jelenti azt, hogy működik is!
Esetleg igy:

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

Dim Program7(16) As Eram Byte
Program7=1* 16 Bytes tömb
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

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

2 dimenziós tömb 1 dimenziósra leképezve.


A 2 dimenziósod lenne DIM a(x,y). Akkor 1 dimenziósan
DIM a(X*Y).

Az a(3,5) elem így: a(3*x+5), ahol X>=3 ill Y>=5.

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

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

Nekem jó lenne!
Csak a Bascomnak nem tetszik!

Dim Program(7 , 16) As Eram Byte
Error : 26 AS expected [16)ASERAMBYTE] (Hogy ez mit jelent? Pasz!)
Erre:
Dim Program2(7 * 16) As Eram Byte
Error : 26 AS expected [PROGRAM]
Erre:
Program2(2 * 10) = 5
Error : 31 Invalid datatype [2*10]

Röviden az elv jó lenne, csak a szintaxis nem!
Ami jól működik:

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

$sim
Const I1 = 7
Const I2 = 16
Const Block = I1 * I2
Dim Program(block) As Eram Byte

Dim Index1 As Byte , Index2 As Byte , Index3 As Word
Dim A As Byte , B As Byte
A = 10
'Az "Program(3,5) = A" elem így:
Index1 = 3 - 1        'Feltétel  Index1 <= (I1 - 1) 
Index2 = 5             'Feltétel  Index2 <= I2 
Index3 = Index1 * I2
Index3 = Index3 + Index2
'És Eeprom írás:
Program(index3) = A
'Olvasás:
B = Program(index3)
Print B
8)
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 elvet írtam le :P
De akkor bevált így....
Avatar
kefeur
Tranzisztorgyógyász
Hozzászólások: 187
Csatlakozott: 2008. február 17. vasárnap, 7:00

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

Nahh igen , ez az .

Közben én is így oldottam meg , ahogy kapu48 oldotta meg.
Aztán variáció :

diszkófény vezérlő

8 program
programonként 16 lépés

pr a program száma
lepes ahányadik lépés
kiir megy a kimetre

szam=pr+lepes
kiir=program(szam)
Kefeur
Avatar
kefeur
Tranzisztorgyógyász
Hozzászólások: 187
Csatlakozott: 2008. február 17. vasárnap, 7:00

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

Kár hogy ezt nem lehet a simán data sorokkal hasonlóan .( akár ha a kódtól még fér 1k is lehet)
Legalább is nekem nem sikerült .
Ott több lenne lényegesen a hej. (nem csak 128 bit )

Marad a külső eprom :cry:
Kefeur
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 Indexelést szúrod el, szerinted:
szam=pr+lepes
kiir=program(szam)
Számoljunk egy kicsit:
Ha: Pr = 1-től 8-ig, És Lepes = 1-töl 16-ig Akkor
Szerinted az adat címe:
Pr = 1 esetén
Szam =: 1 + 1 = 2, 1 + 2 = 3. 1 + 3 = 4,…..
Pr = 2 esetén:
Szam =: 2 + 1 = 3, 2 + 2 = 4…. Ezek ugyan azok a címek lesznek mint az előző sorban!
…….
A helyes címszámítást már leírtam előbb 2 félle módszerre szerint is!

Mind a kétféle módszer ugyanannyi helyet igényel.
A hozzászólást 1 alkalommal szerkesztették, utoljára kapu48 2009. október 30. péntek, 22:26-kor.
Avatar
kefeur
Tranzisztorgyógyász
Hozzászólások: 187
Csatlakozott: 2008. február 17. vasárnap, 7:00

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

igen igaz.
Mivel hosszú a kód csak a lényeget akartam leírni , és kimaradt egy fontos momentum.
program *16 +lépés

Na így már jó
Kefeur
Válasz küldése