Телесистемы
 Разработка, производство и продажа радиоэлектронной аппаратуры
На главную   | Карта сайта | Пишите нам | В избранное
Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс.
e-mail:jobsmp@pochta.ru

Телесистемы | Электроника | Конференция «Микроконтроллеры и их применение»

Непонятный ADC в PIC12F675 (всегда нули)

Отправлено Pitty 09 февраля 2007 г. 18:01


Доброго времени суток. Стал я изучать сие животное, с другой перефирией вроде бы разобрался, но на АЦП вдруг встал. Код такой:
;--Инициализация:
main: movlw b'00001101'
movwf ADCON0
btfss ADCON0, 0x00
goto main
bsf STATUS,RP0 ; set file register bank to 1

movlw b'01111000'
movwf ANSEL
clrf ADRESL
bsf TRISIO, SB ;Включили SB на вход.
bsf TRISIO, ANAIN ;Включили входа АЦП на вход. В)
bsf TRISIO, SYNC_PIN ;Включили GP1 на вход.(SYNC)
bcf TRISIO, PWM_PIN ;Включили GP2 на выход. (PWM)

bsf WPU,PWM_PIN ;включили подтягивающий резистор на PWM
bcf WPU, SB ;отключили подтягивающий резистор на SB1
bcf WPU, 0x00 ;отключили подтягивающий резистор на GP0
bcf WPU, 0x01 ;отключили подтягивающий резистор на GP1
bcf WPU, ANAIN ;отключили подтягивающий резистор на GP4 (Аналоговый вход по умолчанию)
MOVLW 0x07 ;Отключили ноги от компаратора
MOVWF CMCON ;чтобы он не мешал


===-------------------============================


К ногам GP0, GP1 и GP4 (AN3) подаю попеременно напряжение через резисторик (и без пробовал тоже) в итоге на 3хразрядном 7сегментном LCD всегда нули. Суть программы в том, что производится АЦП попеременно с ног GP0, GP1, GP4, значение в десятичном формате выводится на LCD и в зависимости от выбранной ноги ставится десятичная точка в соответствующем разряде. Но в итоге - всегда получаем 000. Вот такая бякость. ПОможите, кто чем может.
===================-------------------------==========================


LOOP:
bsf ADCON0, GO
WAIT_ADC:
btfsc ADCON0, GO
goto WAIT_ADC

movf ADRESH,w
movwf Y

CALL LCD_PREP ; процедура, перелопачивает 8бит в 3 BCD

movlw 0x03
xorwf ANALOG,w
btfss STATUS, Z
goto $+2
;Сюда попадаем, если ANALOG=0x03
bcf LCD1,5 ; Это мы так точку десятичную на LCD ставим

movlw 0x02
xorwf ANALOG,w
btfss STATUS, Z
goto $+2
;Сюда попадаем, если ANALOG=0x02
bcf LCD2,5

movlw 0x01
xorwf ANALOG,w
btfss STATUS, Z
goto $+2
;Сюда попадаем, если ANALOG=0x01
bcf LCD3,5


CALL LCD ; Выводим содержимое регистра Y ; на LCd
CALL DELAY_500 ;(задержка 500 мс)
decfsz ANALOG,f
goto $+3
movlw 0x03
movwf ANALOG

movlw 0x03
xorwf ANALOG,w
btfss STATUS, Z
goto $+3
;Сюда попадаем, если ANALOG=0x03
bsf ADCON0, 0x02
bsf ADCON0, 0x03
movlw 0x02
xorwf ANALOG,w
btfss STATUS, Z
goto $+3
;Сюда попадаем, если ANALOG=0x02
bcf ADCON0, 0x02
bcf ADCON0, 0x03

movlw 0x01
xorwf ANALOG,w
btfss STATUS, Z
goto $+3
;Сюда попадаем, если ANALOG=0x01
bsf ADCON0, 0x02
bcf ADCON0, 0x03

CALL DELAY_500

goto LOOP



Составить ответ | Вернуться на конференцию

Ответы


Отправка ответа
Имя*: 
Пароль: 
E-mail: 
Тема*:

Сообщение:

Ссылка на URL: 
URL изображения: 

если вы незарегистрированный на форуме пользователь, то
для успешного добавления сообщения заполните поле, как указано ниже:
введите число 34:

Перейти к списку ответов | Конференция | Раздел "Электроника" | Главная страница | Карта сайта

Rambler's Top100 Рейтинг@Mail.ru
 
Web telesys.ru