ADC를하는 방법에 대한 결과를 표시

T

terka

Guest
안녕하세요 모두를 위해.

다음 코드 :

코드 :플로트 온도; / / 현재 온도

int adc_result; / / 가게 read_adc 8 비트 모드 ()

온도 = 5 * 100 * adc_result/255.0; / / LM35 출력
 
안녕

이 유용하게 쓸 수 www.coolcircuit.com/
금속 2006년 1월 21일 2:31에 편집한 마지막;에서 편집한 1 시간 총

 
안녕

희망이 당신의 최종 결과와 코드를 게시할 수있습니다.

감사합니다

 
안녕하세요,
당신이하고있는 C 컴파일러를 사용하는 어떤 마이크로 컨트롤러.

안녕

 
안녕

내가 사용하는 CCS 및 16F84 싶어 ...

감사합니다

 
난 너무 lm35 기압계를 사용하여 건물 해요,하지만 난은 ASM 코드를 써주세요.올린날짜 27 분 후 :온도의 경우 두 자릿수, 그냥, 그리고 LCD에 결과의 자릿수가 가장 중요한 첫 번째와 두 번째 디스플레이는 점이 표시, 그리고 세 번째 숫자를 표시합니다.
만약 한 자리, 그냥 먼저 자리를 LCD에 표시되지 않습니다.

 
LCD 화면에 내 코드를 매우 잘 이해하고있다지만, 아이디어 7 - 세그먼트 디스플레이의 온도를 표시합니다.

감사합니다

 
안녕

당신은 동일한 사이트에있는 볼트 프로젝트에서는 벌써는 매우 쉽게 증서에 게시한 7 세그먼트 자리 코드 예제와 ADC 계산을 발견할 것이다.당신은 1 차 프로젝트에서, 그리고
7 세그먼트 자리 코드는 볼트의 온도 코드를 사용할 수있습니다.

행운을 빕니다

 
금속
씨 링크 줘 프로젝트입니다 어디 볼트를 즐겁게 해줄 수있다.

 
안녕

여기 볼트 프로젝트 www.coolcircuit.com / 프로젝트 / 미터 / index.html을합니다

또한 당신이 유용할 것입니다 www.coolcircuit.com/project/digitemp/

 
고마워 금속 씨.멋진 프로젝트입니다.또한 멀티플렉싱 코드를 7 세그먼트를 찾고 있어요.난 당신의 코드를 이해 못해 봤어.당신이 조금은 설명해 주시겠습니까.그것은 내게 도움이 될 것입니다.

 
코드 :/ / 사용 PIC16F676

# 포함 <16F676.h>

/ / ADC의 해상도를 10 비트입니다

# 디바이스는 ADC = 10

/ / 퓨즈 정의!!

# INTRC_IO, NOWDT, PUT을, NOPROTECT, BROWNOUT, NOMCLR 퓨즈

/ / 정의 클럭이 MCU의 사용

# 사용 지연 (시계 = 4000000) / / 4MHz 클럭

/ / 그럴 필요가 어떤 방식 으로든!!

# ROM과 0x3ff = (0x3444)

/ / 정의 PIC는 포트

# 바이트 PORTA = 0x05

# 바이트 PORTC = 0x07

# 바이트 TRISA = 0x85

# 바이트 TRISC = 0x87

/ / 내가 필요한 또 다른 이름이 표시되지 않는 포트를 redifne

PORTA SPORTA 정의 #

SPORTC PORTC 정의 #

/ / 정의 interuupts에 대한 몇 가지 상수

TICKS_BETWEEN_INTERRUPTS 5000 정의할 # / / 5000

INTERRUPT_OVERHEAD 35 정의 #

(0xFFFF - (TICKS_BETWEEN_INTERRUPTS - INTERRUPT_OVERHEAD)) TMR1RESET 정의 #

/ / 여기는 7 세그먼트 디코더 가치있는

const 숯불 SegCode [11] = (0x40, 0x57, 0x22, 0x06, 0x15, 0x0c, 0x08, 0x56, 0x00, 0x04,를 0xFF);

/ / 0 1 2 3 4 5 6 7 8 9

/ / 출력을 조작 디지트, 한 시간 (MUX는)에서 사용

const 숯불 칼럼 [3] = (0x02, 0x01, 0x04);

정적 숯불 세그먼트 [3] = (0x7F, 0x7F, 0x7F);

정적 서명 숯불 ColCount = 0x00;

/ / PIC는 CPU를 intialization 함수 원형

무효 CPU_SETUP (무효);

/ / 디스플레이 함수 원형

무효 디스플레이 (무효);

/ / ADC의 결과를 조작 함수 원형

무효 HTO7S (서명 int32 인분 포함);바이트 난;

서명되지 않은 결과 int32;

/ / 인터럽트 처리기 루틴을 사용 타이머 1 인터럽트

# INT_TIMER1

무효 Timer1 (무효)

(

/ / 설정 타이머 1을 사용하는 디스플레이에 대한 방해 muxing

set_timer1 (TMR1RESET);

/ / 7 seg 자리에 결과 표시

디스플레이 ();

)주요 무효 ()

(

서명되지 않은 숯불 난;

초기화 PIC는 구성, 좋은 방법은 그 행위를 할 수

CPU_SETUP ();동안 () 사실

(

결과 = 0;

/ / 20 번 루프를 사용하여 읽기 위해이 ADC의 결과

위한은 (i = 0; 나는 <20; 난 )

(

set_adc_channel (3);

delay_ms (1);

/ / 드디어, reslt 20 ADC의 수치가 포함됩니다

결과 = 결과 read_adc ();

)

/ / 결과 = 0x3fe;

/ / 20 ADC의 결과 수치의 평균, 그리고 가져가

/ / 이것을 조작할 수 있기를 7 자리 숫자를 표시하는 데 사용할

HTO7S (result/20);

delay_ms (200);

))무효 CPU_SETUP ()

(

/ / 비교기 모듈을 사용하지

setup_comparator (NC_NC_NC_NC);

/ / 아날로그 입력으로 쓰리, refrences vss 있으며, Vdd

setup_adc_ports (sAN3 | VSS_VDD);

/ / 사용하기 위해 64 = 육십사분의 백만에 ADC는 내부 클럭 나누기

setup_adc (ADC_CLOCK_DIV_64);

TRISA = 0b00011000;

PORTA = 0x27;

TRISC = 0b00000000;

PORTC = 0x37;/ / 내부 클럭을 사용하여, prescalar 비율은 1입니다

setup_timer_1 (T1_INTERNAL | T1_DIV_BY_1);

/ / 재설정 타이머 1 지금

set_timer1 (TMR1RESET);

/ / 전역 옵션 비트 인터럽트 레지스터 세트

enable_interrupts (글로벌);

/ / 이제 타이머 1 인터럽트 활성화

enable_interrupts (INT_TIMER1);

)//-------------------------------------

/ / 디스플레이 루틴

//-------------------------------------

무효 표시 ()

(

모두 자리를 열 및 세그먼트 G 조 / / 끄기

PORTA = 0b00100111;

세그먼트 / / 두려웠던을

PORTC = 0b00111111;

delay_cycles (2);/ / 여기에 대한 루프를 사용할 수 있겠지만, 그것은 스택 오버플로가 발생할 것입니다!!

만약 (ColCount> = 3)

ColCount = 0;

/ / 디스플레이 자리 대응

SPORTC = 세그먼트 [ColCount];

/ / maniplate 자리의 가치 질서의 비트을 portc과 porta.5

7 / / 그것 XOR,이 네 스스로 해결은 쉽지

SPORTA = ((세그먼트 [ColCount] & 0b01000000)>> 1) | (열 [ColCount] ^ 0x07);

ColCount ;

)//--------------------------------------

/ / Convet은 HEX 2 바이트로 7 - 세그먼트 코드

//--------------------------------------

무효 HTO7S (서명 int32 인분 포함)

(서명되지 않은 입술 int32;세그먼트 [0] = SegCode [30 * Num/10230];

/ / 만약 첫번째 숫자는 0, 끄라구

만약 (세그먼트 [0] == 0x40)

세그먼트 [0] =를 0xFF;

/ / 결과를 위해서는 자리에, 수학 마술,하지만 똑똑한 사람이 그것을 표시하도록 조작할 수있습니다.

/ / 설명을 나에게 양도 증서에 다른 게시물에 대한 요구 사항

입술 = 30 * 인분 포함 % 10230;

세그먼트 [1] = SegCode [10 * res/10230];

입술 = 10 * 입술 % 10230;

세그먼트 [2] = SegCode [10 * res/10230];

)

 
하이

3 자리의 경우 최종 결과
다음 U 이렇게 할 필요가
이 예제 프로그램을 그림 C로 작성된 것입니다
코드가 어떤 의견이 없어 죄송합니다
그냥 봐요.아주 이해하기 쉽습니다
광고 검색 결과에 표시되는 다음 3 자리 숫자로 나눈 것입니다
타이머를 사용하여 7 세그먼트# 포함 <pic.h>
int 난, DISP, 임시직, seg3, seg2, seg1, 결과;
숯불 조회 [] = (0x3f, 0x06, 0x5b, 0x4F, 0x66, 0x6d, 0x7d, 0x07, 0x7F, 0x6f);
주요 무효 ()
(
ADCON0 = 0x89;
ADCON1 = 0x80으로;
TRISA =를 0xFF;
PORTA = 0x00;
TMR1IE = 1;
TMR1H = 0xe9;
TMR1L = 0;
TRISD = 0x00;
PORTD = 0x00;
TRISB = 0x00;
PORTB = 0x00;
T1CON = 0x01;
GIE = 1;
PEIE = 1;(1) 동안
(

지연 ();
ADGO = 1;
동안 (ADGO);
결과 = ADRESH * 256 ADRESL;
결과 = (int) Result/10.24;
분할 ();
)

)인터럽트 ISR 무효 ()
(

(TMR1IF)
(
= 0 TMR1IF;
TMR1L = 0x00;
TMR1H = 0xe9;
DISP ;
만약 (DISP> 2)
DISP = 0;

만약 (DISP == 0)
(
RB3 = 0;
RB1 = 1;
PORTD = 조회 [seg1];
)
만약 (DISP == 1)
(
RB2 = 1;
RB1 = 0;
PORTD = 조회 [seg2];
)

만약 (DISP == 2)
(
RB3 = 1;
RB2 = 0;
PORTD = 조회 [seg3];
)
)
)

지연 ()
(
위한은 (i = 0; 난 <30000; 난 );
)
분할 ()
(
임시직 = 결과;
seg3 = temp/100;
임시직 = temp %를 100;
seg2 = temp/10;
seg1 = temp %를 10;
)올린날짜1 분 후 :하이

만약 어떤 의심도 여전히 유
아무런 문제가 날 오후 보내

 
언어별로 같은 금속은 ASM의 코드 스타일.
pvinbox (에서) yahoo.com C 언어의 장점을 이용한다.
내가 코드의 라인에 대한 질문이있습니다 :
인용구 :

결과 = (int) Result/10.24;
 
안녕

패럴랙스이 프로젝트 ... / 10 / 100 .... 정말 좋은 ...... 유일한 분단의 int 부분을 사용하기위한 코드를 가진 .....

패럴랙스 아날로그 디지털로 ....

진심으로 감사합니다

안녕

 
xmli1976 썼습니다 :온도의 결과 소수점 숫자, 10월 24일로 나눈 이유가 있나요?
 
난 단지 그 코드는 금속 게시물입니다은 ASM에 쓸 코드처럼 말하고 싶습니다.

실비오 :
중국 사람이에요? 중국 사람처럼 영어를 씁니다.

 
아뇨, 아니에요.그걸 알아내기 쉽지 않아 그게 내 모국어 영어.
만약 당신이 나와 올바른 문법과 단어의 철자와 전혀 상관 없어 PM 보낼 수있습니다.
정말 난 상관 안해.나는
내 실수에서 배운다 allways에 열심입니다.

일단, 진정한 영국인이 가장 중요한 것은 내가
할 수 있다고하더라도 그와 같은 말을하지 않습니다 적어도 내게 통신할 수와 의견을 변경했다.

중국은 같은 일을합니다.더욱, 그들이 나에게 진정한 영국인처럼 그 때 난 내 아내와 내 나라의 언어로 얘기 가까이 느낄 얘기.

 
안녕하세요 .... 음 ..... uffff ... 난 이미 마일 코드의 작동 ...

내가 AN0에 LM35DZ (0 °
~ 100 ℃)를 연결했습니다 ... 수식
° C에서 Full_Scale = Vref * * read_adc () / (2 ^ n - 1), LM358 .... 어디
n은 8 비트 2에 의해, 20mV / ° C. LM35 출력 증식을 구하십시오. 8 비트 ADC 해상도에 따라 ...

°는 C = 5 * 100 * read_adc () / 255 = 500 * read_adc () / 255

드라이브 소수점하려면 resitor 의해 DP는 디스플레이에 연결할 PORTC.1 ...즐기다코드 :# 포함 <16f877a.h>/ / # 장치 *= 16

# 디바이스는 ADC = 8

# 퓨즈 NOWDT / / 아니 조심 도그 타이머

# 퓨즈 XT는 / / 크리스탈 OSC <= 4MHZ

# 퓨즈하는 PUT / / 파워 최대 타이머

퓨즈 NOPROTECT / / 코드 읽기에서 # 보호되지

ICD # 퓨즈 NODEBUG / / 아니 디버그 모드

/ BROWNOUT # 퓨즈 / 재설정을 할 때 brownout 감지

# 퓨즈 NOLVP / / 아니 낮은 전압 prgming, B3을 (PIC16) 또는 B5를 (PIC18)를 사용 / O를

# 퓨즈 NOCPD / / 아니 전기 보호

# 퓨즈 NOWRT / / 프로그램 메모리 보호를 작성하지

# 사용 지연 (시계 = 4000000, RESTART_WDT)5000 정의 TICKS_BETWEEN_INTERRUPTS # / / 5000

INTERRUPT_OVERHEAD 35 정의 #

(0xFFFF - (TICKS_BETWEEN_INTERRUPTS - INTERRUPT_OVERHEAD)) TMR1RESET 정의 ## 바이트 PORTB = 0x06 / / 그것 모두 7 세그먼트를 표시 conneted가

# 바이트 PORTC = 0x07 / / 그것을 모두 디스플레이 드라이버가 연결되어 BC557

# 바이트 TRISB = 0x86

# 바이트 TRISC = 0x87/ / / / 캘리포니아 표시

/ / / / 세그먼트 핀이 활성화가 낮은 상태를 ..const 숯불 SegCode [11] = (0x40, 0x79, 0x24, 0x30, 0x19, 0x12, 0x02, 0x78, 0x00, 0x10,를 0xFF);/ / 0 1 2 3 4 5 6 7 8 9 끄기const 숯불 칼럼 [3] = (0x06, 0x05, 0x03); / / 0x06 석사 자리

정적 숯불 세그먼트 [3] = (0x7F, 0x7F, 0x7F); / / 모든 segmenta, 끄기 시작 값

정적 서명 숯불 ColCount = 0x00;무효 CPU_SETUP (무효);

무효 디스플레이 (무효);

무효 HTO7S (서명 int32 인분 포함);바이트 난;

서명되지 않은 결과 int32;# INT_TIMER1

무효 Timer1 (무효)

(

set_timer1 (TMR1RESET);

디스플레이 ();

)무효 CPU_SETUP ()

(

setup_spi (가 FALSE);

setup_psp (PSP_DISABLED);

setup_vref (가 FALSE);

setup_adc_ports (ALL_ANALOG);

setup_adc (ADC_CLOCK_DIV_64);

setup_comparator (NC_NC_NC_NC); / / 비교기 모듈을 사용하지TRISC = 0x00; / / PortC 출력으로

PORTC = 0x07; / / 모든 BC557in 끄기.
하한가 활성화되어

TRISB = 0x00; / / PortB 출력으로

PORTB =를 0xFF; / / 꺼짐 상태에서 모든 세그먼트setup_timer_1 (T1_INTERNAL | T1_DIV_BY_1);

set_timer1 (TMR1RESET);

enable_interrupts (글로벌);

enable_interrupts (INT_TIMER1);

)//-------------------------------------

/ / 디스플레이 루틴

//-------------------------------------

무효 표시 ()

(

PORTC = 0x07; / / BC557 끄기.

PORTB =를 0xFF; / / 모든 세그먼트 끄기

delay_cycles (2);만약 (ColCount> = 3)

ColCount = 0;PORTB = 세그먼트 [ColCount];

PORTC = 열 [ColCount];

ColCount ;

)//--------------------------------------

/ / Convet은 HEX 2 바이트로 7 - 세그먼트 코드

//--------------------------------------

무효 HTO7S (서명 int32 인분 포함)

(서명되지 않은 입술 int32;세그먼트 [0] = SegCode [500 * Num/2550]; / / 브이 = (Vref * read_adc ())/( 255 * 10)

만약 (세그먼트 [0] == 0x40)

세그먼트 [0] =를 0xFF;

입술 = 500 * 인분 포함 % 2550년; / / 브이 = (Vref * read_adc ())%( 255 * 10)세그먼트 [1] = SegCode [10 * res/2550]; / / res/255.

입술 = 10 * 입술 % 2550년; / / % 255 입술.

세그먼트 [2] = SegCode [10 * res/2550]; / / res/255
)주요 무효 ()

(

서명되지 않은 숯불 난;CPU_SETUP ();동안 () / 사실 / LM35DZ 출력 읽기

(

결과 = 0;

위한은 (i = 0; 난 <100; 난 )

(

set_adc_channel (0); / / LM35DZ AN0에 연결된

delay_ms (1);

결과 = 결과 read_adc ();

)

/ / 100로 나누어 평균 가치로

/ / 결과 = 0x3fe; / /

HTO7S (result/100); / / result/100로 7 세그먼트로 변환

delay_ms (200);

))

 

Welcome to EDABoard.com

Sponsor

Back
Top