A privát üzenet rendszerben karbantartásokat végzünk. Lassulások előfordulhatnak!
Fórum témák
» Több friss téma |
WinAVR / GCC alapszabályok: 1. Ha ISR-ben használsz globális változót, az legyen "volatile" 2. Soha ne érjen véget a main() függvény 3. UART/USART hibák 99,9% a rossz órajel miatt van 4. Kerüld el a -O0 optimalizációs beállítást minden áron 5. Ha nem jó a _delay időzítése, akkor túllépted a 65ms-et, vagy rossz az optimalizációs beállítás 6. Ha a PORTC-n nem működik valami, kapcsold ki a JTAG-et Bővebben: AVR-libc FAQ
Nos holnap neki ülök egész délután, ki kéne hoznom belőle valamit, és majd kipróbálom amit most írtál.
Amúgy amit linkeltem AVR oldalról az az AVR Studio5ben generált EVK1101-es mintaprogram, az alapján írtam/másoltam én is. Ugye abban is benne van ez a .CMR.stbstb ami nálam nem fordul le sajnos csak ha beírom ezt: avr32_pwm_cmr_tpwm_cmr; Nem tudom ez mennyire probléma. Továbbá ez mit jelenthet, mert ezt a sort nem értem: pwm_start_channels(1 << channel_id); // Start channel 0. ? Köszönöm:Gergő>>
A header fajlban melle van kommentelve. Huzd ra a kurzort a fuggveny nevere es megjelenik egy kis ablakban egy rovid leiras.
En a helyedben kozvetlen irnam a regisztereket, nem a gyari fuggvenyekkel, nekem ugy gond nelkul mukodott a pwm.
Igen a find references-t ismerem azt is nézegettem, de nem jutottam messze.
És a közvetlen regiszteres megoldás, úgy nagy vonalakban hogy néz ki, hogyan kezdjek neki, abban tudsz segíteni?
Sziasztok!
Szeretnék egy kis segítséget kérni tőletek. Elkezdtem egy Atmega128-as processzort programozni assembly-ben, pontosabban a programozását elsajátítani. Egy kicsit hátrányba kerültem azzal, hogy nem tudok angolul. Szeretnék kérni tőletek pár anyagot (magyarul) és ha lehet minta programot hozzá. Főként a megszakításokról mert erre nem bírok rájönni, hogy hogyan is akar működni. Nem találok érthető leírást az IT vektortábláról, hogy mi is az pontosan, miért kell és hogyan működik. Előre is köszönöm.
Szia!
Ha assemblyben progizol, akkor nézd át a hozzászólásaimat, töltöttem fel régebben egy-egy pdf-t, az utasítások magyarázatával, magyarul. Megszakítás: Maga128A adatlapja, 11. fejezet. ott a tábla a megszakításkor a címekkel. Mindegyiknek ott a leírása, 3-4 angol szó, amit szerintem te is értesz.(ha nem, akkor barátod a google) Én még Mega16-t használok, nekem ez az alapprogramom:
Ha valamelyik megszakítást használom, akkor őt kikommentelem és létrehozom újra, saját reti-vel zárva.(példámban a TIM1_COMPA) Remélem érthető a megoldásom.
Köszönöm a választ. A megoldásod logikája érthető, de a pdf-eket még nem lelem. kicsit sok ez a ~370 oldal...
Tessék itt a ATMega128A datasheet-je ~7,4MB
Igen, annyi oldal, de csak azért, mert minden benne van. Ez alapján BÁRMIT meg tudsz vele csinálni. Üdv Kiborg
Mérés2-höz elég az assembly utasításokat és néhány interruptot(timer1_compA, timer1_ovf, INT0-7) ismerni.
Az INT0-7 - hez ez EICRA és társai, illetve a timer/counter1 átlapozása sem árt, a többi nem kell. Esetleg ha kommunikáció is van akkor az UART, de csak aszinkron módba, és interrupt sem árt, így kényelmesebb. A 370-ből kb. 10-12 oldal ami kell, kár hogy a laborosok még mindig nem tudták zanzásítani!
És íme a házim. A kedves FÓRUM nem engedi bemásolni, szerinte sok benne a szmájli...
Én is Kandós voltam, de sajnos nem volt közöm Atmelhez Melyik szakon van ez ? Műszer ? Amúgy nem tudtam, hogy házihoz kell, én egy általános célra felhasználható alapot adtam, én minden programomat így indítom és utána erre építkezem,ami kell. Üdv Kiborg
Mikor tanultál itt? Prog 2 második fele erről szólt. Először asm-ben ismerkedtünk vele, aztán jött C-ben. Nyugalom sok okosságról nem maradtál le . Csak az alapokat mutatták meg, pl.: megszakításokról is csak szó esett, meg a perifériákról is, de konkrét programot nem írtunk arra sem.
Ha a regisztereket így definiálom:
#define PREAAVR32_PWM_PREA #define PREBAVR32_PWM_PREB #define DIVAAVR32_PWM_DIVA #define DIVBAVR32_PWM_DIVB #define ENAAVR32_PWM_ENA #define DISAVR32_PWM_DIS #define SRAVR32_PWM_SR #define IERAVR32_PWM_IER #define IDRAVR32_PWM_IDR #define IMRAVR32_PWM_IMR #define ISRAVR32_PWM_ISR #define CPREAVR32_PWM_CPRE #define CLAGAVR32_PWM_CALG #define CPOLAVR32_PWM_CALG #define CPDAVR32_PWM_CPD #define CDTYAVR32_PWM_CDTY #define CPRDAVR32_PWM_CPRE #define CNTAVR32_PWM_CNT #define CUPDAVR32_PWM_CUPD és adok neki értékeket mint például: CALG ==1; az helyes és működőképesnek kéne lennie? Üdv.:Gergő
Nem, mert te csak a nevet adtad meg. De minek a nevét? Szerintem az utolsó '_' nem kell, és akkor fog működni, ahogy azt elképzelted.
A define szintaktikája, ha átkeresztelni akarsz valamit:
Bocsánat most látom, hogy a szóközök valamiért lemaradtak, szóval csak az elsőt, és így a többit:
#define PREA AVR32_PWM_PREA Ez úgy van ahogy mondtad. Akkor így helyes, és az értékmegadási példám is helyes?
Ha AVR32_PWM_PREA akarod PREA néven is hozzáférhetővé tenni, akkor nincs gond. Feltéve ha nincs még egy ilyen nevezetű regiszter.
bocs: BME!!! A "mikor" kérdést valószínűleg azért teszed fel mert még meg se nézted a forráskódot.
Nincs ilyen nevű, az nem probléma le is fordul a program.
Elvileg ha meghatározott értékeket adok a regisztereknek el kéne indulna a motornak, és van egy külön regiszter amibe ha írok az változtatja a pwm jelet. Nos ha így megadom egyesével regiszterek értékeit: MR==0X00000000; ENA==0X00000001; CPRE==1000; CALG==1; CPOL==0; CPD==0; CDTY ==25; CPRD==50; az helyes?
Nem akarok kötekedő lenni, de te a "=="-vel érték összehasonlítást végzel, nem pedig értékadást .
A PWM lábat csak szimplán kimenetre kell állítani.
Még egy utolsó kérdés mára. Ha azt a lábat amit pwm-ként szeretnék kezelni sima gpio-ként magas vagy alacsony szintre emelem a motornak forognia kéne jól gondolom? Mert nálam ez se történik meg.
Hűha!
Ennek: #define PREA AVR32_PWM_PREA és társainak mi értelme van? Követve a logikádat folytatnám is:
És így akkor már nagyon egyszerű lesz. Persze átláthatatlan. Ami a motor vezérlést illeti: nagyon remélem, hogy van egy végfok a láb végén. Legyen ez a végfok egy darab tranzisztor mondjuk, akkor ezen a tranzisztoron remélem mindenképpen van egy flyback diode is. Az AVR32 lába kemény 20mA -es nagyságrendet képes táplálni.
Peldault ez az EVK1100 devboardon a DIP204-es lcd modul hattervilagitasat allitja PWM-el:
Ez utan mar mennie kell.
Az avr32-nek csak nehany laba tud 8mA-at, a tobbi csak 4mA.
Igaz! 10 es 20 kozott vacilaltam. De nagysagrendileg azert igy is eltalaltam. Motort meg igy se ugy se hajt meg. Csak feltem, hogy a kollega kepes es rakoti direktbe a motort.
Hali! Akkor BME, oda csak szerettem volna járni, bár így utólag nem látom bajnak, hogy nem oda sikerült a felvételi. Kandó 2001-2005. Amúgy meg én nem kérdeztem, hogy mikor Azt TE magad kérdezted tőlem Amúgy meg átnéztem a forráskódot. Tetszik, jó sok komment van benne, ami nálam általában le szokott maradni, csak egy minimálisat írok, de az meg nem mindig elég ahhoz, hogy 2-3 év múlva megértsem, hogy mit is akartam anno... Üdv Kiborg
köszönöm, de ez azért meg volt. Csak tudod az angol...
Egy kicsit pontosítanám a kérésemet. Van nekem egy encoder-em amit ha tekergetek akkor ugyebár két párhuzamosan keletkező időben eltolt négyszög jelem jön létre. Az EICRB megvan lefutó élet érzékelnék, INT 4 és INT 5 -re kötöttem.
Tehát arra lenne szükségem, hogy a két jel között különbséget tegyek. Feltételezem, hogy ehhez megszakítás kéne... Szóval ebben szeretnék segítséget kérni. (valami olyan kis pl programmal amiben csak ennek a IT vektortáblája van és az IT kezelő rutinja.) Bocsi mindenkitől a fárasztásért, de még nagyon az elején vagyok...
Lehet hogy van jobb vagy más megoldás is, de ez csak egy ötlet. Én úgy gondolkoznék megszakítással, hogy egyik kimenetét kötném csak megszakításra míg a másikat sima bemenetként, mivel bármelyik irányba tekered, mindkettőn van hasznos jel. A megszakításkor indítanék egy 1-2msec-es timert, ha lejárt megnézném a másik kimenet szintjét és így eldönthetem,hogy jobbra v. balra tekertem. lekezelés után IT engedély vissza.
Motort sosem kotunk direktbe, mert induktiv terheles, igy kapcsolaskor feszultseglokest okozhat. Feltetelezem, hogy ezt azert tudjak az emberek.
Jo az otleted, de nem kell bele a kesleltetes. Egyszeruen az egyik csatorna felfuto(vagy lefuto ele) adja a megszakitast, a masik csatorna csak sima bemenet, amirol akkor kell mintat venni, amikor a megszakitas beerkezik es ez az ertek az iranyt hatarozza meg.
Igazad lehet, az a lényeg hogy az IT rutin bolond biztos legyen, mert egyébként kiakadás ténye lehet.
|
Bejelentkezés
Hirdetés |