Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту


 
Опции темы
Непрочитано 02.03.2020, 19:26  
anatol378
Почётный гражданин KAZUS.RU
 
Аватар для anatol378
 
Регистрация: 19.10.2004
Адрес: Нижний Новгород
Сообщений: 1,746
Сказал спасибо: 416
Сказали Спасибо 1,240 раз(а) в 551 сообщении(ях)
anatol378 на пути к лучшему
По умолчанию Re: Запись конфигурационных слов в PIC16F18456

Программатор указывает что вы обращаетесь к памяти по адресу 8007, это за пределами для этого контроллера.
Реклама:
__________________
Решил посоветовать, да забыл что...
anatol378 вне форума  
Непрочитано 02.03.2020, 19:29  
stubiflex
Прописка
 
Регистрация: 17.07.2006
Сообщений: 129
Сказал спасибо: 23
Сказали Спасибо 4 раз(а) в 3 сообщении(ях)
stubiflex на пути к лучшему
По умолчанию Re: Запись конфигурационных слов в PIC16F18456

Сообщение от RECTO Посмотреть сообщение
Судя по всему, адреса 8007h физически не существует: программатор пытается записать туда значение "2914", при проверке получает "63" (=3FFh).

Скорее всего, в проекте неправильно указан тип МК...
Не верно.

Тип указан правильно. Функция "CFG_WORD = Read_DIA(0x8007);" читает с данного адреса без проблем.
stubiflex вне форума  
Непрочитано 02.03.2020, 19:35  
RECTO
Супер-модератор
 
Регистрация: 09.06.2011
Сообщений: 2,633
Сказал спасибо: 73
Сказали Спасибо 1,793 раз(а) в 647 сообщении(ях)
RECTO на пути к лучшему
По умолчанию Re: Запись конфигурационных слов в PIC16F18456

Ещё, наиболее вероятная причина - использование где-то в тексте программы hex-значений без указания их типа, из-за чего они воспринимаются компилятором как десятичные. И в результате идёт запись не тех значений и не в те адреса. Например, ваши адрес "8007" и значение "2914". Это - десятичные значения. Но, просто навеяло - очень похожий адрес 2007h - это как раз адрес для записи слова конфигурации в PIC16F628A. А значение 2914h - один из "ходовых" вариантов его конфигурации. Значение "63", возвращаемое программатору, говорит о том, что это как раз всё десятичные значения. Т.к. оно =3FF, т.е. значение "пустой" или несуществующей ячейки.
Миниатюры:
Нажмите на изображение для увеличения
Название: dechex.png
Просмотров: 0
Размер:	7.7 Кб
ID:	150862  

Последний раз редактировалось RECTO; 02.03.2020 в 19:44.
RECTO вне форума  
Непрочитано 02.03.2020, 20:23  
vsch8
Прописка
 
Регистрация: 26.01.2007
Сообщений: 106
Сказал спасибо: 4
Сказали Спасибо 37 раз(а) в 25 сообщении(ях)
vsch8 на пути к лучшему
По умолчанию Re: Запись конфигурационных слов в PIC16F18456

Я давно для 16f877A писал:
list p=16f877A
include‹p16F877A.inc›
__CONFIG 03F76H ;Бит защиты выкл,WDT вкл,ВЧ HS-генератор RB6,7-порты
-------------------------
Вы в какой среде писали?
-------------------------

MPLAB IDE v8.88 или наверно был помладше, типа v6
vsch8 вне форума  
Сказали "Спасибо" vsch8
stubiflex (03.03.2020)
Непрочитано 02.03.2020, 21:26  
stubiflex
Прописка
 
Регистрация: 17.07.2006
Сообщений: 129
Сказал спасибо: 23
Сказали Спасибо 4 раз(а) в 3 сообщении(ях)
stubiflex на пути к лучшему
По умолчанию Re: Запись конфигурационных слов в PIC16F18456

Сообщение от RECTO Посмотреть сообщение
Ещё, наиболее вероятная причина - использование где-то в тексте программы hex-значений без указания их типа, из-за чего они воспринимаются компилятором как десятичные. И в результате идёт запись не тех значений и не в те адреса. Например, ваши адрес "8007" и значение "2914". Это - десятичные значения. Но, просто навеяло - очень похожий адрес 2007h - это как раз адрес для записи слова конфигурации в PIC16F628A. А значение 2914h - один из "ходовых" вариантов его конфигурации. Значение "63", возвращаемое программатору, говорит о том, что это как раз всё десятичные значения. Т.к. оно =3FF, т.е. значение "пустой" или несуществующей ячейки.
Спасибо за рациональные советы.

Проверил в режиме отладки.

Дело не в ошибочной адресации, потому что функция читает и адресное слово и слово данных правильно.

Кстати, запустить программу (и проверить в режиме отладки) возможно только в том случае, если программа была скомпиллирована с NVMCON1bits.WR = 0;

Если установить единицу (пытаться записать значение 2 байт (Дата), то программа не записывается на микроконтроллер.
Миниатюры:
Нажмите на изображение для увеличения
Название: Failure2.png
Просмотров: 0
Размер:	99.5 Кб
ID:	150866  

Последний раз редактировалось stubiflex; 02.03.2020 в 21:35.
stubiflex вне форума  
Непрочитано 02.03.2020, 22:14  
RECTO
Супер-модератор
 
Регистрация: 09.06.2011
Сообщений: 2,633
Сказал спасибо: 73
Сказали Спасибо 1,793 раз(а) в 647 сообщении(ях)
RECTO на пути к лучшему
По умолчанию Re: Запись конфигурационных слов в PIC16F18456

Сообщение от stubiflex Посмотреть сообщение
Дело не в ошибочной адресации, потому что функция читает и адресное слово и слово данных правильно.
Да при чём здесь функция, если программатор сообщает вам, на этапе заливки прошивки: "я не могу записать по адресу 0x1F47 значение 0xB62, т.к. получаю ответ 0x3F"!
Только сообщает он вам это в десятичной форме: 8007, 2914 и 63 соответственно.
А должно быть: 0x8007 0x2914.
Так понятнее?

Так что погодите с вашими функциями, сначала разберитесь, почему у вас слово конфигурации адресуется на физически не существующий адрес (0x1F47)...
RECTO вне форума  
Сказали "Спасибо" RECTO
tim1960 (03.03.2020)
Непрочитано 02.03.2020, 22:26  
anatol378
Почётный гражданин KAZUS.RU
 
Аватар для anatol378
 
Регистрация: 19.10.2004
Адрес: Нижний Новгород
Сообщений: 1,746
Сказал спасибо: 416
Сказали Спасибо 1,240 раз(а) в 551 сообщении(ях)
anatol378 на пути к лучшему
По умолчанию Re: Запись конфигурационных слов в PIC16F18456

Цитата:
CONFIG4
Name:  CONFIG4
Address:  0x800A
Configuration Word 4
Memory Write Protection
Цитата:
Bit 9 – WRTC Configuration Register Write Protection bit (1)
Value Description
1 Configuration Registers NOT write-protected
0 Configuration Registers write-protected
По сбросу = 1
Начни с стирания контроллера
__________________
Решил посоветовать, да забыл что...

Последний раз редактировалось anatol378; 02.03.2020 в 22:29.
anatol378 вне форума  
Сказали "Спасибо" anatol378
stubiflex (03.03.2020)
Непрочитано 02.03.2020, 22:45  
stubiflex
Прописка
 
Регистрация: 17.07.2006
Сообщений: 129
Сказал спасибо: 23
Сказали Спасибо 4 раз(а) в 3 сообщении(ях)
stubiflex на пути к лучшему
По умолчанию Re: Запись конфигурационных слов в PIC16F18456

Сообщение от RECTO Посмотреть сообщение
Да при чём здесь функция, если программатор сообщает вам, на этапе заливки прошивки: "я не могу записать по адресу 0x1F47 значение 0xB62, т.к. получаю ответ 0x3F"!
Только сообщает он вам это в десятичной форме: 8007, 2914 и 63 соответственно.
А должно быть: 0x8007 0x2914.
Так понятнее?

Так что погодите с вашими функциями, сначала разберитесь, почему у вас слово конфигурации адресуется на физически не существующий адрес (0x1F47)...
То, о чем Вы говорите -прошедший этап.

С тех пор выяснилось, (как писал выше) что программа пишется на микроконтроллер и запускается и в нормальном режиме и в режиме отладки. С одним условием: если NVMCON1bits.WR = 0; (Команда записи байтов)

Если установить NVMCON1bits.WR = 1 (пытаться записать NVMDATH и NVMDATL), то программа не записывается на микроконтроллер.

Коротко, если программа настроена так, что смог бы записать конфигурационные слова, то невозможно его записать на PIC.
stubiflex вне форума  
Непрочитано 02.03.2020, 23:31  
realid
Супер-модератор
 
Аватар для realid
 
Регистрация: 15.10.2007
Сообщений: 3,529
Сказал спасибо: 172
Сказали Спасибо 1,560 раз(а) в 810 сообщении(ях)
realid на пути к лучшему
По умолчанию Re: Запись конфигурационных слов в PIC16F18456

Кстати, сначала загружаются данные в "защелки" и только затем дергается рубильник(процедура анлока и установка бита WR) для их физической записи во флеш. Во время процедуры записи процессор останавливается.
Еще надо смотреть чтобы компилятор ничего не намудрил тут
NVMCON2 = 0x55;
NVMCON2 = 0xAA;
NVMCON1bits.WR = 1;

Оно может не развернутся в правильную последовательность:
movlw 0x55
movwf NVMCON2
movlw 0xAA
movwf NVMCON2
bsf NVMCON1,WR

Последний раз редактировалось realid; 02.03.2020 в 23:36.
realid вне форума  
Непрочитано 03.03.2020, 02:33  
stubiflex
Прописка
 
Регистрация: 17.07.2006
Сообщений: 129
Сказал спасибо: 23
Сказали Спасибо 4 раз(а) в 3 сообщении(ях)
stubiflex на пути к лучшему
По умолчанию Re: Запись конфигурационных слов в PIC16F18456

Сообщение от realid Посмотреть сообщение
Кстати, сначала загружаются данные в "защелки" и только затем дергается рубильник(процедура анлока и установка бита WR) для их физической записи во флеш. Во время процедуры записи процессор останавливается.
Еще надо смотреть чтобы компилятор ничего не намудрил тут
NVMCON2 = 0x55;
NVMCON2 = 0xAA;
NVMCON1bits.WR = 1;

Оно может не развернутся в правильную последовательность:
movlw 0x55
movwf NVMCON2
movlw 0xAA
movwf NVMCON2
bsf NVMCON1,WR
void Write_CFG(uint32_t Address, uint16_t Data)
{
uint8_t DataLB = 0x00;
uint8_t DataHB = 0x00;

DataLB = (0x00FF & Data);
DataHB = ((0xFF00 & Data) ›› ;

NVMADRL = (0x000000FF & Address);
NVMADRH = ((0x0000FF00 & Address ) ›› ;

uint8_t GIEBitValue = INTCONbits.GIE;

NOP();
NOP();

INTCONbits.GIE = 0; // Disable interrupts

NVMCON1bits.NVMREGS = 1; // Access Configuration Registers
NVMCON1bits.LWLO = 1; // The next WR command write data
NVMCON1bits.FREE = 0; // The next WR command writes without erasing
NVMCON1bits.WREN = 1; // Enable Write

NVMDATH = DataHB;
NVMDATL = DataLB;

NVMCON2 = 0x55; // NVM Unlock Sequence 1st step
NVMCON2 = 0xAA; // NVM Unlock Sequence 2nd step

NVMCON1bits.WR = 1; // 0 - for debug only. For normal use, set to 1!

while (NVMCON1bits.WR != 0)
{
}

NVMCON1bits.WREN = 0;
INTCONbits.GIE = GIEBitValue; // restore interrupt state
}

Посмотрю потом с куском кода на ассемблере, но уже стало видно в режиме отладки, что по ходу программы NVMCON2 не получает значения. В крайнем случае в окне дебагера не видно.

Как думаете, конфигурационные биты в NVMCON1 байте правильно выставлены?
stubiflex вне форума  
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Кто-нибудь работал с RF модулями nRF2401A? Easyrider83 Автоматика и аппаратура связи 1481 04.09.2021 23:24
Анекдот, анекдот ... (часть 1) DK Отвлекитесь, эмбеддеры! 8148 05.06.2013 23:14
Запись EEPROM Megi88 FedorChek Микроконтроллеры, АЦП, память и т.д 3 23.03.2009 18:42
Помогите Не получается запись в EEPROM ST_Senya Микроконтроллеры, АЦП, память и т.д 8 01.12.2008 19:16
Запись в EEPROM pic16f628a J-t Микроконтроллеры, АЦП, память и т.д 6 22.01.2008 16:10


Часовой пояс GMT +4, время: 19:08.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot