ASM minták?

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

Re: ASM minták?

HozzászólásSzerző: etwg » 2013. szeptember 20. péntek, 11:20

Gyakorlatilag nincs sok változo:
Idö 00
lépés, max 800
REP: max 99

De ez az utolsó csak az elöbbi kettö elmulása után változik, azaz a leggyorsabb percenként, a leglassubb 99 perc, habár ott még gondolkok, hogy ne-e szükitsem le 60 percre az idöt (azaz egy ora egy ciklus), amit aztán a REP ismétel.

Nos ezeket az adatokat 2-szer kell majd kiirni, mert két egymástol független motor van.

Sajnos sem tegnap, sem ma nem volt még idöm továbbirni a kodot, igy marad majd a hétvége, vagy az éjszaka. :)
Éljenek a vonatok!

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

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

Re: ASM minták?

HozzászólásSzerző: etwg » 2013. szeptember 21. szombat, 9:36

Egy kérdés,

Hogyan szokták az EEPROM-t kezelni?
Nekem a kétszer kell 4 byte-t meg egy bitet elrakni.
Egyenként kell meghatározni a helyeket vagy lehet valahogyan csoportosan is. Pl 2 csoportot a fenti adatmennyiségre?

Kösz!
Éljenek a vonatok!

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

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

Re: ASM minták?

HozzászólásSzerző: Robert » 2013. szeptember 21. szombat, 9:58

ASM-ben?

Auto inkrementálás van.
1, Hova írsz (cím)
2, Mit (byte)

Egy magyarázatos tipp:
https://sites.google.com/site/avrasmint ... the-eeprom

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

Re: ASM minták?

HozzászólásSzerző: etwg » 2013. szeptember 21. szombat, 12:16

Kösz igy csinálom, gondoltam lehet más csoportos eljárás. Na akkor folytatom. :D
Éljenek a vonatok!

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

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

Re: ASM minták?

HozzászólásSzerző: kapu48 » 2013. szeptember 21. szombat, 12:28

Beginners Introduction to the
Assembly Language of
ATMEL-AVR-Microprocessors
http://avr-asm-download.de/beginner_en.pdf

Van 3 regiszter:
11.3.9 EEPROM

Ezekkel lehet ügyeskedni!

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

Re: ASM minták?

HozzászólásSzerző: etwg » 2013. szeptember 21. szombat, 17:49

Kösz, ezekkel igyekszem ügyeskedni már tegnap ota. Megy is csak tul bonyolultnak tünt, gondoltam, hogy a nagyok egyszerübben csinálják. ( vagy valamiyen trükk)
:D
Éljenek a vonatok!

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

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

Re: ASM minták?

HozzászólásSzerző: etwg » 2013. szeptember 27. péntek, 7:50

Sziasztok.

Lassan kiprobáltam a programom valamennyi részfeladatát, többé kevésbé minden müködik, ha nem is minden ugy ahogy gondoltam, de hát mindig tanul az ember. Most eljutottam (számomra) a legnehezebb feladathoz, az egyes részkodokat össze kellene hozni. Igyekeztem többé kevésbé betartani eddig is a regiszterek kiosztását stb. de mégis vannak sajnos konfliktusok, amikkel nem igen tudok még mit kezdeni. (föleg a makrokban).
A másik baj meg az, hogy igen lassu jelek generálásáról van szó (1 impulzus 4 percenként egészen 30 impulzus másodpercenkénti tartományban), és gyakran kerülök "division by zero" hibába.


Az egész kod 4 fö blokkból áll:

1. Az egyes jellemzök kiolvasása az EEPROMból.
2. Müködés - a kiolvasott jellemzök alapján (ez azt jelenti, hogy két igen lassu impulzus generátor frekijét (az idö meg a lépésszám ismert az EEPROMból) kell elöször kiszámitani, majd elküldeni a két portra, és ott megszámolni, hogy hány impulzus került ki a motorokba).
3. Az EEPROM programozása - a jellemzök beirása.
4. Manuális müködés - a két motor nyomogombokkal (4 darab) történö kézi forgatása.

Ezenkivül még a display meghajtása a feladat, ami mutatja az EEPROM-ból kiolvasott paramétereket, illetve az irt paramétereket, meg esetleg (ha sikerül megcsinálni), a müködés alatt a berendezés állapotát.

Szerintetek mi lenne a legegyszerübb megoldás ezen dolgok összehozására. (ATmega644A-val dologozok). Egy barátom szerint interrupttal kellene dolgozni (azt még sohasem használtam).

Kösz az ötleteket.
Éljenek a vonatok!

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

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

Re: ASM minták?

HozzászólásSzerző: kapu48 » 2013. szeptember 27. péntek, 10:31

Kérdés Mivel akarsz interruptot kérni?

Itt van 1 példa: INT Timer/Counter 0 Overflow, my jump-vector!
http://www.avr-asm-tutorial.net/avr_en/source/TEST4.asm

A te uC-nek más az interrupt-vector sorrendje, ezt megtalálod az adatlapban.

Osztás előtt illik ellenőrizni az osztót, hogy nem 0-e?

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

Re: ASM minták?

HozzászólásSzerző: etwg » 2013. szeptember 27. péntek, 11:04

Szia kösz, majd még rágcsálom.

Pontosan az a baj, hogy nem okvetlenül 0-vál osztok (az ki lett zárva), de még nem tudom miért, olyan számot kapok, amit nullának néz a nagyon alacsony frekvencia miatt (0,0066 stb.).

Az interruptokat föleg a kimenö impulzusokra gondoltam, amik az emlitett 0,004-30Hz tartományban vannak.

De lehet, hogy ésszerübb lenne az amugy is nagyon hosszu müködési részbe bevinni egy interruptot (pl. valamelyik nyomogomb), hogy ki lehessen lépni a müködési szakaszból. (ujraprogramozni stb.).

Pontosan ez a dilemmám.
Éljenek a vonatok!

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

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

Re: ASM minták?

HozzászólásSzerző: kapu48 » 2013. szeptember 27. péntek, 13:00

Pont erre jó a timer megszakítás.

Pl.: beállítasz 1mp megszakítást, és az int rutinban számlálod a másodperceket.
(Akár több változóban is.)

És ha letelt a kívánt várakozás,
0-ázod a számlálót,
És végrehajtod a kívánt (ritka) eseményt.

Közben fut a fő program hurok, amiben feldolgozhatsz akár (LCD vagy Gombfigyelést).

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

Re: ASM minták?

HozzászólásSzerző: Robert » 2013. szeptember 27. péntek, 13:54

Muszály ASM-ben ? :)

A főprogramban do-loop / LCD kezelés

A többi alprogram INT alapon futtatva?
- gomb INT alapon
- kijelző kezelés afőprogramban, de jelzőbitet bebillentve, hogy most a kijelzőt kell kezelni
- időzítés INT + Overflow számolás alapon

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

Re: ASM minták?

HozzászólásSzerző: etwg » 2013. szeptember 27. péntek, 13:56

Muszáj ASM-ben, mert a többihez még gyengébb vagyok.
:D
Ezt ugy értsem, hogy a kezdö jellemzökböl kiszámolom a kiadando frekvenciát, mondjuk 5 másodpercenként egy impulzust, ezt állitom be az interruptban, azaz, hogy az adott számolt freki szerint szakitgassa meg a programot, adja ki a kimentre a kivánt impulzus majd térjen vissza a belsö rutinokra?

Mennyire lehet ekkora tartományban a megszakitással játszani? (0,004 -30Hz-es tartományban). Ráadásul nekem két egymástol független frekvencia van, akkor melyik legyen a a megszakitás frekvenciája?

Kösz.
Éljenek a vonatok!

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

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

Re: ASM minták?

HozzászólásSzerző: Robert » 2013. szeptember 27. péntek, 14:59

Két tipp a két frekvenciára:

1, legkisebb közös osztó elvén, ennek időszelete legyen aTimer interrupt. Itt fut benn két számláló, aminek a billenési küszöbértéke a "hány ilyen időszelet után kell a kimenetet billenteni". és két ilyen számlálód van. Persze az időszeletkezelés INT alapon megy, a Timer INT-re rakod rá. A számláló nem biztos hogy elég a byte. 30 Hz vs 0,0004 Hz esetén a periódusidő: 33ms illetve 2500 sec! Itt ha ezt egyben kezeled, akkor a 75700x a különbség. Ez meg már a LONG típus tartománya! Sőt, ekkor ha 1 vagy 2 szelet veszek legkisebbnek, akkor 30 vs 15 Hz a legkisebb frekvenia! Ha ezt szabályozni akarod, akkor a legkisebb időszelet legyen 1 ms, így a 30 Hz , így +/-0,1 Hz pontosságod lesz (ha nem számoltam el).

2, ha a kimenetváltozás a Timer leglassabb módjába belefér, mindkét időeseményre indítasz 1-1 Timer-t és a Timer-ek kezdőértélke megadható, így a billenés (idő letelése) teljesen jól kezelhető. Ezzel viszont ott a gond, hogy milyen felbontás/pontossággal adható ez meg? Ez a nemjavasolt megoldás... :)

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

Re: ASM minták?

HozzászólásSzerző: etwg » 2013. szeptember 27. péntek, 17:21

Kösz már kezdem érteni, de valamit elszámoltam. Eddig abbol indultam ki, hogy a leglassabb freki 240 másodpercenként ad ki egy impulzust. Neked ennek a 10x-rese jött ki. :(
Ezt még gyakorlatilag elérem egy 8 bites osztoval, ha az eredetileg 1 másodperces INT leosztom. Ha mégsem lenne jo, akkor még egy külsö oszto belefér a dologba. Igy maradjuk a leglassubb esetnél, ami 1 impulzus 240 másodpercenként. ( 4 perc alatt 1 lépés).
A másik dolog meg az impulzusok számlálása. Miután fontos, hogy mindkét motor elérje célját ( ezzel fejezödik be a folyamat, ugy gondoltam, higy egyszerübb a két kimenet összegét számolni és akkor van vége ha az összeg stimmel, igy egy összehasonlitással megoldom a kérdést ( remélem).
A két freki eredöje egy érdekes dolog lesz......
Éljenek a vonatok!

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

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

Re: ASM minták?

HozzászólásSzerző: etwg » 2013. szeptember 30. hétfő, 6:44

Elkzdtem redukálni a dolgokat - föleg a felbontást csökkentettem, max kb 1 fok/sec. Igaz, hogy a háttérben ez meg mindig kb. 80 impulzust jelent, azaz 80Hz (ha kibirja ezt a motor - még nem probáltam). Ez a leggyorsabb sebesség, a leglassubb meg 15fok/h =1 impulzus/ perc, azaz a szabályzási tartomány 1:540- re modosult ( csökkent).
É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