Fórum témák
» Több friss téma |
Fórum » Robotika kezdőknek
Üdv!
Biztos, hogy jól értelmezed ezt az egész megszakítás dolgot? A kezdőknek szóló minták nem is szoktak megszakítás alapúak lenni. http://www.hobbielektronika.hu/cikkek/will-i_the_end_robotika_es_av...l?pg=1 Innen a Pergés c. rész kell Neked. Ha érted az elvet, PIC-re is át lehet ültetni. Az ütközés érzékelésre általában nyomógombokat szoktak használni, infraled-fotoellenállás a vonalkövetéshez hasznos. A hozzászólás módosítva: Szept 7, 2012
Most kicsit eltévedtem. Az infrás ütközés érzékelőhöz én sima fototranzisztor vettem, ami a sima fényt is érzékeli . (ha jól emlékszem. Persze nincs ráírva semmi.. hogy lehet erről kideríteni milyen tipusú tranzisztor is ez?) Ezért nem akart ez nekem rendesen működni! Nyílván IR fényre érzékeny dolgot kellene vennem.
Ilyet láttam, hogy fototranzisztor 940 nm szűrővel, vagy vegyek egy infra vevő+szűrőt és a ledet villogtassam ennek megfelelően? HUry: Szerintem jól értelmezem. Vagy a megszakítás lábra kötök egy gombot (mint most), de akkor csak az az egy megszakításom lesz. Vagy csinálhatom azt (szerintem), hogy engedélyezem a TMR0 számlálót és mikor az megszakít, elvégzem az ellenőrzéseket, hogy történt e valami. PL: (csak kitalált példa) Amikor a TMR0 túlcsordul, akkor a meghívott függvényben megnézem, hogy : - be van e nyomva az ütközés gomb - benyomták e vészmegállítót (nem tudom minek kellene ilyen.. csak példa) - az elem lemerült e - nem vesz e fel túl nagy áramot a motor - stb, stb... Mivel a 628A-nak csak a RB0-ra tudok kötni gombot, így, minden "eseményt" le tudok ellenőriztetni, ami megváltoztatná az alaprogram futását. Vagy nem jól gondolom? (tesztprogramot írtam, az működik a gombnyomásra, azt leszámítva, hogy ha sokáig nyomom a gombot (2-3-20 milisec, ami azért elég gyakori), akkro azt több gombnyomásnak veszi. Gondolom addig míg vissza nem tér a főprogramba, le kellene tiltani a számlálót, és meg is van oldva a dolog) A hozzászólás módosítva: Szept 7, 2012
Na lejött a videó, egész jó, hogy már azért csinál valamit!
Az "ütközés" utáni forgás programrésze hogyan van megírva? Mennyi időre van kiszámolva forgás? Lehet hogy tényleg csak azt csinálja, amit mondtál neki.
Az ütközésre tényleg legegyszerűbb egy nyomógomb, vagy bármi mechanika, szélesebb lökhárító, kb úgy alakítod, ahogy akarod.
Infrával távolságmérés van, az arra jó, hogy pl 10cm-rel megállj az akadály előtt.
Hát.. őszintén szólva, a program most így lett megírva:
1: Csinálj valamit amíg nem nyomom meg a gombot, de ne csak előre menj (ez lett előre hátra) 2:Ha megnyomom a gombot, akkor csinálj valami egészen mást, olyan sokáig, hogy a feleségemnek is megmutathassam, hogy ez most "mást csinál", és én is észrevegyem akármennyi sör után is Magát a forgást meg akkor kezdi el és végzi (talán 3 secig?), ha megnyomják a gombot. Így igazából nem kellene "magától" forogni mint a második esetben. Másik válasz: Értem én, hogy nyomógombbal egyszerűbb. Csak később szeretném ha több mindenre is figyelne a gép. PL: ha elmegy a töltő közelében és alacsony a töltöttségi szint, akkor menjen töltse fel magát (ne kérdezzétek, még fogalmam sincs hogyan ) Ezért szeretném, hogy a gomb ne foglalja el az "egyetlen" megszakítási lehetőséget. És lenne ütközéses lökhárító (pont így képzeltem én is) mert a IR ledel egy széklábat nem fog észrevenni. Arra szeretnék rájönni (1-2 tutort találtam angol sajnos, de legalább nem ASM, mer ahhoznem értek), hogy hogyan állítom be a PICnek azt, hogy pl: Itt az elem feszültsége. HA ez lemegy X volt alá, akkor tedd ezt meg ezt, meg ezt.... (ugyanez lenne a IR led is, csak fordítva. Ha felmegy X volt fölé, akkor közeledik valami nagy dolog, pl fal).
Ha meg volt a timer intteruptja, akkor visszaállítod az overflow túlcsordulás bitet?
INTCON regiszter: bit2: 1 = TMR0 register has overflowed (must be cleared in software) - Neked kell törölni 0 = TMR0 register did not overflow bit1: 1 = The RB0/INT external interrupt occurred (must be cleared in software)- Neked kell törölni 0 = The RB0/INT external interrupt did not occur
Később át lehetne térni többlábú/más mikrovezérlőre, ha mindenképp több külső megszakítással akarod megoldani.
Konkrét programsorok érdekelnek, hogy mi van az interrupt rutinban. Tehetsz fel teljes forrást is, elfér.
Hát.. lehet hogy meg fogtok kövezni, de én most Flowcode-ot használom. Amikor kell beleírok kézzel a C-be. De bevallom őszintén az alap programot pillanatok alatt össze lehet dobni. Amit meg kell utána bele lehet piszkálni (és nem utolsó sorban szerintem egészen emberi C kódot fordít).
Jelen pillanatban ez a tesz (PICbe még nem raktam bele, most elfoglalja a másik a panelt). Ez ki be kapcsolja a ledet, mikor megnyomom a kapcsolót. Tudom ehhez nem kell megszakítás, de itt épp az lenne a lényeg, hogy szabad marad a RB0. ÉS így be tudok tenni 4-5 gombot is!!! (jobb széle, bal széle, hátulja, teteje (beszorul e a szék alá), lefelé egy (van e lépcső előtte), stb, stb... És mindet tudom figyelni, anélkül, hogy a RB0-t elhasználnám. A hozzászólás módosítva: Szept 7, 2012
Előrebocsátom, hogy én Atmel-t és ASM-ben szoktam programozni, de az elv talán eléggé általános...
Ütközés gomb kezelése: Én úgy szoktam csinálni, hogy van egy "állapot-regiszterem". Nem a uC sajátja, hanem egy másra nem használt általános regiszter, vagy egy memóriahely. Ebben tárolom az "eseményeket", pl. 0. bit jelenti az "ütközést". Ha bekövetkezik, akkor átírom 1-be, miután lekezelem a dolgot, visszaírom 0-ba. Ha addig következik be ismét, amíg nem kezeltem le, akkor nincs semmi, hiszen már eleve 1-es, fut a kezelő rutin. Megszakítás-kezelés: Amit te leírtál, az nem megszakításos, hanem lekérdezéses (polling vagy pollozásos) perifériakezelés. Hiszem a számláló adott időnként lefuttatja a lekérdező rutint. Ebben az esetben nem kell a többi funkciónak megszakítást használnia. Ha 1ms-onként lekérdezed, akkor elég lehet az ütközést csupán megkérdezni. Gondold végig, hogy ennyi idő alatt mekkora távolságot tesz meg? Egy lassan sétáló ember sebessége kb. 1 m/s. 1ms alatt 1mm-t tesz meg. Ha nem különösen precíziós mikrokapcsolót használsz, hanem néhány mm-es holtjátékú lökhárítóhoz rögzített szokásos mikrokapcsolót, akkor attól számítva, hogy hozzáér az akadályhoz az ütközője - addig, amíg ténylegesen megnyomódik a kapcsoló és létrejön a jel akár simán lehet 10 lekérdezés is. De ez nem baj!!! Sőt, ez azt is jelenti, hogy akár ritkábban is leolvashatod az ütközést, mondjuk 10ms-onként. Tápfesz figyelése - analóg komparátor: Gondolom van egy belső referenciája (esetleg beállítható) és ahhoz hasonlítja az adott lábon lévő feszültséget. Lehetséges, hogy a komparátornak nincs belső referenciája, akkor két kivezetése van. Ilyenkor az egyikre egy stabil feszültséget kell kapcsolni, amit neked kell előállítani. Ilyen célra kis, kétlábú IC-ket könnyű beszerezni. Ha nagyobb lesz (vagy éppen kisebb, bizonyára beállítható) a vizsgált feszültség, akkor valahol egy bit átbillen és/vagy megszakítást generál. Neked csak azt kell megoldanod, hogy a kritikus feszültségérték éppen akkora legyen, mint a komparálási szint. Legegyszerűbben egy megfelelően méretezett feszültségosztón keresztül viszed oda a tápfeszt, mivel a komparálási szint biztosan kisebb, mint a saját tápfesze. A külső megszakítások száma: Mint említettem, én ATMEL-es vagyok, annál gyakorlatilag bármelyik lábat be lehet állítani megszakításhoz. Ha változás történik (0->1, 1->0, vagy bármelyik), akkor generál egy általános megszakítást, csak neked kell meghatározni, hogy mi váltotta ki, de az egyébként is a feladat része... Idézet: „Az infrás ütközés érzékelőhöz én sima fototranzisztor vettem.” Az nem lesz jo! Olyan infra LED-et es hozza illo infra fototranzisztrot vegyel, amelyek hullamhossza osszeillik. En ehhez a robothoz az alabbi IR LED-et es IR fototranzisztort hasznaltam: http://hobbirobot.hu/content/akadaly-kikerulo-robot-robotika-kezdoknek IR LED: http://www.jaycar.com.au/productView.asp?ID=ZD1945 IR fototranzisztor: http://www.jaycar.com.au/productView.asp?ID=ZD1950 Ha csak egyetlen kulso megszakitas labat akarsz hasznalni a mikrovezerlon, akkor erdemes egy portbovito IC-t hasznalni. Pl. egy Philips PCF8574 portbovito IC-t. Itt van a hasznalatara pelda: http://avr.tavir.hu/modules.php?name=Content&pa=showpage&pid=17 A hozzászólás módosítva: Szept 7, 2012
Ha van egy felesleges videokamerad. Az egyik legolcsobb megoldas amit talaltam, az hogy veszel kb 25 dollarert egy TP-Link TL-WR703N miniroutert. http://wiki.openwrt.org/toh/tp-link/tl-wr703n
Erre OpenWRT-t felrakva valami ehhez hasonlo epitheto: http://www.youtube.com/watch?v=si4hVqvS-vw&list=UUGl9ImDb1vDLChM8ZA...e=plcp
Szia Fizikus! Az SPI-ről szóló cikkeddel kapcs kérdeznék. a 74HC595-el meg oldható-e, hogy ne ledeket villogtasson, hanem mondjuk 8 kapcsoló állapotát olvassa be. Természetesen ilyenkor a Q' lábat azaz MISO lábat kell csak használni. És ha jól értem, ebben az esetben küldök neki 8 db egyest, és ő visszaküldi azt a bináris állapotot ahogy a kapcsolók állnak jól okoskodom?
Köszönöm, erre gondoltam, csak nem tudtam, hogy ezt "pollong"-nak hívják.
HA jól gondolom, akkor 3 féle képen használhatok sok "megszakítást". 1: Az egyik a polling (már tudom ) 2: A másik a port bővítő IC (sose hallottam róla köszi Fizikus (megj: ezeket a cikkeket honnan szeded? Te írod? Olyan "egykaptafára" készülnek. Érthetőek, tiszták, világosak, hasznosak... A neten nem szokás ilyet írni... )) 3: HA mondjuk van 6 gombom, akkor mindent rákötöm arra az egyetlen megszakításra ÉS egy másik input lábra is. Ha jön egy megszakítás akkor megáll a progi, megnézi mit is nyomtak meg és aszerint halad tovább. (ha példában kellene megfogalmaznom: a polling a "kíváncsi vénasszonyos" program. ÁLLANDÓAN kérdezgeti, hogy történt e valami. A harmadik a "patópalis": jó'van.. majd ha történik valami megnézem mit tehetünk) Melyik a jobb? A polling fölöslegesen emészti a IC időt, nem tudom többet fogyaszt e, stb. A harmadik módszer meg szerintem a NYÁK készítésnél-tervezésnél lesz nehéz, mert minden gombot, érzékelőt, mifenét rá kell kötni egy lábra. Azt sztem fizikailag nehezebb megvalósítani. Vélemény? Idézet: „A másik a port bővítő IC (sose hallottam róla köszi Fizikus (megj: ezeket a cikkeket honnan szeded? Te írod?))” Egy problema megoldasanak keresese kozben eleg sok dologra ra lehet a neten bukkanni. En is irogatok cikkeket ide a Hobbielektronikara es a Hobbirobotra is. A TavIR weboldalat Cseh Robert kovette el... A hozzászólás módosítva: Szept 7, 2012
Köszi a választ, igaz, és találtam SPI buszos expandert is. köszi
1.)
A polling akkor jó, ha kicsi, egyszerű programot írsz. Ilyen kaliberűt, hogy ha megnyomták a gombot, akkor kapcsolódjon be ez a led. Ettől bonyolultabbhoz már nem érdemes, mert áttekinthetetlen lesz a kód, és feleslegesen nő a kódméret is! 2.) Ilyen projekthez mint a tiéd, szerintem felesleges a portbővítő ic, egyszerűbb egy nagyobb vezérlőt használni. Ahogy látom szeretnél a témában jobban elmélyedni, szóval így is, úgy is szükséged lesz rá, mert máris kinőtted ezt ami most van (különben nem lenne gond az egyetlen RB0 láb). Érdemes több típust tartani a fiókban, és ilyenkor amikor még csak alakul a projekt (értsd fogalmad sincs még róla hogy mi kerül majd rá), akkor használd a nagyobb vezérlőt. Ha már kialakult, és látod hogy elég a kisebb is, akkor a végleges változatba már azt teszed. 3.) Ami a megszakításos dolgokat illeti, azt hiszem itt a HE-n is láttam cikket, ami ezzel foglalkozik. Érdemes lenne kicsit elmélyedned az olyan kulcsszavak jelentésében, mint timer, külső megszakítás, belső megszakítások. Konkrétan a gombkezelésről biztosan volt már szó. A "patópalis" módszer előnye, hogy sokkal közelebb áll az ember működéséhez. Amikor vizet forralsz, akkor sem nézegeted állandóan a buborékokat, hanem csak felteszed a vizet, rá a fedőt, odagyújtasz neki, aztán mész a dolgodra, például meccset nézni. Amikor felforrt a víz, akkor jön a megszakítás, mert ugrál a fedő, és zubog a fazék. Ekkor megszakad amit éppen csinálsz (meccsnézés), és kiszolgálod a megszakítást, vagyis félrehúzod a tűzről, beleszórod a tésztát. A megszakításnak vége, vissza a meccshez. Ha nem megszakítással csináltad volna, akkor vagy lemaradsz a meccsről, vagy éhen maradsz. Az igazsághoz hozzá tartozik, hogy kezdő háziasszonyok olykor még akkor is elrontják a dolgot, amikor folyamatosan figyelik a vizet, számukra a meccsnézés szóba sem jöhet! Szóval nem elítélendő a polling sem, de tudni kell megválasztani az eszközeinket!
Sargarigo kolléga jól összefogott válaszát mindössze annyival egészíteném ki, hogy a polling még akkor jöhet szóba, ha a fő tevékenység nagyon időkritikus. Amikor nem megengedhető, hogy valami megszakítsa, akkor a főprogram mondja meg, hogy mikor ér rá lekezelni, ha van valami.
Amit felvetettél 3. módszer, az sem bonyolult áramkörtervezés szempontjából, mert az egy közös lábra (megszakítás-bemenetre) diódákkal viszed a jelet, az egyes gombok jelét az egyes bemenetekhez meg úgyis oda kell vezetned... Már ez is indokolhatja egy nagyobb uC használatát, ha nem akarsz kiegészítő áramköröket hozzá. Idézet: „Keresgélek a neten, de nem találok semmit jó tutort.” Ha PIC-kel epitesz robotot, akkor Topi alabbi cikkeit is erdemes elolvasni: Nulláról a robotokig - PIC Mikrovezérlők I.-III. http://www.hobbielektronika.hu/cikkek/nullarol_a_robotokig_-_pic_mi...z.html http://www.hobbielektronika.hu/cikkek/nullarol_a_robotokig_-_pic_mi...z.html http://www.hobbielektronika.hu/cikkek/nullarol_a_robotokig_-_pic_mi...l?pg=1
Hát... sajnos úgy fest tévedtem. Bekötöttem a kondit a motor két kivezetése közé és hirtelen jobb lett. Bekötöttem a motor és a motorház közé is, és visszaraktam a diódákat is, amiket a L293D lapja ír. De sajnos nem működik. Továbbra is ugyanazt produkálja, folyamatosan "tolat-forog", mintha nyomkodnám a gombot...
Mégiscsak másik motort kell kerítenem...
A gombok a PIC melyik portjára vannak kötve, valamint ott van-e oda kötve egyéb alkatrész.
Üdv! Melyik motorvezérlőt használod pontosan? Az L293D-ben benne vannak a diódák is.
Kérlek azt a program forrást tedd fel amit a robotban használsz. Idézet: „De sajnos nem működik. Továbbra is ugyanazt produkálja, folyamatosan "tolat-forog".” Utolso lehetosegkent valasszad le a mikrovezerlorol galvanikusan optokapukkal az L293-ast es a motorokat. (Az E. Isolating your Circuit reszt nezzed at): http://www.ermicro.com/blog/?p=423 Remelhetoleg ez megszunteti a zajt, ami a mikrovezerlo megszakitaslaban van. (Azert nezzed at, hogy van-e valahol rovidzar vagy instabil kontakt az aramkorben. Nalam egyszer egy nem teljesen atvagott vezetosavnal okozott rovidzart a fem csavar amivel a kapcsolot rogzitettem es mindig megszakitast adott. Eltartott egy darabig mig megtalaltam...)
L293D, NE, DNE-t is használtam már.
Itt a kód, ami benne van, de szerintem nem itt lesz a gond. (elkezdtem másik motorokat beszerezni..)
Én még mindig nem értem, hogy hogy nem működnek nálad ezek a motorok? Lemértem a robotomba lévő ugyan ilyen motorokat, és 7,6V-nál, ami igazából már káros neki, 540mA-t vesz fel, egy db. Én is l293-al hajtom őket, és csak egy db 33nf kondi van közvetlen a motor kivezetésén, plusz az adatlapban szereplő diódás kapcsolás van kialakítva. A PIC és a motorok két külön akksiról mennek, csak a GND közös. És mégis minden szépen működik. Lehet, hogy tényleg gyári hibás motorokat kaptál? De rögtön kettőt? Mindenesetre érdekes.
Szerintem ugyanarról a 7805ről megy mind a motor mind az vezérlő. Az áramokra, meg szerintem rövidzárlati áramokat mérhetett. De ezt biztosra nem tudhatom.
Azt sem sikerült még kideríteni, hogy akkumulátorral mit csinál. Szeretem az ilyet.
Nem ugyanarról megy. 7805ről (és egy 9V-so elemről) megy a PIC és 4 db ceruzaelemről a motor. Sajnos nem tudtam még normális akksikat keríteni, ami jelenleg nekem van azok 100éves csapnivaló vackok. DE amint találok normálisat kipróbálom.
Az akksikat azért javaslod, mert ha sokat vesz fel a motor, akkor azok jobban bírják mint az elemek?
Közben rájöttem hogy hazudtam. A fényképező gépekbe jó akksik voltak.
Kipróbáltam, semmi változás. Egy pillanatra elindul előre, aztán egyből fordulni kezd. Annyi furcsaságot még észrevettem, hogy ha csak egy motort rakok rá azzal mintha jó lenne. Mindegy melyiket, de csak egyet.
Fel tudnád tenni azt a kapcsolási rajzot, amit megépítettél?
Az igazi az lenne, ha nem azt tennéd fel, amit meg akartál építeni, hanem a kész áramkörödről visszarajzolva. Így ha valamit mellékötöttél volna, akkor kiderül. |
Bejelentkezés
Hirdetés |