![]() |
+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
|
|
Don Amadeus ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Главные администраторы Сообщений: 29954 Регистрация: 19.2.2009 Из: Russia, Sevastopol Вне форума Авто: Lancer IX-1.6 MT Turbo, Honda Accord IX-2.4 AT Executive. Репутация: ![]() ![]() ![]() |
Спасибо, отлично, как базовый материал (IMG:style_emoticons/default/wink.gif)
Если действительно интересно продолжать - скажите, плз, надеюсь, что SSh сочтет нужным продолжить тему, да и я может чем полезным окажусь (IMG:style_emoticons/default/wink.gif) |
![]() |
|
![]()
Сообщение
#3
|
|
Технический Маньяк ![]() ![]() ![]() Группа: Технический Маньяк Сообщений: 407 Регистрация: 19.2.2009 Из: г. Брянск Вне форума Репутация: ![]() ![]() ![]() |
Конечно. Мне интересно.
|
![]() |
|
![]()
Сообщение
#4
|
|
Don Amadeus ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Главные администраторы Сообщений: 29954 Регистрация: 19.2.2009 Из: Russia, Sevastopol Вне форума Авто: Lancer IX-1.6 MT Turbo, Honda Accord IX-2.4 AT Executive. Репутация: ![]() ![]() ![]() |
Тогда сразу ссылка на один из моих любимых сайтов: http://easyelectronics.ru (кстати, тоже друг нашего сайта и форума).
Это ни в коем разе - не поправка и не дополнение к словам SSh, просто ссылка на интересные материалы, тоже написанные в очень доступной форме для чтения и понимания. Советую изучить рекурсивно все, что есть на сайте (IMG:style_emoticons/default/smile.gif) |
![]() |
|
![]()
Сообщение
#5
|
|
Банный маньяк. Надежный как румынская авиация ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Почетные ветераны Сообщений: 5244 Регистрация: 17.3.2009 Из: Ярославль Вне форума Авто: Lancer STW 1.6AT Репутация: ![]() ![]() ![]() |
ту би контьюниед..... ждем продолжения
|
![]() |
|
![]()
Сообщение
#6
|
|
Технический Маньяк-Гуру ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Технический Маньяк Сообщений: 7049 Регистрация: 3.6.2009 Из: Армения Вне форума Авто: Lancer IX, AT Репутация: ![]() ![]() ![]() |
Ну что же, продолжим.
Посмотрим, из каких модулей может состоять МК. Упомянем только о тех модулях, которые стандартно присутствуют почти во всех современных контроллерах, спец. МК (например со встроенным USB) рассматривать не будем. Сразу же, применительно к модулям, рассмотрим и соотв. управляющие регистры, т.к. для того, чтобы задействовать тем или иным образом какой-то модуль его надо как-то сконфигурировать, а иногда даже и включить. Что такое управляющий регистр. Это специальная область в памяти МК, размер каждого регистра - 8 байт, меняя которые можно настроить модуль. Некоторые модули управляются не одним а несколькими регистрами, так сказать для тонкой настройки. Все регистры имеют имена, так, что обращаться к ним и управлять не составляет труда. Теперь об основных модулях. Для лучшего понимания давайте определимся с типом МК и скачаем его даташит. Раз уже упоминали PIC16F876 давайте на нем и остановимся. Модули ввода/вывода. По вышеприведенной таблице легко можно посмотреть, что мы имеем для ввода/вывода данных. Если на графическом изображении порты обозначались через R, то в программах они упоминаются как PORTx, и, если требуется обращение к конкретному биту, через точку - номер бита, например, PORTA.2 - это вывод RA2 МК. Таким образом можно обращаться к любому выводу любого порта МК. Тут возможна и групповуха (в хорошем смысле слова), например, если надо установить некоторые логические уровни на всех 8 разрядах какого-либо порта, то пишем PORTB = %11001100 - % - признак того, что число двоичное, 7 и 6-й разряды установлены в 1 (т.е. есть сигнал), 5 и 6 - в 0, ну и т.д. То же самое можно записать и в десятичной и в шестнатиричной формах PORTB = 204 PORTB = $CC Или по мазохистски (но так писать не будем, только в качестве примера) PORTB.0 = 0 PORTB.1 = 0 PORTB.2 = 1 PORTB.3 = 1 PORTB.4 = 0 PORTB.5 = 0 PORTB.6 = 1 PORTB.7 = 1 Так же можно и считать значения с портов, например, если бит 3 порта А через кнопку посажен на общий провод, то ее нажатие в программе распознается так (пока своими словами, не привязываясь к конкретному языку программирования) Если PORTA.3 = 0, то выполнить такие-то действия. Следует заметить, что все порты выполнены по схеме с открытым коллектором. Для нас это означает, что если вывод не подключен никуда, то на нем может присутствовать неопределенный уровень. Для борьбы с неопределенностью надо подтянуть порты на + или корпус через так называемые pull-up резисторы (4,7 ... 10 кОм). Для предыдующего примера резистор должен быть подключен на +. Ясно почему? Пока кнопка не нажата через него на PORTA.3 гарантированно подается высокий уровень, т.е. PORTA.3 = 1. Но в некоторых случаях можно резисторы не ставить, например, если на выводе сидит светодиод - то он уже является нагрузкой и лишние резисторы не нужны. Другой важнейший регистр портов - TRIS - определяет направление передачи данных, 1 - на вход, 0 - на выход (запоминаем 1 - I - Input, 0 - O - Output), он используется тогда, когда надо точно обозначить прием или передачу данных. По аналогии с предыдующим, если TRISA = %10000001, то разряды 0 и 8 сконфигурированы на вход, остальные на выход. Это имеет смысл если на выводы посажены скажем, кнопки - то однозначно вход, светодиоды - выход. Если же какие-то операции требуют двунаправленного канала, например для считывания данных с цифрового датчика температуры, то направление не обозначаем, программа сама сделает все за нас. Забегая вперед скажу, что направления в некоторых случаях можно и не обозначать если язык программирования может сделать это за нас. Например если есть команда для измерения напряжения при помощи встроенного АЦП, то логично, что этот бит должен работать только на вход. Ничего не мешает разработчику организовать библиотеку так, чтобы при подаче команды порт сначала конфигурировался соотв. образом, потом начинал мерить. Так, что, в каждом конкретном случае, будем внимательно читать и описание языков программирования, чтоб не городить ненужных команд. Модуль АЦП - аналого-цифровое преобразование. Как уже упоминалось PORTA, а в некоторых МК и часть других портов, можно использовать как аналоговые. АЦП этих портов 10-разрядный (есть МК с переключаемой разрядностью АЦП - 8 или 10). Это дает нам до 1024 градаций измеряемого напряжения (2^10=1024), т.е. точность измерения примерно равна 5В/1024 = 0,005В, что вполне достаточно для практического применения. Точность измерения зависит и от опорных напряжений - Vref. Хотя опять же на практике достаточно в качестве опорного использовать напряжение питания самого МК, мы можем подать на определенные выводы внешнее Vref. Вот всеми этими делами и заправляют регистры управления АЦП - ADCON0 и ADCON1. ADCON0 часто можно и не трогать, его значения по умолчанию во многих случаях нас удовлетворят, а вот ADCON1 надо настроить обязательно. С его помощью устанавливаются аналоговые и цифровые входы, а также выбор Vref. Рассмотрим его поподробнее Старший бит (7) устанавливает формат результата, нам надо выравнивание вправо, т.е. так, как мы привыкли видеть числа. далее идут 3 незадействованных бита, и, наконец 4 последних, которые и определяют то, о чем упоминалось выше Лучше рассмотреть на примерах, сравнивая с даташитом ADCON1 = %10000000 - все выводы аналоговые, опорным является напряжение питания. ADCON1 = %10000110 - все выводы - цифровые, об опорном напряжении нет смысла говорить, как, впрочем и о 7 бите. ADCON1 = %10001110 - RA0 - аналоговый, все остальные - цифровые. Так можно сконфигурировать скажем схему простогоо одноканального вольтметра. Все возможные комбинации приведены в описании на МК. Ну и т.д, думаю понятно. В рассматриваемом нами МК есть и другие модули, TMR - таймеры, CCP - захват, USART - грубо говоря - СОМ порт, MSSP - синхронный последовательный порт. Но, я думаю, сейчас можно это все пропустить, для начала работы с МК они или не будут нужны, или все вопросы, связанные с конфигурированием решаются при помощи команд языка программирования и нам не надо вникать в тонкости. Наибольший интерес лично для меня представляет модуль MSSP, т.к. с его помощью облегчается взаимодействие МК с внешними устройствами, работающими по протоколу I2C или SPI, такими как микросхемы EEPROM, часы, напр. DS1307, MMC/SD карты памяти и т.д. В нашем МК есть выводы SCL и SDA (RC3, RC4) к которым и подключаем соотв. выводы скажем микросхемы часов DS1307. Не вникая в тонкости протокола, а они нам и не нужны, просто говорим - передать по шине I2C такую-то команду, или наоборот, принять байт по той же шине и все. Другое дело, что передавать и принимать. Тут уж нужен индивидуальный подход для каждого периферийного устройства. Это не зависит от самого МК. Но и это не проблема, например в даташите на DS1307 написано, что для того, чтобы "встряхнуть" его надо подать опред. команду, после чего начать считывать по тем же линиям ответ (в данном случае дату и время). Все это легко реализуется средствами языков программирования. След. на моей очереди - USART, а конкретнее хочу подцепиться контроллером к лансеровскому MUT2. Тут вся хитрость состоит в том, что согласно описанию протокола MUT2, его надо сначала инициализировать на одной скорости обмена, потом начать взаимодействовать с ним (спрашиваем - отвечает) на другой. Вот разберусь с делами - займусь этим. Вот и все про модули, дальше распространяться думаю не надо. Главное понять суть, а дальше нетрудно и самому разобраться. Если в дальнейшем возникнет необходимость - рассмотрим, а так, заранее не стоит, тем более, что я сам некоторые из них и не использовал, или же уже подзабыл что к чему. Да, чуть не забыл про модуль тактового генератора. Но в тех компиляторах, которые использую я, все настройки этого модуля производятся в настройках проекта, так, что о генераторе поговорим во время рассмотрения языков программирования. |
![]() |
|
![]()
Сообщение
#7
|
|
Технический Маньяк-Гуру ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Технический Маньяк Сообщений: 7049 Регистрация: 3.6.2009 Из: Армения Вне форума Авто: Lancer IX, AT Репутация: ![]() ![]() ![]() |
Поехали дальше.
Как уже отмечалось, для того, чтобы добиться от МК какой либо деятельности его надо прошить соответствующей программой. Сама скомпиллированная программа представляет собой набор символов в hex (шестнатиричном) формате и если открыть ее в блокноте имеет след вид: :1000000043290830211901308F008E012408840013 :100010002208BB202208800484130005FF3E211D16 ну и т.д. Для заливки программы требуется программатор, который как правило состоит из двух компонент - аппаратной и программной. Аппаратная часть является по сути согласующим интерфейсом между компьютером и МК, всю работу по заливке - формирование управляющих импульсов, передача данных, проверка (верификация) правильности записи и т.д. берет на себя программная оболочка. Существует множество типов программаторов под разные интерфейсы - COM, LPT, USB. Самые быстрые, конечно, USB-шные, но если не предъявлять особых требований, то подойдут и самодельные, на COM или LPT. Один из самых распространенных программаторов - PonyProg, схема его аппаратной части и программная оболочка доступны для свободного скачивания, он хорош тем, что состоит из базового блока и доп. адаптеров, предназначенных для прошивки различных чипов. Т.е. если вдруг понадобиться запрограммировать скажем память 93 или 24 серий, то достаточно сделать адаптер и все. В свое время я переделал кучу программаторов - PonyProg, SOLO, JonisProg и т.д, но потом купил USB-шный фирменный PicKit2 oт Microchip, который при всех остальных достоинствах позволяет также программировать внутрисхемно, т.е. не надо при каждой перепрошивке вытаскивать чип из схемы, зашивать его в программаторе а потом заново устанавливать на место. Тем более, что с микросхемами для поверхностного монтажа вообще морока получается. Но... при разработке той или иной схемы приходилось все-таки травить печатную плату, собирать схему, если что ни так - переделывать, что очень тормозило работу. И вдруг на глаза мне попался сайт фирмы Mikroelektronika - mikroe.com, которая помимо того, что выпускает компиляторы для МК, так еще осуществляет аппаратную поддержку в виде макетниц EasyPic5 и всевозможных периферийных дополнительных модулей и все это по приемлемой цене. Сами макетницы снабжены встроенным программатором, программная оболочка которого запускается прямо из среды компилятора. Получается вот какое удобство - пишешь программу, нажимаешь на кнопку - программа компилируется, прошивается и сразу видишь результат. Подробно плату описывать не буду - кому надо можно посмотреть на сайте. Если возникнут какие-нибуть вопросы - пишите. В качестве языка программирования также выбрал компилятор этой же фирмы - MikroBasic Pro. Во-первых он очень легок в освоении, во-вторых имеет очень хороший Help, ну и немаловажно то, что к ниму прилагается куча примеров, почти на все случаи жизни. Да и форум на сайте очень активный. Там же есть компилляторы MikroC и MikroPascal, отличаются друг от друга только синтаксисом. При использовании указанных компиляторов совсем не обязательно иметь программаторы от той же фирмы, результатом их работы является hex файл прошивки, который можно залить в МК любым другим программатором. Просто вышеописанным образом резко повышается производительность. Ещё могу посоветовать PicBasic Pro, тоже неплохой компиллятор для начинающих. |
![]() |
|
![]()
Сообщение
#8
|
|
Банный маньяк. Надежный как румынская авиация ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Почетные ветераны Сообщений: 5244 Регистрация: 17.3.2009 Из: Ярославль Вне форума Авто: Lancer STW 1.6AT Репутация: ![]() ![]() ![]() |
моск плавится. но стараюсь изучить.
|
![]() |
|
![]()
Сообщение
#9
|
|
Технический Маньяк-Гуру ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Технический Маньяк Сообщений: 7049 Регистрация: 3.6.2009 Из: Армения Вне форума Авто: Lancer IX, AT Репутация: ![]() ![]() ![]() |
Если что непонятно написано - спрашивайте, я пока подготавливаю след. части.
В любом случае без практических занятий сложно, а вот если попробовать - сразу становиться понятно. Это я исходя из собственного опыта говорю. |
![]() |
|
![]()
Сообщение
#10
|
|
Технический Маньяк ![]() ![]() ![]() Группа: Технический Маньяк Сообщений: 189 Регистрация: 28.7.2009 Из: Регион 52 Вне форума Репутация: ![]() ![]() ![]() |
Читается и понимается легко, в отличие от заумных книжек.
|
![]() |
|
![]()
Сообщение
#11
|
|
Технический Маньяк-Гуру ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Технический Маньяк Сообщений: 1802 Регистрация: 21.2.2009 Из: Екатеринбург Вне форума Авто: Lancer IX 1.6MT (105HP) Репутация: ![]() ![]() ![]() |
Надо, наверное, скозать еще о том, что микроконтроллер - это на самим деле такой небольшой компьютер в виде одной микросхемы. На борту у этой микрухи всегда есть проц, ПЗУ под программу и некоторое колличество оперативной памяти. Про пики не скажу, я больше по AVR-ам прибиваюсь пока, дак вот у них еще и некоторое колличество энергонезовисимой памяти есть. То есть особо важные данные (например настройки устройства) не пропадут при отключении питания.
И, до кучи, в эту-же микоросхему напихано некоторое колличество периферии. Как-то таймеры, компараторы, АЦП-шки, интерфейсы связи с внешним миром (чаще всего последовательные), и еще всякая полезная шушара. Напихано это добро для того, чтобы разработчик не забивал себе голову реализацией всего нужного ему хозяйства программным способом. И это надо сказать большое подспорье. Естественно в разных моделях микроконтроллеров набор периферии разный, да и размеры ПЗУ, оперативки EEPROM - ов тоже. |
![]() |
|
![]()
Сообщение
#12
|
|
Технический Маньяк-Гуру ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Технический Маньяк Сообщений: 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 надо отметить, что если в программе используется какая-либо библиотека, то в диспетчере библиотек надо поставить галочку напротив необходимых компонент, или вообще выбрать все. Кстати, если библиотека не выбрана, то в окне редактора соотв. команды подчеркиваются красной волнистой линией, что облегчает нам задачу выбора. Таким же образом можно вывести на экран любую информацию, в том числе и считываемую с различных датчиков, внешних устройств. Здесь мы рассмотрели связь МК с устройством, которое хотя и работает по опред. протоколу, но в МК нет соответствующей аппаратной поддержки. Дальше рассмотрим связь с простейшей периферией (если можно так назвать кнопки и светодиоды) и потом и связь под конкретный протокол. ЖК индикатор оставим подключенным к МК, он нам никогда не помешает. |
![]() |
|
![]()
Сообщение
#13
|
|
Технический Маньяк-Гуру ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Технический Маньяк Сообщений: 7049 Регистрация: 3.6.2009 Из: Армения Вне форума Авто: Lancer IX, AT Репутация: ![]() ![]() ![]() |
Для дальнейшего продолжения желательно собрать несложную схему, которую будем дополнять по мере необходимости. Для предыдующего примера достаточно черной части схемы, дополнив её несколькоми деталями, обозначенными красным, получим схему для след. примера.
![]() В этом примере посмотрим, как взаимодействовать с кнопками и светодиодами. Имеем 2 кнопки, светодиод и ЖК индикатор из предыдующего примера. При подаче питания светодиод погашен, на индикаторе же высвечивается 0. При нажатии на одну из кнопок (та, что идет на RA4), число на индикаторе увеличивается на единицу с частотой 2 раза в секунду, до тех пор, пока кнопка нажата, вторая кнопка работает по другому - число увеличивается на единицу при однократном нажатии, т.е. для след. увеличения надо отпустить и снова нажать кнопку. Помимо этого, когда число становиться равным 10, загорается светодиод, при всех остальных значениях - тухнет. Разберемся, что к чему.... Первая часть нам уже знакома, это описание того, к каким выводам МК подключен ЖКИ. Дальше идет описание переменных. Дело в том, что если в программе присутствуют некоторые переменные, то они должны быть описаны заранее, с указанием их типа. Все возможные типы перечислены в описании МВР, здесь же мы применяем 2 типа - byte - это байтовая переменная, которая может принимать значения от 0 до 255 (см. help) и символьная - char, число в квадратных скобках - количество символов. Понятно, чтоб воспроизвести любое число, организованное byte-м надо 3 символа. Переменная - это любые изменяющиеся в ходе выполнения программы данные. Это как X, Y, Z и т.д. знакомые еще из школы. Навания (имена) переменным придумываем сами, можно вообще называть их как угодно, AAA, BBB, hrtdys, но лучше, конечно, чтоб по имени было ясно, что это за переменная, например, если она отмосится к измерению напряжения, лучше назвать её VOLTAGE, а не VVV (IMG:style_emoticons/default/smile.gif) . Надо только обращать внимание на то, чтоб переменным не присваивались имена, совпадающие с зарезервированными в данном компилляторе словами, например, переменную нельзя назвать lcd_out, т.к. это команда МВР. Здесь у нас используются след. переменные press и num - байтовые number - строка из 3-х символов. num - это как раз то число, которое меняется при нажатии на кнопки, а number - то же число, но уже в символьном виде, для того, чтобы ЖКИ смог его воспроизвести. Т.е. с первым из них можно производить математические операции (конкретно у нас - прибавляем единицу), но нельзя воспроизвести, а со вторым мат. операций не совершишь, но воспроизвести можно. press - вообще нигде не видна, но она нужна нам для организации признака однократного нажатия на кнопку. В этой же программе посмотрим и то, как организуются подпрограммы (процедуры). В принципе то, что написано в процедуре можно написать и в теле программы (т.е. после main:), но с применением процедур Во-первых сама программа становиться более так сказать читабельной и понятной Во-вторых, если в течении выполнения программы надо чтобы какое-либо действие выполнялось несколько раз, то придется соотв. число раз писать в программе одно и то же, а так просто вызываем нужную процедуру - и все. Ну и много других положительных моментов... Т.к. процедуры расположены до точки входа main:, то они при включении не выполняются до тех пор, пока их не вызовут из тела главной части (между main: и end.) Рассмотрим это тело подробно (IMG:style_emoticons/default/smile.gif) TRISA = %11111111 - т.к. к портам А подключены кнопки, то, естественно, он должен работать на вход TRISC = 0 - здесь все наоборот, подключен светодиод - значит выход ADCON1 = %10000110 - кнопка или нажата или отжата, значит все входы - цифровые (см. datasheet на pic16f876) press = 0 - промежуточная переменная равна 0, потом рассмотрим подробнее num = 0 - с начала работы программы число на индикаторе равно 0 Далее идут команды инициализации ЖКИ, они нам уже знакомы Часть программы между while и wend - бесконечный цикл, т.е. все, что находится между этими командами будет повторяться до тех пор, пока не выключим питание МК. И что же в этом цикле? Все это легко описывается словами, в принципе, думаю, и так понятно, но все-же... 1. if Button(PORTA, 4, 1, 0) then num = num + 1 Delay_ms(500) end if Если нажата кнопка, подключенная к RA4, то увеличить значение num на единицу. Подождать пол-секунды и продолжить. Если же ничего не нажато, то просто продолжить. 2. SelectMode() Перейти из тела программы к выполнению процедуры SelectMode и после её выполнения возвратиться к следующей по порядку команде. 3. if num = 100 then num = 0 end if Если мы уже столько понажимали на кнопки, что счетчик достиг 100 - обнулить его. Ясно, если еще меньше 100 - ничего не предпринимать. 4. if num = 10 then PORTC.0 = 1 else PORTC.0 = 0 end if Еще одно условие, если на счетчике 10, то зажечь светодиод, подключенный к выводу RC0, в противном случае (else) светодиод погашен. 5. ByteToStr(num,number) Lcd_Out(1, 1, number) Первая строчка делает то, о чем уже упоминалось - переводит байтовое (числовое) значение в строчное, чтобы можно было отобразить его на ЖКИ, что и выполняется след. строкой. Здесь в отличии от предыдующего примера number - без кавычек, т.е. в соотв. позицию подставляется не само слово а значение той переменной, именем которой оно является. 6. Ну и подпрограмма sub procedure SelectMode() if press = 0 then if Button(PORTA, 3, 1, 0) then num = num + 1 press = 1 end if end if if Button(PORTA, 3, 1, 1) then press = 0 end if end sub Должна быть заключена между sub procedure end sub Тут мы слегка хитрим для того, чтобы организовать однократное нажатие на кнопку. Переменной press мы изначально присвоили 0, поэтому при первом нажатии на кнопку выполняется условие if press = 0 и система реагирует на нажатие, но одновременно присваивает переменной значение 1. Если мы кнопку не отпускаем, то она так и остается равной 1, и при след. вызове процедуры программа не выполняет команду увеличения счетчика. Как только мы отпустили кнопку - if Button(PORTA, 3, 1, 1) - press обнуляется, т.е. след. нажатие регистрируется. Пару слов о команде Button, хотя она и подробно описана в help, но все-же... Button(PORTA, 3, 1, 1) - кнопка подключена к выводу RA3, первая единица устанавливает время подавления дребезга контактов, вторая - изменение состояние. Т.е. если RA3 подтянут на +5В, то Button(PORTA, 3, 1, 0) - означает нажатие кнопки Button(PORTA, 3, 1, 1) - отпускание. Вот и сама программа: program button ' Lcd module connection dim LCD_RS as sbit at RB4_bit 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 module connections dim press, num as byte ' Объявление переменных dim number as char[3] sub procedure SelectMode() ' Подпрограмма (процедура) if press = 0 then if Button(PORTA, 3, 1, 0) then num = num + 1 press = 1 end if end if if Button(PORTA, 3, 1, 1) then press = 0 end if end sub ' Окончание процедуры '########################## MAIN PROGRAMM ######################## main: TRISA = %11111111 TRISC = 0 ADCON1 = %10000110 press = 0 num = 0 Lcd_Init() Delay_ms(200) Lcd_Cmd(_LCD_CLEAR) Lcd_Cmd(_LCD_CURSOR_OFF) Delay_ms(200) while true if Button(PORTA, 4, 1, 0) then num = num + 1 Delay_ms(500) end if SelectMode() if num = 100 then num = 0 end if if num = 10 then PORTC.0 = 1 else PORTC.0 = 0 end if ByteToStr(num,number) Lcd_Out(1, 1, number) wend end. ------------------- Дальше - попробуем собрать уже необходимое в хозяйстве устройство - часы... |
![]() |
|
![]()
Сообщение
#14
|
|
Технический Маньяк-Гуру ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Технический Маньяк Сообщений: 7049 Регистрация: 3.6.2009 Из: Армения Вне форума Авто: Lancer IX, AT Репутация: ![]() ![]() ![]() |
Как и было сказано ранее - попытаемся сделать что-то полезное а не просто "там нажал, тут светит" (IMG:style_emoticons/default/smile.gif)
Будем делать часы, с применением специализированной микросхемы DS1307. Для этого дополним схему голубой частью, а светодиод исключим из схемы, хотя, в принципе он нам и не мешает, пусть остается. Вместо резервной батареи питания часов можно просто закоротить вывод 3 DS1307 на общий провод, если его оставить пустым - микросхема не будет работать. DS1307 представляет собой 8-ножечную микросхему, взаимодействующую с внешним миром по протоколу I2C. Это стандартный протокол, применяется во многих устройствах, например в микросхемах памяти eeprom, так, что его изучение не помешает (естественно на том уровне, чтоб мы лишь бы смогли подцепить такое устройство к МК, большего и не надо). Во многих МК на аппаратном уровне заданы выводы для I2C устройств, хотя, как уже отмечалось, их можно посадить куда угодно, организуя этот протокол программно. I2C устройства взаимодействуют с внешним миром по 2-х проводной шине, SCL-синхронизация и SDA-данные. Т.е. вся информация передается по двум проводам, это особенно удобно если 2 устройства разнесены друг от друга или надо сэкономить выводы МК. На графическом обозначении pic16f876 видим, что SCL сидит на RC3, SDA - на RC4. Но здесь мы организуем программную реализацию протокола, для того, чтоб просто не занимать PORTC. Сначала слегка изучим саму DS1307 (RTC - Real Time Clock). Как? Конечно качаем datasheet. Опять же, все читать не надо, только суть, которая состоит в том, что Для того, чтобы читать из DS1307 надо подать команду 11010001 ($D1) Для записи в неё - 11010000 ($D0) Время и дата располагаются в области памяти, начиная с 0, 0 - секунды 1 - минуты 2 - часы и т.д. Время и дата считываются не в нашем родном десятичном формате, а в каком-то непонятном BCD (Binary Coded Decimal) - двоично-десятичном. Что это такое - черт его знает, ну да ладно, потом разберемся... Ну и естественно смотрим типовую схему включения, куда что паять. Все, больше нам ничего и не надо, все нарисованные графики, диаграммы и т.д. Только поймем, почему использован кварц на 32768 Гц, число какое-то ни к селу ни к городу. Оказывается, если это число последовательно делить на 2, то в итоге получим 1, т.е. интервал в 1 секунду, а деление на два самая простая операция в цифровой технике. Вооружившись этими сведениями примемся за программирование. Т.к. считанное время надо куда-то выводить - используем ЖКИ, работу с которым уже изучили. Далее, любые часы требуют коррекции, значит надо иметь кнопки для установки - как с ними работать - тоже знаем. Сразу же привожу текст программы, все, что на русском - здесь комментарии, все, что уже описывалось ранее - не комментируем. Почти во всех языках программирования, если перед числом стоит знак $, то подразумевается, что имеется в виду шестнацитиричное число, % - двоичное, ничего нет - десятичное. Для справки - компиллятор MikroBasic имеет в своем составе конвертор чисел, так, что, не надо объяснять как производится перевод из одной системы счисления в другую (IMG:style_emoticons/default/wink.gif) program DS1307 ' ' Lcd module connection dim LCD_RS as sbit at RB4_bit 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 module connections ' По аналогии с описанием ЖКИ, здесь описано соединение выводов DS1307 с МК ' SCL - RB7 ' SDA - RB6 ' Software I2C connections dim Soft_I2C_Scl as sbit at RB7_bit Soft_I2C_Sda as sbit at RB6_bit Soft_I2C_Scl_Direction as sbit at TRISB7_bit Soft_I2C_Sda_Direction as sbit at TRISB6_bit ' End Software I2C connections ' Описания переменных, здесь присутствует новый тип - string, строка, состоящая из 8 символов ' Позиции символов нумеруются слева направо, начиная с нуля. dim hours, minutes, seconds as byte dim press as byte dim menuitem as short dim hrs, min, sec as char[3] dim text as char[2] dim systime as string[8] ' Считать показания DS1307 sub procedure GetTime() Soft_I2C_start ' Запустить программный протокол обмена по I2C Soft_I2C_write($D0) ' Подаем команду $D0 - запись в DS1307 Soft_I2C_write(0) ' записываем 0 - адрес с которого располагаются данные о времени. Soft_I2C_Start ' Перезапускаем протокол Soft_I2C_write($D1) ' Команда $D1 - читать из DS1307 seconds = Bcd2Dec(Soft_I2C_read(1)) ' т.к. адрес установлен на 0, считываем секунды и переходим (1) к minutes = Bcd2Dec(Soft_I2C_read(1)) ' считыванию минут, далее (1) hours = Bcd2Dec(Soft_I2C_read(0)) ' и часы и все, дальше не читаем (0) Soft_I2C_stop ' ну и останавливаем передачу данных по I2C end sub ' Здесь при считывании данных мы сразу же перевели их в десятичный формат - BCD2Dec (BCD to decimal) sub procedure ResetSec() 'Установка (сброс) секунд if Button(PORTA, 4, 1, 0) then Soft_I2C_start Soft_I2C_write($D0) ' Записать Soft_I2C_write($00) ' В ячейку с адресом 0 Soft_I2C_write($00) ' ноль Soft_I2C_stop end if Delay_ms(200) ' Здесь задержка в принципе и не нужна, ну да ладно, не помешает end sub sub procedure SetMinutes() ' Установка минут if Button(PORTA, 4, 1, 0) then Inc(minutes) ' При нажатии на кнопку увеличивать значения минут на единицу if minutes = 60 then minutes = 0 end if 'Больше 59-и минут не бывает minutes=Dec2Bcd(minutes) ' Переводим обратно формат в BCD, чтоб было понятно DS1307 Soft_I2C_start Soft_I2C_write($D0) ' Записать Soft_I2C_write($01) ' В ячейку с адресом 1 Soft_I2C_write(minutes) ' то число, которое мы получили чуть выше Soft_I2C_stop end if Delay_ms(200) ' Небольшая пауза, чтоб не слишком быстро менялись цифры end sub sub procedure SetHours() ' То же самое до часов if Button(PORTA, 4, 1, 0) then Inc(hours) if hours = 24 then hours = 0 end if ' Часы - до 24-х hours=Dec2Bcd(hours) Soft_I2C_start Soft_I2C_write($D0) Soft_I2C_write($02) 'Адрес ячейки часов - 2 Soft_I2C_write(hours) ' Soft_I2C_stop end if Delay_ms(200) end sub sub procedure DisplayTime() ByteToStr(seconds,sec) ' Переводим байты в символы text[0]=sec[1] ' Подробное описание - см. ниже text[1]=sec[2] ' text[2]=0 if text[0] = 32 then text[0] = "0" end if ' sec = text ' ByteToStr(minutes,min) text[0]=min[1] text[1]=min[2] text[2]=0 if text[0] = 32 then text[0] = "0" end if min = text ByteToStr(hours,hrs) text[0]=hrs[1] text[1]=hrs[2] text[2]=0 if text[0] = 32 then text[0] = "0" end if hrs = text systime = hrs + ":" + min + ":" + sec ' Имея все данные складываем их в строку, готовую к выводу на экран ' Это так называемая конкатенация строк, т.е. в результате получаем строковую переменную вот такого вида ' 12:06:34 end sub sub procedure SelectMode() ' Вторую кнопку (ту, что меняла состояние МК при однократном нажатии) ' используем для перебора пунктов меню установки времени и индикации соотв. режима if press = 0 then if Button(PORTA, 3, 1, 0) then menuitem = menuitem + 1 press = 1 end if end if if Button(PORTA, 3, 1, 1) then press = 0 end if select case menuitem ' В зависимости от значения переменной menuitem выбираем то или иное действие case 0 Lcd_out(1, 1, "Reset ") 'Если нажать на кнопку 1 - произойдет сброс секунд ResetSec() case 1 Lcd_out(1, 1, "Minutes") ' Установка минут SetMinutes() case 2 Lcd_out(1, 1, "Hours ") ' Часов SetHours() case 3 ' Обнуляем menuitem, т.е. после 3-х нажатий на кнопку пункты меню будут крутиться по новой. menuitem = 0 end select end sub '########################## Главная программа ######################## main: TRISA = %11111111 ADCON1 = %10000110 press = 0 menuitem = 0 Soft_I2C_Init() ' Аналогично ЖКИ надо проинициализировать и I2C Lcd_Init() Delay_ms(200) Lcd_Cmd(_LCD_CLEAR) Lcd_Cmd(_LCD_CURSOR_OFF) Lcd_Out(2, 1, "Time:") 'Т.к. это слово постоянно должно высвечиваться на экране, выводим его while true ' А этот цикл будет крутиться бесконечно GetTime() ' Считать время DisplayTime() ' Подготовить считанные данные к выводу на экран SelectMode() ' Проверить, не нажата ли вторая кнопка Lcd_Out(2, 9, systime) ' Вывести подготовленные данные (ЧЧ:ММ:СС) на экран ЖКИ wend ' возвратиться к while, и так все время, пока не выключим питание end. --------------------------- Про преобразование строки: Переводим байты в строку: ByteToStr(seconds,sec) Как происходит преобразование - мы уже видели, 000 - преобразуется в "0" 001 - "1" ... 010 - "10" 100 - "100" - но это нам не грозит, т.к. время - это мах. число 59 видно, что байт может состоять из 1-го, 2-х или трех символов (0...255), а показания часов - двухзначные, значит надо что-то предпринимать. Следующие операторы сдвигают символы в строке на одну позицию влево, и отсекают последний символ, т.е., например, если имеем 045, получаем 45 text[0]=sec[1] text[1]=sec[2] text[2]=0 ' Обратите внимание, это не символ "0", а просто пустота, иначе получилось бы не 45 а 450 если же имеем, например, 005, то после предыдующего преобразования получим просто 5, некрасиво будет смотреться на экране. Поэтому, если 0-й символ равен пробелу (ASCII код - 32), то вместо него записываем "0" (Т.к. ноль - в кавычках, то это не число а символ) if text[0] = 32 then text[0] = "0" end if sec = text Переменная text - промежуточная, сама она непосредственно нигде не высвечивается, присваиваем её значение переменной sec, чтоб в дальнейшем использовать text для преобразования минут и часов. ------------------------------ Здесь, да и раньше тоже, мы не останавливались на подробном описании команд, т.к. все это описано в HELP, и для того, чтобы полностью уяснить как работает та или иная команда надо читать её описание. Далее (если еще не надоел), добавим к нашему устройству вольтметр, а может еще и термометр (IMG:style_emoticons/default/wink.gif) |
![]() |
|
![]()
Сообщение
#15
|
|
Левша ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Почетные ветераны Сообщений: 1801 Регистрация: 19.2.2009 Из: Санкт-Петербург, Центр Вне форума Авто: VW CC 1.8MT Репутация: ![]() ![]() ![]() |
В поисках программатора для PIC набрел вот на такую акцию: http://www.pickit2.ru/doku.php/form
Продают программатор за 565р. Есть разные магазины. SSh говорит, что хорошая штука (IMG:style_emoticons/default/smile.gif) |
![]() |
|
![]()
Сообщение
#16
|
|
Технический Маньяк-Гуру ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Технический Маньяк Сообщений: 7049 Регистрация: 3.6.2009 Из: Армения Вне форума Авто: Lancer IX, AT Репутация: ![]() ![]() ![]() |
Очень хорошая и полезная. Позволяет писать помимо всех пик-ов еще и 24, 25 и 93 память, причем фирма периодически обновляет прошивки добавляя новые возможности из которых отмечу:
1. Внутрисхемное программирование (ICP) - не надо выпаивать МК из схемы 2. Возможность подачи питания от USB через него на отлаживаемое устройство (напряжение регулируется от 2,5 до 5 В - включается галочкой в оболочке программатора). 3. Автоматически распознает тип МК - если надпись стерлась - нет проблем - подключил и смотри что за чип. 4. Имеет внутреннюю память, т.е. если нет возможности подлезть с компом к какому-либо устройству можно залить прошивку в память программатора, потом уже без участия компьютера из программатора в МК (там кнопочка специальная для этого есть). 5. Имеет окно для редактирования области памяти МК. Ну и быстрый в отличии от COM-овских. Я покупал такой 3 года назад за чуть больше 100$, после чего повыкидывал все имеющиеся у меня программаторы. Сейчас попеременно пользуюсь или им - если надо отлаживать устройство на плате или входящим в состав EasyPic5 тоже USB-шным программаторам. Вот мой PicKit2 вместе с самодельными адаптерами для всех пик-ов в дип корпусах и для вышеуказанных типов EEPROM. Кстати, на Lancer-ах в одометре использована 93 память.
Прикрепленные изображения
![]() |
![]() |
|
![]()
Сообщение
#17
|
|
Технический Маньяк-Гуру ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Технический Маньяк Сообщений: 7049 Регистрация: 3.6.2009 Из: Армения Вне форума Авто: Lancer IX, AT Репутация: ![]() ![]() ![]() |
Что-то я не нашел на сайтах упоминания об акции. На всякий случай советую связаться с дистрибютерами, а то мало ли что...
P.S. На прибалтийском сайте есть - PICkit 2 SPECIAL OFFER (more than a twice lower price) |
![]() |
|
![]()
Сообщение
#18
|
|
Левша ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Почетные ветераны Сообщений: 1801 Регистрация: 19.2.2009 Из: Санкт-Петербург, Центр Вне форума Авто: VW CC 1.8MT Репутация: ![]() ![]() ![]() |
Я вот тут нашел: http://easyelectronics.ru/forum/mcu-pic/pickit2
Сообщение номер 7 |
![]() |
|
![]()
Сообщение
#19
|
|
Технический Маньяк-Гуру ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Технический Маньяк Сообщений: 7049 Регистрация: 3.6.2009 Из: Армения Вне форума Авто: Lancer IX, AT Репутация: ![]() ![]() ![]() |
Ну, хорошо. А то кидальщиков сейчас расплодилось... Сам знаешь.
А вот и я нашел, на Гамме http://www.gamma.spb.ru/news.php?id=434 |
![]() |
|
![]()
Сообщение
#20
|
|
Технический Маньяк-Гуру ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Технический Маньяк Сообщений: 7049 Регистрация: 3.6.2009 Из: Армения Вне форума Авто: Lancer IX, AT Репутация: ![]() ![]() ![]() |
Как уже отмечалось, с PicKit-ом удобно использовать универсальный адаптер для прошивки отдельных МК и EEPROM.
Выкладываю разводку такого адаптера, вернее 2-х, один для пиков, другой для микросхем памяти. ![]() В пик-адаптер можно вставлять и прошивать все виды пик-контроллеров (не dsPIC - это новая разработка Mikrochip, со встроенным аппаратным обработчиком цифровых сигналов) в 8, 14, 18, 20, 28 и 40 - выводных корпусах. Для удобства применены так называемые ZIF панельки (панельки с нулевым усилием), на фото выше видно, что это такое. Обратите внимание, что на панельках прорези под выводы микросхем - продолговатые - для того, чтобы можно было вставлять как широкие так и узкие микросхемы. |
![]() |
|
![]()
Сообщение
#21
|
|
Технический Маньяк-Гуру ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Технический Маньяк Сообщений: 7049 Регистрация: 3.6.2009 Из: Армения Вне форума Авто: Lancer IX, AT Репутация: ![]() ![]() ![]() |
Ну как, кто-нибуть купил/получил PicKit? Что-то все молчат... (IMG:style_emoticons/default/dry.gif)
|
![]() |
|
![]()
Сообщение
#22
|
|
Левша ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Почетные ветераны Сообщений: 1801 Регистрация: 19.2.2009 Из: Санкт-Петербург, Центр Вне форума Авто: VW CC 1.8MT Репутация: ![]() ![]() ![]() |
Мутно там как-то...
Позвонил, сказали вышлют счет. Глухо... |
![]() |
|
![]()
Сообщение
#23
|
|
Начинающий Технический Маньяк ![]() ![]() Группа: Технический Маньяк Сообщений: 7 Регистрация: 30.1.2010 Вне форума Репутация: ![]() ![]() ![]() |
Привет! Я собрал осцилограф на 4 канала на 16меге и хочу с исходником разобратся досканально чтобы расширить число каналов расширить до 6 и добавить один канал с возможнотью синхронизации от него
|
![]() |
|
![]()
Сообщение
#24
|
|
Технический Маньяк-Гуру ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Технический Маньяк Сообщений: 7049 Регистрация: 3.6.2009 Из: Армения Вне форума Авто: Lancer IX, AT Репутация: ![]() ![]() ![]() |
С mega-ми никогда дела не имел, так, что - извини не в курсе. Одно время заинтересовался осциллографами, даже собрал ADC21 - http://forum.roboclub.ru/IPBoard/index.php?showtopic=131 - , но понял, что в домашних условиях приличный прибор создать не смогу, тем более, что нашел вот это
http://www.seeedstudio.com/depot/dso-nano-...3230abfca7e5075 Уже выписал, со дня на день жду посылку. А что за осциллограф у тебя, я вроде все, что есть в сети по этой теме изучил... |
![]() |
|
![]()
Сообщение
#25
|
|
Музыкальный JDM маньяк ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Технический Маньяк Сообщений: 4432 Регистрация: 10.7.2009 Из: Москва Вне форума Репутация: ![]() ![]() ![]() |
Похоже на бот.
Vituha - вам сутки на подтверждение, что вы не бот. Или в бан. |
![]() |
|
![]()
Сообщение
#26
|
|
Начинающий Технический Маньяк ![]() ![]() Группа: Технический Маньяк Сообщений: 7 Регистрация: 30.1.2010 Вне форума Репутация: ![]() ![]() ![]() |
|
![]() |
|
![]()
Сообщение
#27
|
|
Начинающий Технический Маньяк ![]() ![]() Группа: Технический Маньяк Сообщений: 7 Регистрация: 30.1.2010 Вне форума Репутация: ![]() ![]() ![]() |
С mega-ми никогда дела не имел, так, что - извини не в курсе. Одно время заинтересовался осциллографами, даже собрал ADC21 - http://forum.roboclub.ru/IPBoard/index.php?showtopic=131 - , но понял, что в домашних условиях приличный прибор создать не смогу, тем более, что нашел вот это http://www.seeedstudio.com/depot/dso-nano-...3230abfca7e5075 Уже выписал, со дня на день жду посылку. А что за осциллограф у тебя, я вроде все, что есть в сети по этой теме изучил... Я нашол 4 канальник на какомто форуме с исходниками для ремонта машин, мне очень помогает |
![]() |
|
![]()
Сообщение
#28
|
|
Технический Маньяк-Гуру ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Технический Маньяк Сообщений: 1802 Регистрация: 21.2.2009 Из: Екатеринбург Вне форума Авто: Lancer IX 1.6MT (105HP) Репутация: ![]() ![]() ![]() |
2 Vituha а выложи схемы осцила с прошивками и исходниками. Поковыряем...
Я немножко с AVR-ами знаком. |
![]() |
|
![]()
Сообщение
#29
|
|
Начинающий Технический Маньяк ![]() ![]() Группа: Технический Маньяк Сообщений: 7 Регистрация: 30.1.2010 Вне форума Репутация: ![]() ![]() ![]() |
|
![]() |
|
![]()
Сообщение
#30
|
|
Начинающий Технический Маньяк ![]() ![]() Группа: Технический Маньяк Сообщений: 7 Регистрация: 30.1.2010 Вне форума Репутация: ![]() ![]() ![]() |
С mega-ми никогда дела не имел, так, что - извини не в курсе. Одно время заинтересовался осциллографами, даже собрал ADC21 - http://forum.roboclub.ru/IPBoard/index.php?showtopic=131 - , но понял, что в домашних условиях приличный прибор создать не смогу, тем более, что нашел вот это http://www.seeedstudio.com/depot/dso-nano-...3230abfca7e5075 Уже выписал, со дня на день жду посылку. А что за осциллограф у тебя, я вроде все, что есть в сети по этой теме изучил... Я adc21 делал он неплохо работает, скажи а будет продолжение статей по мк? |
![]() |
|
![]()
Сообщение
#31
|
|
Технический Маньяк-Гуру ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Технический Маньяк Сообщений: 7049 Регистрация: 3.6.2009 Из: Армения Вне форума Авто: Lancer IX, AT Репутация: ![]() ![]() ![]() |
Цитата Я adc21 делал он неплохо работает Случайно не по моей разводке? (IMG:style_emoticons/default/biggrin.gif) (IMG:style_emoticons/default/wink.gif) Продолжения как такового - скорее всего нет, но вот в разных темах так или иначе кое-какие конкретные вопросы иногда обсуждаются. Здесь же была цель просто ознакомиться с МК, и то лишь потому, что есть некоторые конструкции на них - чтоб было понятнее. А так, кому надо - есть специализированные сайты, там и информации побольше и спецы поопытнее. |
![]() |
|
![]()
Сообщение
#32
|
|
Don Amadeus ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Главные администраторы Сообщений: 29954 Регистрация: 19.2.2009 Из: Russia, Sevastopol Вне форума Авто: Lancer IX-1.6 MT Turbo, Honda Accord IX-2.4 AT Executive. Репутация: ![]() ![]() ![]() |
Похоже на бот. Vituha - вам сутки на подтверждение, что вы не бот. Или в бан. Не, видно, что не бот, все оки, Егорыч (IMG:style_emoticons/default/wink.gif) |
![]() |
|
![]()
Сообщение
#33
|
|
Технический Маньяк-Гуру ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Технический Маньяк Сообщений: 7049 Регистрация: 3.6.2009 Из: Армения Вне форума Авто: Lancer IX, AT Репутация: ![]() ![]() ![]() |
Кстати насчет синхронизации. Как правило осциллографы на контроллерах работают след. образом:
Предположим в качестве дисплея использован графический LCD с разрешением 128х64 точек (в подавляющем большинстве случаев так и есть). Встроенный АЦП МК оцифровывает входной сигнал или сигналы после чего происходит преобразование в горизонтальную координату точки на экране. Но все это дело сразу на экран не выводится а сохраняется в буфере, организованном во внутреннем RAM контроллера. Для одного луча таких отсчетов (объем буфера) 128, для двух 256 и т.д. После заполнения буфера МК переводится в режим вывода накопленных координат на дисплей, после чего процесс повторяется. Сам вывод организован в виде цикла, состоящего из 256 шагов, где Х координатой является номер шага, Y координата - значение ячейки буфера с номером X. Т.е. в то время, когда производится само измерение нет вывода на экран и наоборот. Буфер же начинает заполнятся не в произвольное время а только тогда, когда сигнал проходит через 0. Этот момент элементарно отследить программно. Так вот если отсчет ведется с нулевого уровня сигнала, то и буфер заполняется с координатой Y=0, и вывод соответственно с точки с координатами 0,0. Иными словами, получается автоматическая синхронизация... И еще, увеличение числа каналов приведет к сужению полосы частот. |
![]() |
|
![]()
Сообщение
#34
|
|
Начинающий Технический Маньяк ![]() ![]() Группа: Технический Маньяк Сообщений: 7 Регистрация: 30.1.2010 Вне форума Репутация: ![]() ![]() ![]() |
Кстати насчет синхронизации. Как правило осциллографы на контроллерах работают след. образом: Предположим в качестве дисплея использован графический LCD с разрешением 128х64 точек (в подавляющем большинстве случаев так и есть). Встроенный АЦП МК оцифровывает входной сигнал или сигналы после чего происходит преобразование в горизонтальную координату точки на экране. Но все это дело сразу на экран не выводится а сохраняется в буфере, организованном во внутреннем RAM контроллера. Для одного луча таких отсчетов (объем буфера) 128, для двух 256 и т.д. После заполнения буфера МК переводится в режим вывода накопленных координат на дисплей, после чего процесс повторяется. Сам вывод организован в виде цикла, состоящего из 256 шагов, где Х координатой является номер шага, Y координата - значение ячейки буфера с номером X. Т.е. в то время, когда производится само измерение нет вывода на экран и наоборот. Буфер же начинает заполнятся не в произвольное время а только тогда, когда сигнал проходит через 0. Этот момент элементарно отследить программно. Так вот если отсчет ведется с нулевого уровня сигнала, то и буфер заполняется с координатой Y=0, и вывод соответственно с точки с координатами 0,0. Иными словами, получается автоматическая синхронизация... И еще, увеличение числа каналов приведет к сужению полосы частот. Спасибо доступно описано, а то что сужение частот то не беда 10кгц достаточно |
![]() |
|
![]()
Сообщение
#35
|
|
Технический Маньяк-Гуру ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Технический Маньяк Сообщений: 7049 Регистрация: 3.6.2009 Из: Армения Вне форума Авто: Lancer IX, AT Репутация: ![]() ![]() ![]() |
Опечатка просочилась... не 256 а 128 шагов, т.е. кол-во шагов равно горизонтальному разрешению примененного экрана, вернее ширине области вывода осциллограммы. Я встречал устройства, где правая или левая части были использованы для вывода информации (длит. развертки, чувствительность и т.д.)
|
![]() |
|
![]()
Сообщение
#36
|
|
Технический Маньяк-Гуру ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Технический Маньяк Сообщений: 7049 Регистрация: 3.6.2009 Из: Армения Вне форума Авто: Lancer IX, AT Репутация: ![]() ![]() ![]() |
Кстати вот здесь есть описание 6-канального осциллографа
http://www.ne.jp/asahi/shared/o-family/Ele.../AVRLogAna.html Правда на японском, но можно перевесту Гуглем. И исходники выложены, причем на более понятном Бейсике, так, что если надо что-то поменять - разобраться будет не трудно. |
![]() |
|
![]()
Сообщение
#37
|
|
Технический Маньяк-Гуру ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Технический Маньяк Сообщений: 1802 Регистрация: 21.2.2009 Из: Екатеринбург Вне форума Авто: Lancer IX 1.6MT (105HP) Репутация: ![]() ![]() ![]() |
Это похоже не осцил, а логический анализатор. Если я правильно понял только картинки, без анализа текста...
|
![]() |
|
![]()
Сообщение
#38
|
|
Технический Маньяк-Гуру ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Технический Маньяк Сообщений: 7049 Регистрация: 3.6.2009 Из: Армения Вне форума Авто: Lancer IX, AT Репутация: ![]() ![]() ![]() |
Да, точно - анализатор.
На этом же сайте есть пара осциллографов одно- и двух-лучевые. Я все порывался собрать один из них, но теперь успокоился - жду заказанного DSO Nano... |
![]() |
|
![]()
Сообщение
#39
|
|
Начинающий Технический Маньяк ![]() ![]() Группа: Технический Маньяк Сообщений: 7 Регистрация: 30.1.2010 Вне форума Репутация: ![]() ![]() ![]() |
Я набросал проектик в c+ 2009 давайте вместе добьем его до логического завершения скажите кто знаком с c+?
|
![]() |
|
![]()
Сообщение
#40
|
|
Технический Маньяк-Гуру ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Технический Маньяк Сообщений: 1724 Регистрация: 15.10.2009 Из: Москва, п. Монино Вне форума Репутация: ![]() ![]() ![]() |
Такой глобальный вопрос по поводу программы. Вот по поводу нажатий кнопок и загораний светодиодов. В моём текущем понятии, программа должна выполниться один раз и всё. Здесь же я так понял, программа как бы зацикленна бесконечно? Т. е. этот глобальный бесконечный цикл никак не объявляется, а он просто есть? И ещё, ведь событие происходит не тогда, когда кнопка нажата, а тогда, когда по тактовому генератору программа дошла до проверки кнопки и вот тогда если она нажата то выполнить то-то? Так?
|
![]() |
|
![]()
Сообщение
#41
|
|
Технический Маньяк-Гуру ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Технический Маньяк Сообщений: 7049 Регистрация: 3.6.2009 Из: Армения Вне форума Авто: Lancer IX, AT Репутация: ![]() ![]() ![]() |
Программа обычно должна работать в цикле, в выложенном примере цикл образуется командами while-wend
while true .... .... .... wend А можно и метками main: .... .... .... goto main В принципе да, любая программа если нет ветвлений выполняется построчно, т.е. грубо говоря если распознавание нажатия кнопки идет на 5-й строке, то сначала выполняются первые 4, потом только проверка нажатия. Но это происходит так быстро, что паузу не почувствуешь... |
![]() |
|
![]()
Сообщение
#42
|
|
Технический Маньяк-Гуру ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Технический Маньяк Сообщений: 1724 Регистрация: 15.10.2009 Из: Москва, п. Монино Вне форума Репутация: ![]() ![]() ![]() |
Ага, всё, цикл нашёл, спасибо. (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) |
![]() |
|
![]()
Сообщение
#43
|
|
Технический Маньяк-Гуру ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Технический Маньяк Сообщений: 7049 Регистрация: 3.6.2009 Из: Армения Вне форума Авто: Lancer IX, AT Репутация: ![]() ![]() ![]() |
Биполярные транзисторы вообще-то током управляются (IMG:style_emoticons/default/smile.gif) , т.е. если на коллекторе 500 мА и макс. выходной ток порта МК 10 мА, то надо ставить транзистор с соотв. допустимым током коллектора (лучше больше (IMG:style_emoticons/default/wink.gif) ) и коэффициэнтом усиления не менее 50.
Вот другое дело - полевики, есть же серия IRL - специально предназначенная для управления логическими уровнями до 5В. |
![]() |
|
![]()
Сообщение
#44
|
|
Технический Маньяк-Гуру ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Технический Маньяк Сообщений: 7049 Регистрация: 3.6.2009 Из: Армения Вне форума Авто: Lancer IX, AT Репутация: ![]() ![]() ![]() |
MCLR в некоторых МК можно вообще переконфигурировать под обычный порт. А так, на него сажают через 5,6...10кОм напряжение питания.
Все остальное что ты написал - верно (IMG:style_emoticons/default/smile.gif) Насчет логики - кто его знает, мали ли что кому на ум взбредет. У меня все программы зациклены в бесконечный цикл. |
![]() |
|
![]()
Сообщение
#45
|
|
Технический Маньяк-Гуру ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Технический Маньяк Сообщений: 1724 Регистрация: 15.10.2009 Из: Москва, п. Монино Вне форума Репутация: ![]() ![]() ![]() |
Схемку бы конкретную с конкретными моделями (IMG:style_emoticons/default/blush.gif) (IMG:style_emoticons/default/blush.gif) (IMG:style_emoticons/default/blush.gif) (IMG:style_emoticons/default/happy.gif)
|
![]() |
|
![]()
Сообщение
#46
|
|
Технический Маньяк-Гуру ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Технический Маньяк Сообщений: 7049 Регистрация: 3.6.2009 Из: Армения Вне форума Авто: Lancer IX, AT Репутация: ![]() ![]() ![]() |
![]() Транзистор, для описанного случая подойдет КТ972 и т.д. |
![]() |
|
![]()
Сообщение
#47
|
|
Технический Маньяк-Гуру ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Технический Маньяк Сообщений: 1724 Регистрация: 15.10.2009 Из: Москва, п. Монино Вне форума Репутация: ![]() ![]() ![]() |
А, ну так всё также как и с логическими элементами было. Просто меня смутило, что с лог элемента у нас +12В выходило, а тут будет только +5. Или это не страшно?
|
![]() |
|
![]()
Сообщение
#48
|
|
Технический Маньяк-Гуру ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Технический Маньяк Сообщений: 7049 Регистрация: 3.6.2009 Из: Армения Вне форума Авто: Lancer IX, AT Репутация: ![]() ![]() ![]() |
У логического элемента выходит напряжение питания, если запитать его от 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 которая и предназначена для работы с логич. уровнями. |
![]() |
|
![]()
Сообщение
#49
|
|
Технический Маньяк-Гуру ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Технический Маньяк Сообщений: 1724 Регистрация: 15.10.2009 Из: Москва, п. Монино Вне форума Репутация: ![]() ![]() ![]() |
Блин, сколько информации (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. |
![]() |
|
![]()
Сообщение
#50
|
|
Технический Маньяк-Гуру ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Технический Маньяк Сообщений: 7049 Регистрация: 3.6.2009 Из: Армения Вне форума Авто: Lancer IX, AT Репутация: ![]() ![]() ![]() |
С микропаскалем не знаком, хотя эти все компиляторы и похожи, но некоторые команды записываются по другому. Напр.заметил - while не ограничивается wend-oм. И еще PORTA.RA0 ? В паскале такая запись принята? В других компилляторах обозначается так PORTA.0
Далее - посмотри даташит на пик, не сидят ли на порту АЦП или компараторы? Если да - отключи. Притянут ли порт на землю? А осцилляторы выставлены правильно? |
![]() |
|
![]()
Сообщение
#51
|
|
Технический Маньяк-Гуру ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Технический Маньяк Сообщений: 7049 Регистрация: 3.6.2009 Из: Армения Вне форума Авто: Lancer IX, AT Репутация: ![]() ![]() ![]() |
Скачал Manual на Паскаль посмотрел. Цикл организован правильно, а вот обращение к порту надо PORTA.0
|
![]() |
|
![]()
Сообщение
#52
|
|
Технический Маньяк-Гуру ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Технический Маньяк Сообщений: 1724 Регистрация: 15.10.2009 Из: Москва, п. Монино Вне форума Репутация: ![]() ![]() ![]() |
Спасибо за подсказку, победил (IMG:style_emoticons/default/smile.gif) Надо было действительно выключить компаратор:
Код CMCON:= %00000111;
|
![]() |
|
![]()
Сообщение
#53
|
|
Технический Маньяк-Гуру ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Технический Маньяк Сообщений: 7049 Регистрация: 3.6.2009 Из: Армения Вне форума Авто: Lancer IX, AT Репутация: ![]() ![]() ![]() |
(IMG:style_emoticons/default/smile.gif) Вот, начало положено. И совсем не сложно, так?
|
![]() |
|
![]()
Сообщение
#54
|
|
Технический Маньяк-Гуру ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Технический Маньяк Сообщений: 1724 Регистрация: 15.10.2009 Из: Москва, п. Монино Вне форума Репутация: ![]() ![]() ![]() |
Угу! (IMG:style_emoticons/default/smile.gif) Просто в Паскале-то я нормально соображаю - хорошо на Делфях пишу, да тут от Паскаля только язык, а по сути всё равно нужно знать что для чего... Но начало положено (IMG:style_emoticons/default/smile.gif)
|
![]() |
|
![]()
Сообщение
#55
|
|
Технический Маньяк-Гуру ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Технический Маньяк Сообщений: 7049 Регистрация: 3.6.2009 Из: Армения Вне форума Авто: Lancer IX, AT Репутация: ![]() ![]() ![]() |
Есть хороший ресурс с доп. библоитеками для паскаля, найду ссылку - выложу. А пока в принципе можешь поиграться с примерами из help-а, он хорошо продукоментирован.
И в разделе проектов на сайте есть много интересного... |
![]() |
|
![]()
Сообщение
#56
|
|
Технический Маньяк-Гуру ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Технический Маньяк Сообщений: 1724 Регистрация: 15.10.2009 Из: Москва, п. Монино Вне форума Репутация: ![]() ![]() ![]() |
А как заставить выдавать нашу плату звук? Допустим есть излучатели звука - http://lib.chipdip.ru/054/DOC000054699.pdf Я так понял, что одни представляют из себя чисто динамик (отдельно нужно подавать на него колеблюющееся напряжение), а другие динамик вместе с генератором волны (и усилителем?)? Мне нужно, чтобы просто пищало (для начала). Что лучше выбрать - с генератором или просто излучатель - без? И какие варианты подключения? Наверное пока для меня самый интересный вариант, чтобы использовать "play_sound(freq, time)" процедуру в МикроПаскале, т. е. беру излучатель без генератора, смотрю, сколько А макс он ест (80мА вижу) и также через транзисторный ключ подключаю? А на вывод МК посылаю "play_sound" - меандр с заданной частотой? Или всё сложнее?
|
![]() |
|
![]()
Сообщение
#57
|
|
Технический Маньяк-Гуру ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Технический Маньяк Сообщений: 1724 Регистрация: 15.10.2009 Из: Москва, п. Монино Вне форума Репутация: ![]() ![]() ![]() |
От блин, а как подавать с ножки МК скажем "-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) |
![]() |
|
![]()
Сообщение
#58
|
|
Технический Маньяк-Гуру ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Технический Маньяк Сообщений: 7049 Регистрация: 3.6.2009 Из: Армения Вне форума Авто: Lancer IX, AT Репутация: ![]() ![]() ![]() |
Все верно, надо или взять со встроенным генератором и включать-выключать его подавая на него логич. уровень с вывода МК или чисто излучатель и подать на него однополярную (без -5В, только +) импульсную последовательность или тот же самый play_sound. 440 (880 и т.д.) Гц даст тебе ноту "Ля" (IMG:style_emoticons/default/smile.gif)
Пьезо от эл. магнитного этим самым и отличается, первый на пьезокристале, второй - с эл. магнитом, пьезо имеют большое входное сопротивление и потребляют незначительный ток. В связи с этим пьезо можно непосредственно, и без всяких развязывающих конденсаторов сажать на ноги МК. |
![]() |
|
![]()
Сообщение
#59
|
|
Технический Маньяк-Гуру ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Технический Маньяк Сообщений: 1724 Регистрация: 15.10.2009 Из: Москва, п. Монино Вне форума Репутация: ![]() ![]() ![]() |
Т. е. и пьезо и магнитные бывают и с генератором и без? А электромагнитный излучатель без генератора - по сути просто маленький динамик, как во всех колонках-наушниках?
|
![]() |
|
![]()
Сообщение
#60
|
|
Технический Маньяк-Гуру ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Технический Маньяк Сообщений: 7049 Регистрация: 3.6.2009 Из: Армения Вне форума Авто: Lancer IX, AT Репутация: ![]() ![]() ![]() |
Все верно (IMG:style_emoticons/default/smile.gif)
|
![]() |
|
![]()
Сообщение
#61
|
|
Технический Маньяк-Гуру ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Технический Маньяк Сообщений: 1724 Регистрация: 15.10.2009 Из: Москва, п. Монино Вне форума Репутация: ![]() ![]() ![]() |
Блин, спасибо, что ты есть!!! (IMG:style_emoticons/default/smile.gif) Слушай, а можешь нарисовать самую, на мой взгляд, крутую модель - электромагнитный излучатель без генератора управляемый одной ножкой МК? И почему сюда нужно подавать однополярный сигнал? Я думал, что надо и минус тоже?..
|
![]() |
|
![]()
Сообщение
#62
|
|
Технический Маньяк-Гуру ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Технический Маньяк Сообщений: 7049 Регистрация: 3.6.2009 Из: Армения Вне форума Авто: Lancer IX, AT Репутация: ![]() ![]() ![]() |
Посмотри здесь, не только схема, но и примеры кода (IMG:style_emoticons/default/smile.gif)
http://www.mikroe.com/eng/products/view/440/easybuzz-board/ В любом случае микродинамик можно подключать и без транзистора, но через разделительный конденсатор, а пьезо - сразу сажаем на порт. A eще есть серия микросхем UM66TxxL - генераторы мелодий, если запитать от порта МК, то при подаче высокого уровня подключенный к выходу микродинамик (типа таких как используются например в модемах) начнет играть мелодию. Список мелодий можно посмотреть в даташите на микросхему. |
![]() |
|
![]()
Сообщение
#63
|
|
Технический Маньяк-Гуру ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Технический Маньяк Сообщений: 1724 Регистрация: 15.10.2009 Из: Москва, п. Монино Вне форума Репутация: ![]() ![]() ![]() |
Нашёл на просторах инета такую схему, пишут, что очень хитрая и классная. Что скажешь? Я вот не втыкаю ваще почему так (IMG:style_emoticons/default/smile.gif)
![]() |
![]() |
|
![]()
Сообщение
#64
|
|
Технический Маньяк-Гуру ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Технический Маньяк Сообщений: 7049 Регистрация: 3.6.2009 Из: Армения Вне форума Авто: Lancer IX, AT Репутация: ![]() ![]() ![]() |
А черт его знает, что это за схема... Динамик включен в качестве смещения транзистора. Надо проанализировать чем она может быть так крута... Лучше по-моему использовать классику - как на ссылке.
|
![]() |
|
![]()
Сообщение
#65
|
|
Технический Маньяк-Гуру ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Технический Маньяк Сообщений: 1724 Регистрация: 15.10.2009 Из: Москва, п. Монино Вне форума Репутация: ![]() ![]() ![]() |
Из твоих слов понял только слово "смещение" (IMG:style_emoticons/default/smile.gif) Может как раз это и сместит сигнал 0..5В до -2.5В..2.5В? Ну и усилит до (сколько там надо) -5В..5В? (IMG:style_emoticons/default/smile.gif)
|
![]() |
|
![]()
Сообщение
#66
|
|
Технический Маньяк-Гуру ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Технический Маньяк Сообщений: 7049 Регистрация: 3.6.2009 Из: Армения Вне форума Авто: Lancer IX, AT Репутация: ![]() ![]() ![]() |
Нет, об отрицательном напряжении речь не идет. Смещение надо для перевода транзистора в активный режим, иначе он будет работать только в так называемом ключевом режиме - открыт-закрыт.
Если интересно - в двух словах поясню, Если база транзистора соединена непосредственно с портом МК (естественно через ограничительный резистор) то при отсутствии сигнала ток в цепи базы равен 0 и соотв. коллекторный ток тоже отсутствует. При поступлении сигнала - транзистор открывается и будет выдавать макс. коллекторный ток. Таким образом мы как-бы усиливаем дискретный сигнал, усиливать аналоговый таким образом нельзя т.к. из-за нелинейности ВАХ (вольт-амперной характеристики) транзистора на выходе получится неизвестно что. Вот для усиления аналоговых сигналов и надо сместить рабочую точку транзистора, т.е. организовать небольшой ток базы в отсутствии входного сигнала. |
![]() |
|
![]()
Сообщение
#67
|
|
Технический Маньяк-Гуру ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Технический Маньяк Сообщений: 1724 Регистрация: 15.10.2009 Из: Москва, п. Монино Вне форума Репутация: ![]() ![]() ![]() |
Ну ладно, не будем экспериментировать (IMG:style_emoticons/default/smile.gif) Тогда помоги плиз разобрать эту официальную схему:
![]() C1 = 100nF - это понятно. E1 = 10uF - это конденсатор? Почему Е? Buzzer - это я так понял к любому пину МК? Что должен выдавать этот пин - постоянное напряжение или колеблющееся по play_sound? PZ1 - пьезоизлучатель? Они полярные или нет? С генератором или без? VCC это питание как на МК - 5В или любое, на которое рассчитан пьезик? |
![]() |
|
![]()
Сообщение
#68
|
|
Технический Маньяк-Гуру ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Технический Маньяк Сообщений: 7049 Регистрация: 3.6.2009 Из: Армения Вне форума Авто: Lancer IX, AT Репутация: ![]() ![]() ![]() |
10uF = 10мкФ. Допускается замена "мю" на "u".
А вот все остальное - это импровизация, "Е" - по-видимому от слова electrolytic, да и условное обозначение отличается от нашего (кстати и неполярный тоже) Бузер подключается к любому пину, главное проинициализировать этот пин - Sound_Init(PORT, PIN). Работает от колеблющегося сигнала. Пьезоизлучатель - любой (без генератора), подключать можно и к 5В и, если есть, к 12В. |
![]() |
|
![]()
Сообщение
#69
|
|
Технический Маньяк-Гуру ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Технический Маньяк Сообщений: 1724 Регистрация: 15.10.2009 Из: Москва, п. Монино Вне форума Репутация: ![]() ![]() ![]() |
В схеме есть и 5В и 12В, т. е. я подключаю к тому напряжению, на которое рассчитан пьезик?
|
![]() |
|
![]()
Сообщение
#70
|
|
Технический Маньяк-Гуру ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Технический Маньяк Сообщений: 7049 Регистрация: 3.6.2009 Из: Армения Вне форума Авто: Lancer IX, AT Репутация: ![]() ![]() ![]() |
Да.
|
![]() |
|
![]()
Сообщение
#71
|
|
Технический Маньяк-Гуру ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Технический Маньяк Сообщений: 1724 Регистрация: 15.10.2009 Из: Москва, п. Монино Вне форума Репутация: ![]() ![]() ![]() |
А ты когда-нибудь работал по прерываниям? Допустим в основное время МК ничего не делает, а программа (кусок кода) срабатывает только когда например на входе появляется 1 вместо 0? Вроде так можно, читал в мануале, но хотелось бы примерчик работающий (IMG:style_emoticons/default/smile.gif) Pic 12F675.
|
![]() |
|
![]()
Сообщение
#72
|
|
Технический Маньяк-Гуру ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Технический Маньяк Сообщений: 7049 Регистрация: 3.6.2009 Из: Армения Вне форума Авто: Lancer IX, AT Репутация: ![]() ![]() ![]() |
С аппаратными прерываниями (по входу INT, GP2 в 12F675) - просто пока такой необходимости не возникало, с прерываниями по таймеру - в примерах приведены образцы работающего кода:
Timer0 Interrupt Timer1 Interrupt Timer2 Interrupt Для расчета прерываний по таймеру есть отличная программа, которая и код к тому же генерирует ![]() |
![]() |
|
![]()
Сообщение
#73
|
|
Технический Маньяк-Гуру ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Технический Маньяк Сообщений: 7049 Регистрация: 3.6.2009 Из: Армения Вне форума Авто: Lancer IX, AT Репутация: ![]() ![]() ![]() |
Сегодня перечитал даташит на указанную микруху.
Соотв. установкой регистра INTCON можно не только активировать GP2/INT но также вызывать прерывания и по изменению уровня сигнала на остальных входах GPIO. И еще - по сигналу от компаратора или внутреннего АЦП а также по окончании записи во внутр. EEPROM. Ну и естественно остаются прерывания по переполнению таймеров. Всего аж 7 (!) источников прерываний... |
![]() |
|
![]()
Сообщение
#74
|
|
Технический Маньяк-Гуру ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Технический Маньяк Сообщений: 1724 Регистрация: 15.10.2009 Из: Москва, п. Монино Вне форума Репутация: ![]() ![]() ![]() |
Ну да, а вот как их использовать? Например установил я INTCON на прерывание по GP0. А самой программы типа while true do ... у меня и нет (она ведь теперь не нужна?). Я же должен описать что-то типа "on gp0 change do ..." вот как правильно? (IMG:style_emoticons/default/smile.gif)
|
![]() |
|
![]()
Сообщение
#75
|
|
Технический Маньяк-Гуру ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Технический Маньяк Сообщений: 7049 Регистрация: 3.6.2009 Из: Армения Вне форума Авто: Lancer IX, AT Репутация: ![]() ![]() ![]() |
Конечно, не нужна. В MikroPascal-e (на нем пишешь если не ошибаюсь) да и в Си и бейсике есть специальная процедура interrupt куда передается управление при возникновении прерывания. А вот в теле этой процедуры и можешь писать те действия, которые надо выполнять при возникновании прерывания.
Вот пример из help - при каждом переполнении таймера TMR0 значение переменной counter увеличивается на единицу procedure interrupt; begin counter := counter + 1; TMR0 := 96; INTCON := $20; end; |
![]() |
|
![]()
Сообщение
#76
|
|
Технический Маньяк-Гуру ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Технический Маньяк Сообщений: 7049 Регистрация: 3.6.2009 Из: Армения Вне форума Авто: Lancer IX, AT Репутация: ![]() ![]() ![]() |
Возвращаясь к адаптеру для 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 бит), а некоторые могут быть запрограммированы и так и так. |
![]() |
|
![]()
Сообщение
#77
|
|
Новичок ![]() Группа: Новичок Сообщений: 1 Регистрация: 16.12.2010 Вне форума Репутация: ![]() ![]() ![]() |
Как уже отмечалось, с PicKit-ом удобно использовать универсальный адаптер для прошивки отдельных МК и EEPROM. Выкладываю разводку такого адаптера, вернее 2-х, один для пиков, другой для микросхем памяти. ![]() Отличный адаптер - стал недавно обладателем pickit2 и занялся поиском универсального адаптера использующего ZIF панели с поддержкой максимального числа МК. Есть много других вариантов (на одной панельке например) но они по некоторым причинам не устраивали (часть выводов под нежелательным питанием, использование миропереключателей итд и тп ) Я так понимаю зеркалить надо Какие контроллеры прошивали ? Сообщение отредактировал jn79 - 17.12.2010, 10:51 |
![]() |
|
![]()
Сообщение
#78
|
|
Технический Маньяк-Гуру ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Технический Маньяк Сообщений: 7049 Регистрация: 3.6.2009 Из: Армения Вне форума Авто: Lancer IX, AT Репутация: ![]() ![]() ![]() |
На двух по-моему удобнее. Просто хоть один из ZIF-ов надо поставить как у меня - с широкими контактами.
Прошивал все, и пики в разных корпусах (40, 28, etc.) и все три вида памяти - на втором адаптере. Плюс, прошивал все обозначенное и внутрисхемно и для отладки использовал питание через PicKit2. Адаптер не совместим с dsPIC-ами (сам PicKit- прошивает, но адаптер должен быть другим) Встречалась мне схема на одном ЗИФ-е, что мне не понравилось - разные пики надо ставить вразнобой, во кстати и этот адаптер. Рабочий или нет - не знаю, не проверял и даже не вникал (IMG:style_emoticons/default/wink.gif) ![]() Платы - да, надо зеркалировать. Еще для программатора посоветую изготовить удлинитель, просто соединенные жгутом 6-контактные колодки папа и мама, не всегда удается подлезть к разъёму ICP... |
![]() |
|
![]()
Сообщение
#79
|
|
Технический Маньяк-Гуру ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Технический Маньяк Сообщений: 1724 Регистрация: 15.10.2009 Из: Москва, п. Монино Вне форума Репутация: ![]() ![]() ![]() |
А можно ли при программировании, чтобы не запутаться в куче пинов, заранее обозначить как-нить так:
Код Led1 := PORTA.0; Led2 := PORTA.3; Btn1 := PORTA.1; А потом просто писать типа: Код if Btn1 then do
Begin Led1:= 1; Led2:= 0; end; |
![]() |
|
![]()
Сообщение
#80
|
|
Технический Маньяк-Гуру ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Технический Маньяк Сообщений: 7049 Регистрация: 3.6.2009 Из: Армения Вне форума Авто: Lancer IX, AT Репутация: ![]() ![]() ![]() |
В MikroBasic такая возможность есть, надо в начале программы записать что-то типа этого:
symbol Inputport = PORTB.0 Записывается именно в начале программы, до объявлений переменных и т.д. В help-е на Паскаль я что-то не нашел такого, может в про версии присутствует (у меня её нет чтоб посмотреть) |
![]() |
|
![]()
Сообщение
#81
|
|
Технический Маньяк-Гуру ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Технический Маньяк Сообщений: 1724 Регистрация: 15.10.2009 Из: Москва, п. Монино Вне форума Репутация: ![]() ![]() ![]() |
Спасиб (IMG:style_emoticons/default/smile.gif)
А ты когда-нить паял ПИК в корпусе SSOP-20? Это вообще реально дома? (IMG:style_emoticons/default/smile.gif) Я платы делаю лазерным принтером на фотобумагу, потом хлорное железо, дорожки в 0.3мм получаются чётко, а вот как запаять? Я дорожки потом лужу в кастрюле сплавом Розе. Достаточно ли будет только слоя лужения Розе? Т. е. я просто поставлю МК на площадку и прогрею все ноги паяльником? |
![]() |
|
![]()
Сообщение
#82
|
|
Don Amadeus ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Главные администраторы Сообщений: 29954 Регистрация: 19.2.2009 Из: Russia, Sevastopol Вне форума Авто: Lancer IX-1.6 MT Turbo, Honda Accord IX-2.4 AT Executive. Репутация: ![]() ![]() ![]() |
Есть еще такие штуки как паяльные фены, вот им паять подобно одно удовольствие (IMG:style_emoticons/default/wink.gif)
Для более крутых вещей (это уже ближе к матерям компов и тп) - инфракрасные паяльные станции. |
![]() |
|
![]()
Сообщение
#83
|
|
Технический Маньяк-Гуру ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Технический Маньяк Сообщений: 1724 Регистрация: 15.10.2009 Из: Москва, п. Монино Вне форума Репутация: ![]() ![]() ![]() |
Ну такое покупать не хочу, дорого пока для меня (IMG:style_emoticons/default/smile.gif) Паяльник нормальный тонкий, чистым жалом если поводить, припаяется к слою сплава Розе? (IMG:style_emoticons/default/smile.gif)
|
![]() |
|
![]()
Сообщение
#84
|
|
Don Amadeus ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Главные администраторы Сообщений: 29954 Регистрация: 19.2.2009 Из: Russia, Sevastopol Вне форума Авто: Lancer IX-1.6 MT Turbo, Honda Accord IX-2.4 AT Executive. Репутация: ![]() ![]() ![]() |
Должно (IMG:style_emoticons/default/smile.gif)
Кстати, паяльный фен - не такое уж и дорогое удовольствие, относительно, ессно, сравним по цене с неплохим паяльником с терморегулятором. |
![]() |
|
![]()
Сообщение
#85
|
|
Технический Маньяк-Гуру ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Технический Маньяк Сообщений: 1724 Регистрация: 15.10.2009 Из: Москва, п. Монино Вне форума Репутация: ![]() ![]() ![]() |
Народ, ещё пару вопросиков (IMG:style_emoticons/default/smile.gif)
1) Собираюсь переходить на SMD компоненты в дальнейшем. Для начала хочу закупить наборы резисторов. Как думаете, для наших с вами МК целей хватит "0805" (0.125Вт) или лучше остаться на 0.250Вт - "1206"? Вот считаю 0.125Вт как-то впритык хватает (IMG:style_emoticons/default/smile.gif) Это же 25mА@5V или 10mA@12V... Хотя впринципе там где надо 0.25Вт можно буд выводные ставить в редких местах... 2) Собираюсь перейти на внешние кварцы для МК, но тут есть 3 ветки я так понял: Кварцевые генераторы, Кварцевые резонаторы и Керамические резонаторы. Что используется чаще и проще всего обычно? Вроде обычная схема это Osc1 и Osc2 от МК в этот "кварц" и от этих 2х ног ещё по малеькому конденсатору на землю? Этот "кварц" неполярен? Так что их трёх лучше? |
![]() |
|
![]()
Сообщение
#86
|
|
Технический Маньяк-Гуру ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Технический Маньяк Сообщений: 7049 Регистрация: 3.6.2009 Из: Армения Вне форума Авто: Lancer IX, AT Репутация: ![]() ![]() ![]() |
1. Если речь идет только о МК, то и 0,125Вт за глаза хватит, большей мощности они и не выдают.
2. В тех схемах где не требуется жесткая стабилизация временных параметров можно вообще не ставить кварцев, частота внутр. генератора достаточна стабильна. Если-же все-таки нужен кварц - без разницы, ставь что удобно или что возможно достать. У меня, напр. нет 3-х ножечных, со встроенными конденсаторами, поэтому в основном применяю отдельный кварц + 2 конденсатора. |
![]() |
|
![]()
Сообщение
#87
|
|
Технический Маньяк-Гуру ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Технический Маньяк Сообщений: 1724 Регистрация: 15.10.2009 Из: Москва, п. Монино Вне форума Репутация: ![]() ![]() ![]() |
Вот тут где ты говоришь "Кварц" это "Кварцевый генератор", Кварцевый резонатор" или "Керамический резонатор"? (IMG:style_emoticons/default/smile.gif) Или "Керамический" тут вообще не при делах? Я хочу делать как в демосхеме - с двумя кондёрами и 2х-ножечным "кварцем".
Зачем они мне вдруг понадобились? Хочу сделать общение по RS-485 и где-то прочитал, что лучше использовать внешний более стабильный источник синхросигнала. Вроде я хочу именно резонатор - http://www.chipdip.ru/catalog/quartz-resonators.aspx они дешевле (IMG:style_emoticons/default/smile.gif) У него 2 ноги равноценны? |
![]() |
|
![]()
Сообщение
#88
|
|
Технический Маньяк-Гуру ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Технический Маньяк Сообщений: 7049 Регистрация: 3.6.2009 Из: Армения Вне форума Авто: Lancer IX, AT Репутация: ![]() ![]() ![]() |
Кварц и кварцевый резонатор это одно и то же
Керамический резонатор - по сути тот же самый прибор, отличается некоторыми характеристиками, напр. большей нестабильностью частоты. Но зато размеры у последних меньше. При включении в цепь ножки у них равноценны. Для синхронизации МК кварц соединяется между ножками OSC1 и OSC2 а конденсаторы между каждой из ножек и корпусом. Если прибор 3-х выводный, то скорее всего он со встроенными конденсаторами, среднюю ножку сажаем на корпус, 2 остальных опять - как попало. Кварцевый генератор - ясно из названия, генератор, частота которого стабилизирована кварцем могут быть как самодельными так и выпускаемые промышленностью. При использовании для синхронизации с МК выходной сигнал с генератора обычно подают на вывод OSC1. В любом случае необходимо также правильно сконфигурировать МК согласно выбранному методу и частоте синхронизации. Информация об этом есть в даташитах на конкретный МК. |
![]() |
|
![]()
Сообщение
#89
|
|
Технический Маньяк-Гуру ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Технический Маньяк Сообщений: 1724 Регистрация: 15.10.2009 Из: Москва, п. Монино Вне форума Репутация: ![]() ![]() ![]() |
Терь всё понял! Спасибо! (IMG:style_emoticons/default/smile.gif)
|
![]() |
|
![]()
Сообщение
#90
|
|
LED маньяк ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Почетные ветераны Сообщений: 1114 Регистрация: 4.7.2009 Из: Russia, Moscow, ЮЗАО, Belyaevo Village Вне форума Авто: Lancer V STW AWD Репутация: ![]() ![]() ![]() |
Спасиб (IMG:style_emoticons/default/smile.gif) А ты когда-нить паял ПИК в корпусе SSOP-20? Это вообще реально дома? (IMG:style_emoticons/default/smile.gif) Я платы делаю лазерным принтером на фотобумагу, потом хлорное железо, дорожки в 0.3мм получаются чётко, а вот как запаять? Я дорожки потом лужу в кастрюле сплавом Розе. Достаточно ли будет только слоя лужения Розе? Т. е. я просто поставлю МК на площадку и прогрею все ноги паяльником? SSOP-20 совершенно беспроблемно паяется руками. А если будет жало "микроволна" то паяется еще проще. (IMG:style_emoticons/default/smile.gif) Если душа иногда требует эстетики, то можно через трафарет паяльной пасты мазнуть, сверху чип, на подогревной столик и сверху горячим воздухом. Подогрев снизу, чтобы не было температурного шока и плату не коробило. Хотя в последнее время на пасту только QFN сажаю. А нормальные выводы и так беспроблемно паяются. Только флюс не жалеть в месте пайки. Кстати что касается керамических резонаторов, то размеры у них как раз больше чем у кварцевых резонаторов, а вот точность и стабильность частоты гораздо хуже. Соответственно и стоимость меньше. Керамические фильтры да, размерами обычно меньше, но и по параметрам до кварцевых естественно не дотягивают. Примерно так. (IMG:style_emoticons/default/smile.gif) |
![]() |
|
![]()
Сообщение
#91
|
|
Технический Маньяк-Гуру ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Технический Маньяк Сообщений: 1724 Регистрация: 15.10.2009 Из: Москва, п. Монино Вне форума Репутация: ![]() ![]() ![]() |
Во блин, ну лан, попробуем (IMG:style_emoticons/default/smile.gif) А то до этого я только PDIP'ы паял (IMG:style_emoticons/default/smile.gif) Ну видать в SMD монтаже проще паять мелочь...
|
![]() |
|
![]()
Сообщение
#92
|
|
LED маньяк ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Почетные ветераны Сообщений: 1114 Регистрация: 4.7.2009 Из: Russia, Moscow, ЮЗАО, Belyaevo Village Вне форума Авто: Lancer V STW AWD Репутация: ![]() ![]() ![]() |
Я 0402 руками паяю, и вроде ничего, пока не умер от этого... (IMG:style_emoticons/default/biggrin.gif)
|
![]() |
|
![]()
Сообщение
#93
|
|
Технический Маньяк-Гуру ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Технический Маньяк Сообщений: 7049 Регистрация: 3.6.2009 Из: Армения Вне форума Авто: Lancer IX, AT Репутация: ![]() ![]() ![]() |
Про пайку мелких микросхем можно посмотреть здесь:
http://easyelectronics.ru/pajka-planarnyx-...ikrovolnoj.html Хотя я сам паяю обычным паяльником |
![]() |
|
![]()
Сообщение
#94
|
|
Технический Маньяк-Гуру ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Технический Маньяк Сообщений: 1724 Регистрация: 15.10.2009 Из: Москва, п. Монино Вне форума Репутация: ![]() ![]() ![]() |
Блин, что-то я переоценил силы... 0.3мм дорожки от SSOP не переносятся у меня утюгом (IMG:style_emoticons/default/sad.gif) Может текстолит был зафаканный...
|
![]() |
|
![]()
Сообщение
#95
|
|
Технический Маньяк-Гуру ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Технический Маньяк Сообщений: 1724 Регистрация: 15.10.2009 Из: Москва, п. Монино Вне форума Репутация: ![]() ![]() ![]() |
Ребят, никак не пойму. Допустим я выбрал кварцевый резонатор: ссыль.
Далее смотрим даташит с картинкой по подключению: ![]() Смотрим таблицы: 14-1 для керамических резонаторов - не подходит. 14-2 для "Crystal Oscillator" - кварцевых генераторов? Тоже не подходит. А для Crystal Resonator нету. Далее там уже про другое в даташите. И в каких случаях надо резистор RS (и сколько?)? Или всё же моя таблица - 14-2 и я беру 15-30pF Mode HS? |
![]() |
|
![]()
Сообщение
#96
|
|
Технический Маньяк-Гуру ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Технический Маньяк Сообщений: 1802 Регистрация: 21.2.2009 Из: Екатеринбург Вне форума Авто: Lancer IX 1.6MT (105HP) Репутация: ![]() ![]() ![]() |
Crystal Oscillator, в данном случае и есть кварц. (IMG:style_emoticons/default/wink.gif)
Генератор, это отдельная схема, возможно застабилизированная кварцем. И подключается он по другому, всего на один вывод, скорее всего на OSC1. |
![]() |
|
![]()
Сообщение
#97
|
|
Технический Маньяк-Гуру ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Технический Маньяк Сообщений: 1724 Регистрация: 15.10.2009 Из: Москва, п. Монино Вне форума Репутация: ![]() ![]() ![]() |
Ок, понял, а резюк RS нужен? (IMG:style_emoticons/default/smile.gif)
|
![]() |
|
![]()
Сообщение
#98
|
|
Технический Маньяк-Гуру ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Технический Маньяк Сообщений: 7049 Регистрация: 3.6.2009 Из: Армения Вне форума Авто: Lancer IX, AT Репутация: ![]() ![]() ![]() |
Oscillator=Resonator
Резистор не нужен. В таблице все четко прописано, для кварцевых резонаторов - для какой частоты какие фьюзы ставить. Конденсаторы - ставь тоже как в таблице, я затоварился на 22пФ, везде ставлю их. Дорожки делай 0,4мм |
![]() |
|
![]()
Сообщение
#99
|
|
LED маньяк ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Почетные ветераны Сообщений: 1114 Регистрация: 4.7.2009 Из: Russia, Moscow, ЮЗАО, Belyaevo Village Вне форума Авто: Lancer V STW AWD Репутация: ![]() ![]() ![]() |
Блин, что-то я переоценил силы... 0.3мм дорожки от SSOP не переносятся у меня утюгом (IMG:style_emoticons/default/sad.gif) Может текстолит был зафаканный... А с ЛУТом всегда так. чем плата меньше, тем дорожки тоньше и нормально получаются. Ну и FR-4 нужно внимательней смотреть, иногда попадается с фольгой на 18мкм, причем не лучшего качества, сделан так, что рельеф стеклоткани проступает. На таком ЛУТом 0,2/0,2 это сродни, как это... душевным терзаниям.. (IMG:style_emoticons/default/biggrin.gif) Из того, что в Мск пробовал, лучшим оказался стеклотекстолит от Matsushita. Там все правильно сделано, и травится равномерно. Хотя для больших плат, на самом дел, пленочный фоторезист в помощь, но только правильный, например AGFA. |
![]() |
|
![]()
Сообщение
#100
|
|
Технический Маньяк-Гуру ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Технический Маньяк Сообщений: 7049 Регистрация: 3.6.2009 Из: Армения Вне форума Авто: Lancer IX, AT Репутация: ![]() ![]() ![]() |
Где-то писал, но не помню... Про пайку мелких микросхем. На всякий случай продублирую....
Недавно попробовал новый способ - получилось. Суть в том, что во время пайки не мучаясь просто запаиваешь весь ряд, выводы и с дорожками на плате и с друг-другом. После чего расплавляя припой (насколько захватит жало) отсосом высасываем излишки. Никакой особой сноровки не требуется... |
![]() |
|
![]() ![]() ![]() |
![]() |
+7-978-708-85-73 Дроссель Amadeus Productions. Быстрый заказ по телефону. (Viber, WhatsApp, Telegram) |
Текстовая версия | © 2006-2025 Форум Технических Маньяков. |
|