Покажи участието

От тук може да видиш всички публикации на този потребител.


Публикации - yasko

Страници: 1 ... 25 26 [27] 28 29 ... 31
391
Чак сега разгледах подробно снимките, идеята със стъпковото моторче от флопи ми хареса и може и да стане :) Иначе има и малки серва на сравнително причлични цени 10-15лв тук:
http://rchobby-bg.com/index.php?main_page=index&cPath=1 или от Конрад (ама се чака).
Аз имам подобна платформа, даже е 4х4 и от известно време обмислям как да и направя плавно завиване.

392
Общ форум / Памет?
« -: Септември 25, 2007, 08:42:08 am »
Не се занимавай с паралелни памети искат много шини за управление. Ако си обърнал внимание горе съм писал за серийни EEPROM. В Комет имат богата гама от 24LC серрията, така че виж какъв обем ти върши работа. Щом си с ATMEGA, ще мога да ударя едно рамо :) Преди време писха кода за управление на такава памет.

393
Робо-сумо / Моят Сумобот
« -: Септември 24, 2007, 11:50:57 pm »
Мисля че за начинаещи L293D е добра. Има 2 H-моста в нея, корпуса е голям и удобен. Иначе в Комет има BA6845, която има по добри ел. параметри, но е много ситна.
С МОС транзистори наистина могат да се направят много добри H-мостове, но за това ще продължа в темата за H-мост, от раздела "Електроника".

394
Две приказки за стъпковите мотори, най-разпрострнените са двуфазни, биполярни. Имат 2 намотки и за да се осъществи премстването на ротора се  променя последователно посоката на тока през всяка от тях. Реално за да управляваш такъв двигател ти трябва 2 H-моста. L293D е пример за такава схема има и много други такива ИС. Идеята с бутончетата ти е добра така ще може нагледно да разбереш принципа на работа на стъпковите мотори :)
Относно желанието ти да управлява мотор за винтоверт ше ти трябва мощен H-мост с дискретни транзистори (най-добре MOSFET), но за това по-късно. И накрая смятам че за завиване е най-удачно да се ползва серво, вместо стъпков мотор.

395
Може и с ATMEGA16, ама първо размигай един светодиод, а после цялп кубче :)

396
Общ форум / Памет?
« -: Септември 24, 2007, 11:01:30 pm »
Тези памети, които се продават по магазините могат да се записват разбира се и от микроконтролер нали това им е целата :) За целта си имат определен физически интерфейс за връзка и определен протокол за комуникация. Най популярните със сериен интерфейс са: 24 серия ползваща I2C интерфейс и 25 серия ползваща SPI инрефейс. I2C иска сам 2 проводниказа комуникация, но протокола е по сложен, SPI иска 4 проводника но проткола е по-прост. Повечето съсвременни контролери имат хардуерна подръжка на тези интерфейси, а също така може да ползваш и вградената EEPROM в контролера стига да не ти е малко.
Може да разгледаш каталога на фирма Комет, там има доста модели от споменатите по-горе. Ако си се спрял на конкретен MCU, ще може да коментираме вариантите за връзка.

397
За да допълня темата за кварца и кондезаторите ще каже, че те трябва да бъдат монирани максимално близко до микроконтролера. Сега малко за другите елементи:
Кондензаторите C3,C4 -това се филтрови кондезатори на захранването. C3 електролитен кондезатор, C4 е керамичен. Ако си ги спестите има вероятност микроконтролера да не тръгне. C4 трябва да се монтира максимално близко до захранващите пинове.
Резистора R1 задава установен понтенциал на пина RESET, в нашия случай високо ниво, или за по накратко се нарича  "pull-up" резистор. По този начин пина RESET се установява в неактивно ниво и MCU функционира нормално.  С пина RESET  трябва да се внимва, защото е чуствителен външни смущения и може да предизвика нежелан ресет на MCU. Затова често ползват и по малки стойности за R1, а и понякога се слага кондензатор към маса (100nF). Най-сиурния начин да го защитим е да го вържем директно към захранване, но тогава няма как да програмираме контролера.
За светодиода и  резистора към него мисля че всичко е ясно. (сега видях че и този резистор съм го кръстил R1, а трябва да е R2)
Остана конектора J1, на него са изведени пиновете на MCU необходими за програмирането му.
Като ми остане малко врме ще прехвърля тази схема на монтажна пплатка и ще видим как изглеждат в реален вид нещата.

398


Да обобщя малко нещата. Всеки микроконтролер има нужда от тактов сигнал за да функционира, значи ни трябва генератор. Класическата схема е да се ползва кварцово стабилизиран генертор и това е схемата по горе. Генератора е вграден в MCU, а външно се добавя кварцов резонатор и кондезатори, обикновено керамични с малка стойност. В описанието на конкретния MCU има препоръчителни стойности. За ATMEGA8 са в диапазона от 12-22pF, така че електролитни кондензатори въобще нямат място тук. Повечето съсвременни микроконтролери имат на разположение и други възможности за тактов сигнал, обикновено това са така наречените RC генератори. ATMEGA8 има вграден прецизен RC генератор, който позволява работа на честоти 1,2,4,8 MHz, така че контролера може да се пусне и без кварц, като се ползва този генератор. Недостатъка спрямо кварцовия е по ниската стабилност на честота, но тук вече конкретното приложение определя дали това е приемливо.
Избора на тактов сигнал се осъществява с така наречените "fuse bits", те се настройват с помщта на програматора и определят откъде ще идва ткатови я сигнал. ATMEGA стандартно идва с настроени "fuse bits" за 1 МHz от вградения RC генератор, затова ако трябва да се пусне на кварцов трябва, да се препрограмират, но за това ше пиша по-подробно в статията за прогрмирането на контролера.


Вече успях да прехвърля нашата схема върху монтажна платка и сега може да видим как станаха нещата. Това е снимка отгоре:

На нея се виждат микроконтролера, кварца X1 (8MHz), кондензатора C3 (10uF), светодиода LED1 и конекторса за програмиране J1.
Може би се чудите къде са другите елементи, ето и снимка отдолу:

На снимката съм означил останалите елементи, за тях използвал съм така наречените SMD (surface mount device) или елементи за повърхностен монтаж. Тези елементи нямат крачета в класическия смисъл на думата и позволяват да се пести място. В конкретния случай, растера на монтажната палтка, позволява те да се монтират между крачетата на контролера и площадките на платката. Е малко са ситни, но човек като свикне дори става по лесно спрямо обикновените елементи. Разбира се схемата може да се направи и със стандартни компоненти.
Този тип монтажна платка разполага с две общи шини едната съм я използвам за VCC , а другата за GND. Цялата схема я захранвам с плоска батерия от 4.5V през двупиновия конектора в десния ъгъл.
Е вече имам готов хардуер и може да продължим с програмирането нашата примерна програма :)

399
Line Tracer / Робот с фотодатчик за следене на линия
« -: Септември 16, 2007, 11:37:21 pm »
Няма да имаш проблеми с програмирането. ATMEGA16 наистина разполога с повече FLASH (16KB), но е и в по-голям корпус DIP-40, и има повече входно изходни лиинии. Няма проблем да се реализира въпросната схема просто, трябва да се запази логиката на връзките, за да няма промени в софтуера. Ако ми остане време тия дни, ще я преначертая с ATMEGA16.

400
Не съм напълно убеден че пиковете са най-евтини. Последно си взех ATMEGА8 за 3.90 лв от Футурел, и за тия пари има бая възможности.
Относно програмирането и т.н писах някои неща по въпроса.

401
Общ форум / Да се запознаем.
« -: Септември 10, 2007, 11:09:09 am »
Да се представ и аз :) Казвам се Ясен Паунски,  малко ме е срам да напиша кога съм роден, като гледам младежта тук, но все пак 19.11.1977.
Завършил съм Инжинерна физика в СУ, но от ученик се занимавам с електроника като хоби и сега това ми професията. Работата ми е била свързна с проектиране на различни микропроцесорни системи за управление-различни прибори с научно приложение, медицински апарати  и др. Последните две години се занимавам с DSP процесори и системи за заснемане и предаване на цифрово видео.
Харесвам природните науки, особено физиката, но с електроника е по лесно да се занимва човек. Роботикат винаги ми е била интерсна, защото изисква комплексни умения и познания в различни области. Радвам се че се създаде този форум, а и надявам се скоро да имаме и клуб и нещата да се развиват. Ще помгам с каквото мога и се надявам че статиите, които пиша са полезни.

402
Сега да обобщим накратко, имаме програма която кара един светодиод 2 пъти в секундата, т.е с честота 2 Hz, за генериране на закъснението ползваме помощна функция базирана на вградените функции за закъснения.  Разбира се има и много по елегантни методи за генериране на големи закъснения чрез използване на вградените часовници в MCU, но  за това по-късно. Недостатъка на горния метод е че докато чакаме да изтече времето, процесора не може да прави нищо друго, но в конкретния случай това не е проблем. По принцип този тип закъснение е по удачен при малки времена на закъсненията.
Вече може да продължим с компилацията, за целата посочения пример трябва да се прехвърли в нашия файл led1.c, който създадохме с нашия проект в AVRStdio. След това натискаме "F7" -"Build" и процеса на компилация започва. В долната половина има прозорец "Build", където се появява информация как протича процеса. Ако всичко е OK програмата ни дава информация какво количество от FLASH и RAM паметта използва нашата програма и ни уведомява че процеса ма билдване (незнам как да го преведа правилно "Build" на български) е приключил успешно. В директорията на нашия проект има подиректория "default", там ще намерим файл с име "led1.hex". Това е всъщност изпълнимия код, който трябва да запишем чрез програматора в микроконтролера. Но преди това ще продължа темата на Борислав относно тестовия хардуер за нашата програма и ще обяня някои неща относно хардуера:
http://www.robotics-bg.com/forum/viewtopic.php?p=171#171

403
Малко се забавих с обяснението на прграмата, но продължавам.
И така да видим какво имаме в нашата програма. Първо чрез директивата include, включваме 2 файла с дефиниции "io.h" и "delay.h". Първия ни е небходим за да може да работим с портовете на процесора, а втория ни позволява да ползваме готови функции за генериране на закъснения.
След това следва дефиниция за тактовата честота микропроцесора, указваща на компилатора каква е реалната скорост на работа на микроконтролера. По нагоре, когато правихме настройките на нашия проект имаше подбна опция за тактовата честота. Реално и двата начина указват едно и също нещо,  а кой точно ще ползваме е въпрос  на предпочитание, все пак дефиницията в самия сорс файл е по универсално решение.
След това имаме дефинирана една функция delay_ms, но за нея по късно. Минаваме към нашата главна функция "main". Първото нещо, което правим е да инициализираме I/O порта на микроконторелера.  Вхоно/ изходните портове (или за по кратко само портове) са връзката на микроконтролера с реалния свят, чрез тях той може да предава и приема информация. Реално всеки процесор разполага с няколко на брой порта, всеки от които е изграден от различен брой входно изходни лиинии, които са изведни на опрделени пинове на MCU Портовете се със двупосочни функции, могат да бъдат както входове така и изходи. В наши случай искаме да управляваме един свеотодиод закачен към порт D на микроконтролера. PORTD на ATMEGA8 разполага с 8 на брой линии, наименовани от PD0 до PD7 или накратко казано порта е 8 битовa големина. Нека да закачим светодиода към най малдшата линия PD0. За да може да упрвляваме светодиода трбява да конфигурираме въпрсония пин да работи като изход, това прави инструкцията: DDRD=0xFF (Реално тя конфигурира всички линии на PORTD, като изходи).  И така следа като направихме тази инициализация влизаме в нашия основен цикъл. Обикновено при програмирането на MCU, това един безкраен цикъл в който се изпълняват всички неща от прогрмата. В нашия случай това е "while(1)" и сега да видим какво става в него: имаме "PORTD=0xFF", по този начин установяваме всички пинове на PORTD във високо ниво (5V) и светодиода който сложихме на PD0 ще получи напрежение и ще светне.
След това извикваме функцията delay_ms(250), която кара процесора да изчака и да безделничи 250ms :) Защо се наложи да напиша допълнителна функция "delay_ms()", а не ползвам вградената функция "_delay_ms()" , която е дал Борислав? Обясненението се крие по начина по който се генерира закъснението, обикновено това става като се прави цикъл в който се повтарят определени инструкции на процесора и тъй като времето за изпълнение е фиксирано и като знаем   тактовата честота,  може да генерираме закъснението което ни е необходимо. Вградената функция  _delay_ms() при честота на процесора 8MHz, може да генерира максимум около 32ms изчакване, така че за да увелича времето до 250ms, аз си направих   "delay_ms()", За да направя закъснение 250ms, аз извиквам функцията "delay_ms" с параметър 250 тя от своя старана вика 250 пъти вградената функция   "_delay_ms()"  с параметър 1, т.е изчакване 1 ms.
Оттук нататък нещата са ясни, чакаме 250ms през което диода свети, след това имаме:  "PORTD = 0x00;", установяваме PORTD в нула и по този начин спираме нарежението на светодиода и той угасва, чакаме отново 250ms, през това време светодиода не свети и после с връщаме в началото на цикъла и отново го запалаваме и така нещата се повтрят.
Леле колко много изписах, надявам се да е полезно ще почина малко. че ме заболя пръстите от писане :)

404
Програмиране / Умни роботи
« -: Септември 09, 2007, 11:03:30 am »
Поздравления за Мартин за интересните статии и тематиката, която е започнал :) Тя наистина е доста обширна и интересна. Преди време и аз се интересувах от невронни мрежи, даже изчетох една, две книжки и една малка програма написах, но всичко беше само на PC.
Това което ми харесе при НМ(невронни мрежи) е тяхната универсалност и спосбността им да решават най-различен кръг проблеми. В мойта програма се бях опитал да направя елементарно разпознаване на цифри от седемсегментен индикатор. Мрежата имаше 7 входа и 4 изхода, като информацията се представя в двоичен вид, т.е представям на входа кои  сегменти светят и след това очаквам да получа двоичния код на изхода (използвах цифри от 0-9). Първоначално мрежата не е обучена (теглата на връзките между отделните неврони не е нагласена) и затова се провежда обучение по метода обратно разпорастранение на грешката т.е на входа се поставя избражението на определена цифра, а на изхода се салага верния код и по определен алгоритъм се променят връзките между невроните и накрая мрежата се научава да разпознава цифрите дори и да има липсващи сегменти.
Разбира се подобна задача може да се реши и с конвенционален алгоритъм и обикновено ако има разработен алгоритъм за дадена задача той обикновено е по добър от НМ, но предимството е че е НМ може да реши проблем за който няма точен алгоритъм или разработването е много сложно и ще отнеме много време
Както писха в началото тематиката е интерсна и може да пробваме някое релано приложение в областта на роботиката :)
Давам линк към една хубава книга (на английски), тя по принцип е за цифрова обработка на сигнали, но глава 26 е за НМ и нещата са обяснени много добре:
http://www.dspguide.com/ch26.htm

405
Аз реших да тествам този програматор тип 5 проводника за AVR (иначе ползвам по сложни, но това е друга тема):
http://www.robotics-bg.com/forum/viewtopic.php?p=490#490
Тествах го с PonyProg и услях да програмирам ATMEGA8, тук резисторите са 330ома, така че с 220 също нещата трябва да вървят добре.

Страници: 1 ... 25 26 [27] 28 29 ... 31