ASM alapok - makró

Rendszerközeli nyelv(ek) tippjei, alkalmazásai
Válasz küldése
Avatar
etwg
Pákabűvész
Hozzászólások: 213
Csatlakozott: 2011. február 7. hétfő, 7:00

Makrok

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

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: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

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

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

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

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: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

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

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
Pákabűvész
Hozzászólások: 213
Csatlakozott: 2011. február 7. hétfő, 7:00

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

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: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

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

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

Esetleg a GoogleBookson lehet jónéhány oldala fenn....
Avatar
etwg
Pákabűvész
Hozzászólások: 213
Csatlakozott: 2011. február 7. hétfő, 7:00

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

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
Pákabűvész
Hozzászólások: 213
Csatlakozott: 2011. február 7. hétfő, 7:00

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

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: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

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

Jegyzed, hogy a táblázat mely sorában vagy és onnan számolsz visszafele?
Avatar
etwg
Pákabűvész
Hozzászólások: 213
Csatlakozott: 2011. február 7. hétfő, 7:00

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

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

http://www.youtube.com/playlist?list=PLF2674BF4E3765682
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 é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: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

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

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
Pákabűvész
Hozzászólások: 213
Csatlakozott: 2011. február 7. hétfő, 7:00

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

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: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

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

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
Pákabűvész
Hozzászólások: 213
Csatlakozott: 2011. február 7. hétfő, 7:00

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

Nekem is ezt tünt a legegyszerübbnek.

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

http://www.youtube.com/playlist?list=PLF2674BF4E3765682
Válasz küldése