Fórum témák

» Több friss téma
Fórum » Robotika kezdőknek
 
Témaindító: mspike, idő: Júl 18, 2005
Lapozás: OK   47 / 82
(#) mzozo95 válasza Axel hozzászólására (») Feb 11, 2012 /
 
Szia!

én atmega8 at használtam erre a célra, ezzel a kóddal tökéletesen működött(avrstudio 4, belső rc oszcillátor 8mhz)

  1. #define F_CPU 8000000
  2. #include <avr\io.h>
  3. #include <util/delay.h>
  4.  
  5. short a=5000;
  6.  
  7.  
  8. int main(void) {
  9. DDRB |= _BV(1) |  _BV(2);
  10. //Set PORTB1 pin as output
  11.  
  12. DDRB=0xFF;
  13.  
  14. //TOP=ICR1;
  15.  
  16. //Output compare OC1A 8 bit non inverted PWM
  17.  
  18. //Clear OC1A on Compare Match, set OC1A at TOP
  19.  
  20. //Fast PWM
  21.  
  22. //ICR1=20000 defines 50Hz PWM
  23.  
  24. ICR1=20000;
  25.  
  26. TCCR1A|=(0<<COM1A0)|(1<<COM1A1)|(0<<COM1B0)|(0<<COM1B1)|
  27.  
  28. (0<<FOC1A)|(0<<FOC1B)|(1<<WGM11)|(0<<WGM10);
  29.  
  30. TCCR1B|=(0<<ICNC1)|(0<<ICES1)|(1<<WGM13)|(1<<WGM12)|
  31.  
  32. (0<<CS12)|(1<<CS11)|(0<<CS10);
  33.  
  34. //start timer with prescaler 8
  35. OCR1A=1500;
  36.  
  37. while(1){
  38. OCR1A=1000;
  39. _delay_ms(a);
  40. OCR1A=2000;
  41. _delay_ms(a);
  42. ;
  43. }}
(#) mzozo95 hozzászólása Feb 11, 2012 /
 
Sziasztok!

A cikk alapján próbálkoztam atmega8al, usart kommunikációval, de sehogy sem akar sikerülni Bővebben: Link

Másnak működik ez a verzió?
Sok mindent át kellett definiálni, hogy egyáltalán a fordító engedje égetni:
  1. #define    UCSRA    UCSR0A
  2. #define    UCSRB    UCSR0B
  3. #define    UCSRC    UCSR0C
  4. #define    UBRRH    UBRR0H
  5. #define    UBRRL    UBRR0L
  6. #define    UDRE    UDRE0
  7. #define    UDR    UDR0
  8. #define    RXC    RXC0


de még így is 3 hibát kaptam:
Idézet:
„../usart.c:31: error: 'URSEL' undeclared (first use in this function)
../usart.c:31: error: (Each undeclared identifier is reported only once
../usart.c:31: error: for each function it appears in.)
make: *** [usart.o] Error 1

A kvarc helyett 8mhz-n járatom a belső oszcillátort, még ezeket a sorokat módosítottam:
  1. #define F_CPU 8000000
  2. ...
  3.     #define UBRR_ERTEK ((F_CPU / (USART_BAUDRATE * 16)) - 1)



Valaki tudna segíteni kijavítani a hibát?

Előre is köszönöm,
Zoltán
(#) Axel válasza mzozo95 hozzászólására (») Feb 11, 2012 /
 
Hello!
Tényleg USART vagy csak UART kommunikáció amit szeretnél? Csak azért mert utóbbihoz nekem van működő kódom, szintén ATmega8L-hez, de a kettő programozás szempontjából ugyanaz.
(#) mzozo95 válasza Axel hozzászólására (») Feb 11, 2012 /
 
Szia!

UART! Ebben a pillanatan jöttem rá, hogy megint én rontottam el valamit, az avr studio 4 nél be kell állítani hogy milyen is az AVR, elnézést a felesleges kérdésért!

Itt egy remek cikk az uarthoz, ha valakit érdekel:Bővebben: Link

Egy másik kérdés: char-t hogyan szoktatok sztringbe konvertálni, vagy hogyan lehet megoldani, ha egy parancs több számból, karakterből áll? pl ha a pwm értékét 1567 re szeretném állítani, akkor valahogy össze kell fűznöm a PC-től kapott charokat és átalakítani int-be...

_______________________________________

Több csatornán hogyan lehetséges atmega8nál hardweres pwm? 50hz es frissítési időre, és 1-2ms es kitöltési tényezőre lenne szükségem(servo vezérléshez)
Egy csatornáig tökéletesen működik, a többinél már gond van...

  1. #define F_CPU 8000000
  2. #include <avr\io.h>
  3. #include <util/delay.h>
  4.  
  5. int main(void) {
  6. DDRB=255;
  7.  
  8. ICR1=20000; //20ms ciklus
  9.  
  10. TCCR1A|=(0<<COM1A0)|(1<<COM1A1)|(0<<COM1B0)|(0<<COM1B1)|
  11.  
  12. (0<<FOC1A)|(0<<FOC1B)|(1<<WGM11)|(0<<WGM10);
  13.  
  14. TCCR1B|=(0<<ICNC1)|(0<<ICES1)|(1<<WGM13)|(1<<WGM12)|
  15.  
  16. (0<<CS12)|(1<<CS11)|(0<<CS10);//8as osztás
  17.  
  18. OCR1A=1500;//1,5ms kitöltés
  19.  
  20. while(1){}; }

Előre is köszönöm,
Zoltán
(#) mzozo95 válasza mzozo95 hozzászólására (») Feb 11, 2012 /
 
a 2CH pwm már megvan, elvileg a 3. az be lehet valahogy üzemelni, ebben valaki tudna segíteni?,

Eddig jutottam:

  1. #define F_CPU 8000000
  2. #include <avr\io.h>
  3. #include <util/delay.h>
  4.  
  5. int main(void) {
  6. DDRB=255;
  7. DDRD=255;
  8.  
  9. TCCR1A = (1<<COM1A1)| (1<<COM1B1);
  10. TCCR1B = (1<<WGM13) | (1<<CS11) ;
  11. ICR1 = 10000;
  12. OCR1A = 750;
  13. OCR1B = 750;
  14.  
  15. while(1){};}


Zoltán
(#) sargarigo válasza mzozo95 hozzászólására (») Feb 11, 2012 /
 
Kettő van a timer1-en, és egy a tmer2-n.
Én mondjuk még csak kettőt használtam egyszerre..
(#) Fizikus válasza mzozo95 hozzászólására (») Feb 11, 2012 / 1
 
Szia!
Nezzed meg a pl. a Jani-6 robotom kodjat. Ott 2 PWM a DC motorokat vezerli (motor.h fajl), a 3.-ik PWM meg a fejmozgato szervot vezerli.
Bővebben: Link
Udv.: Gabor
(#) sargarigo hozzászólása Feb 12, 2012 / 1
 
Hát srácok, nem tudom erről volt-e már szó, de Fizikus barátunk ajánlotta ezt az oldalt, nézzétek meg ti is, sok okosság van rajta: Bővebben: Link

Ez pedig egy másik okosító oldal.
(#) ben77 hozzászólása Feb 23, 2012 /
 
Sziasztok!
Ezek között az áttételes motorok között vacillálok az épülő robotomhoz:
Áttételes motor
Vettem már két ilyen kereket és nem tudom melyik motor fordulatszáma lenne megfelelő a robotomhoz. Nem nagy az egész, és a sebesség sem annyira fontos, csak azért haladjon.
Ennek a felfogatása teljesen jó, de vajon 320 rpm elég ? eben még nincs tapasztalatom.
A választ előre is köszönöm.

Üdv.: Ben
(#) kameleon2 válasza ben77 hozzászólására (») Feb 23, 2012 /
 
Elektromos csavarhúzó 2990 Ft/db Abban is van áttételes motor
(#) ben77 válasza kameleon2 hozzászólására (») Feb 23, 2012 /
 
Köszi, ezzel tisztában vagyok. Egy pofás kis robotot szeretnék, nem fúróbol kigányolt motorral. De nem is ez a legnagyobb gond ezzel, hanem hogy méretben és áramfelvételben is nagyon eltér attól ami nekem kell. És ettől még a kérdésemre sajnos nem tudtam meg a választ.
(#) mzozo95 válasza ben77 hozzászólására (») Feb 23, 2012 /
 
Szia!

Ajánlom az un rc servo motorokat, ezek eredetileg csak két irányba képesek kitérni, de egy kis átalakítással( egy vágás és egy forrasztás) át lehet alakítani pontosan vezérelhető, kis fordulatú hajtóművekké.
A másik megoldás, veszel egy komolyabb rc modellt, és átalakítod a saját elektromos vezérléseddel... pl:a modellekről sok okosság van itt is.
Az én álláspontom szerint ez első dolog a működés, amíg nem megy tökéletesen az elektronika, nem értem mi hogy működik, nem tudom hogy kell számolni áttételeket, pwm jeleket, stb addig a külső profilt csak vázlatosan tervezem meg, nem éri meg egy szép masina, ami csak szép de nem jó. Ez csak az én álláspontom.
(rengeteg embert látam, akik kitaláltak egy számukra szép kialakítást, csak belefulladtak a sikertelenségbe, mert 0áról kezdnei egy normális robotot bizony nagy kitartást igényel, rengeteg kudarccal és a végén hatalmas örömmámorral, legalább is az első robotnál... )
De ha már ezeken túl vagy sok sikert mindenhez

A fordulatszámból a sebességre úgy tudsz következtetni, hogy ha percenként fordul "X"et, és a keréknek "k" a kerülete, akkor percenként X*k utat fog megtenni, ebből máris kijött egy cm/perc sebesség, amit aztán átválthatsz m/sec re vagy km/h ra és könnyen be tudod látni hogy ez elég e az elképzeléseidhez...
(v= f * 2*r*pí; mért egységek: v=m/s; h=hz vagy 1/s, r=méter)

Egyénként milyen robot projektbe kezdtél bele?

Zoltán
(#) kameleon2 válasza ben77 hozzászólására (») Feb 23, 2012 /
 
SZia! Nem teljesen értem, hogy egy gyári,új motor kivétele és átépítése miért lenne gányolás, egy akkus csavarhúzóból, de te biztosan tudod a miértjét. Én nem spirálnám túl az elsőt. Ha mégis, vegyél egy kész Scribbler, vagy hasonló robotot, azzal kevesebb a macera és kitűnően ki lehet próbálni rajta mindent - nehogy azt hidd a saját olcsóbb lesz !
(#) Axel hozzászólása Feb 26, 2012 /
 
Sziasztok!
Kérdésemet főleg Fizikus fórumtársunkhoz intézném de természetesen bárki mástól is örömmel veszem a választ!
Rendeltem BT-UART modult, pontosan olyat mint ami az Ő cikkében szerepel. Működik is de decimális adatoknál probléma, hogy csak úgy kommunikál rendesen ha a CR karaktert is elküldöm, így persze már más lesz a küldött számérték is. (Terminálprogrammal teszteltem de nyilván ez a helyzet egy esetleges saját szoftvernél is.) Milyen megoldást javasoltok, hogy küldhessek normál kizárólag numerikus bájtot egyszerre?
Köszi!
(#) lazsi válasza Axel hozzászólására (») Feb 26, 2012 /
 
Azt hiszem, ez a probléma más soros kommunikációnál is fellép.
Én ezt (USB-virtuális soros porttal) úgy oldottam meg, hogy a minden kommunikáció elején az első byte (nagyobb méretű adatcsomagot használó rendszer esetén az első két byte) az átvitt byte-ok számát jelenti. Így a kommunikáció végét nem egy adott karakter (CR) jelenti, hanem a beérkezett byte-ok megfelelő száma. Érdemes lehet valamilyen összeg byte is a végére, amivel ellenőrizheted az esetleges hibát.

A másik megoldás, ha megkerülöd a dolgot, és a decimális adatokat is karakterenként viszed át. Ez viszont jelentősen ( 3 szorosára ! ) megnöveli az átviendő karakterek számát, így a kommunikáció sebességét harmadára csökkenti.
(#) Axel válasza lazsi hozzászólására (») Feb 26, 2012 /
 
Ha minden kötél szakad akkor max. átküldöm 2 "nibble"-ben a bájtot, a végükől meg a mikrovezérlő programjában kimaszkolom a CR-t. De ez már csak azért is fura mert a hagyományos pl2303 és CP2102 UART illesztőkkel sosem volt ilyen gondom, azok szépen küldik a bájtokat CR nélkül is. :nemtudom:
(#) sargarigo válasza lazsi hozzászólására (») Feb 26, 2012 /
 
Ha hexa kódokat küldesz, akkor "csak" duplája lesz az átvitt adatok száma, cserébe javul a hibabiztonság is az eredetihez képest, hiszen csak 0-9, a-f karakterek szerepelhetnek benne.
(#) sargarigo válasza Axel hozzászólására (») Feb 26, 2012 /
 
Nem lehet hogy a terminál programot összekavarja ha vezérlőkódot kap? Gondolok itt most az ascii tábla első pár karakterére. Milyen esetekben nem működik? Bizonyos számokkal?
(#) Axel válasza sargarigo hozzászólására (») Feb 26, 2012 /
 
Úgy van, hogy az első bájt átmegy CR nélkül is de a második már csak akkor ha CR-t is küldök. (Eltelt egy-két órába mire rájöttem erre). Csak és kizárólag számokról, tehát nyers bájtokról van szó, nem karakterekről.
(#) Fizikus válasza Axel hozzászólására (») Feb 26, 2012 /
 
Szia!
A cikkben hasznalt BT modullal az a problema, hogy szinte semmi dokumentacio nincs hozza. A modul firmware-jet is folyamatosan valtoztatjak, ezert belefuthatsz olyan szeriaba, amelyik szinte hasznalhatatlan (nekem is ki kellett egyet dobni, mert minden kiserletem ellenere nem sikerult vele kommunikalnom...).
Ha a BT modul altal hasznalt osszes AT parancsot sikerulne valahonnan megszerezni, az sokat segitene, mert be/ki kapcsolhato lenne vele az echo funkcio, sorvegi kocsivissza es ujsor karakter stb...
E nelkul viszont sajnos nem tudhato, hogy az adott firmware-nel ezt alapbol hogyan allitottak be.
En nem probaltam adatokat decimalis vagy byte formaban kuldeni vele. En karaktereket kuldok, amiket a vevo oldalon visszaalakitok szamma...
(#) Axel válasza Fizikus hozzászólására (») Feb 26, 2012 /
 
Hello! Én is valami hasonlóra gondoltam. Ezért is próbáltam előkeríteni a bluecore chip részletesebb doksiját az AT parancsokkal, eddig kevés sikerrel. De egyelőre nem adom fel, hátha lesz valami megoldás.
(#) Axel hozzászólása Feb 27, 2012 /
 
No közben úgy néz ki megoldódik a probléma mert a Matlab érdekes módon normálisan kezeli a portot, ellentétben az általam próbált terminálprogramokkal.
(#) Fizikus hozzászólása Márc 4, 2012 /
 
Gondolom mindenki keszul a Magyarokamarson-ra (kiveve persze engem ).
De azert ha lassan is, de keszul a kovetkezo robotom: Ar-Du

ArDu580.jpg
    
(#) sargarigo válasza Fizikus hozzászólására (») Márc 4, 2012 /
 
Aranyos! Mit fog tudni a kicsike?
(#) Fizikus válasza sargarigo hozzászólására (») Márc 4, 2012 /
 
Most meg maradok a szokasos bluetooth taviranyitasnal, mert a fo erzekelo, a LinkSprite soros kamera eleg lassu (kb 8-10 masodpercenkent lehet vele egy 320x240-es kepet kesziteni a kamera alap 38400 baud-os sebessegevel).
Lesz meg benne egy ISD 1730-on alapulo hangmodul, egy kek es piros LED-es hangulatjelzo, es egy HC-SR04-es ultrahangos tavmero...
(#) sargarigo válasza Fizikus hozzászólására (») Márc 4, 2012 /
 
Ha gondolod a kemara sebességére tudok megoldást: 460800 baud elég lenne? Az avr-ek könnyen elbírnak ezzel a tempóval. 640x480 vga képet tud, ha érdekel itt találsz ilyet: Van pár darab...
És itt leírják részletesen hogyan kell használni
(#) egonka92 hozzászólása Márc 4, 2012 /
 
Helló mindenkinek!

Egy hónappal ezelőtt egy egyszerű robot építésébe kezdtem (nekimegy a falnak, visszafordul), mindezt úgy, hogy a robotba épített alkatrészek beleférjenek egy 4000 Ft-s keretbe. Hétvégenként dolgozva rajta szépen elkészült a mechanika, az érzékelők, a PIC körüli részek és a H-híd. Az utolsóval vannak gondjaim. Az itt megtalálható H-híd az alapja, amit építettem: H-híd. A különbség elsőre annyi volt, hogy a motor ki-be kapcsoló jelet is invertáltam (persze így a tranzisztor PNP lett), valamint a tranzisztorok bc 182-212 páros volt. Ez hamar kiderült, hogy nem működőképes, mivel gyengék voltak, kicseréltem hát őket bc 368-369 párosra. Ezzel már működött, viszont csak az egyik irányban forogtak a motorok, amikor ellenkező jelet kapott, nem mozdult meg. Amikor az NPN tranzisztorok előtti bázisellenállást 150 Ohm-ra csökkentettem az 1kOhmról, akkor elindult az ellenkező irányba is, viszont nagyon gyengén, kézzel le lehet fogni. Ráadásul nem is minig indul meg, totál véletlenszerű (a teszt amivel vizsgáltam abból áll, hogy a PIC 5 s -onként váltja az irányjelet, miközben a motor bekapcsolójelen van). Ezen felül a ki-be kapcsolást végző tranzisztorok is eléggé melegednek.
Az inverter használt bemenetei a PIC lábaira kapcsolódik, valamint egy 10 kOhm-os ellenállással a földre vannak húzva, a nem használtak bemenetek pedig egy vezetékkel vannak földelve. Ami gyanus, hogy az inverter magas kimenete nem akarja elérni a 4 V-ot, de nem értem, hogy miért.
További tudnivalók: a motorok lábai közt egy-egy 100nF-os kondenzátor van, az inverter és a PIC stabil 5 voltot kap egy 9 V-os elemről, a motorok pedig 4 újratölthető ceruzaelemel működnek. A melegedés ellen próbáltam kicserélni a motor ki-be kapcsolóját BD 140 re is, de az meg nem kapcsolt, így visszacseréltem.
A kérdésem, kérésem, hogy tudtok-e tanácsot adni, hol keressem a hibát? L293D-t nem szeretnnék használni, mert azt 3 bittel birom rendesen irányítani, én viszont csak 2 vel szeretném, a többi lába a PIC-nek másra kell (PIC 16F628A - val dolgozok). Esetleg valamit félreméreteztem?

A segítséget előre is köszönöm!

Üdv: Egon
(#) sargarigo válasza egonka92 hozzászólására (») Márc 4, 2012 /
 
Először is, az L293D nem mumus, nyugodtan lehet használni! Ha megnézed a datasheet-jét (9. old), akkor láthatod, hogy két bemenet kell neki az irány beállításához, és ugyanezeket használja a fékezéshez is. A harmadik amire gondoltál, az az engedélyező bemenet, ide szokás kötni a pwm jelet. De ha erre nincs szükséged, akkor elég ha fixen magasra kötöd, és akkor nincs használva.
Ha mégsem tetszik, akkor :
a jelenlegi kapcsolásodról jó lenne ha mutatnál egy rajzot, mert így elég nehéz konkrétumot mondani. A PNP tranzisztorokat a tápfesz felől szokás meghajtani, de mivel általában a pozitív logika áll az ember kezére, lehet hogy itt szúrtál el valamit. Mondom, a rajz segíthetne..
(#) borvendeg válasza sargarigo hozzászólására (») Márc 4, 2012 /
 
Bocs hogy beugatok. Én L293-at használok a "D" mire utal a jelölésben? Digitális?
(#) sargarigo válasza borvendeg hozzászólására (») Márc 4, 2012 /
 
Azt jelenti, hogy már tartalmazza a védő diódákat
Következő: »»   47 / 82
Bejelentkezés

Belépés

Hirdetés
XDT.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem