Форум » Программирование микроконтроллеров. » Аналог Pic16F84 » Ответить

Аналог Pic16F84

Kimm: Добрый день! Подскажите пожалуйста, что выбрать! Захотел я в промэлектронике заказать Pic16F84, но к сожалению их нет в наличии. Так вот просьба : напишите пожалуйста, какой аналог есть для Pic16F84!!!!! То есть программа написанная для F84 при программировании ничем не должна отличаться от предложенного вами аналога. Заранее благодарен!

Ответов - 78, стр: 1 2 All

MAZ: Kimm пишет: можно ли поставить КС147А, с напряжением стабилизации 4,7 В? Конечно можно. Насчет купороса, добавлю. Грею чайник до кипения. 2/4 перемешиваю в металлической эмалированной миски. Заливаю водой, чтобы плата была накрыта водой, перемешиваю. Цвет раствора, темно зеленный. Потом кладу плату в миску. Подождал пять минут, вытащил плату, промыл, миску на слабый огонь, плату в раствор. Покачивая плату травим, пошел пар на раствором, выключаем. Через 10 минут с покачиванием плата готова. Если очень тонкие дорожки, по меньше качания и температуры. Вот результат по этой "технологии" Вот уже собранно. На мой взгляд, нормально.

Kimm: MAZ пишет: Вот уже собранно. На мой взгляд, нормально. Да уж! Неплохо! ( я бы так не смог сделать). MAZ! Напишите пожалуйста! Конденсаторы на схеме С1 и С2 - одинаковой ёмкости 100 нанофарад, или нет?

igor: MAZ пишет: На мой взгляд, нормально. Настоятельно рекомендую исключить из процесса производства зачистку платы наждачкой. Для обезжиривания, я применяю нашатырный спирт. После него, тонер прилипает намертво. После травления тонер снимаю ацетоном. Если нужно зачистить дорожки, то - стирательная резинка(ластик).


MAZ: Нет, верхний 0,1 -0,01. Нижний в районе 100мкф. Разброс большой. Что под рукой. Я уже давно не зачищаю платы. Нашел универсальное средство. Ура современной химии. Доместос. Капнул, протел им плату. Потом смыл водой, руками не трогать. Легкое травление и обезжиривание, все в одном флаконе. Если вдруг тонер, где то не прилип, маленький брачок. Очень удобно подкрасить фломастером для маркировки СD дисков. Очень тоненькое перо. Температуру держит. Смывается легко растворителем. Kimm пишет: я бы так не смог сделать Это Вы зря. Тут главное практика и опыт, немного аккуратности и терпения. Кстати эти платы делались для тестирования, сильно не старался.

Kimm: igor пишет: Для обезжиривания, я применяю нашатырный спирт. После него, тонер прилипает намертво. igor! Спасибо большое! Это такая же ценная информация (а то я намучался по 10 раз прижигать утюгом тонер к плате), как и эта: после травления и зачистки дорожек, плату надо обработать глицерином (из аптеки). Тогда припой с легкостью прилипает к дорожкам.

Rimsky: Kimm пишет: после травления и зачистки дорожек, плату надо обработать глицерином (из аптеки после травления и зачистки дорожек, плату надо обработать спиртово-канифольным флюсом из магазина "радиотовары" или собственного производства (в место спирта можно использовать ацетон) Тогда припой с легкостью прилипает к дорожкам.

MAZ: Rimsky пишет: в место спирта можно использовать ацетон Правильно, спирт для других целей, лечебных.

Rimsky: MAZ пишет: Правильно, спирт для других целей, лечебных. Если после глицерина и флюса не прилипает.....

Kimm: Ура! Заработало! Спасибо MAZ ! Схема твоего программатора заработала! Сначала пытался записать через ICprog! Не получилось! Выдавалась ошибка по адресу 0000h! Потом попробовал через Понипрог! И всё записалось ! Так же хочу поблагодарить всех кто помогал мне в этой теме! Без вас я бы копил деньги на Пикит 2!

Kimm: Rimsky пишет: плату надо обработать спиртово-канифольным флюсом из магазина "радиотовары" Наверняка глицерин дешевле! В районе 10-15 рублей!

MAZ: Kimm пишет: Выдавалась ошибка по адресу 0000h! Задержку можно увеличить, если все правильно настроенно. Мое субъективное мнение, ICprog, намного удобней. Даже декомпиляция есть для среднего семейства. А деньги все равно копи на пиккит. С ним еще проще и быстрее + отладчик.

Kimm: Будьте добры! Проверьте эту программу! Зашил в пик! Подключил питание к Пику с кварцем и конденсаторами! Подсоединил вольтметр к минусу и RB4 (ножка 10)! Напряжение 1.7! А по идее должно быть близко к нулю, а при включении светодиода пррыгнуть до 5 вольт! ; Y.asm ; Бегунок с регулятором времени свечения светодиодов. ; PIC16F84A Кварц 4 МГц. ;================================================================================================= LIST p=16F84A ; Установка типа микроконтроллера. __CONFIG 03FF1H ; Бит защиты выключен, WDT выключен, стандартный XT-генератор. ;================================================================================================= ; Определение положения регистров специального назначения. ;================================================================================================= status equ 03h ; Регистр выбора банка. trisB equ 06h ; Регистр выбора направления работы выводов порта B. portB equ 06h ; Pегистр управления защёлками порта B. intcon equ 0bh ; Регистр прерываний. optionR equ 81h ; Регистр подтягивающих резисторов. trisA equ 85h ; Регистр выбора направления работы выводов порта А. portA equ 05h ; Регистр управления защёлками порта А. ;================================================================================================= ; Определение названия и положения регистров общего назначения. ;================================================================================================= Y equ 10h A1 equ 11h A2 equ 12h A3 equ 13h A4 equ 14h B1 equ 21h B2 equ 22h B3 equ 23h B4 equ 24h ; Определения места размещения результатов операций. F equ 1 ; Результат направить в регистр ;================================================================================================= org 0 ; Начать выполнение программы с адреса 0 PC. goto Start ; Переход в подпрограмму Start. ; Текст рабочей части программы ;Установка направления работы RB0 - на выход Start bcf intcon,7 ; Запретить все прерывания. bsf status,5 ; Перейти в 1-й банк (установить в 1 5-й бит регистр Status). movlw .0 ; Записать в аккумулятор W константу 0. movwf trisA ; Записать константу "0" в регистра trisA ( все выводы регистра trisA работают на выход). bcf optionR,7 ; Включить подтягивающие резисторы порта Б. movlw .3 ; Записать в аккумулятор константу - 3. movwf trisB ; Скопировать константу 3 из аккумулятора в регистр TrisB. bcf status,5 ; Перейти в 0-й банк (установить в 0 5-й бит регистра status. ;------------------------------------------------------------------------------------------------- ; Записи констант в регистры общего назначения. movlw .25 ; Записать константу .2 в аккумулятор W movwf A4 ; Скопировать из W в регистр А1 константу .2 movlw .25 ; Записать константу .2 в аккумулятор W movwf A3 ; Скопировать из W в регистр А2 константу .2 movlw .25 ; Записать константу .2 в аккумулятор W movwf A2 ; Скопировать из W в регистр А3 константу .2 movlw .25 ; Записать константу .2 в аккумулятор W movwf A1 ; Скопировать из W в регистр А4 константу .2 ; Проверка флага нулевого результата. ; bcf status,2 ; Установить второй бит регистра Status в "0". (Сбросить флаг нулевого результата). ; sublw .2 ; Вычесть из аккумулятора W константу .2 ; Включение и выключение светодиодов. V bsf portB,2 ; установить 1 во второй бит регистра порта Б (зажечь первый светодиод на выводе RB2). call X1 ; условный переход в подпрограмму Х. bcf portB,2 ; установить 0 во второй бит регистра порта Б (потушить первый светодиод (RB2)). bsf portB,3 ; установить 1 в третий бит регистра порта Б (зажечь второй светодиод(RB3)). call X1 ; Условный переход в подпрограмму X bcf portB,3 ; Установить 0 в третий бит регистра Порт Б (потущить второй светодиод(RB3)). bsf portB,4 ; уст-ть 1 на RB4 (зажечь третий светодиод(RB4)). call X1 ; условный переход в подпрограмму Х1 с записью адреса возврата в стек. bcf portB,4 ; потушить третий светодиод. bsf portB,5 ; установить 1 на 5-ом выводе(RB5)- Зажечь 4-ый светодиод. call X1 ; условный переход в подпрограмму Х1 bcf portB,5 ; тушим 4-ый светодиод bsf portB,6 ; установить 1 на выводе RB6 (зажечь пятый светодиод) call X1 ; условный переход в подпрограмму Х1 bcf portB,6 ; потушить пятый светодиод. bsf portB,7 ; установить 1 на выводе RB7 (зажечь шестой светодиод) call X1 ; условный переход в подпрограмму Х1 bcf portB,7 ; потушить шестой светодиод. bsf portA,0 ; Зажечь седьмой светодиод. ( подать напряжение на вывод RA0) - установить нулевой бит регистра портаА в "1". call X1 ; условный переход в подпрограмму Х1. bcf portA,0 ; установить в "0" RA0. Потушить седьмой светодиод. Установить в "0" RA0. bsf portA,1 ; Зажечь восьмой светодиод. ( подать напряжение на вывод RA1) - установить первый бит регистра портаА в "1". call X1 ; условный переход в подпрограмму Х1. bcf portA,1 ; установить в "0" RA1. Потушить восьмой светодиод. Установить в "0" RA1. bsf portA,2 ; Зажечь девятый светодиод. ( подать напряжение на вывод RA2) - установить второй бит регистра портаА в "1". call X1 ; условный переход в подпрограмму Х1. bcf portA,2 ; установить в "0" RA2. Потушить девятый светодиод. Установить в "0" RA2. bsf portA,3 ; Зажечь десятый светодиод. ( подать напряжение на вывод RA3) - установить третий бит регистра портаА в "1". call X1 ; условный переход в подпрограмму Х1. bcf portA,3 ; установить в "0" RA3. Потушить девятый светодиод. Установить в "0" RA3. bsf portA,4 ; Зажечь одиннадцатый светодиод. ( подать напряжение на вывод RA4) - установить четвёртый бит регистра портаА в "1". call X1 ; условный переход в подпрограмму Х1. bcf portA,4 ; установить в "0" RA4. Потушить одиннадцатый светодиод. Установить в "0" RA4. goto V ; Безусловный переход в подпрограмму V. goto Start ; Безусловный переход в подпрограмму Start. X1 movwf A4 ; Скопировать из W в регистр А1 константу .2 K4 movwf A3 ; Скопировать из W в регистр А2 константу .2 K3 movwf A2 ; Скопировать из W в регистр А3 константу .2 K2 movwf A1 ; Скопировать из W в регистр А4 константу .2 nop ; Пустой машинный цикл. ; Декрементовый 4-х разрядный счётчик. K1 decfsz A1,F ; (Команда ветвления). Декремент (-1) содержимого регистра А1, с сохранением результата в этом же регистре. goto K1 ; Переход в подпрограмму К1. btfss portB,0 ; (команда ветвления). Если нулевой бит регистра ПортБ равен "0" , то выполняется следующая команда, а если равен "1" , то следующая комнада не выполняется,(вместо неё nop), и выполняется последующая команда. goto E ; Безусловный переход в подпрограмму Е. call W ; Условный переход в подпрограмму W. btfsc portB,1 ; Если первый бит регистра Порта Б равен "1", то выполняется следующая команда, а если равен "0" , то следующая команда не выполняется, а выполняется последующая команда. call W1 ; Условный переход в подпрограмму W1. (с записью адреса в стек) E decfsz A2,F ; (Команда ветвления). Декремент (-1) содержимого регистра А2, с сохранением результата в этом же регистре. goto K2 ; Переход в подпрограмму К2. decfsz A3,F ; (Команда ветвления). Декремент (-1) содержимого регистра А3, с сохранением результата в этом же регистре. goto K3 ; Переход в подпрограмму К3. decfsz A4,F ; (Команда ветвления). Декремент (-1) содержимого регистра А4, с сохранением резульатата в этом же регистре. goto K4 ; Переход в подпрограмму К4. Return ; Команда возвращения (адрес берётся из стека). W addlw .1 ; Сложить содержимое аккумулятора W и константы .10 Return ; Команда возвращения (адрес берётся из стека). W1 sublw .1 ; Вычесть из аккумулятора W константу .1 Return ; Команда возвращения (адрес берётся из стека) end ; Директива конца программы. (Всегда последняя снизу).

Kimm: ХМ! Почему-то в скрытом тексте не соблюдаются пробелы!

MAZ: PORTB у Вас работает на вход. Вы его не настроили на выход.

Rimsky: Kimm пишет: Наверняка глицерин дешевле! В районе 10-15 рублей!

Kimm: MAZ пишет: PORTB у Вас работает на вход. Вы его не настроили на выход. Вроде же настроил: movlw .3 ; Записать в аккумулятор константу - 3. movwf trisB ; Скопировать константу 3 из аккумулятора в регистр TrisB. То есть в trisB записалось число 0000 0011, что определило Rb0 и Rb1 работать на вход (там стоят 1), а Rb2 по Rb7 (там стоят 0) должны работать на выход! По самоучителю так!!! (если нетрудно растолкуйте как правильно надо)!

MAZ: Да, извиняюсь, проглядел. Все очень непривычно. Особенно " Декрементовый 4-х разрядный счётчик." Не догнал. Еще есть такая неточность, Вы назвали метку W. А еще впрограмме есть W - аккумулятор. Будет некорректность, хотя ошибки как таковой нет. Компилятор знает W. Покопаюсь вечерком. А что хотели получить от этой программы?

MAZ: Нет сил. Я понимаю, что Вы учитесь, поэтому и тяжело мне. Понять не могу, что хотите. И методы очень неоптимальные, если не сказать странные. Подправил немного в привычный вид. Подключил файл стандартный для 84. Мне надо понять что Вы хотите получить. Думаю что все можно сделать намного проще. ; Y.asm ; Бегунок с регулятором времени свечения светодиодов. ; PIC16F84A Кварц 4 МГц. ;================================================================================================= LIST p=16F84A ; Установка типа микроконтроллера. include "P16F84a.inc" __CONFIG 03FF1H ; Бит защиты выключен, WDT выключен, стандартный XT-генератор. ;================================================================================================= ; Определение названия и положения регистров общего назначения. ;================================================================================================= Y equ 10h A1 equ 11h A2 equ 12h A3 equ 13h A4 equ 14h B1 equ 21h B2 equ 22h B3 equ 23h B4 equ 24h ;================================================================================================= org 0 ; Начать выполнение программы с адреса 0 PC. goto Start ; Переход в подпрограмму Start. ; Текст рабочей части программы ;Установка направления работы RB0 - на выход Start clrf PORTB clrf PORTA bsf STATUS,RP0 ; Перейти в 1-й банк (установить в 1 5-й бит регистр Status). clrf TRISA ; Записать константу "0" в регистра trisA ( все выводы регистра trisA работают на выход). clrf OPTION_REG ; Включить подтягивающие резисторы порта Б. movlw b'00000011' ; Записать в аккумулятор константу - 3. movwf TRISB ; Скопировать константу 3 из аккумулятора в регистр TrisB. bcf STATUS,RP0 ; Перейти в 0-й банк (установить в 0 5-й бит регистра status. ;------------------------------------------------------------------------------------------------- ; Записи констант в регистры общего назначения. movlw .25 ; Записать константу .2 в аккумулятор W movwf A4 ; Скопировать из W в регистр А1 константу .2 movwf A3 ; Скопировать из W в регистр А2 константу .2 movwf A2 ; Скопировать из W в регистр А3 константу .2 movwf A1 ; Скопировать из W в регистр А4 константу .2 ; Проверка флага нулевого результата. ; bcf status,2 ; Установить второй бит регистра Status в "0". (Сбросить флаг нулевого результата). ; sublw .2 ; Вычесть из аккумулятора W константу .2 ; Включение и выключение светодиодов. V bsf PORTB,2 ; установить 1 во второй бит регистра порта Б (зажечь первый светодиод на выводе RB2). call X1 ; условный переход в подпрограмму Х. bcf PORTB,2 ; установить 0 во второй бит регистра порта Б (потушить первый светодиод (RB2)). bsf PORTB,3 ; установить 1 в третий бит регистра порта Б (зажечь второй светодиод(RB3)). call X1 ; Условный переход в подпрограмму X bcf PORTB,3 ; Установить 0 в третий бит регистра Порт Б (потущить второй светодиод(RB3)). bsf PORTB,4 ; уст-ть 1 на RB4 (зажечь третий светодиод(RB4)). call X1 ; условный переход в подпрограмму Х1 с записью адреса возврата в стек. bcf PORTB,4 ; потушить третий светодиод. bsf PORTB,5 ; установить 1 на 5-ом выводе(RB5)- Зажечь 4-ый светодиод. call X1 ; условный переход в подпрограмму Х1 bcf PORTB,5 ; тушим 4-ый светодиод bsf PORTB,6 ; установить 1 на выводе RB6 (зажечь пятый светодиод) call X1 ; условный переход в подпрограмму Х1 bcf PORTB,6 ; потушить пятый светодиод. bsf PORTB,7 ; установить 1 на выводе RB7 (зажечь шестой светодиод) call X1 ; условный переход в подпрограмму Х1 bcf PORTB,7 ; потушить шестой светодиод. bsf PORTA,0 ; Зажечь седьмой светодиод. ( подать напряжение на вывод RA0) - установить нулевой бит регистра портаА в "1". call X1 ; условный переход в подпрограмму Х1. bcf PORTA,0 ; установить в "0" RA0. Потушить седьмой светодиод. Установить в "0" RA0. bsf PORTA,1 ; Зажечь восьмой светодиод. ( подать напряжение на вывод RA1) - установить первый бит регистра портаА в "1". call X1 ; условный переход в подпрограмму Х1. bcf PORTA,1 ; установить в "0" RA1. Потушить восьмой светодиод. Установить в "0" RA1. bsf PORTA,2 ; Зажечь девятый светодиод. ( подать напряжение на вывод RA2) - установить второй бит регистра портаА в "1". call X1 ; условный переход в подпрограмму Х1. bcf PORTA,2 ; установить в "0" RA2. Потушить девятый светодиод. Установить в "0" RA2. bsf PORTA,3 ; Зажечь десятый светодиод. ( подать напряжение на вывод RA3) - установить третий бит регистра портаА в "1". call X1 ; условный переход в подпрограмму Х1. bcf PORTA,3 ; установить в "0" RA3. Потушить девятый светодиод. Установить в "0" RA3. bsf PORTA,4 ; Зажечь одиннадцатый светодиод. ( подать напряжение на вывод RA4) - установить четвёртый бит регистра портаА в "1". call X1 ; условный переход в подпрограмму Х1. bcf PORTA,4 ; установить в "0" RA4. Потушить одиннадцатый светодиод. Установить в "0" RA4. goto V ; Безусловный переход в подпрограмму V. goto Start ; Безусловный переход в подпрограмму Start. X1 movwf A4 ; Скопировать из W в регистр А1 константу .2 K4 movwf A3 ; Скопировать из W в регистр А2 константу .2 K3 movwf A2 ; Скопировать из W в регистр А3 константу .2 K2 movwf A1 ; Скопировать из W в регистр А4 константу .2 nop ; Пустой машинный цикл. ; Декрементовый 4-х разрядный счётчик. K1 decfsz A1 ; (Команда ветвления). Декремент (-1) содержимого регистра А1, с сохранением результата в этом же регистре. goto K1 ; Переход в подпрограмму К1. btfss PORTB,0 ; (команда ветвления). Если нулевой бит регистра ПортБ равен "0" , то выполняется следующая команда, а если равен "1" , то следующая комнада не выполняется,(вместо неё nop), и выполняется последующая команда. goto E ; Безусловный переход в подпрограмму Е. call JJ ; Условный переход в подпрограмму W. btfsc PORTB,1 ; Если первый бит регистра Порта Б равен "1", то выполняется следующая команда, а если равен "0" , то следующая команда не выполняется, а выполняется последующая команда. call W1 ; Условный переход в подпрограмму W1. (с записью адреса в стек) E decfsz A2 ; (Команда ветвления). Декремент (-1) содержимого регистра А2, с сохранением результата в этом же регистре. goto K2 ; Переход в подпрограмму К2. decfsz A3 ; (Команда ветвления). Декремент (-1) содержимого регистра А3, с сохранением результата в этом же регистре. goto K3 ; Переход в подпрограмму К3. decfsz A4 ; (Команда ветвления). Декремент (-1) содержимого регистра А4, с сохранением резульатата в этом же регистре. goto K4 ; Переход в подпрограмму К4. Return ; Команда возвращения (адрес берётся из стека). JJ addlw .1 ; Сложить содержимое аккумулятора W и константы .10 Return ; Команда возвращения (адрес берётся из стека). W1 sublw .1 ; Вычесть из аккумулятора W константу .1 Return ; Команда возвращения (адрес берётся из стека) end ; Директива конца программы. (Всегда последняя снизу).

Kimm: MAZ пишет: Нет сил. Я понимаю, что Вы учитесь, поэтому и тяжело мне. Понять не могу, что хотите. Я хотел сделать бегущие огни с возможностью регулировки скорости вкл/выкл светодиодов. MAZ ответьте пожалуйста на пару вопросов: 1) Посмотрел программу multi из самоучителя. В тексте программы нет команды "clr". Работу порта Б сделана через запись в W числа, а из W в регистр trisB. (я тоже так сделал)! Почему же не работает? Ведь по теории (т.е. по самоучителю) всё верно! 2) Обязательна ли команда include ? (Ведь в той же программе multi её нет). 3) С схеме автоколебательного мультивибратора ( на стр. 44 самоучителя) с +5 вольт идёт резистор R1 на вывод 4 (MCLR)! Он обязателен? И для чего он нужен? Понимаю! Программа сложновата! Но, так как я её делал на основе программы multi, то думал проблем с ней не возникнет! Ан нет! Думаю надо попробовать написать программки ещё проще, типа светодиод засветился, через секунду потух....

DerSpiwak: Я не MAZ, но позволю себе высказаться Kimm пишет: Работу порта Б сделана через запись в W числа, а из W в регистр trisB. (я тоже так сделал)! Почему же не работает? Ведь по теории (т.е. по самоучителю) всё верно! А вы уверены, что проблема в этом? Kimm пишет: Обязательна ли команда include ? (Ведь в той же программе multi её нет). Нет не обязательна, просто с ней намного удобнее. Kimm пишет: с +5 вольт идёт резистор R1 на вывод 4 (MCLR)! Он обязателен? И для чего он нужен? MCLR это сброс микроконтроллера, если не подтянуть его к +5В. то программа МК не будет выполняться. Kimm пишет: Думаю надо попробовать написать программки ещё проще, типа светодиод засветился, через секунду потух.... Думаю, это хорошая мысль.

MAZ: Вы напишите, что хотите. Я просто не понимаю алгоритм. Если возможность регулировки, вижу через входы, но надо как-то и "дребезг" кнопки погасить хотя бы. Насчет MCLR, DerSpiwak правильно сказал, это главное, вы же схему не дали. Поморгайте пока просто светодиодами, а потом уже кнопку подключайте с не большой задержкой. include (подключить) подключать файл в котором прописаны производителем все регистры специального назначения и биты. Т.е. что Вы прописали в начале: STATUS: TRISB.... не надо делать, уже все сделано. Что удобно. КЕА писал для начинающих, поэтому все максимально упростил. Хотя наверно и наоборот получилось, если разобраться. Совет, делайте как можно проще и наглядней, пусть много повторений. -Включить 1 светодиод -подождать 0,5 сек -выключть 1 светодиод -включить 2 светодиод -подождать 0,5 сек -выключить 2 светодиод -включить 3 светодиод и т.д. Чем не бегущие огни? Проще вот так сначала расписать, потом уже программа. Как кнопка опрашивается: -проверить вход -есть "единица" не нажата , выполняем этот вариант -есть "ноль" (нажата) -подождать 20мс проверить вход -есть "ноль" (нажата) да кнопка нажата, выполняем задачу кнопки. -есть "единица" не нажата просто помеха.

Kimm: DerSpiwak пишет: MCLR это сброс микроконтроллера, если не подтянуть его к +5В. то программа МК не будет выполняться. Спасибо! Но почему (к сожалению) в самоучителе нет предупреждения об этом? Наверное этот вопрос Корабельникову Е.А. (вернее не вопрос , а просьба добавить эту ценную информацию в самоучитель!так сказать для будущих путешественников по самоучителю! )

Kimm: MAZ пишет: КЕА писал для начинающих, поэтому все максимально упростил. Хотя наверно и наоборот получилось, если разобраться. Согласен с вами :)!

MAZ: насчет MCLR, у КЕА есть. Наверно не внимательно читали.

DerSpiwak: Kimm пишет: Спасибо! Но почему (к сожалению) в самоучителе нет предупреждения об этом? Да есть где то, поищите. А вообще самоучитель самоучителем, но даташит все же надо пробовать читать, иначе как вы собираетесь изучать новый материал? Любая книга это мнение автора, чем автор опытнее, тем меньше в книге ошибок и заблуждений, но они все равно иногда встречаются, так что как говорится доверяй, но проверяй

Evgeny Korabelnikov: Понимаю! Программа сложновата! Но, так как я её делал на основе программы multi, то думал проблем с ней не возникнет! Ан нет! Ильдар, сравнение с multi не корректно. В ней все нормально и по делу. Ищите "бяку" в ПП Вашей фиксированной задержки, которая именно Ваша. Проверил ее работу в симуляторе. Ждал до 2-х секунд (MPLAB v5.70.40, использовал его очень тормозной секундомер. Точка остановки - команда return), а потом надоело (извините, но со временем напряжёнка). Короче, рабочая точка программы, попав в ПП X1, "зависает" в ней. Полагаю, что это связано с нарушением принципа фиксированной задержки: предустановка времязадающих констант должна производится не в ее внутреннем цикле, а непосредственно на "влёте" в него, (но можно и ранее), а иначе возможно "бесконечное" (условно) возобновление ("перезапуск") задержки. В результате нарушения этого принципа, вполне может "родиться" циклически возобновляемая (во внутреннем цикле. За счет "паразитной" предустановки времязадающих констант) задержка, которая никогда (условно) не закончится (глюк). Полагаю, что в данном случае происходит именно это. При этом, "железяка мертвеет" ("Гитлер капут") Дальше "не рыл" (это "на вскидку").

Kimm: Постараюсь найти эту инфу! Просто в самоучителе на стр. 16 дан рисунок как подключать ПИК и кварц с конденсаторами, а резистора почему-то нету.!!!

Kimm: Evgeny Korabelnikov пишет: Ищите "бяку" в ПП Вашей фиксированной задержки, которая именно Ваша. По-моему там всё нормально! Я тоже замерял время, но только не от начало до конца, а от зажигания первого светодиода: "V bsf portB,2" до его погашения: "bcf portB,2". Получилось при константе .23 - время задержки самое близкое к секунде!(где-то 0,98). В ручном режиме я проверял заменив константы .23 (или 25) на константу .2! В MPlab всё прекрасно работает! Почему такой странный счётчик.? Потому что декремент РОН , равных нулю является .255! Что не даёт точно (по-моему) выставлять время ! Пришлось додуматься до такого варианта, при котором любой регистр общего назначения(учавствующий в счётчике) , обнулившись, декрементирует вышестоящий РОН, и при этом становится равным общей константе, заложенной в счётчик. Evgeny Korabelnikov пишет: Полагаю, что это связано с нарушением принципа фиксированной задержки: предустановка времязадающих констант должна производится не в ее внутреннем цикле, а непосредственно на "влёте" в него, (но можно и ранее), а иначе возможно "бесконечное" (условно) возобновление ("перезапуск") задержки Возможно! Но я специально изменил программу убрав из неё команды опроса клавиатуры и настроив все выводы порта Б на выход! Результат такой же! Думаю всё же не хватает резистора!

Evgeny Korabelnikov: Что удобно. КЕА писал для начинающих, поэтому все максимально упростил. Хотя наверно и наоборот получилось, если разобраться. "Системные подходы к тому-сему" испокон века были (и будут) очень "скользкими". Прекрасно это понимаю. Если кто-то сделает лучше, то я буду этому только рад, но пока очереди не вижу. Я не утверждаю, что моё "творение" совершенно, но в отличие от даташитов (и т.п.), в нём есть душа и мозги русского мужика, а заодно и какая-никакая, а система. Взгляд, из высшей математики, в арифметику (условно), почти всегда вызывает снисходительную улыбку, но она должна быть доброй. Это мой принцип. Спасибо! Но почему (к сожалению) в самоучителе нет предупреждения об этом? Наверное этот вопрос Корабельникову Е.А. (вернее не вопрос , а просьба добавить эту ценную информацию в самоучитель!так сказать для будущих путешественников по самоучителю! ) Эта и многая другая информация есть (а если нет, то будет), просто Вы не в курсе. Добавить-то можно (если уж добавлять, так полномасштабно), но после этого я "ноги протяну". В смысле дензнаков (и того, что с ними связано). К сожалению, так устроен мир. Открытая часть "Самоучителя…" - введение в курс дела, и не более того. Что-то типа моей версии "МК-азбуки" (мама мыла раму и т.п.). Далее - широчайший простор для деятельности. Заниматься этим или нет - личное дело. Кстати, Ильдар, почему, в профиле участника, Вы не указали своей фамилии? Просто чисто по-человечески интересно.

Evgeny Korabelnikov: Ильдар, сейчас еще раз проверю. С пристрастием.

Evgeny Korabelnikov: Программными средствами (без использования стимулов. У нас, это называется "уловками"), в симуляторе, проверил работу задержки, в приложении ко всем возможным управляющим комбинациям (имеются ввиду две кнопки. Кн. нажата – 0, отжата – 1). Получилось это: 1. Обе кнопки отжаты. В этом случае, раб. точка зависает в ПП задержки. В принципе, это нормально ("режим ожидания"). 2. Кн1 (RB0) нажата. В этом случае, опрос кнопки Кн.2 обходится, и выход из задержки происходит через 1,28 сек. (а точнее, через 1283221 мкс., считая от начала программы. Кварц 4 Мгц.). Это тоже нормально, так как возврат из задержки происходит. 3. Кн.1 отжата, КН2 (RB1) нажата. В этом случае, рабочая точка зависает в ПП задержки по ранее упомянутой мной причине, что совсем не нормально (свыше 2,5 сек. не отслеживал. "Терпелки" не хватило). Короче, толка от Кн.2 маловато. 4. Если одновременно нажаты Кн.1 и Кн.2, то см. пункт 2 (ориентация на Кн.1). Кроме этого, дело усугубляет отсутствие противодребезговых задержек (как по факту нажатия, так и по факту отжатия кнопок). С учетом довольно-таки "резвого" (по отношению к продолжительности "пачек дребезга") времени отработки внутренних циклов задержки, в которые "врезаны" проверки состояний кнопок, в данном случае, это может привести к работе программы, если так можно выразиться, по случайному "дребезг-закону" ("через пень колоду"). Рабочее действие, осуществляемое по факту нажатия кнопки, лучше заменить на рабочее действие, осуществляемое по факту отжатия кнопки. Это предполагает "плавающее пережидание" нажатия кнопки (всего 2 команды), ограниченное, с обеих сторон, противодребезговыми задержками (миллисекунд эдак по 50…100). Это в общем виде. Без учёта конкретных деталей. "Кнопочные дела" это совсем не "хухры-мухры", а посерьёзнее. "Шапками не закидаешь". Тот, кто в них "въедет" ("гибрид" безошибочного ветвления, "на фоне мерзопакостного дребезга"), поймёт многое. На первых порах, можно использовать классические, аппаратные, противодребезговые кнопки, собранные на логике И-НЕ или ИЛИ-НЕ, ну а далее, необходимо программно подсуетиться. Ильдар, на мой взгляд, примененная Вами стратегия "врезки", во внутренний цикл ПП задержки, "кнопочных проверок", неэффективна (особенно с учетом закольцовки на предустановку времязадающих констант), хотя, чем чёрт не шутит? А вдруг получится ("крылья не обрезаю" Упаси Бог)? Я первый "сниму шляпу". На мой взгляд, подобного рода "врезки" эффективны только в случаях "принудительного" выхода из "кнопочных" проверок, если кнопки не нажимаются, а на длительное время "зависать в кнопочных проверках" нельзя. Если нажимаются, то выход происходит до конца отработки задержки. Если не нажимаются, то выход происходит по факту окончания отработки задержки ("принудиловка"). Лично я, применяю такой "прибамбас" достаточно часто. Советую прислушаться к мнению Александра (MAZ). "Котлеты нужно отделить от мух" (это проявление моего уважения к "батяне-комбату" Лукашенко). Постараюсь найти эту инфу! Просто в самоучителе на стр. 16 дан рисунок как подключать ПИК и кварц с конденсаторами, а резистора почему-то нету.!!! Так это же только подключение кварца. Смотрите не на стр.16, а на стр.44. Думаю всё же не хватает резистора! Полагаю, что речь идет о подтяжке кнопок. Так подтяжка же порта В включена. Зачем еще внешний резистор параллелить? И направления работы выводов портов в норме. Полагаю, что причина ненормальности в другом. PS: на моем сайте можно скачать программы рассчета классических задержек Николая Марова или Петра Высочанского (на выбор). Задаёте время, жмёте на кнопку и получаете готовую ПП задержки.

Kimm: Evgeny Korabelnikov пишет: Кстати, Ильдар, почему, в профиле участника, Вы не указали своей фамилии? Просто чисто по-человечески интересно. Наверное насмотрелся криминала по телеку. Особенно после того случая, как бандит нашёл в соцсетях человека похожего на себя человека, потом его убил, и стал себя выдавать за того человека. А всего этого не было бы если бы человек не разместил своей информации в соцсети. Ну и на всякий случай! Evgeny Korabelnikov пишет: Полагаю, что речь идет о подтяжке кнопок. Так подтяжка же порта В включена. Зачем еще внешний резистор параллелить? И направления работы выводов портов в норме. Полагаю, что причина ненормальности в другом. Не! Я имею ввиду резистор от +5 В. к MCLR. Но только опять возникает вопрос - каков его номинал? В одном случае он 1- 10 кОм. во втором его вообще нету (в случае частотомера)! Насчёт опроса кнопок - я изменил программу. Теперь дребезг контактов не должен влиять на работу м-ра!

DerSpiwak: Kimm пишет: Не! Я имею ввиду резистор от +5 В. к MCLR. Но только опять возникает вопрос - каков его номинал? В одном случае он 1- 10 кОм. во втором его вообще нету (в случае частотомера)! Входной ток у вывода MCLR порядка 10мкА, поэтому не рекомендуется увеличивать номинал больше 50КОм. А меньше пожалуйста.

Bigor: Kimm пишет: Наверное насмотрелся криминала по телеку. Особенно после того случая, как бандит нашёл в соцсетях человека похожего на себя человека, потом его убил, и стал себя выдавать за того человека. А всего этого не было бы если бы человек не разместил своей информации в соцсети. Ну и на всякий случай! Это "клинка". С этим надо бороться самому и в телеящик смотреть поменьше, а к просмотренному относиться критичнее и не забивать себе голову ерундой.

Kimm: Второй раз "ура" в этой теме! Поставил резистор! И все зароботало! (По крайней мере вольтметр показывает на секунду +5 В.) DerSpiwak пишет: Входной ток у вывода MCLR порядка 10мкА, поэтому не рекомендуется увеличивать номинал больше 50КОм. А меньше пожалуйста. Поставил 4к3! Подсчитал ток: 0,0011 А! Многовато! Надо другой резистор поставить бы! Если поставить 10 кОМ! То получится ток: 0,0005 А! То же много! Посмотрел другие схемы! Там в пределах 5-10 кОм споротивление резистора! Может можно оставить 4к3?

Kimm: Bigor пишет: Это "клинка". С этим надо бороться самому и в телеящик смотреть поменьше, а к просмотренному относиться критичнее и не забивать себе голову ерундой. Наверное так! Но я думаю, что в нашей жизни надо быть осторожным! Хотя с другой стороны думаю если мне (например) суждено погибнуть от электричества, то так оно и случится! Как говорится чему быть, того не миновать!

DerSpiwak: Kimm пишет: Поставил 4к3! Подсчитал ток: 0,0011 А! Многовато! Надо другой резистор поставить бы! Нормально, ставьте любой до 10Ком и не заморачивайтесь.

Kimm: DerSpiwak пишет: Нормально, ставьте любой до 10Ком и не заморачивайтесь. Ок! Ещё раз спасибо всем кто помог мне справиться с трудностями программирования и подключения микроконтроллеров!



полная версия страницы