2012-04-04 2 views
2

출력을 내 PIC에서 작동시킬 수 있었고 다양한 출력 래치를 높게/낮게 설정하면 여러 LED를 켜고 끌 수 있습니다. 그러나 핀 상태에서 읽기가 어려워요.PIC18에서 입력 핀의 상태 읽기

아래 코드를 참조하십시오. 내 config를 설정하고 TRISC를 입력으로, TRISB를 출력으로 정의합니다. 무한 루프에서 RC6이 하이인지 로우인지 확인하고 결과에 따라 전체 B 래치를 높게 또는 낮게 설정합니다.

#include <htc.h> 

__CONFIG(1, FOSC_IRC & FCMEN_OFF & IESO_OFF); 
__CONFIG(2, PWRTEN_OFF & BOREN_OFF & WDTEN_OFF); 
__CONFIG(3, MCLRE_OFF); 
__CONFIG(4, STVREN_ON & LVP_OFF & DEBUG_OFF); 
__CONFIG(5, 0xFFFF); 
__CONFIG(6, 0xFFFF); 
__CONFIG(7, 0xFFFF); 

void main(void) 
{ 
    TRISC = 0xFF; // input 
    TRISB = 0x00; // output 

    while (1) 
    { 
    if (PORTCbits.RC6 == 0) 
     LATB = 0b00000000; 
    else 
     LATB = 0b11111111; 
    } 

    return; 
} 

경고 또는 오류없이 코드가 정상적으로 컴파일됩니다. 내 코드 논리 단순히 래치 높은 및 낮은 설정할 경우 잘 작동하지만 난 성공적으로 핀 상태를 읽을 수 없습니다.

아이디어가 있으십니까?

저는 PIC18F14K50 및 MPLAB v8.43과 HiTech ANSI C 컴파일러를 사용하고 있습니다.

내 연결은 VDD (핀 1)에 + 5V, 접지에 VSS (핀 20)입니다. 나는 + 5V에서 C6 (핀 8), 그리고 100K 저항과 LED를 B7 (핀 10)에서 접지까지 가지고있다. RC6을 토글하려면 C6에 와이어를 연결/분리합니다.

 ┌────────┐ 
+5v -│ 01 20 │- gnd 
    -│ 02 19 │- 
    -│ 03 18 │- 
    -│ 04 17 │- 
    -│ 05 16 │- 
    -│ 06 15 │- 
    -│ 07 14 │- 
+5v -│ 08 13 │- 
    -│ 09 12 │- 
led -│ 10 11 │- 
    └────────┘ 

답변

5

PIC의 ADC 핀은 불행하게도 전원을 켤 때 아날로그 입력으로 구성됩니다. 디지털 입력으로 사용하려면 해당 핀의 ADC 기능을 비활성화해야합니다.

ANSELH의 비트 0을 삭제하면 RC6이 디지털 입력으로 설정됩니다. 그러면 코드가 작동합니다.

은 9.4 절 데이터 시트에 설명되어 있습니다 : 포트 아날로그 제어를

PIC18F/LF1XK50 Datasheet

+0

감사합니다. 실제 코드에서는 RC6뿐 아니라 모든 핀을 사용합니다. 모든 핀을 디지털이 아닌 아날로그로 설정하려면'ANSEL = 0; ANSELH = 0;'main() 메소드의 처음에? – Ozzah

+0

또는 ADCON1을 사용하여 작업해야합니까? – Ozzah

+2

예, ANSEL과 ANSELH를 0으로 설정하면 모든 아날로그 기능이 지워집니다. –

1

설정 ...

TRISC = 1; // input 

...는 모든 다른 핀의 출력으로 정의되며, 입력 핀으로 PORTC의 핀 RC0를 설정한다. 그래서 PORTCbits.RC6 == 0은 RC6 핀의 올바른 입력 상태를 반환하지 않아야합니다.

TRISC = 255은 입력으로 PORTC의 모든 핀을 설정해야합니다.

+0

그 점을 알려 주셔서 감사합니다. 코드를 업데이트했지만 결과는 같습니다. RC6에 + 5V를 가하면 아무 일도 일어나지 않습니다. 내 질문을 업데이트하고 공개했습니다. – Ozzah

0

그것은 다른 PIC18 변종이 다르게 설정되어 있는지 언급 할 가치가있다 :

PIC18F4520 및 에 PIC18F4680 핀을 디지털로 구성하려면 ANSELH 대신 ADCON1 레지스터를 사용해야합니다.

비트를 1으로 설정하면 디지털이됩니다.

이 외에도 해당 TRIS 레지스터에서 비트를 1로 설정하여 입력 핀을 만들어야합니다.