Микроконтроллеры |
+7-978-708-85-73 Дроссель Amadeus Productions. Быстрый заказ по телефону. (Viber, WhatsApp, Telegram) |
Микроконтроллеры |
9.9.2009, 17:52
Сообщение
#1
|
|
Технический Маньяк-Гуру Группа: Администраторы Сообщений: 7044 Регистрация: 3.6.2009 Из: Армения Вне форума Авто: Lancer IX, AT Репутация: 263 |
Ну что, начнем. Заранее заявляю, что я сам тоже новичок в этом деле, так, что если что не так с удовольствием приму и критику и замечания и дополнения.
Что такое микроконтроллер (МК)? Это микросхема которая сама по себе АБСОЛЮТНО ничего не умеет делать в отличии от даже самой примитивной логики. Для того, чтобы заставить МК выполнять какую-нибуть работу надо прошить (загрузить) в него программу. МК выпускаются многими фирмами - Mikrochip, Atmel, Motorolla, etc. Здесь будут рассматриваться только МК фирмы Mikrochip, так называемые pic-контроллеры. Их легко различить по маркировке от других, название начинается с префикса PIC или (в современных сигнальных процессорах) dsPIC, например, PIC18F2520, PIC16F877 и т.д. Наиболее употребимые в любительской практике - 8-разрядные контроллеры среднего и высшего семейств, PIC16 и PIC18. Буква "F" в маркировке МК означает, что он может многократно перезаписываться, т.е. если по каким-либо причинам надо поменять программу (прошивку), то это легко можно осуществить при помощи программатора (об этом попозже). Есть МК и с буквой "С" - это однократно программируемые. Питание МК - +5В, хотя многие из них могут работать и при пониженном напряжении, от +2,5В. Потребляемый ими ток насколько мал, что о нем и говорить неудобно (IMG:style_emoticons/default/dry.gif) Так что-же все таки представляет собй МК? Это микросхема с определенным количеством выводов (8, 14, 16, 18, 20, 28, 40 и т.д), как минимум двое из которых предназначены для подачи питания, а почти все остальные представляют собой линии ввода-вывода. Почти - потому-что есть МК, которые обязательно должны тактироваться внешним кварцем (еще 2 вывода) и/или имеют отдельный вывод сброса. А есть и такие, что могут работать как от внешнего так и от внутреннего генераторов, в этом случае освободившиеся выводы тоже можно использовать для дела. Конкретно количество выводов данных можно посмотреть в даташите на конкретный МК. Т.к. МК 8-и битные, то и выводы организованы в шины той-же разрядности, или, как их называют - порты. В зависимости от кол-ва ножек могут быть порты A, B, C, D, E, которые на изображении МК обозначаются след. образом: буква R, затем наименование порта, затем номер разряда порта, напр. RA0, RC2, RB7... В МК совсем необязательно наличие всех разрядов какого-либо порта, например, могут быть RC3...RC7, a RC0, RC1 и RC2 - отсутствовать. В принципе, это не имеет значения, т.к. любой порт можно запрограммировать на выполнение практически любой задачи (исключая некоторые специфические, такие, как обмен данными по USB или Ethernet), так, что без разницы - подключен, например, светодиод, сигнализирующий о превышении температуры к порту RB5 или RE0. Исключение составляют выводы порта А, которые можно сконфигурировать так, чтоб они работали в аналоговом режиме (все остальные только цифровые). Естественно, порт А также может работать в цифровом режиме, что он и делает по умолчанию. Аналоговый режим используется для задействования встроенных АЦП - аналого-цифровых преобразователей, с их помощью измеряются аналоговые сигналы, например, напряжение, показания термодатчиков и т.д. С распространением различных протоколов на определенные выводы могут также возлагаться дополнительные функции. Это не значит, что с другими выводами нельзя добиться результата, просто, если на вывод подключена какая-либо доп. функция, то результат достигается более легкими программными способами. Для примера приведу обозначения выводов МК PIC16F876 1 MCLR/VPP/RE3 2 RA0/AN0 3 RA1/AN1 4 RA2/AN2/VREF-/CVREF 5 RA3/AN3/VREF+ 6 RA4/T0CKI/C1OUT 7 RA5/AN5/SS/HLVDIN/C2OUT 8 VSS 9 OSC1/CLK1 10 OSC2/CLK0 11 RC0/T1OSO/T13CKI 12 RC1/T1OSI/CCP2 13 RC2/CCP1 14 RC3/SCK/SCL 15 RC4/SDI/SDA 16 RC5/SDO 17 RC6/TX/CK 18 RC7/RX/DT 19 VSS 20 VDD 21 RB0/INT 22 RB1 23 RB2 26 RB3/PGM 25 RB4 26 RB5 27 RB6/PGC 28 RB7/PGD Смотрим, что мы тут имеем. МК имеет 2 вывода для соединения с общим проводом (8 и 19 - Vss), вывод питания - 20 - Vdd, отдельные выводы для подачи тактовых импульсов или подключения кварца - 9 - OSC1/CLK1 и 10 - OSC2/CLK0. Вывод сброса по желанию можно переконфигурировать для обработки данных - 1 - MCLR/VPP/RE3, т.е. он превращается в RE3. Все остальные - данные. Дальше, некоторые выводы не имеют никаких специальных функций, например, RB1...RB7. Здесь PGM, PGC, PGD, а также Vpp на выводе 1 - сигналы с программатора, после прошивки МК они (имеются в виду сигналы а не выводы) не используются. Порты А, как видно, могут переконфигурироваться и работать как AN0...AN5 - аналоговые входы. Некоторые сигналы (вернее протоколы) могут нам никогда и не понадобиться, так, что не стоит сейчас акцентировать на них внимание, просто опять же для примера упомянем 17 - RC6/TX/CK 18 - RC7/RX/DT, т.е. если надо, чтоб МК взаимодействовал с компьютером по последовательному интерфейсу (СОМ порт), то для этой цели лучше выбрать выводы 17 и 18, т.к. на них посажены также режимы RX и TX. ----------------- Естественно, т.к. МК работают под управлением программы, то в них должна быть предусмотрена память для этих самых программ. В зависимости от МК объем памяти может колебаться от сотен байт до десятков килобайт. Память, как уже отмечалось, обычно многократно перезаписываемая. Помимо программной МК может также иметь RAM память (ОЗУ) - для временного хранения данных/переменных во время работы программы, а также EEPROM - постоянная память для хранения данных при выключенном питании контроллера. Скажем, если на контроллере построен борткомпьютер, то, например, пройденный путь или израсходованный бензин надо писать именно в EEPROM, иначе данные потеряются после выключения зажигания. Данные же о мгновенном расходе пишутся в RAM. Конкретно объем программной памяти и наличие/отсутствие и объем RAM и EEPROM надо опять же смотреть в соотв. даташитах. ----------------- Я честно говоря, не знаю, надо ли продолжать или нет, т.к. в сети есть куча информации по различным МК, так, что если есть желание, то изучить их работу в желаемом для себя объеме нетрудно. Если есть интерес к обсуждению этого вопроса именно здесь а не на спец. форумах, то в след. раз поговорим о самих программах и программаторах. |
|
|
15.9.2010, 14:36
Сообщение
#41
|
|
Технический Маньяк-Гуру Группа: Администраторы Сообщений: 7044 Регистрация: 3.6.2009 Из: Армения Вне форума Авто: Lancer IX, AT Репутация: 263 |
Программа обычно должна работать в цикле, в выложенном примере цикл образуется командами while-wend
while true .... .... .... wend А можно и метками main: .... .... .... goto main В принципе да, любая программа если нет ветвлений выполняется построчно, т.е. грубо говоря если распознавание нажатия кнопки идет на 5-й строке, то сначала выполняются первые 4, потом только проверка нажатия. Но это происходит так быстро, что паузу не почувствуешь... |
|
|
15.9.2010, 15:37
Сообщение
#42
|
|
Технический Маньяк-Гуру Группа: Технический Маньяк Сообщений: 1724 Регистрация: 15.10.2009 Из: Москва, п. Монино Вне форума Репутация: 8 |
Ага, всё, цикл нашёл, спасибо. (IMG:style_emoticons/default/smile.gif) Про быстроту выполнения программы я тоже понял. Кстати установил себе МикроПаскаль взломанный, класс! Теперь привычный язык! (IMG:style_emoticons/default/smile.gif) ) Ещё вопросик. Как запустить микроконтроллером что-нибудь тяжёлое? Например моторчик 12В 500мА. Ведь если на транзистор NPN подать на базу с МК 5В то ведь он не полностью "откроется" если на коллекторе 12В?
Ещё вопрос по старту. Старт он всегда начинается сам когда на МК подаётся питание? Или нужно обязательно MCLR через 10кОм на + подавать? А если скажем программа без цикла, то тогда МК в конце встанет просто? И на старт его можно сбросом через MCLR? Какая тут вообще логика? (IMG:style_emoticons/default/smile.gif) |
|
|
15.9.2010, 15:47
Сообщение
#43
|
|
Технический Маньяк-Гуру Группа: Администраторы Сообщений: 7044 Регистрация: 3.6.2009 Из: Армения Вне форума Авто: Lancer IX, AT Репутация: 263 |
Биполярные транзисторы вообще-то током управляются (IMG:style_emoticons/default/smile.gif) , т.е. если на коллекторе 500 мА и макс. выходной ток порта МК 10 мА, то надо ставить транзистор с соотв. допустимым током коллектора (лучше больше (IMG:style_emoticons/default/wink.gif) ) и коэффициэнтом усиления не менее 50.
Вот другое дело - полевики, есть же серия IRL - специально предназначенная для управления логическими уровнями до 5В. |
|
|
15.9.2010, 15:51
Сообщение
#44
|
|
Технический Маньяк-Гуру Группа: Администраторы Сообщений: 7044 Регистрация: 3.6.2009 Из: Армения Вне форума Авто: Lancer IX, AT Репутация: 263 |
MCLR в некоторых МК можно вообще переконфигурировать под обычный порт. А так, на него сажают через 5,6...10кОм напряжение питания.
Все остальное что ты написал - верно (IMG:style_emoticons/default/smile.gif) Насчет логики - кто его знает, мали ли что кому на ум взбредет. У меня все программы зациклены в бесконечный цикл. |
|
|
15.9.2010, 16:13
Сообщение
#45
|
|
Технический Маньяк-Гуру Группа: Технический Маньяк Сообщений: 1724 Регистрация: 15.10.2009 Из: Москва, п. Монино Вне форума Репутация: 8 |
Схемку бы конкретную с конкретными моделями (IMG:style_emoticons/default/blush.gif) (IMG:style_emoticons/default/blush.gif) (IMG:style_emoticons/default/blush.gif) (IMG:style_emoticons/default/happy.gif)
|
|
|
15.9.2010, 16:44
Сообщение
#46
|
|
Технический Маньяк-Гуру Группа: Администраторы Сообщений: 7044 Регистрация: 3.6.2009 Из: Армения Вне форума Авто: Lancer IX, AT Репутация: 263 |
Транзистор, для описанного случая подойдет КТ972 и т.д. |
|
|
15.9.2010, 16:57
Сообщение
#47
|
|
Технический Маньяк-Гуру Группа: Технический Маньяк Сообщений: 1724 Регистрация: 15.10.2009 Из: Москва, п. Монино Вне форума Репутация: 8 |
А, ну так всё также как и с логическими элементами было. Просто меня смутило, что с лог элемента у нас +12В выходило, а тут будет только +5. Или это не страшно?
|
|
|
15.9.2010, 17:16
Сообщение
#48
|
|
Технический Маньяк-Гуру Группа: Администраторы Сообщений: 7044 Регистрация: 3.6.2009 Из: Армения Вне форума Авто: Lancer IX, AT Репутация: 263 |
У логического элемента выходит напряжение питания, если запитать его от 5В - столько же и выйдет (IMG:style_emoticons/default/smile.gif)
Но я же уже писал - биполярные транзисторы управляются током а не напряжением. Напряжение может быть очень маленьким - лишь бы пробить p-n переход, обычно надо 0,6...0,7В, а у германиевых транзисторов и того меньше... Посмотри что выдал мне собранный вчера приборчик: http://forum.amadeus-project.com/index.php...ost&p=42663 Uf=775m, это означает, что при 0,775В транзистор уже начинает открываться. Вот, другое дело - полевики, они как-раз управляются напряжением, и для открывания нужно 10...12В для популярной серии IRF. Но есть еще серия IRL которая и предназначена для работы с логич. уровнями. |
|
|
5.10.2010, 19:23
Сообщение
#49
|
|
Технический Маньяк-Гуру Группа: Технический Маньяк Сообщений: 1724 Регистрация: 15.10.2009 Из: Москва, п. Монино Вне форума Репутация: 8 |
Блин, сколько информации (IMG:style_emoticons/default/smile.gif) Подскажи что я делаю не так? mikroPascal Pro for PIC. По задумке должны мигать диоды с порта B, а если нажать на кнопку А0 (подать на неё 5В), то они должны замигать по другому в процессе держания кнопки. На деле же просто мигает первым вариантом и на кнопку не реагирует. +5В на пин точно по кнопке подаётся. МК PIC16F627. Демоплата.
Код program LED_Blinking;
begin TRISB:= %00000000; // set direction to be output TRISA:= %00001111; // set direction to be input While TRUE do begin PORTB:= %00101010; // Turn OFF diodes on PORTB Delay_ms(100); // 1 second delay PORTB:= %00010101; // Turn ON diodes on PORTB Delay_ms(100); // 1 second delay while PORTA.RA0 do begin PORTB:= %00000000; // Turn OFF diodes on PORTB Delay_ms(100); // 1 second delay PORTB:= %00111111; // Turn ON diodes on PORTB Delay_ms(100); // 1 second delay end; end; // Endless loop end. |
|
|
5.10.2010, 19:42
Сообщение
#50
|
|
Технический Маньяк-Гуру Группа: Администраторы Сообщений: 7044 Регистрация: 3.6.2009 Из: Армения Вне форума Авто: Lancer IX, AT Репутация: 263 |
С микропаскалем не знаком, хотя эти все компиляторы и похожи, но некоторые команды записываются по другому. Напр.заметил - while не ограничивается wend-oм. И еще PORTA.RA0 ? В паскале такая запись принята? В других компилляторах обозначается так PORTA.0
Далее - посмотри даташит на пик, не сидят ли на порту АЦП или компараторы? Если да - отключи. Притянут ли порт на землю? А осцилляторы выставлены правильно? |
|
|
5.10.2010, 19:57
Сообщение
#51
|
|
Технический Маньяк-Гуру Группа: Администраторы Сообщений: 7044 Регистрация: 3.6.2009 Из: Армения Вне форума Авто: Lancer IX, AT Репутация: 263 |
Скачал Manual на Паскаль посмотрел. Цикл организован правильно, а вот обращение к порту надо PORTA.0
|
|
|
5.10.2010, 20:20
Сообщение
#52
|
|
Технический Маньяк-Гуру Группа: Технический Маньяк Сообщений: 1724 Регистрация: 15.10.2009 Из: Москва, п. Монино Вне форума Репутация: 8 |
Спасибо за подсказку, победил (IMG:style_emoticons/default/smile.gif) Надо было действительно выключить компаратор:
Код CMCON:= %00000111;
|
|
|
5.10.2010, 20:27
Сообщение
#53
|
|
Технический Маньяк-Гуру Группа: Администраторы Сообщений: 7044 Регистрация: 3.6.2009 Из: Армения Вне форума Авто: Lancer IX, AT Репутация: 263 |
(IMG:style_emoticons/default/smile.gif) Вот, начало положено. И совсем не сложно, так?
|
|
|
5.10.2010, 20:32
Сообщение
#54
|
|
Технический Маньяк-Гуру Группа: Технический Маньяк Сообщений: 1724 Регистрация: 15.10.2009 Из: Москва, п. Монино Вне форума Репутация: 8 |
Угу! (IMG:style_emoticons/default/smile.gif) Просто в Паскале-то я нормально соображаю - хорошо на Делфях пишу, да тут от Паскаля только язык, а по сути всё равно нужно знать что для чего... Но начало положено (IMG:style_emoticons/default/smile.gif)
|
|
|
5.10.2010, 20:38
Сообщение
#55
|
|
Технический Маньяк-Гуру Группа: Администраторы Сообщений: 7044 Регистрация: 3.6.2009 Из: Армения Вне форума Авто: Lancer IX, AT Репутация: 263 |
Есть хороший ресурс с доп. библоитеками для паскаля, найду ссылку - выложу. А пока в принципе можешь поиграться с примерами из help-а, он хорошо продукоментирован.
И в разделе проектов на сайте есть много интересного... |
|
|
13.11.2010, 16:19
Сообщение
#56
|
|
Технический Маньяк-Гуру Группа: Технический Маньяк Сообщений: 1724 Регистрация: 15.10.2009 Из: Москва, п. Монино Вне форума Репутация: 8 |
А как заставить выдавать нашу плату звук? Допустим есть излучатели звука - http://lib.chipdip.ru/054/DOC000054699.pdf Я так понял, что одни представляют из себя чисто динамик (отдельно нужно подавать на него колеблюющееся напряжение), а другие динамик вместе с генератором волны (и усилителем?)? Мне нужно, чтобы просто пищало (для начала). Что лучше выбрать - с генератором или просто излучатель - без? И какие варианты подключения? Наверное пока для меня самый интересный вариант, чтобы использовать "play_sound(freq, time)" процедуру в МикроПаскале, т. е. беру излучатель без генератора, смотрю, сколько А макс он ест (80мА вижу) и также через транзисторный ключ подключаю? А на вывод МК посылаю "play_sound" - меандр с заданной частотой? Или всё сложнее?
|
|
|
13.11.2010, 16:26
Сообщение
#57
|
|
Технический Маньяк-Гуру Группа: Технический Маньяк Сообщений: 1724 Регистрация: 15.10.2009 Из: Москва, п. Монино Вне форума Репутация: 8 |
От блин, а как подавать с ножки МК скажем "-5В"? (IMG:style_emoticons/default/smile.gif) Это т. е. надо вторую ножку задействовать и подавать поочерёдно +5В? А одной ножкой можно обойтись? (IMG:style_emoticons/default/smile.gif) Можно как-нить типа "DC Offset" сделать? (IMG:style_emoticons/default/smile.gif) Или можно забить и колебать динамик только в одну сторону?
Чем отличаются пьезо от электромагнитных? (IMG:style_emoticons/default/smile.gif) |
|
|
13.11.2010, 17:09
Сообщение
#58
|
|
Технический Маньяк-Гуру Группа: Администраторы Сообщений: 7044 Регистрация: 3.6.2009 Из: Армения Вне форума Авто: Lancer IX, AT Репутация: 263 |
Все верно, надо или взять со встроенным генератором и включать-выключать его подавая на него логич. уровень с вывода МК или чисто излучатель и подать на него однополярную (без -5В, только +) импульсную последовательность или тот же самый play_sound. 440 (880 и т.д.) Гц даст тебе ноту "Ля" (IMG:style_emoticons/default/smile.gif)
Пьезо от эл. магнитного этим самым и отличается, первый на пьезокристале, второй - с эл. магнитом, пьезо имеют большое входное сопротивление и потребляют незначительный ток. В связи с этим пьезо можно непосредственно, и без всяких развязывающих конденсаторов сажать на ноги МК. |
|
|
13.11.2010, 19:57
Сообщение
#59
|
|
Технический Маньяк-Гуру Группа: Технический Маньяк Сообщений: 1724 Регистрация: 15.10.2009 Из: Москва, п. Монино Вне форума Репутация: 8 |
Т. е. и пьезо и магнитные бывают и с генератором и без? А электромагнитный излучатель без генератора - по сути просто маленький динамик, как во всех колонках-наушниках?
|
|
|
13.11.2010, 20:29
Сообщение
#60
|
|
Технический Маньяк-Гуру Группа: Администраторы Сообщений: 7044 Регистрация: 3.6.2009 Из: Армения Вне форума Авто: Lancer IX, AT Репутация: 263 |
Все верно (IMG:style_emoticons/default/smile.gif)
|
|
|
+7-978-708-85-73 Дроссель Amadeus Productions. Быстрый заказ по телефону. (Viber, WhatsApp, Telegram) |
Текстовая версия | © 2006-2024 Форум Технических Маньяков. |
|