ASM alapok - makró
Makrok
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.
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.
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!
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!
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!
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?
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.)Robert írta:Körbelesni a szürke zónában PDFként?
Esetleg a GoogleBookson lehet jónéhány oldala fenn....
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!
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
http://www.youtube.com/playlist?list=PLF2674BF4E3765682
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.
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.
Ui.: Bár jobban belegondolva lehet, hogy ott csak a lépés sebességet állítja?
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
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.
Ui.: Bár jobban belegondolva lehet, hogy ott csak a lépés sebességet állítja?
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/
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/
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....
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
http://www.youtube.com/playlist?list=PLF2674BF4E3765682