아날로그 문제에 디지털

D

DarkSilver

Guest
안녕

저는 마이크로 컨트롤러는 현재 작업에 라이브러리를위한 PIC는 서브루틴 매크로 / 작은 그래서 내가 앞으로 더 유창하게 할 수에서 작동합니다.그러나, 내가 해결할 수없는 전 그냥 실행에있어 문제.
내가하고 싶은) 테스트 목적만을위한 읽기까지 값을 아날로그 디지털 속도로 다양한에서 사용을 전환, 그 값은 LED를 깜박하는 (.문제는 역사적 사실입니다 ADC가 그것이 계속 깜박이에서 상수 값을 왜 내 속도에 상관없이.내가 대신 ADC는 정상적인 변수를 읽을 수있는 노력을 교체했고 그것은 완벽했습니다.난 할 수 PORTC 디스플레이 그것의 가치에 이후, 작품 또한 알지 ADC가.
문제는 그것을하는 것은, 내가이 무엇인지 알아낼 수없는 잘못 그냥, 그래서 고칠 수 없어 난.

<img src="http://www.edaboard.com/images/smiles/icon_cry.gif" alt="우는 또는 아주 슬픈" border="0" />여기에 코드는 어셈블리 :
코드 :

;************************************************* *********************

; 프로젝트 이름 : 기본 사항

; 저자 : 데니스 Fredriksson

; 작성 날짜 : 2010년 7월 9일

; 프로젝트 단계 : 알파

;************************************************* *********************

; 프로세서 : PIC는 16F690

; 핀 할당 :

; - 없음

;************************************************* *********************

; 댓글 :

; 없음까지

;************************************************* *********************;************************************************* *********************

; 컴파일러 설정

;************************************************* *********************

리스트 P는 = 16F690

#은 <p16F690.inc> 포함-302 errorlevel;************************************************* *********************

; 그림 구성

;************************************************* *********************

_CP_OFF & _CPD_OFF 및 _BOR_OFF & _MCLRE_ON & _WDT_OFF & _PWRTE_ON & _INTRC_OSC_NOCLKOUT & _FCMEN_OFF & _IESO_OFF __CONFIG;************************************************* *********************

; 변수

;************************************************* *********************

INT_VAR UDATA_SHR

vDC1 해상도 1

vDC2 해상도 1

vDC3 해상도 1

vAdc 해상도 1

vTest 해상도 1;************************************************* *********************

; 매크로 / 함수

;************************************************* *********************; RegSet - 설정 특정 레지스터의 비트 1

; reg가 : 목적지 레지스터

; 비트 : 비트가 1로 목적지에 등록을 설정할 수

RegSet 매크로 reg, 비트

banksel reg

bsf의 reg, 비트

endm; RegClear - 설정 특정 레지스터의 비트 0

; reg가 : 목적지 레지스터

; 비트 : 비트가 0으로 대상에 등록을 설정할 수

RegClear 매크로 reg, 비트

banksel reg

bcf의 reg, 비트

endm

; REGEDIT을 - 데이터를 특정 레지스터를 부여

; reg가 : 목적지 레지스터

; 날엔 : 8 비트 데이터 레지스터는 목적지에가는

RegEdit 매크로 reg, 날엔

banksel reg

movlw의 날엔

movwf reg

endm; RegEditF는 -; 다른 레지스터에서 일부 데이터를 특정 레지스터를 부여

; regD가 : 목적지 레지스터

; Rego : 데이터가 목적지에 등록 보내 원산지 등록

RegEditF 매크로 regD, Rego

banksel Rego

movfw의 Rego

banksel regD

movwf regD

endm; DelayMs이 - 엑스 마이크로 초 정도 지연을 추가합니다

; 석사 : 마이크로 초의 양을

DelayMs 매크로 석사

movlw 처지

전화 sDelay10

endm; DelayMsF이 - 엑스 마이크로 초 동안 지연, 데이터 레지스터에서 가져온 추가

; 어떤 마이크로 초의 양은 저장됩니다 reg : 원산지 등록

DelayMsF 매크로 reg

movfw의 reg

전화 sDelay10

endm; A2DConv - Preforms / 디 전환

; 필요 하드웨어 설정을 사용하기 전에 (,), PIC는 특정 ADCON1 및 ANSEL ADCON0를 참조하십시오

A2DConv 매크로

전화 sAdcCon

endm; IfEqual가 - 마면 = B 체크

; reg : 원산지 등록 ()

, 씨엠 피 :이 숫자가 비교 (B)를

사실이 경우, 하위 : 서브루틴이 호출

IfEqual 매크로 reg, 씨엠 피, 하위

movfw의 reg

sublw의 씨엠 피

btfsc 상태, 지

전화 하위

NOP

endm; IfNotEqual가 - 마면! = B 확인

; reg : 원산지 등록 ()

, 씨엠 피 :이 숫자가 비교 (B)를

사실이 경우, 하위 : 서브루틴이 호출

IfNotEqual 매크로 reg, 씨엠 피, 하위

movfw의 reg

sublw의 씨엠 피

btfss 상태, 지

전화 하위

NOP

endm; IfGreater가 - 마면> B 체크

; reg : 원산지 등록 ()

, 씨엠 피 :이 숫자가 비교 (B)를

사실이 경우, 하위 : 서브루틴이 호출

IfGreater 매크로 reg, 씨엠 피, 하위

movfw의 reg

sublw의 씨엠 피

btfss 상태으로 C

전화 하위

NOP

endm; IfLesser가 - 마면 <B 체크

; reg : 원산지 등록 ()

, 씨엠 피 :이 숫자가 비교 (B)를

사실이 경우, 하위 : 서브루틴이 호출

IfLesser 매크로 reg, 씨엠 피, 하위

movfw의 reg

sublw의 씨엠 피

btfsc 상태으로 C

전화 하위

NOP

endm;************************************************* *********************

; 주요 프로그램은 여기서 시작

;************************************************* *********************

0 org에서;************************************************* *********************

; 기본 프로그램 설정

;************************************************* *********************

시작

RegEdit의 TRISC, 0x00

RegEdit의 TRISA, 0xFF

RegEdit ADCON1, 0x10

RegEdit의 ANSEL, 0xFF

RegEdit ADCON0, 나타내고 0x01

RegEdit의 vTest, 0.10;************************************************* *********************

; 메인 루프

;************************************************* *********************

MainLoop

A2DConvRegEdit의 PORTC, 0xFF

DelayMsF vAdc

RegEdit의 PORTC, 0x00

DelayMsF vAdc고토 MainLoop;************************************************* *********************

; 서브루틴

;************************************************* *********************

sDelay10가; 밀리초 X의 시간을 10 정도 지연을 추가합니다

movwf vDC3

sDelay2

movlw 0.13

movwf vDC2

clrf vDC1

sDelay1

decfsz vDC1, f를

고토 sDelay1

decfsz vDC2, f를

고토 sDelay1

decfsz vDC3, f를

고토 sDelay2반환sAdcCon; / 패 전환 서브루틴

NOP

NOP

NOP

NOP

NOP

bsf은 ADCON0 이만

btfss ADCON0 이만

고토 $ -1

banksel ADRESH

swapf ADRESH, 우

movwf vAdc반환;************************************************* *********************

; 최종 지시자

;************************************************* *********************


 
귀하의 코드를 저장 결과에 vAdc ADC는 다음 vAdc 넘겼습의 가치에 따라 portc.

이런 일들이 몇 것이다보십시오 :

1) 루프의 기본, 바로 후, ADC를 못했다 "vAdc, 200 지정할 하드"같은 가치를 위해 vAdc, Regedit를 portc에서 볼 점멸 관찰할 수있다면 당신은.또한 속도를하는지 이해 당신이 만약 변수를 깜빡)이 다를 경우에는 200 (vAdc 값을 할당합니다.

2) 퓨즈 설정, 또는 하드웨어 초기화면 안, 초점에있는 지연 루틴, MCU의 프로그램.

3) 초점에 ADC를 루틴 경우 않습니다.

행운을 빌어요.

 
1) 나도 해봤다 이미 그것은 매력처럼 작동합니다.해당 설정의 MCU 제품이거나 아무 문제로 지연 루틴.
3) 나는 ADC는 추측은 잘못된 뭔가 거기에서 반환되는 값이지만, 그것으로 잘못이 아니라 무슨 물론 이죠.

하지만 당신의 도움에 대한 감사

<img src="http://www.edaboard.com/images/smiles/icon_smile.gif" alt="미소" border="0" />
 
올바른들이 있는지 수 있도록 데이터 시트에 대한 확인 설정을 ADC가.

 
나는 시트 pic16f690와 확인 제 설정을하고는 정확 했지 다.제가 테스트를 한 일부와 루프의 주요 외부 매크로를 배치 ADC를.그것은 부분적으로 일한 시간, 같은 그것에 있지만 2 프로그래머), PicKit 변경에 깜빡 속도 (온 / 오프를 통해 것이 허용 날, 그것은 무작위 것 조금.가끔은, 속도 같은 것이 막대기로 깜박도 바꿀 수있다면 그것은 시도 것이 몇 내가 값을 변경할 그거야 후에만.
이유가 뭘까요?

 
나는 수치와 함께 말하고 잘못 아무것도 당신을.내가 PORTC 수 ADC의에서 결과를 보내 벌금 prefectly와 다른 참조 방법 후에 좋은 반응을 보이는가 그것.그럼에도 불구하고, 나는 지연을 이유로 반환 값을 사용할 수 없습니다.

내가 improvments 볼 것없이 모든 노력 설정을위한 ADCON1.

왜 호환되지 않는 것이 ANSEL과 ADCON0의 수 설정은?<img src="http://www.edaboard.com/images/smiles/icon_neutral.gif" alt="중립국" border="0" />

이것은 땅콩 내게는 운전

 
확인을 누릅니다.거기에 수치로 잘못 아무것도.

 
야호!덕분에 많은 Millwood, 난 드디어 찾고있어, 그것은.윌은 PicKit2 온과 비교의 예제 코드를 내, 내가 예를 VSRotate의 발견과 차이를 사이에 그들의 A2D 예.그들은 분명히 다른 연구에 기초.
그럼 대체하여
코드 :sAdcCon; / 패 전환 서브루틴

NOP

NOP

NOP

NOP

NOP

bsf은 ADCON0 이만

btfss ADCON0 이만

고토 $ -1

banksel ADRESH

swapf ADRESH, 우

addlw .1

movwf vAdc반환

 

Welcome to EDABoard.com

Sponsor

Back
Top