ASM alapok - makró

Rendszerközeli nyelv(ek) tippjei, alkalmazásai
Avatar
etwg
Bitmanipulátor
Hozzászólások: 144
Csatlakozott: 2011. február 7. hétfő, 7:00
Tartózkodási hely: Ausztria
Kapcsolat:

Makrok

HozzászólásSzerző: etwg » 2011. július 17. vasárnap, 21:35

Tudnátok valami alaputmutatot adni, hogyan kell makrokat használni ASM programokban. Egy egy programom belül még valahogy elboldogulok (call - ret) parancsokkal, de van egy másik eljárás is, amikor az ember az univerzális (egyszer és mindenkorra) macrokat megirja, és azokat, ha kell beilleszti a programba.

pl. valahogy igy:

.include "..\macro\macro.inc"
.include "..\core2313\corermb.inc"



A kérdésem hogyan kell az ilyeneket kezelni, hogyan kell használni a változokat és az eredményeket.

Jo volna egy tananyag ahol számomra is érthetö formában elmagyarázzák a dolgok minkéntjét.

Kösz.

Avatar
Robert
Elektronbűvölő
Hozzászólások: 9813
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

HozzászólásSzerző: Robert » 2011. július 18. hétfő, 4:18


Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3216
Csatlakozott: 2008. augusztus 29. péntek, 6:00
Tartózkodási hely: Újkígyós

HozzászólásSzerző: kapu48 » 2011. július 18. hétfő, 6:19

Még van az Atmel oldalán is pár példa:
http://www.atmel.com/dyn/resources/prod ... oc1022.pdf

Nem viszik túlzásba a téma ismertetését!
Szerintem a kész művek értelmezéséből lehet a legtöbb hasznos fogást ellesni!
:wink:

Avatar
Robert
Elektronbűvölő
Hozzászólások: 9813
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

HozzászólásSzerző: Robert » 2011. július 18. hétfő, 6:34

Kérdés, hogy a teljes program ASM megírásának van-e jövője. ASM betét ill hibakeresés esetén az ismerete nem hátrány :) .

De ASM alapon a SDkártya kezelés + Ethernet csomag - na ez a kihívás!

Avatar
etwg
Bitmanipulátor
Hozzászólások: 144
Csatlakozott: 2011. február 7. hétfő, 7:00
Tartózkodási hely: Ausztria
Kapcsolat:

HozzászólásSzerző: etwg » 2011. július 18. hétfő, 6:44

kapu48 írta:Még van az Atmel oldalán is pár példa:
http://www.atmel.com/dyn/resources/prod ... oc1022.pdf

Nem viszik túlzásba a téma ismertetését!
Szerintem a kész művek értelmezéséből lehet a legtöbb hasznos fogást ellesni!
:wink:



Kösz mindkettötöknek. Természetesen mindkét forrást ismerem, és éppen ez a baj, hogy mind a kettöben eléggé mellözik a témát. Kaptam néhány példát, azon akarom magam átrágni, de sajnos egy eléggé más témakörböl valok, igy nem olyan egyszerü a dolog. (Ahhoz jobban kellene ismerni azt a müszaki környezetet).
Gondoltam, hogy van az AVR kezdöknek tipusu anyag - amit még nem ismerek és ezekkel a szerintem eléggé hatásos programozási technikával foglalkozik.

Nem tudom, ismeri valaki a Franzis kiadó könyvét:

http://www.franzis.de/elektronik/avr-ri ... entwickeln

Lehetnek ebben ilyen témáju információk?

Avatar
Robert
Elektronbűvölő
Hozzászólások: 9813
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

HozzászólásSzerző: Robert » 2011. július 18. hétfő, 7:25

Körbelesni a szürke zónában PDFként?

Esetleg a GoogleBookson lehet jónéhány oldala fenn....

Avatar
etwg
Bitmanipulátor
Hozzászólások: 144
Csatlakozott: 2011. február 7. hétfő, 7:00
Tartózkodási hely: Ausztria
Kapcsolat:

HozzászólásSzerző: etwg » 2011. július 18. hétfő, 10:51

Robert írta:Körbelesni a szürke zónában PDFként?

Esetleg a GoogleBookson lehet jónéhány oldala fenn....


Kösz. Ez a könyv sajnos nincs fennt, de egy másik Günter Schmittöl fenn van, az is csak néhány oldalon (az 500-bol) foglalkozik a makrokkal. Ennek ellenére azt hiszem megveszem, mert jonak néz ki (ugyanaz a szerzöje mint at "AVR for beginners"-nek.)

Avatar
etwg
Bitmanipulátor
Hozzászólások: 144
Csatlakozott: 2011. február 7. hétfő, 7:00
Tartózkodási hely: Ausztria
Kapcsolat:

HozzászólásSzerző: etwg » 2012. február 17. péntek, 12:00

Eljutottam a köv. projektemhez, egy léptetömotor vezérlése.

Ebböl a projektböl indultam ki,

http://www.avr-asm-tutorial.net/avr_en/ ... tor_v1.asm

de sikerült átirnom finomabb lépésre (half step).

Az lennne a kérdésem, hogy szerintetek, hogyan lehetne a legelegánsabban megoldani az irányváltást.
Ez táblázatot használ az egyes lépésekre. Ha irányt akarok változtatni, akkor irhatok egy másik táblázatot, s onnan vehetném az értékeket. De lehet, hogy van jobb ötlet is, ill. hogyan lehetne az irányválto kapcsolot bekomponálni a programba.

Kösz!
Éljenek a vonatok!

http://www.youtube.com/playlist?list=PLF2674BF4E3765682

Avatar
Robert
Elektronbűvölő
Hozzászólások: 9813
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

HozzászólásSzerző: Robert » 2012. február 17. péntek, 12:30

Jegyzed, hogy a táblázat mely sorában vagy és onnan számolsz visszafele?

Avatar
etwg
Bitmanipulátor
Hozzászólások: 144
Csatlakozott: 2011. február 7. hétfő, 7:00
Tartózkodási hely: Ausztria
Kapcsolat:

HozzászólásSzerző: etwg » 2012. február 17. péntek, 13:10

Kösz, majd kiprobálom....
Éljenek a vonatok!

http://www.youtube.com/playlist?list=PLF2674BF4E3765682

Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3216
Csatlakozott: 2008. augusztus 29. péntek, 6:00
Tartózkodási hely: Újkígyós

HozzászólásSzerző: kapu48 » 2012. február 17. péntek, 14:00

Az én értelmezésem szerint már bene van az irányváltás!
Timer megszakításban vizsgálja, hogy kisebb az ADC érték mint az előző akkor visszafelé lép.

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

; Timer-Counter 0 Compare A Interrupt Service Routine
; Ha jól értelmezem az általam komentezet részt?
Tc0IntCA:
 in rSreg,SREG ; save status
 ; összehasonlítása az aktuális és a célérték
 cp rSmIL,rSmSL ; compare actual with target value
 cpc rSmIH,rSmSH
;ugrás, ha egyenlő
 breq Tc0IntCA0 ; jump if equal
; Tényleges érték kevesebb, mint cél
 brcs Tc0IntCAF ; actual less than target value
;  Nagyobb, mint a tényleges cél, egy lépést hátra
 sbiw rSmIL,1 ; actual greater than target, one step back
 rjmp Tc0IntCAS
Tc0IntCAF:
; Egyébként Egy lépés előre
 adiw rSmIL,1 ; one step forward
Tc0IntCAS:

 mov rimp,rSmIL ; copy actual value LSB

 andi rimp,0x03 ; isolate lowest two bit

 ldi ZH,HIGH(2*SmTab) ; point Z to table in flash memory
 ldi ZL,LOW(2*SmTab)

 add ZL,rimp ; add the two lowest bits
 ldi rimp,0 ; update upper Byte
 adc ZH,rimp
 lpm ; read next value from table to R0
 .IF debug_out == 0
  out PORTB,R0 ; write value to port
  .ENDIF
 ldi XH,HIGH(cSmDelay) ; restart delay counter
 ldi XL,LOW(cSmDelay)
 out SREG,rSreg ; restore status
 reti

Tc0IntCA0:
 sbiw XL,1 ; decrease delay counter
 brne Tc0IntCAD ; not yet zero
 ldi rimp,0 ; switch of current on coils
 out PORTB,rimp ; to output driver
 ldi XH,HIGH(cSmDelay) ; restart delay counter
 ldi XL,LOW(cSmDelay)
Tc0IntCAD:
 out SREG,rSreg ; restore status
 reti


Sajnos elégé bonyolult ahhoz, hogy hirtelen nyomon lehessen követni.
Mert minden megszakításban van!
Szerintem első lépésnek komentezd ki a programot, hogy megértsed, hól mi történik.
Aztán már adódik, hogy hól kel a címszámításon változtatni.
Szerintem Itt címzi a Steper táblázatot:
ldi ZH,HIGH(2*SmTab) ; point Z to table in flash memory
ldi ZL,LOW(2*SmTab)

PB3 még szabad oda tehetsz irányváltó kapcsolót.
:idea:

Ui.: Bár jobban belegondolva lehet, hogy ott csak a lépés sebességet állítja?
:?

Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3216
Csatlakozott: 2008. augusztus 29. péntek, 6:00
Tartózkodási hely: Újkígyós

HozzászólásSzerző: kapu48 » 2012. február 17. péntek, 14:51

Hasznos ASM forrás oldalt találtál!
Legyen itt a címe, mert érdemes böngészgetni!
Links to all source files of this tutorial
http://www.avr-asm-tutorial.net/avr_en/source/
:lol: :arrow:

Avatar
etwg
Bitmanipulátor
Hozzászólások: 144
Csatlakozott: 2011. február 7. hétfő, 7:00
Tartózkodási hely: Ausztria
Kapcsolat:

HozzászólásSzerző: etwg » 2012. február 17. péntek, 14:56

A Z regiszterekben vannak a táblák, azt már átirtam. Delután már meglesz a HW igy kiprobálom.

A motor az ADC vel van vezérelve 5 és kb 1000 Hz tartományban (ezket már kinyomoztam, mert nekem lassabb fog kelleni, igy ezeket firtattam elöször, és az ADC pontosan a PB4-portot használja, ezen még elrágodok, hogy hogyan tudom berakni az irányválto kapcsolót.

A motort a PB0,1,2 és 3 portok hajtják meg (4 kivezetés kell).

Addig is kösz, majd jelentkezek a valos tapasztalatokkal....
Éljenek a vonatok!

http://www.youtube.com/playlist?list=PLF2674BF4E3765682

Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3216
Csatlakozott: 2008. augusztus 29. péntek, 6:00
Tartózkodási hely: Újkígyós

HozzászólásSzerző: kapu48 » 2012. február 17. péntek, 15:39

Akkor ötlet!
Oszd középen ketté az ADC tartományt.
És pl. az H fele legyen jobbra forgás, a L fele pedig balra forgás.
Vagyis ADC középértéken áll a motor. Középtől felfele jobbra, lefele balra kezd forogni.
:idea:

Avatar
etwg
Bitmanipulátor
Hozzászólások: 144
Csatlakozott: 2011. február 7. hétfő, 7:00
Tartózkodási hely: Ausztria
Kapcsolat:

HozzászólásSzerző: etwg » 2012. február 17. péntek, 17:21

Nekem is ezt tünt a legegyszerübbnek.

Kösz, megyek forrasztani....
Éljenek a vonatok!

http://www.youtube.com/playlist?list=PLF2674BF4E3765682


Vissza: “ASM programozás”

Ki van itt

Jelenlévő fórumozók: nincs regisztrált felhasználó valamint 1 vendég