ASM minták?
Re: ASM minták?
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.
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
http://www.youtube.com/playlist?list=PLF2674BF4E3765682
Re: ASM minták?
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!
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
http://www.youtube.com/playlist?list=PLF2674BF4E3765682
Re: ASM minták?
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
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
Re: ASM minták?
Kösz igy csinálom, gondoltam lehet más csoportos eljárás. Na akkor folytatom.
Éljenek a vonatok!
http://www.youtube.com/playlist?list=PLF2674BF4E3765682
http://www.youtube.com/playlist?list=PLF2674BF4E3765682
Re: ASM minták?
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!
Assembly Language of
ATMEL-AVR-Microprocessors
http://avr-asm-download.de/beginner_en.pdf
Van 3 regiszter:
11.3.9 EEPROM
Ezekkel lehet ügyeskedni!
Re: ASM minták?
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)
Éljenek a vonatok!
http://www.youtube.com/playlist?list=PLF2674BF4E3765682
http://www.youtube.com/playlist?list=PLF2674BF4E3765682
Re: ASM minták?
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.
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
http://www.youtube.com/playlist?list=PLF2674BF4E3765682
Re: ASM minták?
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?
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?
Re: ASM minták?
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.
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
http://www.youtube.com/playlist?list=PLF2674BF4E3765682
Re: ASM minták?
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).
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).
Re: ASM minták?
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
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
Re: ASM minták?
Muszáj ASM-ben, mert a többihez még gyengébb vagyok.
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.
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
http://www.youtube.com/playlist?list=PLF2674BF4E3765682
Re: ASM minták?
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...
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...
Re: ASM minták?
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......
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
http://www.youtube.com/playlist?list=PLF2674BF4E3765682
Re: ASM minták?
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
http://www.youtube.com/playlist?list=PLF2674BF4E3765682