Микроконтролери и електроника
http://mcu-bg.com/mcu_site/

проблем с 10 bits adc и pic16f872, вече две седмици
http://mcu-bg.com/mcu_site/viewtopic.php?f=7&t=2818
Страница 1 от 1

Автор:  kymro [ Нед Авг 27, 2006 8:23 pm ]
Заглавие:  проблем с 10 bits adc и pic16f872, вече две седмици

да значи имам следният проблем, уж съм конфигурирал всичко правилно , но искам да използвам 10 битово ацп на RA0 , по стандартния начин, но не мога да получа десет битова стойност, а ми трябва точно такова чудо:)
на входа на RA0 имам 4,7 килоомов потенциометър свързан между +5 волта и 0 волта (маса)
това ми е конфигурирането на ацп-то:

adc_conf bcf status, rp0
bsf status, rp1

movlw b'10001110'
movwf adcon1

bcf status, rp1
movlw b'01000000'
movwf adcon0

bsf status, rp1
movlw b'00000000'
movwf pie1

bcf status, rp0
clrf adresh
bsf status, rp0
clrf adresl


а това дефакто ми е управлението му:

loop bcf status, rp0
bcf pir1, adif
bsf status, rp0
bsf pie1, adie


bcf status, rp0
bsf adcon0, adon

movlw d'20'
movwf msloop

loop3 decfsz msloop, f
goto loop3





bcf status, rp1
bsf adcon0, go
lopp
btfsc adcon0, go
goto lopp



bcf status, rp1
bcf status, rp0
movf adresh, w
movwf h_byte
bsf status, rp0
movf adresl, w
movwf l_byte

call b2_bcd

от тук си го пра6там на седем сегментна индикация, промлемът е че adresh и adresl дефакто имат една и съща стойност, а и двете клетки се четат само ако преди тях се се нулира бит RP0, т.е се намират в банка 0, което малко не го схващам, понеже microchip ми казват друго в тяхния си pdf за този процесор:)

със сигурност грешката е някаква супер малоумна, ама аз вече изперках, а се мъча вече две седмици, а срокът ми за предаване наближава:)
благодаря на всички които поне прочетат това нещо:)

Автор:  VSU [ Нед Авг 27, 2006 8:59 pm ]
Заглавие: 

ADCON0 = 0x81; това си го направи както ти аресва
ADCON1 = 0x84; това си го направи както ти аресва


MOVLW 0x81
BCF 0x3, 0x5
MOVWF 0x1f
MOVLW 0x84
BSF 0x3, 0x5
MOVWF 0x1f
initialization
=================
work

ADGO = 1;
BSF 0x1f, 0x2

while(ADGO) continue ;
et1 BTFSC 0x1f, 0x2
GOTO et1

BCF 0x3,0x5 ; banka 0
MOVF 0x1e, W
MOVWF 0x70 ;HIGH BYTE
BSF 0x3, 0x5 ; banka1
MOVF 0x1e, W
MOVWF 0x71 ; LOW BYTE

0x70 i 0x71 това си го направи както ти аресва

Автор:  kymro [ Нед Авг 27, 2006 10:49 pm ]
Заглавие:  проблема се промени леко

ми то всичко тръгна, ама донякъде, в смисъл вече си чете adresh перфектно, но adresl ми го чете като постоянна нула:)
но все пак има някакъв напредък:)
в смисъл на индикацията имам само три стойности: 256, 512 и 768:)
ако раменя low_byte и high_byte имам съответно 1, 2 и 3 :)

Автор:  VSU [ Нед Авг 27, 2006 11:12 pm ]
Заглавие: 

пробвай да напишеш някакво постоянно 4исло в буфера на индикацията ти и виж дали правилно го изписва може там да ти е проблема тва дето съм ти го написал трябва да работи само дето е за 3 канала АДЦ поправи си го да е за 1 и виж как са ориентирани данните ляво или дясно

Автор:  kymro [ Нед Авг 27, 2006 11:35 pm ]
Заглавие: 

много тъпо ми стана, ама ето така се оправи:

BSF status, rp0 ; banka1
MOVF 0x1e, W
bcf status, rp0
MOVWF l_byte ; LOW BYTE

благодаря много за оказаната помощ иначе:)

Автор:  VSU [ Пон Авг 28, 2006 10:43 am ]
Заглавие: 

Ами те затова са сложили от адр 0x70 да има достъп от вси4ки банки

Автор:  Gogo [ Пон Авг 28, 2006 11:03 am ]
Заглавие: 

@kymro, ако ще пишеш на асемблер, по-добре да замениш 16ф872 с 18Ф1220 /1320 (ако не трябват повече пинове). Ще ти е в пъти по-лесно, а и в цената няма много разлика.

Страница 1 от 1 Часовете са според зоната UTC + 2 часа [ DST ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/