 |
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
vilko Član



Pridružen-a: Pet 13 Feb 2004 10:26 Prispevkov: 3359 Aktiv.: 14.18 Kraj: Dragomer
|
Objavljeno: Čet Apr 19, 2007 9:49 am Naslov sporočila: Migracija Bascom8051 -> BascomAVR - težave začetnika |
|
|
Migracija Bascom8051 -> BascomAVR - težave začetnika
Bascom8051 uporabljam že kar nekaj časa z zadovoljstvom naredim praktično vse, kar potrebujem. Uporabniki AVR mi svetujejo migracijo. Tako sem instaliral BASCOM AVR DEMO in na hitro vidim, da je tam res veliko več. In poizkušam najprej prenesti svoje obstoječe znanje iz 8051 na AVR. Seveda naletim na težave, to sem pričakoval. Pričakujem pomoč tudi od Vas. Pričakujem preveč? Upam, da ne.
STACK: (Sklad)
Pri 8051 je mikro uporabil ves neuporabljeni RAM za stack, kar se mi zdi logično in sem stack tudi pridno in uspešno uporabljal sam. AVR pa ima loči dve vrsti sklada, hardwarestack in software stack. Iz imena si ne znam razlagati, kako mikro uporablja prvega in kako drugega. Poleg tega mi ni logično, da se velikost stacka omejuje z ukazi:
Koda: |
$hwstack = 32 ' default use 32 for the hardware stack
$swstack = 10 ' default use 10 for the SW stack
|
V knjigi, ki sem jo bral, (John Morton: AVR An introductory course - knjigo odsvetujem), pa bi moral razumeti, za kaj gre, nisem zakapiral, kako se uporablja eno in kako drugo vrsto Stacka. Mi lahko, prosim, nekdo, preprosto razloži to?
UPORABA STACKA Z PUSH IN POP UKAZI:
Pri programiranju sem često uporabljal iste spremenljivke v glavnem programu in v podprogramih (8051 ima malo RAMa), kot razložim na primeru:
Koda: |
' Splošno uporabljane spremenljivke:
Dim I As Byte
Dim J As Byte
Dim K As Byte
Dim L As Byte
Dim M As Word
' V glavnem programu uporabljam spremenljivke:
I = 11
J = 12
K = 13
L = 14
Print I ; J ; K ; L
' Potem kličem podprogram:
Gosub Podprogram1
' Ko se vrnem, morajo imeti splošno uporabljane spremenljivke iste vrednosti kot prej
Print I ; J ; K ; L
End
Podprogram1:
' Pridem v podprogram in želim uporabiti iste spremenljivke, seveda le začasno
' zato spravim stare vrednosti spremenljivk na stack:
push {i}
push {j}
push {k}
push {l}
' uporabim spremenljivke po svoje
I = 211
J = 212
K = 213
L = 214
Print I ; J ; K ; L
' in predno se vrnmem v glavni program vrnem vrednosti spremenljivk nazaj:
pop {l}
pop {k}
pop {j}
pop {i}
Return |
Pri 8051 je to delovalo, pri AVR pa dobim sledeče napake pri prevajanju:
Koda: |
Error : 200 Line : 23 .def Not Found [$0060 [adddr]] , In File : D : \ Iko \ Elektronika \ Basavr \ Sola1.bas
Error : 200 Line : 24 .def Not Found [$0061 [adddr]] , In File : D : \ Iko \ Elektronika \ Basavr \ Sola1.bas
Error : 200 Line : 25 .def Not Found [$0062 [adddr]] , In File : D : \ Iko \ Elektronika \ Basavr \ Sola1.bas
Error : 200 Line : 26 .def Not Found [$0063 [adddr]] , In File : D : \ Iko \ Elektronika \ Basavr \ Sola1.bas
Error : 200 Line : 34 .def Not Found [$0063 [adddr]] , In File : D : \ Iko \ Elektronika \ Basavr \ Sola1.bas
Error : 200 Line : 35 .def Not Found [$0062 [adddr]] , In File : D : \ Iko \ Elektronika \ Basavr \ Sola1.bas
Error : 200 Line : 36 .def Not Found [$0061 [adddr]] , In File : D : \ Iko \ Elektronika \ Basavr \ Sola1.bas
Error : 200 Line : 37 .def Not Found [$0060 [adddr]] , In File : D : \ Iko \ Elektronika \ Basavr \ Sola1.bas
|
Prepričan sem, da se tak način dela da uporabiti tudi v AVR-u, le nekaj je treba vedeti, kar jaz ne vem. Mi lahko kdo pove?
Pozdrav in hvala za pomoč
|
|
Nazaj na vrh |
|
 |
vilko Član



Pridružen-a: Pet 13 Feb 2004 10:26 Prispevkov: 3359 Aktiv.: 14.18 Kraj: Dragomer
|
|
Nazaj na vrh |
|
 |
smatjaz Član


Pridružen-a: Pon 10 Nov 2003 16:33 Prispevkov: 846 Aktiv.: 3.57
|
Objavljeno: Čet Apr 19, 2007 9:12 pm Naslov sporočila: |
|
|
Migracija z vidika Bascoma je sorazmerno preprosta, ker je to produkt istega proizvajalca. Glede na to da dobro obvladaš 8051 je to preprosto. Nekaj razlik je, ki jih lahko prebereš v AVR Helpu.
Jaz sem imel največ težav z nastavitvijo izhodov, vhodov (DDRX) in ukazom mislim da Rotate (8051) in Shift (AVR). Razlika je tudi v delu s serijskim vmesnikom, kjer (8051) scon0 bita ne moreš kontrolirat. Je pa res, da so tu drugi registri z "več možnostmi".Assemblerja v veliki meri (AVR) nisem uporabljal, čeprav sem z 8051 kar nekaj delal. Priznam, da pa svojih knjižnic tudi nisem izdeloval.
Vse aplikacije iz sveta 8051 en boš mogel kar direktno konvertirati in bo potebno popraviti nekaj kozmetičnih malenkosti.
Razlike:
Changes compared to BASCOM-8051
The design goal was to make BASCOM-AVR compatible with BASCOM-8051.
For the AVR compiler some statements had to be removed.
New statements were also added. And some statements were changed.
They need specific attention, but the changes to the syntax will be made available to BASCOM-8051 too in the future.
Statements that were removed
STATEMENT
DESCRIPTION
$LARGE
Not needed anymore.
$ROMSTART
Code always starts at address 0 for the AVR. Added again in 1.11.6.2
$LCDHEX
Use LCD Hex(var) instead.
$NOINIT
Not needed anymore. Added in 1.11.6.2
$NOSP
Not needed anymore
$NOBREAK
Can't be used anymore because there is no object code that can be used for it.
$OBJ
Removed.
BREAK
Can't be used anymore because there is no object code that can be used for it.
PRIORITY
AVR does no allow setting priority of interrupts
PRINTHEX
You can use Print Hex(var) now
LCDHEX
You can use Lcd Hex(var) now
Statements that were added
STATEMENT
DESCRIPTION
FUNCTION
You can define your own user FUNCTIONS.
LOCAL
You can have LOCAL variables in SUB routines or FUNCTIONS.
^
New math statement. Var = 2 ^ 3 will return 2*2*2
SHIFT
Because ROTATE was changed, I added the SHIFT statement. SHIFT works just like ROTATE, but when shifted left, the LS BIT is cleared and the carry doesn't go to the LS BIT.
LTRIM
LTRIM, trims the leftmost spaces of a string.
RTRIM
RTRIM, trims the rightmost spaces of a string.
TRIM
TRIM, trims both the leftmost and rightmost spaces of a string.
Statements that behave differently
STATEMENT
DESCRIPTION
ROTATE
Rotate now behaves like the ASM rotate, this means that the carry will go to the most significant bit of a variable or the least significant bit of a variable.
CONST
String were added to the CONST statement. I also changed it to be compatible with QB.
DECLARE
BYVAL has been added since real subprograms are now supported.
DIM
You can now specify the location in memory of the variable.
Dim v as byte AT 100, will use memory location 100.
LP M.
_________________ Električni aparati delujejo na dim ... ko dim iz njih uide ... ne delujejo več! |
|
Nazaj na vrh |
|
 |
vilko Član



Pridružen-a: Pet 13 Feb 2004 10:26 Prispevkov: 3359 Aktiv.: 14.18 Kraj: Dragomer
|
Objavljeno: Čet Apr 19, 2007 9:30 pm Naslov sporočila: Zakaj mi dela cca 10krat prepočasi? |
|
|
Hvala Matjaž,
Ker sem tehniko reševanja variabel uporabljal push/pop ukaze, le teh za bajte rama AVR očitno nima več. Zato bom moral vse podprograme preprogramirati, definirati nove spremenljivke, ker obstoječe ne smem definirati local z istim imenom, to pa pomeni spremembe skoraj v vsakem bascom ukazu v pdoprogramu in posledično vgrajevanje in odstranjevanje na novo vgrajenih napak. Nisem prepričan, ali se bom le tega lotil.
To seveda niso kozmetične malenkosti.
Pa tudi sicer se mi dogajajo stvari, ki si jih ne znam razložiti. Na primer:
Prižiganje in ugašanje ledice na portc.0:
Koda: |
$regfile = "m16def.dat" ' specify the used micro
'$crystal = 11059200 ' used crystal frequency
$crystal = 8000000 ' used crystal frequency
$baud = 19200 ' use baud rate
$hwstack = 32 ' default use 32 for the hardware stack
$swstack = 10 ' default use 10 for the SW stack
$framesize = 40 ' default use 40 for the frame space
Ddrc = &B10111111
Portc = &B01000000
Wait 1
Do
Portc = &B01000000
Wait 1
Portc = &B01000001
Wait 1
Loop
|
Ledica se mi prižiga in ugaša cca 10 krat počasneje kot na eno sekundo, ne glede na to, kakšnen $crystal ukaz dam.
|
|
Nazaj na vrh |
|
 |
. Član

Pridružen-a: Ned 19 Sep 2004 22:04 Prispevkov: 16777193 Aktiv.: 70819.56
|
Objavljeno: Čet Apr 19, 2007 9:59 pm Naslov sporočila: |
|
|
Brisana vsebina odstranjenega uporabnika.
|
|
Nazaj na vrh |
|
 |
vilko Član



Pridružen-a: Pet 13 Feb 2004 10:26 Prispevkov: 3359 Aktiv.: 14.18 Kraj: Dragomer
|
Objavljeno: Čet Apr 19, 2007 10:22 pm Naslov sporočila: ne pozabil |
|
|
ne pozabil nisem, a nimam pojma, kako to narediti.
enostavno kopiram sample pa kaj spremenim, kar razumem, kar ne razumem pustim na miru.
|
|
Nazaj na vrh |
|
 |
smatjaz Član


Pridružen-a: Pon 10 Nov 2003 16:33 Prispevkov: 846 Aktiv.: 3.57
|
Objavljeno: Čet Apr 19, 2007 10:31 pm Naslov sporočila: |
|
|
Problem imaš, ker imaš "default" nastavljeno na AVR-ju na interni kristal 1000000Hz, priključil pa si še zunajega. To zadevo zelooo upočasni. Torej F4 Lock and Fuse bits in nastavi željeno.
V kolikor to ne boš naredil je najenostavneje v tem primeru, če odlotaš qvarz, in nastaviš:
$crystal = 1000000
Poskusi, to bi moralo delati.
Lp M.
_________________ Električni aparati delujejo na dim ... ko dim iz njih uide ... ne delujejo več! |
|
Nazaj na vrh |
|
 |
vilko Član



Pridružen-a: Pet 13 Feb 2004 10:26 Prispevkov: 3359 Aktiv.: 14.18 Kraj: Dragomer
|
Objavljeno: Čet Apr 19, 2007 10:45 pm Naslov sporočila: ja, ce dam |
|
|
Ja, ce dam $crystal = 1000000 dela približno v redu.
Če hočem postaviti kake fuse bite na isp programatorju dobim sledečo sliko. Kaj naj odkljukam?
Opis: |
|
Velikost datoteke: |
41.16 KB |
Pogledana: |
9 krat |

|
|
|
Nazaj na vrh |
|
 |
. Član

Pridružen-a: Ned 19 Sep 2004 22:04 Prispevkov: 16777193 Aktiv.: 70819.56
|
Objavljeno: Čet Apr 19, 2007 10:47 pm Naslov sporočila: |
|
|
Brisana vsebina odstranjenega uporabnika.
|
|
Nazaj na vrh |
|
 |
smatjaz Član


Pridružen-a: Pon 10 Nov 2003 16:33 Prispevkov: 846 Aktiv.: 3.57
|
Objavljeno: Čet Apr 19, 2007 10:54 pm Naslov sporočila: |
|
|
Jaz uporabljam simple electronics AVR programmer in to nastavljam tukaj.
Glej prilogo.
P.S. Ker je nova verzija AVR Bascom moraš pritisniti PRG in ne tipko, kisem jo označil (Write FS)
Opis: |
|
Velikost datoteke: |
74.49 KB |
Pogledana: |
14 krat |

|
_________________ Električni aparati delujejo na dim ... ko dim iz njih uide ... ne delujejo več! |
|
Nazaj na vrh |
|
 |
vilko Član



Pridružen-a: Pet 13 Feb 2004 10:26 Prispevkov: 3359 Aktiv.: 14.18 Kraj: Dragomer
|
Objavljeno: Čet Apr 19, 2007 11:21 pm Naslov sporočila: hvala |
|
|
hvala
s pomočjo Jureta (preko skypa) sva uspela postaviti cksel bite tako, da razume, da ima eksterni oscilator.
Sedaj utripa v redu...
Koliko se bo še treba učiti. Včasih imam občutek, da so si kaj izmislili iz same žlehtnobe, da se uporabniki bolj spotikamo, ko zadevo skušamo naštudirati..
Lahko noč in še enkrat hvala
|
|
Nazaj na vrh |
|
 |
jurem Član


Pridružen-a: Tor 02 Dec 2003 15:53 Prispevkov: 408 Aktiv.: 1.72 Kraj: Ljubljana
|
Objavljeno: Čet Apr 19, 2007 11:49 pm Naslov sporočila: Re: hvala |
|
|
vilko je napisal/a: |
hvala
s pomočjo Jureta (preko skypa) sva uspela postaviti cksel bite tako, da razume, da ima eksterni oscilator. |
Pravzaprav sva nastavila na zunanji kvarc, ne oscilator.
vilko je napisal/a: |
Včasih imam občutek, da so si kaj izmislili iz same žlehtnobe, da se uporabniki bolj spotikamo, ko zadevo skušamo naštudirati..
Lahko noč in še enkrat hvala |
Ma ja, malo je tudi splet okoliščin. Namreč nabasal si ravno na SPI programator, ki nima razloženih Fuse bitov, če bi uporabljal Sample ali recimo Proggy programator, bi ti bilo lažje nastavit fuse bite...
Lp
Jure
|
|
Nazaj na vrh |
|
 |
|
|
Ne, ne moreš dodajati novih tem v tem forumu Ne, ne moreš odgovarjati na teme v tem forumu Ne, ne moreš urejati svojih prispevkov v tem forumu Ne, ne moreš brisati svojih prispevkov v tem forumu Ne ne moreš glasovati v anketi v tem forumu Ne, ne moreš pripeti datotek v tem forumu Ne, ne moreš povleči datotek v tem forumu
|
Uptime: 493 dni
Powered by phpBB © 2001, 2005 phpBB Group
|