Раздел | Микроконтроллеры широкого назначения | |
Ядро | ||
---|---|---|
Объём памяти программ | ||
Объём EEPROM памяти | ||
Объём оперативной памяти | ||
Напряжение питания | ||
Рабочая температура |
www.compel.ru
electronics-lab.ru
Так уж сложилось, что знакомство с микроконтроллерами я начал с AVR. PIC микроконтроллеры до поры, до времени — обходил стороной. Но, все же на них тоже ведь есть уникальные, интересные для повторения, конструкции! А ведь эти микроконтроллеры тоже прошивать нужно . Эту статью пишу в основном для себя самого. Чтобы не забыть технологии, как без проблем и бессмысленных потерь времени прошить PIC микроконтроллер.
Для первой схемы — долго и упорно пытался сделать PIC программатор по найденным в интернете схемам — ничего не вышло . Стыдно, но пришлось обращаться к знакомому, чтобы прошил МК. Но ведь это не дело — постоянно бегать по знакомым! Этот же знакомый и посоветовал простенькую схему, работающую от СОМ порта. Но даже и тогда, когда я ее собрал — все равно ничего не получалось . Ведь мало собрать программатор — нужно еще под него настроить программу, которой будем прошивать. А вот как раз это у меня и не получалось. Целая туча инструкций в интернете, и мало какая мне помогла…
Тогда, мне удалось прошить один микроконтроллер. Но так как прошивал в условиях жесткого дефицита времени — не догадался сохранить хотя бы ссылку на инструкцию. И ведь не нашел ее вполедствии. Поэтому повторюсь — пишу статью, чтобы иметь свою собственную инструкцию.
Да, если эту статью будут читать специалисты по PIC микроконтроллерам — просьба не смеяться надо мной (ну во всяком случае сильно не смеяться ). Но я отвлекся.
Итак, программатор для PIC микроконтроллеров. Простой, хотя и не 5 проводков, как для AVR микроконтроллеров, который я использую до сих пор. Вот схема:
Вот печатная плата (а вот здесь — она в формате Sprint-Layout 5.0).
СОМ разъем припаивается штырьками прямо на контактные площадки (главное — не запутаться с нумерацией). Второй ряд штырьков соединяется с платой маленькими перемычками (очень непонятно сказал, ага). Попробую дать фотографию… хоть она и страшная (нету у меня сейчас нормального фотоаппарата ).Самое злобное в том — что для PIC микроконтроллеров для прошивки нужны 12 вольт. А лучше не 12, а чуточку побольше. Скажем, 13. Или 13.5 (кстати, специалисты — поправьте меня в комментариях, если ошибаюсь. Пожалуйста.). 12 вольт еще можно где-то добыть. А 13 где? Я то выходил из положения просто — брал свежезаряженный литий-полимерный аккумулятор, в котором было 12.6 вольт. Ну или вообще четырехбаночный аккумулятор, с его 16 вольтами (прошил так один PIC — без проблем).
Но я опять отвлекся. Итак — инструкция по прошивке PIC микроконтроллеров. Ищем программу WinPIC800 (к сожалению простая и популярная icprog у меня не заработала,) и настраиваем ее так, как показано на скриншоте.
После этого — открываем файл прошивки, подключаем микроконтроллер и прошиваем.
luckytech.ru
;ЗА ОСНОВУ ВЗЯТА ПРОГРАММА FAZA.ASM АВТОРА ;Заец Н.И.( [email protected]) ;ПРОГРАММА ДОРАБОТАНА ДЛЯ ПРИМЕНЕНИЯ ;В РАЗЛИЧНЫХ УСТРОЙСТВАХ И УНИВЕРСАЛЬНА ;В ДАННОМ ВАРИАНТЕ РАБОТАЕТ ;ДЛЯ ЗАЩИТЫ СХЕМЫ СИЛОВОГО ИНВЕРТОРА СВАРОЧНОГО АППАРАТА ;И РАБОТАЕТ ПО ДАТЧИКАМ РОСЫ, ПЫЛИ И ТЕМПЕРАТУРЫ ;ДОРАБОТАЛ ПРОГРАММУ Король Л.Ю. ([email protected]) ;ПРОГРАММА: FAZA.asm ;ВЕРСИЯ: 25-10-2009 ;АССЕМБЛЕР И ОТЛАДЧИК: MPLAB IDE, ВЕРСИЯ: 7.20 ; #INCLUDE __CONFIG 3FF4H ;==================================================== ; ИСПОЛЬЗУЕТСЯ ВНУТРЕННИЙ ГЕНЕРАТОР ЧАСТОТОЙ 4,0 MГц. ;==================================================== ;========================================= ; РЕГИСТРЫ РСН. ;========================================= INDF EQU 00H ;ДОСТУП К ПАМЯТИ ЧЕРЕЗ FSR. TIMER0 EQU 01H ;TMR0. OPTION_REG EQU 81H ;OPTION (RP0=1). PC EQU 02H ;СЧЕТЧИК КОМАНД. STATUS EQU 03H ;РЕГИСТР СОСТОЯНИЯ АЛУ. FSR EQU 04H ;РЕГИСТР КОСВЕННОЙ АДРЕСАЦИИ. PORTA EQU 05H ;ПОРТ А ВВОДА/ВЫВОДА. PORTC EQU 07H ;ПОРТ C ВВОДА/ВЫВОДА. TRISA EQU 85H ;НАПРАВЛЕНИЯ ДАННЫХ ПОРТА А. TRISC EQU 87H ;НАПРАВЛЕНИЯ ДАННЫХ ПОРТА C. INTCON EQU 0BH ;РЕГИСТР ФЛАГОВ ПРЕРЫВАНИЙ. PIR1 EQU 0CH ;РАЗРЕШЕНИЯ ПЕРИФЕРИЙНЫХ ПРЕРЫВАНИЙ. PIE1 EQU 8CH ;РЕГИСТР РАЗРЕШЕНИЯ ПЕРИФЕРИЙНЫХ ПРЕРЫВАНИЙ. TMR1L EQU 0EH ;МЛАДШИЙ РЕГИСТР ТАЙМЕРА 1. TMR1H EQU 0FH ;СТАРШИЙ РЕГИСТР ТАЙМЕРА 1. T1CON EQU 10H ;РЕГИСТР УПРАВЛЕНИЯ ТАЙМЕРОМ 1. CMCON EQU 19H ;РЕГИСТР УПРАВЛЕНИЯ КОМПАРАТОРОМ. VRCON EQU 99H ;РЕГИСТР ИСТОЧНИКА ОПОРНОГО НАПРЯЖЕНИЯ. PCON EQU 8EH ;КОНТРОЛЬ НАПРЯЖЕНИЯ. OSCCAL EQU 90H ; ANSEL EQU 91H ;ВЫБОР АНАЛОГОВОГО ВХОДА. WPUA EQU 95H ;ВКЛЮЧЕНИЯ ПОДТЯГИВАЮЩИХ РЕЗИСТОРОВ. IOCA EQU 96H ;РАЗРЕШЕНИЕ ПРЕРЫВАНИЙ ПО ИЗМ. СИГН. НА ВХОДАХ А. ADRESH EQU 1EH ;СТАРШИЙ РЕГИСТР АЦП. ADRESL EQU 9EH ;МЛАДШИЙ РЕГИСТР АЦП. ADCON0 EQU 1FH ;УПРАВЛЕНИЯ АЦП. ADCON1 EQU 9FH ;ВЫБОР ТАКТИРОВАНИЯ АЦП. EEDAT EQU 9AH ;РЕГИСТР ОБМЕНА ДАННЫМИ C EEPROM EEADR EQU 9BH ;РЕГИСТР ЗАДАНИЯ ЯЧЕЙКИ АДРЕСА В EEPROM EECON1 EQU 9CH ;РЕГИСТР УПРАВЛЕНИЯ EEPROM EECON2 EQU 9DH ;РЕГИСТР УПРАВЛЕНИЯ EEPROM ;=========================================== ; ОПРЕДЕЛЕНИЕ РОН. ;===================================================================== TEKH EQU 20H ;ДВОИЧНОЕ ИЗМЕРЕННОЕ ЗНАЧЕНИЕ НАПРЯЖЕНИЯ. TEKL EQU 21H ;старший и младший регистры. YCTA EQU 22H ;УСТАНОВЛЕННОЕ МАКСИМАЛЬНОЕ ЗНАЧЕНИЕ ПАРАМЕТРА YCTI EQU 23H ;УСТАНОВЛЕННОЕ МИНИМАЛЬНОЕ ЗНАЧЕНИЕ ПАРАМЕТРА RAB0 EQU 24H ;РОСА RAB1 EQU 25H ;ПЫЛЬ RAB2 EQU 26H ;ПРЕДЕЛЬНАЯ ТЕМПЕРАТУРА RAB3 EQU 27H ;РЕГУЛЯТОР ОХЛАЖДЕНИЯ RAB4 EQU 28H ;РАБОЧАЯ ЯЧЕЙКА 1ГО СЧ-КА RAB5 EQU 29H ;РАБОЧАЯ ЯЧЕЙКА 2ГО СЧ-КА RAB6 EQU 2AH ;РАБОЧАЯ ЯЧЕЙКА МИНУТЫ RAB7 EQU 2BH ;РАБОЧАЯ ЯЧЕЙКА ЧАСА BUM0 EQU 2CH ;БУФЕР НУЛЕВОГО БАЙТА МИНУТ BUM1 EQU 2DH ;БУФЕР ПЕРВОГО БАЙТА МИНУТ BUM2 EQU 2EH ;БУФЕР ВТОРОГО БАЙТА МИНУТ BUM3 EQU 2FH ;БУФЕР ТРЕТЬЕГО БАЙТА МИНУТ DBUM0 EQU 30H ;ДУБЛЬ БУФЕРА НУЛЕВОГО БАЙТА МИНУТ ДЛЯ ВЫВОДА В ИНДИКАТОР DBUM1 EQU 31H ;ДУБЛЬ БУФЕРА ПЕРВОГО БАЙТА МИНУТ ДЛЯ ВЫВОДА В ИНДИКАТОР DBUM2 EQU 32H ;ДУБЛЬ БУФЕРА ВТОРОГО БАЙТА МИНУТ ДЛЯ ВЫВОДА В ИНДИКАТОР DBUM3 EQU 33H ;ДУБЛЬ БУФЕРА ТРЕТЬЕГО БАЙТА МИНУТ ДЛЯ ВЫВОДА В ИНДИКАТОР RAB8 EQU 34H ;РАБОЧАЯ ЯЧЕЙКА СЧЁТЧИКА 255 (11111111) ИЛИ 0FFH RAB9 EQU 35H ;РАБОЧАЯ ЯЧЕЙКА СЧЁТЧИКА 255 (11111111) ИЛИ 0FFH TR0 EQU 36H ;TR0 TR1 EQU 37H ;TR1 TR2 EQU 38H ;TR2 TR3 EQU 39H ;TR3 CONST1 EQU 3AH ;FF ДЛЯ СЧЁТЧИКА ПОБАЙТНОГО ВЫВОДА CONST2 EQU 3BH ;FF CONST3 EQU 3CH ;FF ;===================================================================== ; 1. ПУСК ;===================================================================== ORG 0 GOTO INIT NOP NOP NOP NOP NOP ;===================================================================== ; 2. ИНИЦИАЛИЗАЦИЯ . ;===================================================================== INIT BSF STATUS,5 ;БАНК1. CLRF OSCCAL^0x90 ;МАКСИМАЛЬНАЯ ЧАСТОТА. MOVLW 0FFH ;СИГНХРОНИЗАЦИЯ ОТ RC. MOVWF ADCON1 ;ТАКТ АЦП ОТ внутреннего генератора 500 кГц MOVLW B'10000000' ;К=4 MOVWF OPTION_REG^80H ;РЕЗИСТОРЫ ВЫКЛЮЧЕНЫ. CLRF INTCON ; CLRF PIE1^80H ;ЗАПРЕЩЕНЫ ВСЕ ПЕРИФЕРИЙНЫЕ ПРЕРЫВАНИЯ MOVLW B'00111111' ;ВСЕ ВХОДЫ ********* MOVWF TRISA^80H ; CLRF TRISC^80H ;ВСЕ ВЫХОДЫ . CLRF VRCON^80H ;ИОН ОТКЛЮЧЕН . CLRF PCON^80H ;ПРЕРЫВАНИЯ ПО ПИТАНИЮ ЗАПРЕЩЕНЫ. CLRF WPUA^80H ;ПОДТЯГИВАЮЩИЕ РЕЗИСТОРЫ ВЫКЮЧЕНЫ. CLRF IOCA^80H ;ПРЕРЫВАНИЯ ЗАПРЕЩЕНЫ. MOVLW .1 ; MOVWF ANSEL^80H ;ВЫБРАН АНАЛОГОВЫЙ ВХОД RA0/AN0. BCF STATUS,5 ;ПЕРЕХОДИМ В БАНК 0. CLRF PORTC ;ВЫХОД И СВЕТОДИОД ВЫКЛЮЧЕНЫ. CLRF T1CON ;ТАЙМЕР 1 ОТКЛЮЧЕН. MOVLW .7 ; MOVWF CMCON ;КОМПАРАТОР ВЫКЛЮЧЕН. CLRF BUM0 CLRF BUM1 CLRF BUM2 CLRF DBUM0 CLRF DBUM1 CLRF DBUM2 MOVLW B'00111100' ;ЗАПИШЕМ ЧИСЛО 60 В ДВОИЧНОМ КОДЕ MOVWF RAB6 ;В ЯЧЕЙКУ RAB6 это ячейка делителя ;секунд для получения минутного им ;пульса CLRF RAB7 BSF STATUS,5 MOVLW 00H ; MOVWF EEADR ;ЗАДАЁМ АДРЕС 00H ЧТЕНИЯ ИЗ EEPROM MOVLW B'00000001' ;РАЗРЕШАЕМ ЧТЕНИЕ ИЗ EEPROM MOVWF EECON1 ; MOVFW EEDATA ;читаем данные через служ. регистр EEDATA BCF STATUS,5 ;БАНК 0 MOVWF BUM0 ; MOVLW 01H ;заносим константу для правильной работы ADDWF BUM0 ;программы ; goto INDIC ;ТЕХНОЛОГИЧЕСКАЯ КОМАНДА BSF STATUS,5 MOVLW 01H MOVWF EEADR ; ЗАДАЁМ АДРЕС 01 ЧТЕНИЯ ИЗ EEPROM MOVLW B'00000001' ; РАЗРЕШАЕМ ЧТЕНИЕ ИЗ EEPROM MOVWF EECON1 ; MOVFW EEDATA ; ЧИТАЕМ ДАННЫЕ ЧЕРЕЗ СЛУЖ РЕГИСТР EEDATA BCF STATUS,5 ; БАНК 0 MOVWF BUM1 ; ;goto INDIC ;ТЕХНОЛОГИЧЕСКАЯ КОМАНДА BSF STATUS,5 MOVLW 02H ; MOVWF EEADR ; ЗАДАЁМ АДРЕС 02H ЧТЕНИЯ ИЗ EEPROM MOVLW B'00000001' ; РАЗРЕШАЕМ ЧТЕНИЕ ИЗ EEPROM MOVWF EECON1 ; MOVFW EEDATA ; ЧИТАЕМ ДАННЫЕ ЧЕРЕЗ СЛУЖ РЕГИСТР EEDATA BCF STATUS,5 ; БАНК 0 MOVWF BUM2 ; ; goto INDIC ;ТЕХНОЛОГИЧЕСКАЯ КОМАНДА ADP0 MOVLW .250 ;МАКСИМУМ РОСА . MOVWF YCTA ; MOVLW .120 ;МИНИМУМ РОСА . MOVWF YCTI ; ;===================================================================== ; 3. АЦП - ПРЕОБРАЗОВАНИЕ (ИЗМЕРЕНИЕ ВХОДНЫХ ВЕЛИЧИН ). ;===================================================================== MOVLW B'10000001' ;СИНХРОНИЗАЦИЯ ОТ RC- ГЕНЕРАТОРА--------. MOVWF ADCON0 ;ВХОД 0, ВКЛЮЧЕНИЕ АЦП (YBX)=============. ;ПРАВОЕ ВЫРАВНИВАНИЕ. CALL ZAD ; ЗАДЕРЖКА 100МКСЕК. BSF ADCON1,1 ;ВКЛЮЧИМ ПРЕОБРАЗОВАНИЕ******. BTFSC ADCON1,1 ;ОЖИДАЕМ ЗАВЕРШЕНИЯ. GOTO $-1 ;ПРЕОБРАЗОВАНИЯ. MOVFW ADRESH ;ПЕРЕПИШЕМ РЕЗУЛЬТАТ ПРЕОБРАЗОВАНИЯ. MOVWF TEKH ;В СТАРШИЙ ТЕКУЩИЙ РЕГИСТР. BTFSc TEKH,1 ;ЕСЛИ 1 РАЗРЯД РАВЕН 1 ТО ПЕРЕПОЛНЕНИЕ. GOTO ADPU0 ;ВЫКЛЮЧИТЬ ВЫХОД . BSF STATUS,5 ;ПЕРЕХОДИМ В БАНК 1. MOVLW 21 ;ЗАПИСЬ В РЕГИСТР TEKL. MOVWF FSR ;ПО КОСВЕННОЙ АДРЕСАЦИИ. MOVFW ADRESL ;ЗАПИСЬ МЛ. РЕГИСТРА АЦП. MOVWF INDF ;В РЕГИСТР TEKL. BCF STATUS,5 ;ПЕРЕХОДИМ В БАНК 0.****** BCF STATUS,0 ;ОБНУЛЯЕМ БИТ ПЕРЕНОСА. RRF TEKH,1 ;СДВИГАЕМ ВПРАВО. RRF TEKL,1 ;ЧТОБЫ СРАВНИТЬ 8 РАЗРЯДОВ . MOVFW YCTA ;СРАВНИМ ТЕКУЩЕЕ ЗНАЧЕНИЕ . SUBWF TEKL,0 ;НА ПРЕВЫШЕНИЕ ПО МАКСИМУМУ. BTFSC STATUS,0 ;ЕСЛИ ЕСТЬ ПРЕВЫШЕНИЕ. GOTO ADPU0 ;ТО ВЫКЛЮЧИМ ВЫХОД . MOVFW YCTI ;СРАВНИМ ТЕКУЩЕЕ ЗНАЧЕНИЕ. SUBWF TEKL,0 ;НА ПРЕВЫШЕНИЕ ПО МИНИМУМУ. BTFSS STATUS,0 ;ЕСЛИ МЕНЬШЕ МЕНЬШЕГО GOTO ADPU0 MOVLW B'11111111' ;НОРМА ПО ВХ 0 MOVWF RAB0 BCF PORTC,5 GOTO ADP1 ;ПРОВЕРКА НА ПЫЛЬ ADPU0 BSF PORTC,5 ;ВКЛ ALARM ПО РОСЕ ***************. BCF PORTC,0 ;ВЫКЛЮЧИМ ВЫХОД общий ПО РОСЕ. BSF PORTC,1 ;ВКЛ ALARM ОБЩИЙ ***************. MOVLW B'00000000' MOVWF RAB0 GOTO ADP1 ZAD MOVLW .25 ;ЗАДЕРЖКА 100 МКС. ADDLW -1 ; BTFSS STATUS,2 ; GOTO $-2 ; RETURN ADP1 MOVLW .250 ;МАКСИМУМ ПЫЛЬ . MOVWF YCTA ; MOVLW .160 ;МИНИМУМ ПЫЛЬ . MOVWF YCTI ; ;===================================================================== ; 3. АЦП - ПРЕОБРАЗОВАНИЕ (ИЗМЕРЕНИЕ ВХОДНЫХ ВЕЛИЧИН ). ;===================================================================== MOVLW B'10000101' ;СИНХРОНИЗАЦИЯ ОТ RC- ГЕНЕРАТОРА--------. MOVWF ADCON0 ;ВХОД 1, ВКЛЮЧЕНИЕ АЦП (YBX)=============. ;ПРАВОЕ ВЫРАВНИВАНИЕ. CALL ZAD ; ЗАДЕРЖКА 100МКСЕК. BSF ADCON1,1 ;ВКЛЮЧИМ ПРЕОБРАЗОВАНИЕ******. BTFSC ADCON1,1 ;ОЖИДАЕМ ЗАВЕРШЕНИЯ. GOTO $-1 ;ПРЕОБРАЗОВАНИЯ. MOVFW ADRESH ;ПЕРЕПИШЕМ РЕЗУЛЬТАТ ПРЕОБРАЗОВАНИЯ. MOVWF TEKH ;В СТАРШИЙ ТЕКУЩИЙ РЕГИСТР. BTFSc TEKH,1 ;ЕСЛИ 1 РАЗРЯД РАВЕН 1 ТО ПЕРЕПОЛНЕНИЕ. GOTO ADPU1 ;ВЫКЛЮЧИТЬ ВЫХОД . BSF STATUS,5 ;ПЕРЕХОДИМ В БАНК 1. MOVLW 21 ;ЗАПИСЬ В РЕГИСТР TEKL. MOVWF FSR ;ПО КОСВЕННОЙ АДРЕСАЦИИ. MOVFW ADRESL ;ЗАПИСЬ МЛ. РЕГИСТРА АЦП. MOVWF INDF ;В РЕГИСТР TEKL. BCF STATUS,5 ;ПЕРЕХОДИМ В БАНК 0. BCF STATUS,0 ;ОБНУЛЯЕМ БИТ ПЕРЕНОСА. RRF TEKH,1 ;СДВИГАЕМ ВПРАВО. RRF TEKL,1 ;ЧТОБЫ СРАВНИТЬ 8 РАЗРЯДОВ . MOVFW YCTA ;СРАВНИМ ТЕКУЩЕЕ ЗНАЧЕНИЕ . SUBWF TEKL,0 ;НА ПРЕВЫШЕНИЕ ПО МАКСИМУМУ. BTFSC STATUS,0 ;ЕСЛИ ЕСТЬ ПРЕВЫШЕНИЕ. GOTO ADPU1 ;ТО ВЫКЛЮЧИМ ВЫХОД MOVFW YCTI ;СРАВНИМ ТЕКУЩЕЕ ЗНАЧЕНИЕ. SUBWF TEKL,0 ;НА ПРЕВЫШЕНИЕ ПО МИНИМУМУ. BTFSS STATUS,0 ;ЕСЛИ МЕНЬШЕ МЕНЬШЕГО. GOTO ADPU1 ;ТО ВЫКЛЮЧИМ ВЫХОД. MOVLW B'11111111' MOVWF RAB1 BCF PORTC,4 ;ВЫКЛ ALARM по ПЫЛИ ************ GOTO ADP2 ADPU1 BSF PORTC,4 ;ВКЛ ALARM ПО ПЫЛИ ***************. BCF PORTC,0 ;ВЫКЛЮЧИМ ВЫХОД общий ПО ПЫЛИ BSF PORTC,1 ;ВКЛ ALARM ОБЩИЙ ***************. MOVLW B'00000000' MOVWF RAB1 GOTO ADP2 ADP2 MOVLW .250 ;МАКСИМУМ T . MOVWF YCTA ; MOVLW .160 ;МИНИМУМ T . MOVWF YCTI ; ;===================================================================== ; 3. АЦП - ПРЕОБРАЗОВАНИЕ (ИЗМЕРЕНИЕ ВХОДНЫХ ВЕЛИЧИН ). ;===================================================================== MOVLW B'10001001' ;СИНХРОНИЗАЦИЯ ОТ RC- ГЕНЕРАТОРА--------. MOVWF ADCON0 ;ВХОД 2, ВКЛЮЧЕНИЕ АЦП (YBX)=============. ;ПРАВОЕ ВЫРАВНИВАНИЕ. CALL ZAD ; ЗАДЕРЖКА 100МКСЕК. BSF ADCON1,1 ;ВКЛЮЧИМ ПРЕОБРАЗОВАНИЕ******. BTFSC ADCON1,1 ;ОЖИДАЕМ ЗАВЕРШЕНИЯ. GOTO $-1 ;ПРЕОБРАЗОВАНИЯ. MOVFW ADRESH ;ПЕРЕПИШЕМ РЕЗУЛЬТАТ ПРЕОБРАЗОВАНИЯ. MOVWF TEKH ;В СТАРШИЙ ТЕКУЩИЙ РЕГИСТР. BTFSc TEKH,1 ;ЕСЛИ 1 РАЗРЯД РАВЕН 1 ТО ПЕРЕПОЛНЕНИЕ. GOTO ADPU2 ;ВЫКЛЮЧИТЬ ВЫХОД . BSF STATUS,5 ;ПЕРЕХОДИМ В БАНК 1. MOVLW 21 ;ЗАПИСЬ В РЕГИСТР TEKL. MOVWF FSR ;ПО КОСВЕННОЙ АДРЕСАЦИИ. MOVFW ADRESL ;ЗАПИСЬ МЛ. РЕГИСТРА АЦП. MOVWF INDF ;В РЕГИСТР TEKL. BCF STATUS,5 ;ПЕРЕХОДИМ В БАНК 0. BCF STATUS,0 ;ОБНУЛЯЕМ БИТ ПЕРЕНОСА. RRF TEKH,1 ;СДВИГАЕМ ВПРАВО. RRF TEKL,1 ;ЧТОБЫ СРАВНИТЬ 8 РАЗРЯДОВ . MOVFW YCTA ;СРАВНИМ ТЕКУЩЕЕ ЗНАЧЕНИЕ . SUBWF TEKL,0 ;НА ПРЕВЫШЕНИЕ ПО МАКСИМУМУ. BTFSC STATUS,0 ;ЕСЛИ ЕСТЬ ПРЕВЫШЕНИЕ. GOTO ADPU2 ;ТО ВЫКЛЮЧИМ ВЫХОД MOVFW YCTI ;СРАВНИМ ТЕКУЩЕЕ ЗНАЧЕНИЕ. SUBWF TEKL,0 ;НА ПРЕВЫШЕНИЕ ПО МИНИМУМУ. BTFSS STATUS,0 ;ЕСЛИ МЕНЬШЕ МЕНЬШЕГО. GOTO ADPU2 ;ТО ВЫКЛЮЧИМ ВЫХОД MOVLW B'11111111' MOVWF RAB2 BCF PORTC,3 ;ВЫКЛ ALARM по T ************ GOTO ADP3 ADPU2 BSF PORTC,3 ;ВКЛ ALARM ПО T ***************. BCF PORTC,0 ;ВЫКЛЮЧИМ ВЫХОД общий ПО T BSF PORTC,1 ;ВКЛ ALARM ОБЩИЙ ***************. MOVLW B'00000000' MOVWF RAB2 GOTO ADP3 BCF STATUS,5 ADP3 MOVLW .220 ;МАКСИМУМ TREG . MOVWF YCTA ; MOVLW .170 ;МИНИМУМ TREG . MOVWF YCTI ; ;===================================================================== ; 3. АЦП - ПРЕОБРАЗОВАНИЕ (ИЗМЕРЕНИЕ ВХОДНЫХ ВЕЛИЧИН ). ;===================================================================== MOVLW B'10001001' ;СИНХРОНИЗАЦИЯ ОТ RC- ГЕНЕРАТОРА--------. MOVWF ADCON0 ;ВХОД 2, ВКЛЮЧЕНИЕ АЦП (YBX)=============. ;ПРАВОЕ ВЫРАВНИВАНИЕ. CALL ZAD ; ЗАДЕРЖКА 100МКСЕК. BSF ADCON1,1 ;ВКЛЮЧИМ ПРЕОБРАЗОВАНИЕ******. BTFSC ADCON1,1 ;ОЖИДАЕМ ЗАВЕРШЕНИЯ. GOTO $-1 ;ПРЕОБРАЗОВАНИЯ. MOVFW ADRESH ;ПЕРЕПИШЕМ РЕЗУЛЬТАТ ПРЕОБРАЗОВАНИЯ. MOVWF TEKH ;В СТАРШИЙ ТЕКУЩИЙ РЕГИСТР. BTFSc TEKH,1 ;ЕСЛИ 1 РАЗРЯД РАВЕН 1 ТО ПЕРЕПОЛНЕНИЕ. GOTO ADPU3 ;ВЫКЛЮЧИТЬ ВЫХОД . BSF STATUS,5 ;ПЕРЕХОДИМ В БАНК 1. MOVLW 21 ;ЗАПИСЬ В РЕГИСТР TEKL. MOVWF FSR ;ПО КОСВЕННОЙ АДРЕСАЦИИ. MOVFW ADRESL ;ЗАПИСЬ МЛ. РЕГИСТРА АЦП. MOVWF INDF ;В РЕГИСТР TEKL. BCF STATUS,5 ;ПЕРЕХОДИМ В БАНК 0. BCF STATUS,0 ;ОБНУЛЯЕМ БИТ ПЕРЕНОСА. RRF TEKH,1 ;СДВИГАЕМ ВПРАВО. RRF TEKL,1 ;ЧТОБЫ СРАВНИТЬ 8 РАЗРЯДОВ . MOVFW YCTA ;СРАВНИМ ТЕКУЩЕЕ ЗНАЧЕНИЕ . SUBWF TEKL,0 ;НА ПРЕВЫШЕНИЕ ПО МАКСИМУМУ. BTFSC STATUS,0 ;ЕСЛИ ЕСТЬ ПРЕВЫШЕНИЕ. GOTO ADPU3 ;ТО ВЫКЛЮЧИМ ВЫХОД MOVFW YCTI ;СРАВНИМ ТЕКУЩЕЕ ЗНАЧЕНИЕ. SUBWF TEKL,0 ;НА ПРЕВЫШЕНИЕ ПО МИНИМУМУ. BTFSS STATUS,0 ;ЕСЛИ МЕНЬШЕ МЕНЬШЕГО. GOTO ADPU3 ;ТО ВЫКЛЮЧИМ ВЫХОД MOVLW B'11111111' MOVWF RAB3 BCF PORTC,2 ;ВЫКЛ ВЫХ REG по T ************ GOTO PROV ADPU3 BSF PORTC,2 ;ВКЛ ВЫХ REG ПО T ***************. MOVLW B'00000000' MOVWF RAB3 GOTO PROV BCF STATUS,5 PROV BTFSS PORTA,5 ;ПРОВЕРКА СОСТОЯНИЯ ВХОДА ПОРТА А(5) GOTO INDIC ;(НАЖАТИЕ КНОПКИ A(5)=0) )ДЛЯ ПРОВЕРКИ СЧЁТЧИКА ;НАРАБОТКИ ;GOTO PROV1 ;ТЕХНОЛОГИЧЕСКАЯ КОМАНДА ;GOTO $ ;мигание светодиода portc2 с ;BSF PORTC,2 ;частотой 1герц CALL PAUSE ; CALL PAUSE ;мигание убирается после отладки ;BCF PORTC,2 ; программы CALL PAUSE ; CALL PAUSE ; CALL PAUSE ; DECF RAB6,1 ;ПОЛУЧЕНИЕ МИНУТЫ В КРУГОВОМ ЦИКЛЕ BTFSS STATUS,2 ; GOTO PROV1 INCF BUM0,1 ;ЗДЕСЬ НАЧИНАЕТСЯ ПОДСЧЁТ МИНУТ НАРАБОТКИ BTFSS STATUS,2 ;В ДВОИЧНОМ ВИДЕ GOTO WR3BYTE ; INCF BUM1,1 ; BTFSS STATUS,2 ; GOTO WR3BYTE ; INCF BUM2,1 ; BTFSS STATUS,2 ; GOTO WR3BYTE ; GOTO PROV1 ;НА ПРОВЕРКУ ЗАДАННОГО ВРЕМЕНИ НАРАБОТКИ WR3BYTE BSF STATUS,5 ; БАНК 1 MOVLW 00H ; ЗАДАТЬ АДРЕС EEPROM MOVWF EEADR ; ЧЕРЕЗ РЕГИСТР EEADR BCF STATUS,5 ; БАНК 0 MOVFW BUM0 ; ЗАДАТЬ ДАННЫЕ EEPROM BSF STATUS,5 ; БАНК 1 MOVWF EEDATA ; ЧЕРЕЗ РЕГИСТР EEDATA CALL EEWR ; ЗАПИСЬ ;GOTO PROV1 ;ТЕХНОЛОГИЧЕСКАЯ КОМАНДА BsF STATUS,5 ; БАНК 1 MOVLW 01H ; ЗАДАТЬ АДРЕС EEPROM MOVWF EEADR ; ЧЕРЕЗ РЕГИСТР EEADR BCF STATUS,5 ; БАНК 0 MOVFW BUM1 ; ЗАДАТЬ ДАННЫЕ EEPROM BsF STATUS,5 ; БАНК 1 MOVWF EEDATA ; ЧЕРЕЗ РЕГИСТР EEDATA CALL EEWR ; ЗАПИСЬ BsF STATUS,5 ; БАНК 1 MOVLW 02H ; ЗАДАТЬ АДРЕС EEPROM MOVWF EEADR ; ЧЕРЕЗ РЕГИСТР EEADR BCF STATUS,5 ; БАНК 0 MOVFW BUM2 ; ЗАДАТЬ ДАННЫЕ EEPROM BsF STATUS,5 ; БАНК 1 MOVWF EEDATA ; ЧЕРЕЗ РЕГИСТР EEDATA CALL EEWR ; ЗАПИСЬ MOVLW B'00111100' ;ВОССТАНОВИМ ЧИСЛО 60 В СЧЕТЧИКЕ RAB6 MOVWF RAB6 ; GOTO PROV1 ;НА ПРОВЕРКУ ЗАДАННОГО ВРЕМЕНИ НАРАБОТКИ EEWR BSF STATUS, |
www.test-plaza.ru
Измерительная техника
Главная Ремонт электроники Измерительная техника
Эта статья предназначена, в первую очередь, для специалистов и радиолюбителей, в арсенале которых имеется одна из версий весьма распространенного программатора PonyProg 2000. Автор дает описание простого дополнительного адаптера для этого программатора, позволяющего расширить его возможности при минимальных материальных затратах. Кроме того, в статье приведены методики установки и настройки бесплатного программного обеспечения (ПО) программаторов IC-Prog и WinPic800 для работы с программатором PonyProg.
Программатор PonyProg2000 разных модификаций — это один из самых распространенных программаторов, используемых радиолюбителями и профессионалами. Он является программатором устройств с последовательным доступом (Serial Device Programmer) типа JDM. Интересно, что аббревиатура JDM — это сокращение имени и фамилии изобретателя одного из первых удачных подобных программаторов, датчанина Jens Dyekjar Madsen (см. [1]).
Программатор PonyProg2000 ([2]) разработан итальянцем Клаудио Ланконелли (Claudio Lanconelli). Он состоит из аппаратной и программной частей. Описание PonyProg2000 было опубликовано в нашем журнале ранее (см. [3, 4]).
С помощью этого программатора можно считывать и программировать как различные микросхемы памяти, так и микроконтроллеры AVR и PIC, но, по мнению автора, PonyProg2000 «заточен» больше под микроконтроллеры AVR,чем под PIC. Некоторые производители разрабатывают и изготавливают варианты программатора PonyProg с более широкими возможностями, чем заложены в аппаратный контроллер от Claudio Lanconelli. Например, программатор PonyProg2000 от [5] имеет адаптеры с более разнообразными панельками (см. рис. 3 в [4]). Автор имеет именно такой PonyProg, но и этот программатор не работает с 14-выводными микроконтроллерами PIC. Таких микроконтроллеров несколько: PIC16F630, PIC16F676, PIC16F684 и PIC16F688.
Совсем недавно у автора возникла необходимость запрограммировать («прошить») PIC16F676. Приобретать дорогостоящий новый программатор для разовой работы не хотелось. Поэтому было решено расширить возможности имеющегося в наличии PonyProg, дополнив его адаптером с 14-выводной DIP-панелькой.
Из технического описания микроконтроллера PIC16F676 (см. [6]) следует, что при работе с программатором используются всего пять выводов этой микросхемы: 1 — напряжение питания 5 В; 14 — корпус; 12 — вход тактовых импульсов; 13 — вход/выход данных; 4 — вход напряжения программирования +13 В. Наиболее распространенный МК типа PIC16F84 в корпусе DIP-18 имеет аналогичные выводы: 14 — напряжение питания 5 В; 5 — корпус; 12 — вход тактовых импульсов; 13 — вход/выход данных; 4 — вход напряжения программирования + 13 В. Схема адаптера, позволяющего работать с PIC16F84, показана в [4] на рис. 16.
В принципе, для разового программирования микроконтроллера PIC16F676 можно было подпаять панельку DIP-14 проводами на этот «штатный» PIC-адаптер, соединив пять выводов этой панельки с соответствующими выводами 18-выводной панельки U9 адаптера. Автор решил сделать отдельный адаптер для программирования 14-выводных PIC-контроллеров, используя информацию, изложенную выше. Схема такого адаптера приведена на рис. 1.
Рис. 1. Принципиальная схема адаптера микроконтроллеров PIC16F630/676/684/688 для PonyProg 2000
Следует отметить, что разъемы подключения адаптеров к базовым платам для разных версий программаторов PonyProg имеют отличия. На схеме рис. 1 обозначены номера выводов как классического разъема PonyProg от Claudio Lanconelli, так и разъема программатора от [5], которым пользуется автор статьи. Адаптер микроконтроллеров PIC16F630/676/684/688 для такого программатора собран на односторонней печатной плате размером 43×38 мм. Внешний вид этого адаптера показан на рис. 2, а комплект, состоящий из базовой платы PonyProg от FLYCONT, ИБП и самодельного адаптера микроконтроллеров PIC16F630/676/684/688 — на рис. 3.
Рис. 2. Адаптер микроконтроллеров PIC16F630/676/684/688 для PonyProg от FLYCONT
Рис. 3. Базовая плата PonyProg от FLYCONT, ИБП и адаптер микроконтроллеров PIC16F630/676/684/688 для PonyProg 2000
Для читателей, желающих самостоятельно изготовить адаптер для PIC16F630/676/684/688, чертежи его печатных плат в формате программы-редактора Sprint Layout 5 можно скачать с [7].
Адаптер для микроконтроллеров PIC16F630/676/684/688 можно упростить, если напряжение, поступающее на вывод 7 (7, 17) адаптера от БП через базовую плату, превышает 13 В. В этом случае нет необходимости в подключении батарейки 9 В (типа «Крона»), а значит можно не ставить разъем J2 и разъем переключаемой перемычки JP1 и запаять проволочную перемычку вместо JP1 для подачи напряжения программирования VPP на эмиттер ключа Q1 (см. схему рис. 1).
Изготовление адаптера PIC16F630/676/684/688 — это только часть работы. Дело в том, что программное обеспечение PonyProg не позволяет работать ни с одним из 14-выводных МК. Зато бесплатное ПО IC-Prog 1.6B и некоторые более ранние версии этой программы прекрасно работают с различными программаторами JDM, включая аппаратный контроллер PonyProg, и могут читать и программировать микроконтроллеры PIC16F630 и PIC16F676. Существует еще одно бесплатное ПО — WinPic800, его последняя версия V3.64 позволяет читать и программировать память всех четырех микроконтроллеров PIC16F630/676/684/688.
Скачать программу IC-Prog 1.6B можно с сайта разработчика [8] по ссылке [9]. Там же можно найти несколько более ранних версий этой программы. Если на вашем ПК используется операционная система (ОС) Windows NT/2000/XP, то нужно скачать и специальный драйвер по ссылке [10]. Для ОС Windows 95/98/SE/ME необходимости в установке драйвера нет.
Желательно также скачать русскоязычный файл помощи по ссылке [11].
Установить программу IC-Prog 1.6B достаточно просто. Для этого в любом удобном месте на жестком диске ПК необходимо создать папку с любым названием, в которую нужно распаковать архив icprog106B.zip. В этом архиве всего один файл icprog.exe. В эту же папку надо поместить файл помощи icprog.chm из архива icprogh_rus.zip. Если ПК работает под управлением Windows NT/2000/XP, то в эту же папку устанавливают драйвер icprog.sys. Для удобства запуска программы IC-Prog можно создать ярлык для icprog.exe и поместить его на рабочем столе. Программа установлена, осталось только ее настроить. Рассмотрим порядок настройки IC-Prog для Windows XP:
1. Правой кнопкой мыши щелкают по значку файла icprog.exe. В открывшемся окне выбирают пункт «Свойства», а затем выбирают вкладку «Совместимость» и устанавливают галочку в начале строки «Запустить программу в режиме совместимости с:». В активировавшемся окне выбирают «Windows 2000».
2. Запускают файл icprog.exe и в открывшемся англоязычном окне программы выбирают меню «Settings», затем — строку «Options» и в открывшемся окне — вкладку «Language», где устанавливают язык («Russian») и щелкают кнопку «Ok». После чего программа выдаст запрос на перезагрузку («You need to restart IC-Prog now»), с которым необходимо согласиться, нажав «Ok». Программа пере-загрузится и вновь открывшееся окно будет уже русскоязычным.
3. Открывают меню «Настройки», в котором выбирают строку «Опции», а затем вкладку «Программирование» (см. рис. 4), устанавливают галочку в строке «Проверка при программировании» и нажимают «Ok».
Рис. 4. Вкладка «Программирование» программы IC-Prog
4. Открывают меню «Настройки», в котором выбирают строку «Программатор». Откроется окно «Настройки Программатора» (рис. 5), в котором выбирают «JDM Programmer», порт, к которому подключен программатор, «Прямой доступ к портам», а в поле «Параметры сигналов» ставят галочку в строке «Инверсия Данных Вывода». Остальные строки не должны быть активированы (см. рис. 5).
Рис. 5. Окно «Настройки Программатора» программы IC-Prog
5. Для активации драйвера необходимо в меню «Настройки» выбрать строку «Опции», а затем вкладку «Общие», установить «галочку» на пункте «Вкл. NT/2000/XP драйвер» и нажать «Ok». Если драйвер ранее не был активирован, то откроется окно «Confirm», в котором следует нажать «Ok». После этого программа перезапустится, и драйвер будет активирован.
При использовании более ранних версий операционной системы Windows пункт 1 из приведенного перечня выполнять нет необходимости, а при использовании Windows 95/98/SE/ME не нужно выполнять и пункт 5.
Программа IC-Prog установлена, настроена и готова к работе.
Последняя и несколько предыдущих версий ПО программатора WinPic800 представлены на сайте [12], но, к сожалению, скачать ПО с этого сайта не всегда удается. В этом случае программу WinPic800 v 3.64 можно разыскать через какую-либо поисковую машину (например, Google) или скачать с сайта нашего журнала (см. ниже).
Скачанный архив WinPic800.zip содержит дистрибутив WinPic800_v3_64.exe, который можно запустить прямо из архива.
Запускают дистрибутив, в открывшемся окне установщика появится окно инсталляции с одним пунктом «Выбор языка установки» («Choose a setup language»), в котором выбирают русский язык («Russian») и щелкают мышкой по кнопке «Далее» («Next»). Далее надо установить программу, следуя подсказкам установщика. По умолчанию программа устанавливается в папку C:Program FilesWinPic800. После установки следует запустить файл WinPic800.exe из этой папки. При этом, как правило, открывается русскоязычное окно программатора WinPic800 v3.64. Если же откроется англоязычное окно WinPic800 v3.64, то любой другой язык можно выбрать через меню «Language». При выборе русского языка может возникнуть проблема. Дело в том, что в большинстве случаев (но не всегда) ряд надписей кириллицей в этой программе будет отображаться нечитаемыми символами (см. рис. 6 и рис. 7).
Рис. 6. Нечитаемые символы в главном окне программы WinPic800
Рис. 7. Нечитаемые символы в окне «Чтение» программы WinPic800
Причиной этого является неудачный выбор кириллических шрифтов и кодовых страниц. Самый простой способ решения этой проблемы — использовать англоязычную версию программы. Автор русификации и украинизации этой программы Сергей Рюмик в статье [13] рекомендует бороться с этой проблемой изменением кодовых страниц. Выполняют это следующим образом:
1. Запускают редактор реестра: C:Windows egedit.exe.
2. Открывают в реестре папку HKEY_LOCAL_MACHINESYSTEM CurrentControlSetControlNls CodePage.
3. Перезаписывают значения трех кодовых страниц 1250, 1251, 1252 как «c_1251.nls» в соответствии с рис. 8.
4. Перезагружают компьютер, запускают WinPic800 и в меню «Language» выбирают русский язык («Russian»). Программа должна воспроизводить кириллицу без проблем.
Рис. 8. Окно редактора реестра regedit.exe с открытой папкой кодовых страниц (CodePage)
Этот метод универсальный и подходит для всех версий программы WinPic800. Правда, автор статьи [13] утверждает, что он срабатывает в полной мере не на всех ОС и компьютерах. Если проблемы с отображением кириллицы не устранились, или вы опасаетесь по какой-либо причине переписывать реестр, то нужно использовать программы-русификаторы (специальные патчи, заплаты). Такую заплату для WinPic800 версии 3.61 от Сергея Рюмика можно скачать по ссылке [14]. Этот русификатор нежелательно использовать для более поздних версий этой программы. По просьбе постоянных участников форума [15] Владимир Ачи-лов (aka shaman) в конце 2009 г создал программу-русификатор для WinPic800 v3.64. Архив русификатора содержит файл WinPic800.exe и папку Languages, в которой находится всего один файл Russian.ini. Этими файлами надо заменить соответствующие файлы ранее установленной программы WinPic800 версии 3.64. С разрешения В. Ачилова мы разместили архив с разработанной им версией русификатора на сайте нашего журнала [16]. В этот же архив, для удобства наших читателей, мы вложили дистрибутив WinPic800_v3_64.exe.
Теперь мы готовы на 100% «прошить» микроконтроллер PIC16F676. Для этого в панельку изготовленного нами адаптера надо вставить PIC16F676 и подключить адаптер к базовой плате, а базовую плату — к ПК. Затем следует подать на программатор напряжение питания и запустить одну из рассмотренных выше программ. Для примера, запустим IC-Prog 1.6B. При этом откроется главное окно программы (рис. 9).
Рис. 9. Главное окно программы IC-Prog 1.6B
В окошке справа вверху этого окна следует выбрать тип программируемого контроллера (PIC16F676), а затем через меню «Файл» открыть HEX-файл программы, которую надо «записать» в контроллер. И наконец, в меню «Комманды» (именно так, с двумя «м», названо это меню) выбрать строку «Программировать Все» или нажать кнопку F5 клавиатуры. Программатор запросит согласие на запись, которое следует подтвердить. Далее программатор проверяет память МК, считывает биты калибровки и выводит окно «OSCAL». В этом окне сообщается значение битов калибровки генератора (в моем случае OSCAL = 3428h). В этом же окне программатор запрашивает: «Вы настаиваете на использовании Установок из файла (3FFFh)?». Если в устройстве будет использоваться внутренний генератор микроконтроллера, необходимо обязательно ответить «Нет», иначе биты калибровки вместе с командой их установки будут затерты, и записанная программа не будет запускаться. После программирования микроконтроллера произойдет верификация(сверка памяти МК с буфером программатора) и выйдет информационное окно с сообщением: «Успешно проверено!».
Подобным образом работает и программа WinPic800, в чем читатель может убедиться самостоятельно.
В заключение необходимо отметить, что программы IC-Prog 1.6B и WinPic800 v3.64 поддерживают не только МК PIC16F630/676/684/688, но и множество других микроконтроллеров, что значительно расширяет возможности аппаратного контроллера программатора PonyProg2000.
Литература и интернет-источники
1. http://www.jdm.homepage.dk/ — сайт разработчика программатора JDM (Jens Dyekjar Madsen).
2. http://www.lancos.com/ — сайт разработчика программатора PonyProg2000 Клаудио Ланконелли (Claudio Lanconelli).
3. Безверхний И. Программатор устройств с последовательным доступом PonyProg2000: описание программного обеспечения. «Ремонт & Сервис». 2005, № 9, с. 5458.
4. Безверхний И. Программатор устройств с последовательным доступом PonyProg2000. Аппаратный контроллер SI-Prog. «Ремонт & Сервис». 2005, № 10, с. 48-56.
5. http://www.flycont.com/ — html/pp2k.html.
6. Microchip. PIC16F630/676. Data Sheet. 14-Pin FLASH-Based 8-Bit CMOS Microcontrollers.
7. http://www.remserv.ru/cgi/down-load/Pony_16F676.rar
8. http://www.ic-prog.com/ — сайт программатора IC-Prog.
9. http://www.ic-prog.com/icprog106B.zip — адрес для скачивания ПО IC-Prog 1.6B.
10. http://www.ic-prog.com/icprog_driver.zip — адрес для скачивания драйвера IC-Prog для WINDOWS NT/2000/XP.
11. http://www.ic-prog.com/icprogh_rus.zip — адрес для скачивания русскоязычного файла помощи IC-Prog.
12. http://www.winpic800.com/ — сайт программатора WinPic800.
13. Рюмик С.М. С Интернета по нитке. Радиомир. 2007, № 7, с. 39.
14. http://www.ra-publish.com.ua/programs/Ra-04-2007-usb3.zip — адрес для скачивания русификатора WinPic800 v3.61.
15. http://www.pic.borda.ru/ — форум по микроконтроллерам PIC.
16. htto://www.remserv.ru/cgi/down-load/WinPic800_V3_64.rar.
Автор: Игорь Безверхний (Украина, г. Киев)
Источник: Ремонт и сервис
Дата публикации: 06.05.2015
Нет комментариев. Ваш комментарий будет первый.
Вы можете оставить свой комментарий, мнение или вопрос по приведенному вышематериалу:
www.radioradar.net
Каталог товаров Каталог
komplekt-a.ru