Перейти к содержанию

crazz

Рекомендуемые сообщения

где настройка ANSEL и TRIS ?

где задержка перед запуском преобразования на 12мкс?

В регистрах ANSEL и TRIS все правильно, так как без ухода в сон АЦП работает и выдает значение напряжения в свои выходные регистры. Задержку перед запуском не делал, но делал после записи в ANSEL, для заряда конденсатора АЦП. Может в этом ошибка. Сейчас переписать программу не могу, но потом переделаю и отпишусь

Изменено пользователем Imotor
Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

Подскажите пожалуйста как настроить измерение ацп в спящем режиме (sleep) PIC16F676. Микроконтроллер после команды sleep уходит в спящий режим и не выходит из него. Хотя сделал все по спецификации.

...................

После nop должен уйти в вектор прерывания. Но микроконтроллер из сна не выходит

Это с какого перепуга он должен уйти в прерывание?

Есть ДВА варианта wake-up из слипа.

Если мы устанавливаем только разрешение прерывания самого источника (в данном случае АЦП) в PIE1, то выход из слипа будет выглядеть как исполнение одного NOPа и ПРОДОЛЖЕНИЕ исполнения кода ПОСЛЕ команды sleep. А если установлено ГЛОБАЛЬНОЕ разрешение GIE и периферийное PEIE (для части прерываний, к которым относится АЦП и TMR1), то тогда после выхода из слипа произойдет переход на вектор 4, то есть в область обработчиков прерываний.

Настройки входов ТРИЗ и АНСЕЛ никакого отношения к выходу из слип не имеют. Контроллеру глубоко по барабану как будут настроены входы, как и наличие и отсутствие эквизишн тайма (окна заряда УВХ), важно лишь то, кто и как взведет флаг прерываний.

Изменено пользователем my504

戦う前に相手のベルトの色に注目

Ссылка на комментарий
Поделиться на другие сайты

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

Это с какого перепуга он должен уйти в прерывание?

Потому что разрешено прерывание АЦП и глобальные прерывания.

Если мы устанавливаем только разрешение прерывания самого источника (в данном случае АЦП) в PIE1, то выход из слипа будет выглядеть как исполнение одного NOPа и ПРОДОЛЖЕНИЕ исполнения кода ПОСЛЕ команды sleep. А если установлено ГЛОБАЛЬНОЕ разрешение GIE и периферийное PEIE (для части прерываний, к которым относится АЦП и TMR1), то тогда после выхода из слипа произойдет переход на вектор 4, то есть в область обработчиков прерываний.

С этим понятно. Но микроконтроллер не входит в прерывание АЦП даже когда команда sleep в тексте программы отсутствует. Может это из-за того, что разрешено прерывание по таймеру, а оно имеет приоритет над остальными прерываниями? Сейчас переписал программу без прерывания АЦП, потом все равно перепишу, потому что интересно найти причину. Компьютер к сожалению сейчас не при мне.

Ссылка на комментарий
Поделиться на другие сайты

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Вот фрагмент программы. Вроде бы все по даташиту

;interrupt vector
		 org		 04h
		 goto	 int_sel
table
	 addwf	 PCL,f		 ;PCL=PCL+W
	 retlw	 b'00000000'	 ;0
	 retlw	 b'00000100'	 ;1
	 retlw	 b'00001000'	 ;2
	 retlw	 b'00001100'	 ;3
	 retlw	 b'00010000'	 ;4
	 retlw	 b'00010100'	 ;5
	 retlw	 b'00011000'	 ;6
	 retlw	 b'00011100'	 ;7
	 retlw	 b'00100000'	 ;8
	 retlw	 b'00100100'	 ;9
int_sel
	 movwf	 t_work		 ;save context
	 swapf	 status,w
	 movwf	 t_status
;-----------------------------------------------------------------------------
	 btfsc	 PIR1,0
	 call	 tmr1_int
;-----------------------------------------------------------------------------
	 btfsc	 PIR1,6
	 call	 ADC_int
	 bcf		 PIR1,6		 ;reset interrupt flag ADC
;-----------------------------------------------------------------------------
	 swapf	 t_status,w	 ;extract context
	 movwf	 status
	 swapf	 t_work,f
	 swapf	 t_work,w
	 retfie
//программа инициализации (выполняется один раз при сбросе)
init	 movlw	 b'00010000'
	 bsf		 status,5	 ;bank1
	 movwf	 TrisA	 ;setup portA/C to output
	 bcf		 status,5	 ;return bank0

	 movlw	 b'00000011'
	 bsf		 status,5	 ;bank1
	 movwf	 TrisC	 ;setup portA/C to output
	 bcf		 status,5	 ;return bank0
;----------------------------------------------------------------------------
	 movlw	 b'11000000'
	 movwf	 INTCON

	 movlw	 b'01000001'
	 bsf		 status,5	 ;bank1
	 movwf	 PIE1		 ;PERIPHERAL INTERRUPT ENABLE REGISTER 1
	 bcf		 status,5	 ;return bank0

	 clrf	 button_flag
	 clrf	 push_button
	 clrf	 tempL
	 clrf	 tempH

	 movlw	 b'00100001'
	 movwf	 T1CON		 ;INTERRUPT CONTROL REGISTER TMR1
;setting ADC
	 movlw	 b'00110000'
	 bsf		 status,5	 ;bank1
	 movwf	 ADCON1		 ;внутренний осцилятор АЦП
	 bcf		 status,5	 ;return bank0

	 goto	 main

//Подпрограмма запуска АЦП (вызывается из главного цикла)
meteringADC
	 bcf		 INTCON,7	 ; Disables all interrupts
	 bcf		 PIR1,6		 ;reset interrupt flag ADC
	 bcf		 PIR1,0

	 movlw	 b'00100000'
	 bsf		 status,5	 ;bank1
	 movwf	 ANSEL		 ;select in
	 bcf		 PIE1,0		 ;disables TMR1 overflow interrupt
	 bsf		 PIE1,6
	 bcf		 status,5	 ;return bank0

	 call	 delayADC

	 movlw	 b'10010101'
	 movwf	 ADCON0

	 call	 delayADC

	 bsf		 ADCON0,1	 ;start ADC
	 sleep
	 nop
	 nop
;----------------------------------------------------------------------------
;write result
	 movf	 ADRESH,w
	 movwf	 tempH

	 bsf		 status,5	 ;bank1
	 movf	 ADRESL,w
	 bcf		 status,5	 ;return bank0
	 movwf	 tempL

	 rrf		 tempH,f
	 rrf		 tempL,f
;----------------------------------------------------------------------------
	 bsf		 status,5	 ;bank1
	 bsf		 PIE1,0		 ;enables TMR1 overflow interrupt
	 bcf		 status,5	 ;return bank0

Не хочет уходить в прерывание. причем даже если не использовать команду sleep. Я так понимаю, не взводится флаг прерывания АЦП. В чем причина ума не приложу

Ссылка на комментарий
Поделиться на другие сайты

:crazy: :crazy: :crazy:

//Подпрограмма запуска АЦП (вызывается из главного цикла)

meteringADC

bcf INTCON,7 ; Disables all interrupts И С ЧЕГО ЕМУ УХОДИТЬ В ПРЕРЫВАНИЕ????

bcf PIR1,6 ;reset interrupt flag ADC

bcf PIR1,0

movlw b'00100000'

bsf status,5 ;bank1

movwf ANSEL ;select in

bcf PIE1,0 ;disables TMR1 overflow interrupt

bsf PIE1,6

bcf status,5 ;return bank0

call delayADC

movlw b'10010101'

movwf ADCON0

call delayADC

bsf ADCON0,1 ;start ADC

sleep

nop

nop

:unknw:
Ссылка на комментарий
Поделиться на другие сайты

Спасибо исправил. Это уже не первая версия подпрограммы ввода микроконтроллера в сон. Было много исправлений, запутался уже.

Протеус неправильно моделирует, в железе все работает, в сон уходит и выходит. Видимо впервый раз где-то допустил ошибку и в железе не заработало.

Ссылка на комментарий
Поделиться на другие сайты

  • 2 недели спустя...

Еще появилась проблема. Pic стартует через раз. Когда питал от блока питания проблем не было. Когда включил через стабилизатор в устройство, стартовать стал через раз.

Ссылка на комментарий
Поделиться на другие сайты

Блокирующие конденсаторы возле ног питания контроллера стоят?

Все можно наладить, если вертеть в руках достаточно долго!

Если ничто другое не помогает, прочтите, наконец, инструкцию!

Ссылка на комментарий
Поделиться на другие сайты

Блокирующие конденсаторы возле ног питания контроллера стоят?

После стабилизатора ен5а стоит 470мкф. Возле ног питания стоит один 0,1 мкф

Может быть не запускается генератор из-за каких-то наводок. Если питать от блока питания, то все работает. Хотя в блоке питания на выходе такой же стабилизатор, только блок питания регулируемый

Ссылка на комментарий
Поделиться на другие сайты

Вроде нормально. Хотя емкость 470 можно и уменьшить до 47-100мкф. А до стабилизатора что стоит? Ресет через что подтянут к +? На чем монтаж? Вид на монтаж? Уже было подобное - длинные линии связи где не надо, ошибки в разводке ПП.

Все можно наладить, если вертеть в руках достаточно долго!

Если ничто другое не помогает, прочтите, наконец, инструкцию!

Ссылка на комментарий
Поделиться на другие сайты

Вроде нормально. Хотя емкость 470 можно и уменьшить до 47-100мкф. А до стабилизатора что стоит? Ресет через что подтянут к +? На чем монтаж? Вид на монтаж? Уже было подобное - длинные линии связи где не надо, ошибки в разводке ПП.

До стабилизатора 1000мкф. Ресет подтянул к плюсу через резистор 1 кОм, хотя в конфигурации пробовал и как обычный вход и как MCLR - никакой разницы.

Есть перемычки от платы до платы с индикатором, около 5 см

PWRT помогает, но не сильно. Все равно запускается через раз-два

post-133796-0-84412800-1440957163_thumb.png

Изменено пользователем Imotor
Ссылка на комментарий
Поделиться на другие сайты

А ничего, что 4 вывод МК в воздухе? Вообще то это MCLR. И не надо цитировать мои сообщения. Модераторы накажут, и будут правы. В самом низу страницы есть окно "ответить". Им и надо пользоваться.

Изменено пользователем chip-chip

Все можно наладить, если вертеть в руках достаточно долго!

Если ничто другое не помогает, прочтите, наконец, инструкцию!

Ссылка на комментарий
Поделиться на другие сайты

Я его со стороны проводников подтянул к "+" питания. Хотя изначально он был настроен как I/O. На бредборде все работало. Была только проблема с режимом сна

Ссылка на комментарий
Поделиться на другие сайты

Плюс прямо с электролита подайте на 1 ногу МК, минуя кучу загогулин. Что выйдет?

Все можно наладить, если вертеть в руках достаточно долго!

Если ничто другое не помогает, прочтите, наконец, инструкцию!

Ссылка на комментарий
Поделиться на другие сайты

Да... много косяков. Стабилизатор 7805? вообще интегральные стабилизаторы не любят большую емкость на выходе. Смысла электролита ПОСЛЕ стабилизатора нет вообще никакого. А вот керамику надо ставить и на входе и на выходе, причем на входе должно быть больше - 0.47мкФ а на выходе 0.1мкФ иначе стабилизатор начинает заводится, длительные переходные процессы и подобная неприятность. Вот он у тебя наверно заводится и контроллер не может стартануть. Убери электролит на выходе - смысла в нем нет никакого(на ВЧ он не работает, а НЧ там равно нулю, а если не равно то это огромные проблемы для всей схемы - источник питания не справляется с нагрузкой до такой степени что стабилизатор перестаёт работать). Вместо него поставь SMD-конденсаторы прямо к выводам на 0.47мкф и 0.1мкф соответственно ко входу и выходу стабилизатора.

Учение - изучение правил. Опыт - изучение исключений.

Ссылка на комментарий
Поделиться на другие сайты

Совсем убрать - это уже слишком. Надо уменьшить и все! Смотрим даташит: емкость после стабилизатора раз в 10 меньше емкости до стабилизатора. Я и посоветовал 47-100мкф. А блокирующие ВЧ конденсаторы 0.1мкф можно повесить по питанию каждого корпуса отдельно. От одного 0.47мкф толка мало.

Все можно наладить, если вертеть в руках достаточно долго!

Если ничто другое не помогает, прочтите, наконец, инструкцию!

Ссылка на комментарий
Поделиться на другие сайты

Емкость на выходе стабилизатора будет только мешать его работе. Он достаточно быстродействующий чтобы компенсировать провалы напряжения вызванные повышением тока потребления. До стабилизатора нужен электролит большой емкости а после - нет. А блокировочные на 0.47 и 0.1 непосредственно возле выводов нужны для того чтобы он был устойчивым в области высоких частот.

Учение - изучение правил. Опыт - изучение исключений.

Ссылка на комментарий
Поделиться на другие сайты

Испробовал все варианты. Не помогло. Поставил после стабилизатора конденсатор на 1800мкф. Пока все работает. Экпериментально выяснил, что микроконтролленру нужно плавное повышение напряжение, которое как раз и обеспечивает конденсатор большой емкости. Это конечно не выход. Может микроконтроллер с браком?

Ссылка на комментарий
Поделиться на другие сайты

Смотри осциллографом работу стабилизатора. Ему вообще не нужна большая емкость на выходе, может он у тебя просто "звенит" в момент включения.

Учение - изучение правил. Опыт - изучение исключений.

Ссылка на комментарий
Поделиться на другие сайты

Осцилографа к сожалению у меня нет. А что значит "звенит"?

Предполагаю что это переходные процессы и наводки в самом микроконтроллере вследствие резкого скачка по питанию. Попробую другой микроконтроллер.

Еще я затирал константу в этом микроконтроллере. Но она у меня была прочитана и записана на бумажку, а потом вписана обратно.

Ссылка на комментарий
Поделиться на другие сайты

Самовозбуждается. Можно попробовать заменить на 7805. Ну и входу MCLR повесить конденсатор порядка 1мкф на землю.

Все можно наладить, если вертеть в руках достаточно долго!

Если ничто другое не помогает, прочтите, наконец, инструкцию!

Ссылка на комментарий
Поделиться на другие сайты

Менял на 78l05. Не помогло. Конденсатор ставил. На 1мкф не дало ничего, 470мкф дало небольшую задержку запуска, стал запускаться чаще, но все равно не всегда. Даже кнопку ставил с MCLR на землю, нажимал её и включал питание, после отпускал. Толку никакого. Думаю либо микроконтроллер с браком либо программа кривая.

Ссылка на комментарий
Поделиться на другие сайты

Среди АВР попадались с браком. Среди ПИК - не помню такого. Но поменять же не проблема. Смените контроллер.

Все можно наладить, если вертеть в руках достаточно долго!

Если ничто другое не помогает, прочтите, наконец, инструкцию!

Ссылка на комментарий
Поделиться на другие сайты

а если тогда на MCLR повесить RC-цепочку авторестарта по питанию? Классика же

хотя честно говоря ни разу на пиках с такой проблемой не сталкивался. Питание обычно на 7805 по обычной схеме. Один раз правда было дело 16F886 стартовал чуть дольше (гдето 0,3...0,4 сек лишних), но ни разу такого не случалось, чтобы не стартовал совсем. Причем случай был единичный и я списал на косяк камня, так как после замены все прошло.

Изменено пользователем mail_robot

Нужно делать то, что нужно. А то, что не нужно, делать не нужно. (С) Винни Пух

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...