![]() |
![]() |
+7-978-708-85-73 Дроссель Amadeus Productions. Быстрый заказ по телефону. (Viber, WhatsApp, Telegram) |
![]() |
![]()
Сообщение
#1
|
|
Технический Маньяк-Гуру ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Технический Маньяк Сообщений: 7049 Регистрация: 3.6.2009 Из: Армения Вне форума Авто: Lancer IX, AT Репутация: ![]() ![]() ![]() |
Ну что, начнем. Заранее заявляю, что я сам тоже новичок в этом деле, так, что если что не так с удовольствием приму и критику и замечания и дополнения.
Что такое микроконтроллер (МК)? Это микросхема которая сама по себе АБСОЛЮТНО ничего не умеет делать в отличии от даже самой примитивной логики. Для того, чтобы заставить МК выполнять какую-нибуть работу надо прошить (загрузить) в него программу. МК выпускаются многими фирмами - 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 надо опять же смотреть в соотв. даташитах. ----------------- Я честно говоря, не знаю, надо ли продолжать или нет, т.к. в сети есть куча информации по различным МК, так, что если есть желание, то изучить их работу в желаемом для себя объеме нетрудно. Если есть интерес к обсуждению этого вопроса именно здесь а не на спец. форумах, то в след. раз поговорим о самих программах и программаторах. |
![]() |
|
![]() |
![]()
Сообщение
#2
|
|
Технический Маньяк-Гуру ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Технический Маньяк Сообщений: 7049 Регистрация: 3.6.2009 Из: Армения Вне форума Авто: Lancer IX, AT Репутация: ![]() ![]() ![]() |
Продолжим.
В подавляющем большинстве случаев МК должен работать не в одиночку, а с некоторой периферией, например, светодиодные или ЖК индикаторы, кнопки, датчики, и т.д. Причем некоторые из периферийных устройств не требуют специальных протоколов обмена - светодиоды, кнопки, другие же, наоборот, работают только по своим специфическим протоколам. Протокол обмена - это как бы язык, на котором два устройства "разговаривают" друг с другом. К нашему облегчению многие стандартные и распространенные протоколы реализованы в МК на аппаратном уровне (об этом уже говорилось) остается понять как можно организовать обмен данными между МК и внешним устройством. Одним из наиболее востребованным периферийным устройством является многострочный ЖК индикатор, обычно применяются индикаторы 16х2 (2 строки по 16 символов в каждой). Не вдаваясь в подробности его работы посмотрим как можно управлять им при помощи МК. Сразу отметим, что почти всегда требуется при использовании какого-либо устройства справляться с его описанием (datasheet), хотя бы для того, чтоб узнать расположение выводов и сигналов. Для управления такими ЖКИ обычно требуются сигналы данных (4-х разрядная шина) - D4...D7, выбора кристалла - Е, и сигнала выбора между данными и инструкциями (командами) - D/I или RS (разные производители могут обозначать по-разному). Т.е. для управления нам потребуется 6 линий - 6 выводов МК. Естественно и питание надо подключить и, желательно, регулировку контрастности, но в этом деле сам МК не участвует. Сразу же определимся с языком программирования, т.к. хотя смысл программы на разных языках и не меняется, но они отличаются синтаксисом. Предлагаю для начала выбрать MikroBasic Pro (МВР), производство Mikroelektronika. 1. Полнофункциональную версию можно скачать с сайта www.mikroe.com, ограничение только на размер кода, для изучения нам хватит и усеченной версии. 2. Программа имеет очень хороший Help, множество примеров и форум поддержки. 3. При желании можно легко освободиться от ограничений (IMG:style_emoticons/default/wink.gif) 4. Фирма предлагает по доступной цене множество демо плат, при желании можно не заморачиваться с изготовлением того или иного устройства а просто собрать его "из кубиков" 5. Все команды организованы в виде библиотек, которые полностью документированы, возможно добавление собственных библиотек. 6. Одновременно с описанным выпускаются также MikroC и MikroPascal, которые отличаются только синтаксисом, так, что каждый может выбрать себе компиллятор по вкусу. Т.к. язык уже выбран - кратко о структуре программы, она (эта самая структура) должна иметь вид: program Имя_программы ' заголовок программы объявление различных переменных, а также соединений периферийных устройств с выводами МК main: ' точка входа в основную программу Сама программа ..... ..... ..... ..... end. ' Конец программы, обратите внимание, в конце стоит точка Здесь мы не обозначили подпрограммы, но пока и не надо, первую программу напишем "в упор", без подпрограмм. Ладно, вернемся к нашему ЖК. Перво-наперво надо сообщить МК, к каким его выводам подключаются какие выводы ЖКИ. После этого может начаться сама программа, надо очистить ЖКИ, выключить курсор на нем, чтоб не мельтешил перед глазами и написать что-нибуть. Как видим, мы здесь в принципе даже и не пытались программировать, просто рассказали что требуется. А теперь запрограммируем, читая help. Все, что написано на строке после символа ' является комментарием и игнорируется программой. Это надо для нас, чтоб по прошествии времени могли вспомнить, что мы тут нагородили... program LCD ' Lcd connection dim LCD_RS as sbit at RB4_bit ' Вывод RS индикатора подключен к выводу RB4 МК (Для pic16f876 это вывод 25) LCD_EN as sbit at RB5_bit ' Остальные писать не будем, и так все ясно... LCD_D4 as sbit at RB0_bit LCD_D5 as sbit at RB1_bit LCD_D6 as sbit at RB2_bit LCD_D7 as sbit at RB3_bit LCD_RS_Direction as sbit at TRISB4_bit LCD_EN_Direction as sbit at TRISB5_bit LCD_D4_Direction as sbit at TRISB0_bit LCD_D5_Direction as sbit at TRISB1_bit LCD_D6_Direction as sbit at TRISB2_bit LCD_D7_Direction as sbit at TRISB3_bit ' End Lcd connections main: ' Начало основной программы Lcd_Init() ' Проиницилизируем (встряхнем) ЖКИ Delay_ms(200) ' Выдержим паузу в 200 мс, можно и не делать, но лучше дать ЖКИ время очухаться Lcd_Cmd(_LCD_CLEAR) ' Очистить экран Lcd_Cmd(_LCD_CURSOR_OFF) ' Выключить курсор Lcd_Out(1, 1, "AMADEUS") ' Вывести в 1-й строке на 1-й позиции слово AMADEUS Lcd_Out(2, 1, "PROJECT") ' 2 строка, 1 позиция End. ' Закончить программу. Все! Компилируем, заливаем в МК, включаем - работает. Применительно к MBP надо отметить, что если в программе используется какая-либо библиотека, то в диспетчере библиотек надо поставить галочку напротив необходимых компонент, или вообще выбрать все. Кстати, если библиотека не выбрана, то в окне редактора соотв. команды подчеркиваются красной волнистой линией, что облегчает нам задачу выбора. Таким же образом можно вывести на экран любую информацию, в том числе и считываемую с различных датчиков, внешних устройств. Здесь мы рассмотрели связь МК с устройством, которое хотя и работает по опред. протоколу, но в МК нет соответствующей аппаратной поддержки. Дальше рассмотрим связь с простейшей периферией (если можно так назвать кнопки и светодиоды) и потом и связь под конкретный протокол. ЖК индикатор оставим подключенным к МК, он нам никогда не помешает. |
![]() |
|
![]() ![]() ![]() |
![]() |
+7-978-708-85-73 Дроссель Amadeus Productions. Быстрый заказ по телефону. (Viber, WhatsApp, Telegram) |
Текстовая версия | © 2006-2025 Форум Технических Маньяков. |
|