Форум » Программирование микроконтроллеров. » Непонятки с 16F873 » Ответить

Непонятки с 16F873

Asmodey: Прошу помочь мне со следующей проблемкой. В русском даташите на PIC16F873 не смог разобраться с битами защиты конфигурационного слова. Биты CP0,CP1 это биты 4-5 и в то же время биты 12-13??? Так в какой же разряд слова прописывать их значения? В примечании к разделу «Биты конфигурации» написано – «что бы установить защиту памяти программ, все пары CP1:CP0 должны иметь одинаковое значение». Что это значит, просто тупо пишем в биты 12-13 тоже самое что и в биты 4-5? Пробовал на примитивной программке, так после прошивки PonyProg пытается проверить и сообщает об ошибке записи. Может просто я защиту выключить не смог. В проге просто записывал в биты CP0-CP1 единицы.

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

Алексей: А собственно какая проблема? Я так понимаю что защиту вы установили, все сделав точно по даташиту. Правильно он ругается, ведь защита включена. Я так понимаю во все четыре бита надо записать 1. Если не помогает можно попробовать в 12 и 13 записать 0.Asmodey пишет: Что это значит, просто тупо пишем в биты 12-13 тоже самое что и в биты 4-5? Я тоже так понимаю. Записывать надо одно и тоже, иначе защита не включится.

Dmitry Dubrovenko: А обязательно хотите задавать конфигурацию цифрами? Я, например, предпочитаю прописывать строки следующего вида (пример, для 16F628A): __CONFIG _CP_ON & _DATA_CP_ON & _LVP_OFF & _BOREN_OFF & _MCLRE_OFF & _WDT_ON & _PWRTE_ON & _HS_OSC _BOREN_ON EQU H'3FFF' ;Сброс по снижению питания (BOR) _BOREN_OFF EQU H'3FBF' ;Сброс по снижению питания (BOR) _CP_ON EQU H'1FFF' ;Бит защиты _CP_OFF EQU H'3FFF' ;Бит защиты _DATA_CP_ON EQU H'3EFF' ;Бит защиты EEPROM памяти данных _DATA_CP_OFF EQU H'3FFF' ;Бит защиты EEPROM памяти данных _PWRTE_OFF EQU H'3FFF' ;Таймер по включению питания (PWRT) _PWRTE_ON EQU H'3FF7' ;Таймер по включению питания (PWRT) _WDT_ON EQU H'3FFF' ;Сторожевой таймер _WDT_OFF EQU H'3FFB' ;Сторожевой таймер _LVP_ON EQU H'3FFF' ;Низковольтное программирование _LVP_OFF EQU H'3F7F' ;Низковольтное программирование _MCLRE_ON EQU H'3FFF' ;Выбор режима вывода RA5/-MCLR _MCLRE_OFF EQU H'3FDF' ;Выбор режима вывода RA5/-MCLR _RC_OSC_CLKOUT EQU H'3FFF' _RC_OSC_NOCLKOUT EQU H'3FFE' _INTOSC_OSC_CLKOUT EQU H'3FFD' ;Внутренний генератор _INTOSC_OSC_NOCLKOUT EQU H'3FFC' ;Внутренний генератор _EXTCLK_OSC EQU H'3FEF' _HS_OSC EQU H'3FEE' _XT_OSC EQU H'3FED' _LP_OSC EQU H'3FEC' Ассемблер сам всё сосчитает. Asmodey пишет:PonyProg пытается проверить и сообщает об ошибке записиЯ вообще-то пользуюсь ExtraPIC'ом (см. соответствующий раздел форума), но полагаю, что ПониПрог действует так же. Т.е., после записи он пытается считать данные из контроллера, на предмет их верификации. А считать он их сможет, только когда биты защиты не установлены. На то он и биты защиты. P.S.: ИМХО, надо было тему называть "Биты конфигурации 873", и помещать в соответствующий раздел. P.S.S.: Опять меня опередили.

Asmodey: Я только в четвертый и пятый бит писал единицы, пытаясь отключить защиту памяти программ. Теперь попробую в двенадцатый и тринадцатый. Похоже действительно защиту не удалось выключить, и потому контроллер после прошивки не читается вот понька и ругается. А тему можно перенести, или создать в другом разделе, здесь то все равно флейм.


Алексей: А я предпочитаю цифрами, зачем столько много лишнего писать, когда в том же мплабе можно настроить эти самые биты быстро и удобно, как и в IC-Prog.

Dmitry Dubrovenko: ПисАть можно только самую первую строку, если у тебя вспомогательный файл подключен. У меня, например, шаблон есть. Я только меняю необходимые параметры, и всё.

MISHA: Не могу считать pаводскую настройку на PIC16F873. Пользуюсь программатором PonyProg. Пишет ошибка n-1. В чём дело не пойму. Может кто подскажет в чём дело. Заранее благодарю

Алексей: В смысле? Вы что переходите с AVR на PIC? У AVR действительно имеются заводские настройки, у пиков же кажется нет, разве что для внутреннего тактового генератора необходимо считать калибровочную константу. Но в этой серии нет этого генератора. Здесь просто выставляете биты конфигурации и шьете. Если хотите считать уже зашитый контроллер, то вполне вероятно что у вас это не получится, могут стоять биты защиты. А вообще то уточните вопрос.

MISHA: Да как раз я не могу считань калибровочную константу. PIC новый. Смотрел в справочнике у PIC16F873 3 генератора, один из них внутренний. или там без константы можно обойтись?

Алексей: НЕТ ТАМ ВНУТРЕННЕГО ГЕНЕРАТОРА. Их не три, а четыре, LP, XT, HS и внешний RC. Там даже нет регистра OSCCAL, куда по обыкновению она загружается. Либо я чего то не допонимаю, либо вы читаете не те книжки.

MISHA: Разобрался и правда книжки не те читаю.

Пётр: MISHA пишет: генератора, один из них внутренний. или там без константы можно обойтись Не у всех ПИКов с внутренним генератором есть регистр OSCCAL куда можно записать калибровочную константу, а раз регистра нет, значит константа тоже отсутствует. Возьмём, к примеру PIC16F628.

MISHA: Извёл меня 873. чё надо ему??? Проверяю после прошивки выдаёт ошибку . Шью всё тем же PonyProg. Пару раз повторил процесс записи-стирания в надежде устранения ошибки. После этого вапще шиться перестал. Выдаёт ошибку (-44), а после чтения в ячейках одни нули. IC-Prog тоже результата не даёт. Я случаем запороть никак не мог PIC?

Пётр: MISHA пишет: Пару раз повторил процесс записи-стирания в надежде устранения ошибки Попробуйте использовать другой программатор. А другие контроллеры шьёт нормально? Если да, возможно ПИК какой-то не такой. А если серьёзно, на сколько я понял Вы пользуйтесь COM программатором, возможно, мешает нормальной прошивке, буфер FIFO компьютера.

Алексей: При чтении выдает одни нули? Дык похоже включена защита памяти программ, в этом случае и будет читать нули, но вот прошивать он должен полностью. Само собой ручная проверка дает ошибку. Надо разбираться с битами конфигурации. MISHA пишет: Я случаем запороть никак не мог PIC? Надо попробовать WinPic800, она умеет определять тип пика, если определит после нажатия нужной кнопки, то с большой долей вероятности сам пик исправен.

MISHA: Да я тоже грешу на защиту памяти программ. Помнится мне что я галочку случайно поставил напротив защиты пограмм. С этого всё и началось. А что после стирания памяти защита не сбрасывается? Если нет то как это можно сделать? Другие контроллеры им не шил. Посмотрим как себя будет вести F84А.

Пётр: MISHA пишет: А что после стирания памяти защита не сбрасывается? А Вы как стирали? В IC-Prog'e нужно в меню "команды" выбрать "стереть микросхему", в этом случае будет произведено полное стирание информации в контроллере.

MISHA: Стирал я IC-Progом и PonyProg. Нифига результат один и тот же. После стирания в ячейках FFFF. После записи, считываю, а там каждый раз одни нули. Защита не стоит. Пробовал писать WinPic800. Так там даже не пишется ничего. Выдаёт ошибку. Пробовал определить тир PICа, так не определяет. Походу брак мне подали. У кого-нибудь есть какие соображения?

Пётр: А другие ПИКи нормально шьются? Если да, возможно ПИК "кривой", а если нет, возможно, Вы неправильно в программе выбрали тип программатора или сам программатор неисправен. Например, мне не удавалось прошить 24СХХ из-за того, что был неправильно выбран в настройках, тип программатора.

Vladimir: MISHA пишет: Пару раз повторил процесс записи-стирания в надежде устранения ошибки. После этого вапще шиться перестал Была у меня подобная история с 628А пару раз прошил и все оказалос глюченые пики попались. Включи проверку при програмировании (в IC-Prog точно есть) и если ошибка будет на адресе 0000 то с вероятностью 99,9% что глючный ПИК но предварительно проверь на другом ПИКе желательно заведома рабочем. И какой программатор? я собирал по схеме в самоучителе програматор PonyProg программа IC-Prog (настройки как в Самоучителе) последняя версия 1.05D шет отлично. И еще заметил такой момент что если машина подгружена, а особенно если слабая, то нужно ставить програматору повыше приоритет в IC-Prog прямо в програме есть установка приоритета.

Пётр: Vladimir пишет: особенно если слабая, то нужно ставить программатору повыше приоритет Я шью контроллеры с помощью проги F_prog.exe и ни разу небыло сбоев. У меня комп Celeron 400 МГц, так что от программы тоже кое-что зависит.

MISHA: Да ошибку как раз на адресе 0000 выдаёт. И ещё при проверке после стирания сообщение выдается, что устройство не стёрто по адресу 0000. Хотя при чтении микросхемы вроде как всё нормально, всё стёрто. Схему программатора с журнала радио взял. Точно такие же схемы в Интернете часто встречаю.

Roslik: Если выдает ошибку по адресу 0000, то скорее всего программатор не может связаться с контроллером, а контроллер целый, у меня такое было. Ищите ошибки в монтаже, или в программе "выбор программатора", инверсия выходов. Попробуйте на ногах замерить сигналы и напряжения во время программирования. Бит защиты после стирания удаляется полностью.

MISHA: Тут вот чего ещё. Есть какие-токонтроллеры у которых бит защиты снимается при последовательном программировании т.е. задеиствован LPT порт. С паралельного COM порта снятие бита защиты не возможно. Случаем не относится ли F873 к этим контроллерам. Ведь всё пошло после случайной установки бита защиты. До того хоть чего то записывалось и читалось.

Пётр: MISHA пишет: последовательном программировании т.е. задеиствован LPT порт. С паралельного COM порта снятие бита защиты не возможно. Начнём с того что COM это последовательный порт, а LPT параллельный. Контроллер можно стереть любым программатором т. е. независимо к какому порту он подключён.

Vladimir: MISHA пишет: До того хоть чего то записывалось и читалось. Именно так было и у меня с той только разницей что у меня после стирания читалас ранее записанная программа. По поводу програматора сравни свою схему со схемой самоучителя она поидее должна быть такой самой функционально возможно только более наворочаной на ровном месте, а главное проверь все основные напряжения на ПИКе их два +5 и +12в.

MISHA: Напряжение проверял. Всё в пордке. Лучше его в работе посмотреть. Может запустится.

Alberto: MISHA пишет: Есть какие-токонтроллеры у которых бит защиты снимается при последовательном программировании т.е. задеиствован LPT порт. это для AVR микроконтроллеров. Попробуй WinPIC800 там есть тест контроллера.

MISHA: WinPIC800 тип контроллера не определяет. В настройках стиот JDM programmer.

Alberto: MISHA пишет: WinPIC800 тип контроллера не определяет. В настройках стиот JDM programmer. а можно схему программатора? Тогда и с советом определиться легче. Ведь при наличии желания и времени можно подавать сигналы на вход программатора вручную и отслеживать их прохождение. МК, конечно, не запрограммируешь , но найти неисправность (м/с, транзистор и т.д.) можно.

Asmodey: На реальном устройстве пробовали проверять? Хотя бы генератор секундных ипульсов, со светодиодом. Может все шьется нормально, только защиту не сняли, причем не в опциях программирования, а в слове конфигурации самой программы. У меня почти то же самое было, трудно понять, в чем проблема, в железе, или в самой прошивке, а когда контроллер замигал светодиодом, я ничуть не сомневаясь полез ковырять биты этого самого слова конфигурации. А для проверки программатора попробуйте воспользоватся утилитой tcom, она позволяет изменять логические уровни на выходе COM порта, и показывает уровни на его входах.

Alberto: Asmodey пишет: А для проверки программатора попробуйте воспользоватся утилитой tcom, она позволяет изменять логические уровни на выходе COM порта, и показывает уровни на его входах.В десятку , и с ручной подачей сигналов на вход программатора не надо связываться.

MISHA: Сегодня собрал мигалку на F873 нифига не идёт. В симуляторе MPLABa всё нормально. Прикол ещё прям чудеса какие-то. Кликаю в IC-Progе в произвольную ячеку задаю произвольное число жму на запись. После записи считываю, а там АБСОЛЮТНО ВО ВСЕХ ячеиках то число которое я забил только по одному адресу перед записью. И так каждый раз. Биты конфигурации тоже проверял всё нормально.

MISHA: Ссылка для схемы программатора. http://slil.ru/24244607

MISHA: Программка которую я пик зашивал здесь. Опыт по программированию не большой. Строго не судите. http://slil.ru/24244921

Alberto: Если шьете, то значит программатор уже заработал? Или уверенности нет? Может, потому и не работает? И еще: я бы команды bcf PortB,0 (bsf PortB,0) вынес бы за пределы кода формирующего задержку, зачем каждые несколько микросекунд подтверждать уже установленное значение?

Алексей: Тип генератора не тот стоит, для 10 мГц необходимо выставить HS. Если не поможет можно попробовать поотключать лишние модули.

Roslik: MISHA пишет: Сегодня собрал мигалку на F873 нифига не идёт. В Попробуй эту Diod

Alberto: MISHA пишет: Кликаю в IC-Progе в произвольную ячеку задаю произвольное число жму на запись. После записи считываю, а там АБСОЛЮТНО ВО ВСЕХ ячеиках то число которое я забил только по одному адресу перед записью. И так каждый раз. А может сначала все-таки убедиться в том что программатор работает? На сайте Корабельникова Е.А., по моему, есть хорошее описание настройки и пошаговой проверки данного программатора.

Vladimir: MISHA ,а впрочем ко всем просьба, не сохраняйте файлы на файлообменниках с рускими названиями не знаю у кого как но у меня от этих названий одни краказябры остаются.

Alberto: Vladimir пишет: не сохраняйте файлы на файлообменниках с рускими названиями не знаю у кого как но у меня от этих названий одни краказябры остаются. в случае скачивания любой программой докачки у меня та же ерунда получается. Пришлось выбрать "сохранить как...", хорошо что файл небольшой, скачался без проблем, потом переименовал (не всегда открываются файлы с русскими буквами) и все дела. А вообще, поддерживаю Петра.

MISHA: Помоему программатор чего то не то шъёт. Зашил прогу генератора на 1,5Кгц в PIC16F84A (прога с самоучителя). Нифига не идёт. менял кварцы биты конфигурации. ничего не помогает. Хотя при проверки после записи ошибок нет. в чём может ещё быть косяк?

Vladimir: MISHA Я так понимаю програма IC-Prog а какая версия? лично у меня 1.05D настроен как описано в Самоучителе... и нет глюков. А програматор в точности как на схеме или упростили как в Самоучителе...? MISHA пишет: в чём может ещё быть косяк? Если так то проверь ВНИМАТЕЛЬНО настройки. А если после записи произвести "сравнение микросхемы с буфером" (там есть такая кнопка) то если программа выдаст ОК то есть записанная в микросхему информация идентична с НЕХ файлом то значит все шьется правильно и програматор и програма нипричем.

MISHA: Запустил наконец контроллер. Сменил ПО перешёл PonyProga на Ic-Prog. Сделал кое какие настройки и всё как по маслу. Всем большое спасибо за дельные советы.

Михаил: Пытаюсь прошить PIC16F873 и PIC16F73. IC-PROG после проверки пишет что всё в порядке. Вставляю их в плату а контроллеры вапще не дышат. Для проверки зашивал эту программу LIST p=16f873 __CONFIG 3F31H Status equ 03h PortA equ 05h TrisA equ 05h PortB equ 06h TrisB equ 06h PortC equ 07h TrisC equ 07h Adcon0 equ 1Fh Adcon1 equ 1Fh RP0 equ 5 RP1 equ 6 C equ 0 org 0 clrf Adcon0 ; Выключение модуля АЦП. bsf Status,RP0 ; Банк 1 movlw .255 movwf Adcon1 clrf TrisA . clrf TrisB clrf TrisC bcf Status,RP0 ; Банк 0. movlw .255 movwf PortA movwf PortB movwf PortC nop goto $-1 end но на выводах ничего нет. Только на 27 и 28 выводе пульсирующий сигнал идёт. аткуда он только там взялся? Модет кто сталкивался с этим. Замена кварца и конденсаторов результата не дали.

igor: Где первоначальная двойная штатная команда включения банка? В каком банке сбрасываете Adcon0? В Adcon1 должно быть записано 06h. Ещё, не забыть, что RA4 с открытым стоком, без резистора в +, работать не будет. Отключите все модули. Сначала нужно записать в защёлки данные, и только после этого перенаправлять порты с помощью TRIS.

Михаил: Чего я только не делал. Нет единиц на выводах. Проверил всё. Первая нога на плюсе, перепаял ёмкости с кварцем снова. Может ещё какие варианты есть. Проверял на двух PIC16F73 и нифига. Программатор использую JDM.

Алексей: ДЛЯ НАЧАЛА НЕОБХОДИМО НАСТРОИТЬ КОНТРОЛЛЕР, В частности отключить АЦП, по умолчанию порт а настроен как аналоговые входы. Некоторые выводы портов накже совмещены с периферией. Отключите все ненужные модули. Плюс ко всему вывод MCLR через резистор 1 ком необходимо подтянуть к + питания, иначе контроллер будет находится в состоянии сброса, что похоже у вас и происходит. К тому же выводы Vss нужно соединить вместе, как и Vdd у 877.

igor: Никаких вариантов, кроме правильного написания программы, и отсутствие ошибок в монтаже, быть не может. Если MPLAB, не ругается на вашу программу, то это не значит, что она будет обязательно работать. В выше приведённом Вами варианте, не работает. Надо искать. В неработоспособности устройства на 99% виноват программист. Правильно напишите инициализацию микроконтроллёра, с отключением всего ненужного и подключением необходимого и всё заработает.

Alberto: Михаил пишет: Чего я только не делал. сперва - наперво убедитесь что Вы действительно обращаетесь к банку 1, а не 3 к примеру. После сброса биты RP0 и RP1 устанавливаются в ноль, но... может у них неопределенное состояние, т.е сбросьте их (установите в "0"), хуже не будет: clrf Status т.е. Вы подаете команду bsf Status,RP0 и уверены что обращаетесь к банку 1, а на самом деле обращение может идти к банку 3, т.к. бит RP1 установлен (равен 1), или подайте две команды: bsf Status,RP0 ; bсf Status,RP1 ; Обращение к первому банку . . . . . bсf Status,RP0 ; Возврат в нулевой банк. Про регистр ADCON0 Игорь уже сказал. Можете еще отключить все неиспользуемые модули: [pre2]clrf T1CON ; Модуль TMR1 - выключен (бит 0 = "0"). clrf T2CON ; Модуль TMR2 - выключен (бит 2 = "0"). clrf CCP1CON ; Модуль ССР1 - выключен (биты 0-3 = 0000). clrf CCP2CON ; Модуль ССР2 - выключен (биты 0-3 = 0000). clrf SSPCON ; Модуль MSSP - выключен (бит 5 = "0"). clrf RCSTA ; Модуль USART - выключен (бит 7 = "0"). clrf AdCON0 ; Модуль АЦП - выключен (бит 0 = "0").[/pre2] и, как говорят, если детали исправны и нет ошибок в монтаже должно работать.

Михаил: Всё ожил контроллер. Зашил с помощью WinPic800. IC-PROG почемуто не хочет дружить с pic16f73. Хотя верификация (у ic-prog) проходит успешно. Может нужны другие настройки при прошивке этого контроллера? Никто с этим не сталкивался?

igor: Я программирую только IC-PROG. Сейчас работаю именно с 16F873, без проблем.

Alberto: Уже года два как IC-PROG'ом не пользуюсь. У WinPic800 возможностей больше и работает быстрее.

Dmitry Dubrovenko: Михаил пишет: IC-PROG почемуто не хочет дружить с pic16f73А что за "железо"? Хотя верификация (у ic-prog) проходит успешноА если потом произвести верификацию ВинПиком? Чудес не бывает. Где-то что-то отличается. Внимательно посмотрите на чекбоксы конфигурации в обоих программах. Alberto пишет: У WinPic800 возможностей большеУтверждение спорное. Где-то больше, где-то меньше.

Михаил: Железо взято с журнала "Радио". По моему на сайте КЕА схема того самого программатора. Шил им PIC16F84 PIC12F675 (даже с внутренним RC генератором) без проблем, а тут на тебе. Программу шил в pic16f73 одну и туже что через ic-prog и winpic800. Но результат был только при использовании последнего. А что за чекбоксы?

Пётр: Михаил пишет: А что за чекбоксы Галочки, изменяющие слово конфигурации.

Dmitry Dubrovenko: Михаил пишет: схема того самого программатораТак понимаю, речь о Пони-Проге. Тогда ничего удивительного. Это - всё-таки программатор "одного дня".



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