Микроконтроллеры |
+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 надо опять же смотреть в соотв. даташитах. ----------------- Я честно говоря, не знаю, надо ли продолжать или нет, т.к. в сети есть куча информации по различным МК, так, что если есть желание, то изучить их работу в желаемом для себя объеме нетрудно. Если есть интерес к обсуждению этого вопроса именно здесь а не на спец. форумах, то в след. раз поговорим о самих программах и программаторах. |
|
|
13.11.2010, 20:39
Сообщение
#61
|
|
Технический Маньяк-Гуру Группа: Технический Маньяк Сообщений: 1724 Регистрация: 15.10.2009 Из: Москва, п. Монино Вне форума Репутация: 8 |
Блин, спасибо, что ты есть!!! (IMG:style_emoticons/default/smile.gif) Слушай, а можешь нарисовать самую, на мой взгляд, крутую модель - электромагнитный излучатель без генератора управляемый одной ножкой МК? И почему сюда нужно подавать однополярный сигнал? Я думал, что надо и минус тоже?..
|
|
|
13.11.2010, 21:10
Сообщение
#62
|
|
Технический Маньяк-Гуру Группа: Администраторы Сообщений: 7044 Регистрация: 3.6.2009 Из: Армения Вне форума Авто: Lancer IX, AT Репутация: 263 |
Посмотри здесь, не только схема, но и примеры кода (IMG:style_emoticons/default/smile.gif)
http://www.mikroe.com/eng/products/view/440/easybuzz-board/ В любом случае микродинамик можно подключать и без транзистора, но через разделительный конденсатор, а пьезо - сразу сажаем на порт. A eще есть серия микросхем UM66TxxL - генераторы мелодий, если запитать от порта МК, то при подаче высокого уровня подключенный к выходу микродинамик (типа таких как используются например в модемах) начнет играть мелодию. Список мелодий можно посмотреть в даташите на микросхему. |
|
|
15.11.2010, 12:49
Сообщение
#63
|
|
Технический Маньяк-Гуру Группа: Технический Маньяк Сообщений: 1724 Регистрация: 15.10.2009 Из: Москва, п. Монино Вне форума Репутация: 8 |
Нашёл на просторах инета такую схему, пишут, что очень хитрая и классная. Что скажешь? Я вот не втыкаю ваще почему так (IMG:style_emoticons/default/smile.gif)
|
|
|
15.11.2010, 17:01
Сообщение
#64
|
|
Технический Маньяк-Гуру Группа: Администраторы Сообщений: 7044 Регистрация: 3.6.2009 Из: Армения Вне форума Авто: Lancer IX, AT Репутация: 263 |
А черт его знает, что это за схема... Динамик включен в качестве смещения транзистора. Надо проанализировать чем она может быть так крута... Лучше по-моему использовать классику - как на ссылке.
|
|
|
15.11.2010, 17:37
Сообщение
#65
|
|
Технический Маньяк-Гуру Группа: Технический Маньяк Сообщений: 1724 Регистрация: 15.10.2009 Из: Москва, п. Монино Вне форума Репутация: 8 |
Из твоих слов понял только слово "смещение" (IMG:style_emoticons/default/smile.gif) Может как раз это и сместит сигнал 0..5В до -2.5В..2.5В? Ну и усилит до (сколько там надо) -5В..5В? (IMG:style_emoticons/default/smile.gif)
|
|
|
15.11.2010, 18:13
Сообщение
#66
|
|
Технический Маньяк-Гуру Группа: Администраторы Сообщений: 7044 Регистрация: 3.6.2009 Из: Армения Вне форума Авто: Lancer IX, AT Репутация: 263 |
Нет, об отрицательном напряжении речь не идет. Смещение надо для перевода транзистора в активный режим, иначе он будет работать только в так называемом ключевом режиме - открыт-закрыт.
Если интересно - в двух словах поясню, Если база транзистора соединена непосредственно с портом МК (естественно через ограничительный резистор) то при отсутствии сигнала ток в цепи базы равен 0 и соотв. коллекторный ток тоже отсутствует. При поступлении сигнала - транзистор открывается и будет выдавать макс. коллекторный ток. Таким образом мы как-бы усиливаем дискретный сигнал, усиливать аналоговый таким образом нельзя т.к. из-за нелинейности ВАХ (вольт-амперной характеристики) транзистора на выходе получится неизвестно что. Вот для усиления аналоговых сигналов и надо сместить рабочую точку транзистора, т.е. организовать небольшой ток базы в отсутствии входного сигнала. |
|
|
18.11.2010, 10:51
Сообщение
#67
|
|
Технический Маньяк-Гуру Группа: Технический Маньяк Сообщений: 1724 Регистрация: 15.10.2009 Из: Москва, п. Монино Вне форума Репутация: 8 |
Ну ладно, не будем экспериментировать (IMG:style_emoticons/default/smile.gif) Тогда помоги плиз разобрать эту официальную схему:
C1 = 100nF - это понятно. E1 = 10uF - это конденсатор? Почему Е? Buzzer - это я так понял к любому пину МК? Что должен выдавать этот пин - постоянное напряжение или колеблющееся по play_sound? PZ1 - пьезоизлучатель? Они полярные или нет? С генератором или без? VCC это питание как на МК - 5В или любое, на которое рассчитан пьезик? |
|
|
18.11.2010, 11:28
Сообщение
#68
|
|
Технический Маньяк-Гуру Группа: Администраторы Сообщений: 7044 Регистрация: 3.6.2009 Из: Армения Вне форума Авто: Lancer IX, AT Репутация: 263 |
10uF = 10мкФ. Допускается замена "мю" на "u".
А вот все остальное - это импровизация, "Е" - по-видимому от слова electrolytic, да и условное обозначение отличается от нашего (кстати и неполярный тоже) Бузер подключается к любому пину, главное проинициализировать этот пин - Sound_Init(PORT, PIN). Работает от колеблющегося сигнала. Пьезоизлучатель - любой (без генератора), подключать можно и к 5В и, если есть, к 12В. |
|
|
18.11.2010, 11:59
Сообщение
#69
|
|
Технический Маньяк-Гуру Группа: Технический Маньяк Сообщений: 1724 Регистрация: 15.10.2009 Из: Москва, п. Монино Вне форума Репутация: 8 |
В схеме есть и 5В и 12В, т. е. я подключаю к тому напряжению, на которое рассчитан пьезик?
|
|
|
18.11.2010, 12:28
Сообщение
#70
|
|
Технический Маньяк-Гуру Группа: Администраторы Сообщений: 7044 Регистрация: 3.6.2009 Из: Армения Вне форума Авто: Lancer IX, AT Репутация: 263 |
Да.
|
|
|
12.12.2010, 19:17
Сообщение
#71
|
|
Технический Маньяк-Гуру Группа: Технический Маньяк Сообщений: 1724 Регистрация: 15.10.2009 Из: Москва, п. Монино Вне форума Репутация: 8 |
А ты когда-нибудь работал по прерываниям? Допустим в основное время МК ничего не делает, а программа (кусок кода) срабатывает только когда например на входе появляется 1 вместо 0? Вроде так можно, читал в мануале, но хотелось бы примерчик работающий (IMG:style_emoticons/default/smile.gif) Pic 12F675.
|
|
|
12.12.2010, 19:34
Сообщение
#72
|
|
Технический Маньяк-Гуру Группа: Администраторы Сообщений: 7044 Регистрация: 3.6.2009 Из: Армения Вне форума Авто: Lancer IX, AT Репутация: 263 |
С аппаратными прерываниями (по входу INT, GP2 в 12F675) - просто пока такой необходимости не возникало, с прерываниями по таймеру - в примерах приведены образцы работающего кода:
Timer0 Interrupt Timer1 Interrupt Timer2 Interrupt Для расчета прерываний по таймеру есть отличная программа, которая и код к тому же генерирует TMRCalc.zip ( 160,38 килобайт ) Кол-во скачиваний: 468 |
|
|
15.12.2010, 16:44
Сообщение
#73
|
|
Технический Маньяк-Гуру Группа: Администраторы Сообщений: 7044 Регистрация: 3.6.2009 Из: Армения Вне форума Авто: Lancer IX, AT Репутация: 263 |
Сегодня перечитал даташит на указанную микруху.
Соотв. установкой регистра INTCON можно не только активировать GP2/INT но также вызывать прерывания и по изменению уровня сигнала на остальных входах GPIO. И еще - по сигналу от компаратора или внутреннего АЦП а также по окончании записи во внутр. EEPROM. Ну и естественно остаются прерывания по переполнению таймеров. Всего аж 7 (!) источников прерываний... |
|
|
15.12.2010, 17:01
Сообщение
#74
|
|
Технический Маньяк-Гуру Группа: Технический Маньяк Сообщений: 1724 Регистрация: 15.10.2009 Из: Москва, п. Монино Вне форума Репутация: 8 |
Ну да, а вот как их использовать? Например установил я INTCON на прерывание по GP0. А самой программы типа while true do ... у меня и нет (она ведь теперь не нужна?). Я же должен описать что-то типа "on gp0 change do ..." вот как правильно? (IMG:style_emoticons/default/smile.gif)
|
|
|
15.12.2010, 17:12
Сообщение
#75
|
|
Технический Маньяк-Гуру Группа: Администраторы Сообщений: 7044 Регистрация: 3.6.2009 Из: Армения Вне форума Авто: Lancer IX, AT Репутация: 263 |
Конечно, не нужна. В MikroPascal-e (на нем пишешь если не ошибаюсь) да и в Си и бейсике есть специальная процедура interrupt куда передается управление при возникновении прерывания. А вот в теле этой процедуры и можешь писать те действия, которые надо выполнять при возникновании прерывания.
Вот пример из help - при каждом переполнении таймера TMR0 значение переменной counter увеличивается на единицу procedure interrupt; begin counter := counter + 1; TMR0 := 96; INTCON := $20; end; |
|
|
17.12.2010, 9:02
Сообщение
#76
|
|
Технический Маньяк-Гуру Группа: Администраторы Сообщений: 7044 Регистрация: 3.6.2009 Из: Армения Вне форума Авто: Lancer IX, AT Репутация: 263 |
Возвращаясь к адаптеру для PicKit2, упомянутом в сообщениях #16 (фото) и #20 (разводка)...
Если в разводке для PIC все ясно, то адаптер для прошивки EEPROM имеет некоторые особенности, а именно 2 джампера и резистор, предназначение которых не объяснено. Исправляю упущение (IMG:style_emoticons/default/smile.gif) Разводка составлена согласно документации на PicKit2, в которой приведена таблица подключения программируемых микросхем памяти 24хх, 25хх и 93хх. Согласно этой таблице вывод 5 микросхемы 24хх должен подтягиваться к плюсу (pullup) а для остальных нет. Подтягивающий резистор - на 3...5,6кОм. Т.е. если программируем 24хх - джампер ставим, 25хх и 93хх - снимаем. Нижний джампер - для выбора типа организации памяти в микросхеме 93хх, для 8-битной надо соединить верхние два контакта (вывод 6 микросхемы на общий провод), для 16-битной - нижние (6 - на питание). Следует иметь в виду что некоторые микросхемы из этой серии имеют только один тип организации памяти (или 16 или 8 бит), а некоторые могут быть запрограммированы и так и так. |
|
|
17.12.2010, 10:43
Сообщение
#77
|
|
Новичок Группа: Новичок Сообщений: 1 Регистрация: 16.12.2010 Вне форума Репутация: 0 |
Как уже отмечалось, с PicKit-ом удобно использовать универсальный адаптер для прошивки отдельных МК и EEPROM. Выкладываю разводку такого адаптера, вернее 2-х, один для пиков, другой для микросхем памяти. [attachment=2354:PickitHeader.rar] Отличный адаптер - стал недавно обладателем pickit2 и занялся поиском универсального адаптера использующего ZIF панели с поддержкой максимального числа МК. Есть много других вариантов (на одной панельке например) но они по некоторым причинам не устраивали (часть выводов под нежелательным питанием, использование миропереключателей итд и тп ) Я так понимаю зеркалить надо Какие контроллеры прошивали ? Сообщение отредактировал jn79 - 17.12.2010, 10:51 |
|
|
17.12.2010, 12:09
Сообщение
#78
|
|
Технический Маньяк-Гуру Группа: Администраторы Сообщений: 7044 Регистрация: 3.6.2009 Из: Армения Вне форума Авто: Lancer IX, AT Репутация: 263 |
На двух по-моему удобнее. Просто хоть один из ZIF-ов надо поставить как у меня - с широкими контактами.
Прошивал все, и пики в разных корпусах (40, 28, etc.) и все три вида памяти - на втором адаптере. Плюс, прошивал все обозначенное и внутрисхемно и для отладки использовал питание через PicKit2. Адаптер не совместим с dsPIC-ами (сам PicKit- прошивает, но адаптер должен быть другим) Встречалась мне схема на одном ЗИФ-е, что мне не понравилось - разные пики надо ставить вразнобой, во кстати и этот адаптер. Рабочий или нет - не знаю, не проверял и даже не вникал (IMG:style_emoticons/default/wink.gif) Adapter.rar ( 46,52 килобайт ) Кол-во скачиваний: 544 Платы - да, надо зеркалировать. Еще для программатора посоветую изготовить удлинитель, просто соединенные жгутом 6-контактные колодки папа и мама, не всегда удается подлезть к разъёму ICP... |
|
|
14.1.2011, 13:59
Сообщение
#79
|
|
Технический Маньяк-Гуру Группа: Технический Маньяк Сообщений: 1724 Регистрация: 15.10.2009 Из: Москва, п. Монино Вне форума Репутация: 8 |
А можно ли при программировании, чтобы не запутаться в куче пинов, заранее обозначить как-нить так:
Код Led1 := PORTA.0; Led2 := PORTA.3; Btn1 := PORTA.1; А потом просто писать типа: Код if Btn1 then do
Begin Led1:= 1; Led2:= 0; end; |
|
|
14.1.2011, 14:53
Сообщение
#80
|
|
Технический Маньяк-Гуру Группа: Администраторы Сообщений: 7044 Регистрация: 3.6.2009 Из: Армения Вне форума Авто: Lancer IX, AT Репутация: 263 |
В MikroBasic такая возможность есть, надо в начале программы записать что-то типа этого:
symbol Inputport = PORTB.0 Записывается именно в начале программы, до объявлений переменных и т.д. В help-е на Паскаль я что-то не нашел такого, может в про версии присутствует (у меня её нет чтоб посмотреть) |
|
|
+7-978-708-85-73 Дроссель Amadeus Productions. Быстрый заказ по телефону. (Viber, WhatsApp, Telegram) |
Текстовая версия | © 2006-2024 Форум Технических Маньяков. |
|