PIC18F14K50 сбрасывается при использовании PORTC (asm)
- Albert_V
- Друг Кота
- Сообщения: 4119
- Зарегистрирован: Чт сен 12, 2013 00:54:12
- Откуда: ЗаМКАДье. Там, где ЦУП
Re: PIC18F14K50 сбрасывается при использовании PORTC (asm)
"CBLOCK 0x000" - это как (стр.35)?
Весь текст не смотрел, но исправьте стартовый адрес ваших регистров на 0x0060 (это один из вариантов).
Весь текст не смотрел, но исправьте стартовый адрес ваших регистров на 0x0060 (это один из вариантов).
- Реклама
- Albert_V
- Друг Кота
- Сообщения: 4119
- Зарегистрирован: Чт сен 12, 2013 00:54:12
- Откуда: ЗаМКАДье. Там, где ЦУП
Re: PIC18F14K50 сбрасывается при использовании PORTC (asm)
Выкладывайте полный текст программы (вместе с CONFIG-ами и "шапкой программы").
Убедительная просьба: Оформите текст как "Code" и спрячьте его под спойлер.
Убедительная просьба: Оформите текст как "Code" и спрячьте его под спойлер.
Re: PIC18F14K50 сбрасывается при использовании PORTC (asm)
програмка через ацп анализирует напряжение и отображает через portc только наименьшее значение, пробую плавно менять напряжение все работает но как только дохожу до очень малых значений измерений все сбрасывается или резко отключаю напряжение от RB4 другими словами высокое напряжение или малое код программы работает тотже, измеряю 1,5вольта и меньше .
"Оформите текст как "Code" и спрячьте его под спойлер."- как это?
"Оформите текст как "Code" и спрячьте его под спойлер."- как это?
- Albert_V
- Друг Кота
- Сообщения: 4119
- Зарегистрирован: Чт сен 12, 2013 00:54:12
- Откуда: ЗаМКАДье. Там, где ЦУП
Re: PIC18F14K50 сбрасывается при использовании PORTC (asm)
"Кнопками" выше поля текста (перед отправкой сообщения).varella56 писал(а):как это?
- Реклама
Re: PIC18F14K50 сбрасывается при использовании PORTC (asm)
Спойлер
Код: Выделить всё
;******************************************************************************
; *
; This file is a basic code template for code generation on the *
; PIC18F14K50. This file contains the basic code building blocks to build *
; upon. *
; *
; Refer to the MPASM User's Guide for additional information on features *
; of the assembler. *
; *
; Refer to the respective data sheet for additional information on the *
; instruction set. *
; *
;******************************************************************************
; *
; Filename: xxx.asm *
; Date: *
; File Version: *
; Author: *
; Company: *
; *
;******************************************************************************
; *
; Files Required: P18F14K50.INC *
; *
;******************************************************************************
; *
; Notes: *
; *
;******************************************************************************
; *
; Revision History: *
; *
;******************************************************************************
;------------------------------------------------------------------------------
; PROCESSOR DECLARATION
;------------------------------------------------------------------------------
LIST P=PIC18F14K50 ; list directive to define processor
#INCLUDE <P18F14K50.INC> ; processor specific variable definitions
;------------------------------------------------------------------------------
;
; CONFIGURATION WORD SETUP
;
; The 'CONFIG' directive is used to embed the configuration word within the
; .asm file. The lables following the directive are located in the respective
; .inc file. See the data sheet for additional information on configuration
; word settings.
;
;------------------------------------------------------------------------------
; PIC18F14K50 Configuration Bit Settings
; ASM source line config statements
; CONFIG1L
CONFIG CPUDIV = NOCLKDIV ; CPU System Clock Selection bits (No CPU System Clock divide)
CONFIG USBDIV = OFF ; USB Clock Selection bit (USB clock comes directly from the OSC1/OSC2 oscillator block; no divide)
; CONFIG1H
CONFIG FOSC = HS ; Oscillator Selection bits (HS oscillator)
CONFIG PLLEN = ON ; 4 X PLL Enable bit (Oscillator multiplied by 4)
CONFIG PCLKEN = OFF ; Primary Clock Enable bit (Primary clock is under software control)
CONFIG FCMEN = OFF ; Fail-Safe Clock Monitor Enable (Fail-Safe Clock Monitor disabled)
CONFIG IESO = OFF ; Internal/External Oscillator Switchover bit (Oscillator Switchover mode disabled)
; CONFIG2L
CONFIG PWRTEN = ON ; Power-up Timer Enable bit (PWRT disabled)
CONFIG BOREN = OFF ; Brown-out Reset Enable bits (Brown-out Reset enabled in hardware only (SBOREN is disabled))
CONFIG BORV = 19 ; Brown-out Reset Voltage bits (VBOR set to 1.9 V nominal)
; CONFIG2H
CONFIG WDTEN = OFF ; Watchdog Timer Enable bit (WDT is controlled by SWDTEN bit of the WDTCON register)
CONFIG WDTPS = 32768 ; Watchdog Timer Postscale Select bits (1:32768)
; CONFIG3H
CONFIG HFOFST = OFF ; HFINTOSC Fast Start-up bit (HFINTOSC starts clocking the CPU without waiting for the oscillator to stablize.)
CONFIG MCLRE = OFF ; MCLR Pin Enable bit (RA3 input pin enabled; MCLR disabled)
; CONFIG4L
CONFIG STVREN = OFF ; Stack Full/Underflow Reset Enable bit (Stack full/underflow will cause Reset)
CONFIG LVP = OFF ; Single-Supply ICSP Enable bit (Single-Supply ICSP enabled)
CONFIG BBSIZ = OFF ; Boot Block Size Select bit (1kW boot block size)
CONFIG XINST = OFF ; Extended Instruction Set Enable bit (Instruction set extension and Indexed Addressing mode disabled (Legacy mode))
; CONFIG5L
CONFIG CP0 = OFF ; Code Protection bit (Block 0 not code-protected)
CONFIG CP1 = OFF ; Code Protection bit (Block 1 not code-protected)
; CONFIG5H
CONFIG CPB = OFF ; Boot Block Code Protection bit (Boot block not code-protected)
CONFIG CPD = OFF ; Data EEPROM Code Protection bit (Data EEPROM not code-protected)
; CONFIG6L
CONFIG WRT0 = OFF ; Table Write Protection bit (Block 0 not write-protected)
CONFIG WRT1 = OFF ; Table Write Protection bit (Block 1 not write-protected)
; CONFIG6H
CONFIG WRTC = OFF ; Configuration Register Write Protection bit (Configuration registers not write-protected)
CONFIG WRTB = OFF ; Boot Block Write Protection bit (Boot block not write-protected)
CONFIG WRTD = OFF ; Data EEPROM Write Protection bit (Data EEPROM not write-protected)
; CONFIG7L
CONFIG EBTR0 = OFF ; Table Read Protection bit (Block 0 not protected from table reads executed in other blocks)
CONFIG EBTR1 = OFF ; Table Read Protection bit (Block 1 not protected from table reads executed in other blocks)
; CONFIG7H
CONFIG EBTRB = OFF ; Boot Block Table Read Protection bit (Boot block not protected from table reads executed in other blocks)
;------------------------------------------------------------------------------
CBLOCK 0x060
zadr
zadr1
zadr2
RESULTHI
RESULTLO
ENDC
; VARIABLE DEFINITIONS
;
;------------------------------------------------------------------------------
ORG 0x0000 ; processor reset vector
GOTO START ; go to beginning of program
;------------------------------------------------------------------------------
; HIGH PRIORITY INTERRUPT VECTOR
;------------------------------------------------------------------------------
ISRH ORG 0x0008
; Run the High Priority Interrupt Service Routine
GOTO HIGH_ISR
;------------------------------------------------------------------------------
; LOW PRIORITY INTERRUPT VECTOR
;------------------------------------------------------------------------------
ISRL ORG 0x0018
; Run the High Priority Interrupt Service Routine
GOTO LOW_ISR
;------------------------------------------------------------------------------
; HIGH PRIORITY INTERRUPT SERVICE ROUTINE
;------------------------------------------------------------------------------
HIGH_ISR
; Insert High Priority ISR Here
RETFIE FAST
;------------------------------------------------------------------------------
; LOW PRIORITY INTERRUPT SERVICE ROUTINE
;------------------------------------------------------------------------------
LOW_ISR
RETFIE
;------------------------------------------------------------------------------
; MAIN PROGRAM
;------------------------------------------------------------------------------
START
MOVLB 00Fh
CLRF TRISA
CLRF TRISB
CLRF TRISC
CLRF ADCON1
CLRF ADCON2
CLRF ANSELH
CLRF ANSEL
CLRF LATC
MOVLW 003h
MOVWF LATC,1
MOVLW 00Eh ;left justify, FOSC/64,
MOVWF ADCON2,1 ; & 2TAD ACQ time
MOVLW 000h ;ADC ref = Vdd,Vss
MOVWF ADCON1,1 ;
BSF TRISB,4,1 ;Set RB4 to input
BSF ANSELH,2,1 ;Set RB4 to analog
BSF TRISB,7,1
BSF TRISB,6,1
MOVLW 0xC0
MOVWF WPUB,1
BCF INTCON2,7,1
RAB1
MOVLW 028h ;AN10, ADC off
MOVWF ADCON0,1
MOVLB 000h
MOVLW 0FFh
MOVWF RESULTLO,1
MOVLW 0FFh
MOVWF RESULTHI,1
RAB
MOVLB 00Fh
BTFSS PORTB,7,1
GOTO VKL1
NOP
NOP
GOTO RAB
VKL1
CALL ZADER1
VKL
MOVLB 00Fh
BTFSS PORTB,6,1
GOTO RABNACH
GOTO OSNOV
RABNACH
CALL ZADER1
GOTO RAB1
OSNOV
MOVLB 00Fh
MOVLW 029h ;AN10, ADC on
MOVWF ADCON0,1 ;
CALL ZADER
MOVLB 00Fh
BSF ADCON0,GO,1;Start conversion
ADCPoll
BTFSC ADCON0,GO,1 ;Is conversion done?
GOTO ADCPoll ;No, test again
; Result is complete - store 2 MSbits in
; RESULTHI and 8 LSbits in RESULTLO
MOVFF ADRESH,RESULTHI
MOVFF RESULTHI,WREG
MOVLB 000h
CPFSGT RESULTLO,1
GOTO DOP
GOR
MOVFF RESULTHI,RESULTLO
MOVFF RESULTHI,LATC
CALL ZADER
GOTO VKL
DOP
MOVLB 000h
CPFSEQ RESULTLO,1
GOTO DOP1
GOTO GOR
DOP1
MOVLB 000h
CPFSLT RESULTLO,1
NOP
GOTO VKL
ZADER
MOVLB 000h
MOVLW 04Fh
MOVWF zadr,1
ZAD
DECFSZ zadr,1,1
GOTO ZAD
NOP
NOP
RETURN
ZADER1
MOVLB 000h
MOVLW 0F2h
MOVWF zadr,1
MOVLW 0CCh
MOVWF zadr1,1
MOVLW 03Dh
MOVWF zadr2,1
NOP
NOP
NOP
ZAD1
DECFSZ zadr,1,1
GOTO ZAD1
DECFSZ zadr1,1,1
GOTO ZAD1
DECFSZ zadr2,1,1
GOTO ZAD1
NOP
NOP
RETURN
END
- Albert_V
- Друг Кота
- Сообщения: 4119
- Зарегистрирован: Чт сен 12, 2013 00:54:12
- Откуда: ЗаМКАДье. Там, где ЦУП
Re: PIC18F14K50 сбрасывается при использовании PORTC (asm)
Первое, что "бросилось в глаза": Когда вы делаете перезапись стартовых значений для сравнения по кнопке, подключенной к PORTB,6 - вместо записи в ADCON0 (выключение ADC), идёт обращение к регистру по адресу 00C2h (в вашем случае, проблема не в этом).
Подозреваю что проблема у вас в другом:
Вы сделали "подтяжку" кнопок к "+" внутренним Pull-up. Ток "подтяжки" там достаточно маленький (типовой 250µA) и, скорее всего, на длинных проводах вы "ловите помеху", которой достаточно для того, что бы "посчитать" что кнопка нажата (подавления "дребезга" у вас нет).
Сделайте подтяжку RB6 и RB7 к "+" резисторами номиналом 1К.
Так же, возможно, у вас проблемы с питанием (к примеру, не поставили конденсаторы по питанию или до них "километр провода")...
Что касается самой программы - имея "на борту" таймеры, "лепить" программные задержки не вижу смысла.
Подозреваю что проблема у вас в другом:
Вы сделали "подтяжку" кнопок к "+" внутренним Pull-up. Ток "подтяжки" там достаточно маленький (типовой 250µA) и, скорее всего, на длинных проводах вы "ловите помеху", которой достаточно для того, что бы "посчитать" что кнопка нажата (подавления "дребезга" у вас нет).
Сделайте подтяжку RB6 и RB7 к "+" резисторами номиналом 1К.
Так же, возможно, у вас проблемы с питанием (к примеру, не поставили конденсаторы по питанию или до них "километр провода")...
Что касается самой программы - имея "на борту" таймеры, "лепить" программные задержки не вижу смысла.
Re: PIC18F14K50 сбрасывается при использовании PORTC (asm)
я думаю не в нажатии кнопок проблема потому что организованно два цикла, один цикл проверяет нажата ли кнопка RB7 и если нажата то переходит в основной где происходят замеры и проверяется не нажата ли кнопка RB6. после нажатий на RB7 и RB6 выполняется задержка размером в секунду для исключения влияния дребезга. но если бы во время основного цикла RB6 ловила помеху то программа должна перейти в цикл обработки нажатия RB7,а не на метку START. я для точной уверенности и прописал после старта программы до выполнения этих двух циклов включение двух младших LCD они горят до нажатия RB7. так вот когда сбой происходит загораются две лампочки. питание пробовал от разных компьютерных блоков питания, от батареек. менял кондеры. все признаки происходящего сброса по питанию но происходит только во время замеров и отображения через портС. во всех других случаях проблем с питанием не наблюдается
- Albert_V
- Друг Кота
- Сообщения: 4119
- Зарегистрирован: Чт сен 12, 2013 00:54:12
- Откуда: ЗаМКАДье. Там, где ЦУП
Re: PIC18F14K50 сбрасывается при использовании PORTC (asm)
Вы точно уверены что программатор реально прописывает Config-и?
Проверьте: Если есть реакция на уровень на выводе MCLR (в вашей программе он отключен) - Config-и не прописываются.
Проверьте: Если есть реакция на уровень на выводе MCLR (в вашей программе он отключен) - Config-и не прописываются.
Re: PIC18F14K50 сбрасывается при использовании PORTC (asm)
подключил кнопку к MCLR, сброс при нажатии кнопки не происходит, а вот программа заработала без сбоев. почему так бывает?
- Albert_V
- Друг Кота
- Сообщения: 4119
- Зарегистрирован: Чт сен 12, 2013 00:54:12
- Откуда: ЗаМКАДье. Там, где ЦУП
Re: PIC18F14K50 сбрасывается при использовании PORTC (asm)
Это уже читать pdf нужно и смотреть что, к чему и как подключено.
Лично я, всегда делаю полный INIT контроллера при старте и даже думать не хочу что будет, если я не "пройдусь по всем регистрам" периферии.
Чётких условий в программе для Reset-а у вас нет (за исключением неполного Init-а).
Лично я, всегда делаю полный INIT контроллера при старте и даже думать не хочу что будет, если я не "пройдусь по всем регистрам" периферии.
Чётких условий в программе для Reset-а у вас нет (за исключением неполного Init-а).
Re: PIC18F14K50 сбрасывается при использовании PORTC (asm)
Огромное вам спасибо Albert_V! без вас не разобрался бы. искал причину где угодно только не здесь. И еще один вопрос с чем сравнивает АЦП уровень напряжения? в MPLABе с опорным 3.3 вольтами, в PROTEUSе с 5 вольтами, в реальности чип 4.5 вольта не измеряет уходит в сброс. а 3 вольта измеряет но по формуле рассчитываю получается что чип сравнивает с 5 вольтами. почему тогда 4.5 вольта отказывается измерять?
- Albert_V
- Друг Кота
- Сообщения: 4119
- Зарегистрирован: Чт сен 12, 2013 00:54:12
- Откуда: ЗаМКАДье. Там, где ЦУП
Re: PIC18F14K50 сбрасывается при использовании PORTC (asm)
Конкретно в вашей программе, на данный момент, опорным является напряжение питания (Vdd).
У вас есть возможность выбрать 3 варианта (регистр ADCON1).
Добавлено after 7 minutes 22 seconds:
Про опорное, попробую объяснить "на двух пальцах":
Если входное напряжение равно "0" - в идеале, с ADC вы получите 000h. Если входное равно (или превышает) опорное - максимальное значение (для 10-ти битного - 1023d).
У вас есть возможность выбрать 3 варианта (регистр ADCON1).
Добавлено after 7 minutes 22 seconds:
Про опорное, попробую объяснить "на двух пальцах":
Если входное напряжение равно "0" - в идеале, с ADC вы получите 000h. Если входное равно (или превышает) опорное - максимальное значение (для 10-ти битного - 1023d).
Re: PIC18F14K50 сбрасывается при использовании PORTC (asm)
напряжение питания у меня 5 вольт, 3 вольта измеряю и полученное бинарное значение перевожу по формуле 5/1023*бинарное значение=3 вольта. Так если чип сравнивает с 5 вольтами почему отказывается замерять 4.5 вольта?
при измерении 4.5 вольта в сброс уходит, и программа начинается с начала
при измерении 4.5 вольта в сброс уходит, и программа начинается с начала
- Albert_V
- Друг Кота
- Сообщения: 4119
- Зарегистрирован: Чт сен 12, 2013 00:54:12
- Откуда: ЗаМКАДье. Там, где ЦУП
Re: PIC18F14K50 сбрасывается при использовании PORTC (asm)
Он не может "отказаться измерять" (по крайней мере, за мою практику я ни разу с этим не сталкивался).
Вы берёте только старший байт (не проверял) 10-битного числа, поэтому делить надо на 256.
Так же, не забывайте, что выходное сопротивление источника напряжения (которого измеряете) должно быть как можно меньше. Грубо говоря, если последовательно со входом ADC вы поставили 100К - про измерения можно забыть.
Надеюсь, входное на ADC не превышает напряжение питания?
-----
P.S.
Если вы говорите про симулирование - тут я не советчик.
Протезом и пр. принципиально не пользуюсь.
Вы берёте только старший байт (не проверял) 10-битного числа, поэтому делить надо на 256.
Так же, не забывайте, что выходное сопротивление источника напряжения (которого измеряете) должно быть как можно меньше. Грубо говоря, если последовательно со входом ADC вы поставили 100К - про измерения можно забыть.
Надеюсь, входное на ADC не превышает напряжение питания?
-----
P.S.
Если вы говорите про симулирование - тут я не советчик.
Протезом и пр. принципиально не пользуюсь.
Re: PIC18F14K50 сбрасывается при использовании PORTC (asm)
так как только 8 бит я к бинарному результату прибавляю 2 нуля с права. 9 вольтовую батарейку делил 3 резисторами по 460 КОм каждый, прекрасно измеряет 3 вольта, а вот 4.5 не хочет, в сброс уходит, я тоже считаю что должен все лампочки зажечь.
- Albert_V
- Друг Кота
- Сообщения: 4119
- Зарегистрирован: Чт сен 12, 2013 00:54:12
- Откуда: ЗаМКАДье. Там, где ЦУП
Re: PIC18F14K50 сбрасывается при использовании PORTC (asm)
Выложите фото вашей платы (или макета).
Re: PIC18F14K50 сбрасывается при использовании PORTC (asm)
по фото трудно будет что разобрать ) куча всего не подключенного не убрано с платы. не понятно следующее - судя по включенным лампочкам при измерении 3 вольт загораются почти все, отсюда следует что чип сравнивает с 3.3 вольта. а применяя формулу получается что с 5 вольтами.??????
- Albert_V
- Друг Кота
- Сообщения: 4119
- Зарегистрирован: Чт сен 12, 2013 00:54:12
- Откуда: ЗаМКАДье. Там, где ЦУП
Re: PIC18F14K50 сбрасывается при использовании PORTC (asm)
Надеюсь, вы не про симуляцию?
Какое напряжение питания реального PIC18F14K50?
Какое напряжение питания реального PIC18F14K50?
Re: PIC18F14K50 сбрасывается при использовании PORTC (asm)
нет не про симуляцию, 5 вольт от PC БП.


