Форум по микроконтроллерам: Прошу помощи с АЦП PIC16F688 - Форум по микроконтроллерам

Перейти к содержимому

Страница 1 из 1
  • Вы не можете создать новую тему
  • Вы не можете ответить в тему

Прошу помощи с АЦП PIC16F688

#1 Пользователь офлайн   AlonsoBV 

  • Прибывший
  • Группа: Пользователи
  • Сообщений: 3
  • Регистрация: 05 Сентябрь 18

Отправлено 05 Сентябрь 2018 - 17:54

Доброго дня Всем!
Столкнулся с проблемой и не понимаю происходящего от слова СОВСЕМ!
Ситуация:
  • БП отслеживает напряжение питания
  • при достижении порогов (нижнего и верхнего) реагирует отключением нагрузки
  • пороги рассчитаны исходя из выравнивания влево и учетом только ADRESH
  • пороги прописаны в программе жестко в виде констант НЕ РУГАЙТЕ СИЛЬНО ЗА СИНТАКСИС:
measure_vcc						; измерение текущего напряжения с анализом результатов	bcf 	STATUS,RP0 	clrf	flag_box
	clrf	adc_result
	clrf	ADRESH
	clrwdt
	bsf		ADCON0,ADON			; включаем АЦП
	goto	$+1					; зарядка конденсатора АЦП
	goto	$+1					;
	goto	$+1					;
	goto	$+1					;
	goto	$+1					;
	goto	$+1					;
	goto	$+1					;
	goto	$+1					;
	goto	$+1					;
	goto	$+1					;
	bsf		ADCON0,GO			; старт преобразования
	btfsc	ADCON0,GO
	goto	$-1					; ждем результат
	movf	ADRESH,0			; записываем его и  проверяем на ошибки
	movwf	adc_result			;
	subwf	lo_vcc_thres,0		; вычитаем текущее напряжение из нижнего порога (для ошибки результат положительный С=1) порог 11,0 В (напряжение на делителе 2,32 В)
	btfsc	STATUS,C			;
	bsf		VCC_LOW				; низкое напряжение
	movf	adc_result,0		; 
	subwf	hi_vcc_thres,0		; вычитаем текущее напряжение из верхнего порога (для ошибки результат отрицательный С=0) порог 16,0 В (напряжение на делителе 3,41 В)
	btfss	STATUS,C
	bsf		VCC_HIGH			; высокое напряжение
	bcf		ADCON0,ADON			; выключаем АЦП
	clrwdt
 	return

Пытаюсь перевести БП с фиксированных порогов на программируемые (сохранение в EEPROM) - и вот тут какая-то засада: МК пишет в память вообще непонятно что, не имеющее ничего общего с моими предположениями (не могу разобраться откуда это берется и как получается)Хотя, повторюсь, с константами все работает как часы. Может кто-нибудь из Уважаемого сообщества помочь разобраться с происходящим?Спасибо за ответы.

0

#2 Пользователь офлайн   MAZ 

  • Консерватор - до мозга костей и суставов
  • Группа: Администраторы
  • Сообщений: 1 424
  • Регистрация: 15 Февраль 11
  • ГородРоссия

Отправлено 05 Сентябрь 2018 - 23:42

Так в чем проблема? Программа выложенная для АЦП. А не пишется EEPROM. Наверно надо разобраться в начале с записью чтением EEPROM
Если бы Бог не был консерватором, вместо десяти заповедей мы имели бы десять предложений
0

#3 Пользователь офлайн   AlonsoBV 

  • Прибывший
  • Группа: Пользователи
  • Сообщений: 3
  • Регистрация: 05 Сентябрь 18

Отправлено 07 Сентябрь 2018 - 07:56

Приветствую. Пока пост был на модерации - много времени провел за экспериментами... И теперь проблема видится именно в записи значений в EEPROM!
;write_vcc_thres					; перед записью нужно заполнить адрес и данные
;	clrwdt
;	bsf		STATUS, RP0 		; банк 1
;	bcf		EECON1, EEPGD 		; указатель на память данных
;	bcf		INTCON, GIE 		; на время записи запрещаем прерывания
;	bsf		EECON1, WREN 		; 
;	movlw	h'55' 				; обязательная процедура
;	movwf	EECON2 				; 
;	movlw	h'AA' 				;
;	movwf	EECON2 				; 
;	bsf		EECON1, WR 			; инициализируем запись и ждем окончания (аппаратный сброс WR)
;	btfsc	EECON1, WR
;	goto	$-1
;	bcf		EECON1, WREN
;	clrwdt
;	bsf		INTCON, GIE 		
; 	return

Начал постепенно изменять код программы (написал болванку с отслеживанием напряжения и индикацией происходящего):
- сначала чтение порогов из EEPROM в переменные и работа с ними - все ОК
- затем фиксирование в переменные новых порогов - блок питания переходит на новые значения
- запись новых порогов в память - ЗАСАДА
Посчитаны константы для порогов 11,0 и 16,0 Вольт: 77h AFh... Задаю новые пороги 10,0 и 14,5 Вольт - БП отслеживает их корректно (т.е. значения в переменных соответствуют реальным напряжениям). А пишу в EEPROM - C5h FEh (хотя значения должны быть меньше предыдущих).
И откуда берутся эти цифры - убейте, не понимаю :-(
Есессно, с ними ничего не работает
0

#4 Пользователь офлайн   MAZ 

  • Консерватор - до мозга костей и суставов
  • Группа: Администраторы
  • Сообщений: 1 424
  • Регистрация: 15 Февраль 11
  • ГородРоссия

Отправлено 09 Сентябрь 2018 - 21:37

Я Вас поздравляю. Вы столкнулись с проблемой записи в ЕЕПРОМ. :drinks:
Это прошли все. Коротко, суть проблемы в том что на процесс записи Вы ни как повлиять не можете. Это внутренний процесс, занимающий определенное время. Отсюда вывод. Вы можете контролировать флаг записи EEIF. Вы можете просто сделать не большую задержку, но большую, относительно. В конце концов Вы можете после окончания записи, проверять, что записано и сравнивать с исходником. Вариантов много. Лично я ( как человек консервативный :D ) всегда использую задержку. И никогда не подводило.
Вот краткий пример, как у меня получается. Если что непонятно уточняйте.
Прикрепленный файл  пример.rar (759байт)
Количество загрузок:: 17
Может, я и неправильно понял вопрос. Сейчас больше на бегу все.
Если бы Бог не был консерватором, вместо десяти заповедей мы имели бы десять предложений
0

#5 Пользователь офлайн   AlonsoBV 

  • Прибывший
  • Группа: Пользователи
  • Сообщений: 3
  • Регистрация: 05 Сентябрь 18

Отправлено 11 Сентябрь 2018 - 03:23

Огромное спасибо! Буду разбираться-сидеть... Ну не может такого быть, чтобы этот мелкий контроллер победил взрослого человека Изображение
0

#6 Пользователь офлайн   MAZ 

  • Консерватор - до мозга костей и суставов
  • Группа: Администраторы
  • Сообщений: 1 424
  • Регистрация: 15 Февраль 11
  • ГородРоссия

Отправлено 11 Сентябрь 2018 - 21:40

Это точно. :drinks:
Если бы Бог не был консерватором, вместо десяти заповедей мы имели бы десять предложений
0

Поделиться темой:


Страница 1 из 1
  • Вы не можете создать новую тему
  • Вы не можете ответить в тему

1 человек читают эту тему
0 пользователей, 1 гостей, 0 скрытых пользователей