PIC12F675 GP4が機能しない


9

プロジェクトにPIC12F675を使用していますが、1つの点を除いてすべて正常に動作します。GP4はデジタルIOとして機能しません。設定とコードをよく見てきましたが、何も見つかりませんでした。

構成:

#pragma config FOSC = INTRCCLK
#pragma config WDTE = OFF
#pragma config PWRTE = OFF
#pragma config MCLRE = OFF
#pragma config BOREN = ON
#pragma config CP = OFF
#pragma config CPD = OFF

コード:

#include <xc.h>
#include <math.h>
#include "config.h"
#define _XTAL_FREQ 4000000

void delay(unsigned int freq){
    for(int i = 0; i < (int)freq; i++){
        __delay_ms(1);
    }
}

void dClock(unsigned int freq){
    GPIO1 = 1;
    delay(freq);
    GPIO1 = 0;
    delay(freq);
}

void InitADC(){
    ANSEL = 0x11;
    ADCON0 = 0b10000001;
    CMCON = 0x7;
    VRCON = 0;
}

unsigned int GetADCValue(){
    ADCON0 = 0b10000011;
    while(GO_nDONE);
    return (ADRESH << 8) + ADRESL;
}

void main(void) {
    TRISIO0 = 1; //analog input
    TRISIO1 = 0; //output
    TRISIO2 = 0; //indication
    TRISIO3 = 1; //mode
    TRISIO4 = 0; //halt
    TRISIO5 = 1; //pulse_button

    char pressed = 0;
    GPIO1 = 0;

    InitADC();

    while(1){
        if(GPIO4 == 0){
            if(GPIO3 == 0){
                GPIO2 = 1;
                unsigned int freq = GetADCValue();
                dClock(freq);
            }
            else{
                GPIO2 = 0;
                if(GPIO5 == 1 && pressed == 0){
                    GPIO1 = 1;
                    __delay_ms(50);
                    GPIO1 = 0;
                    pressed = 1;
                }
                else if(GPIO5 == 0 && pressed == 1){
                    pressed = 0;
                }
            }

        }
    }
    return;
}

1
#pragma config FOSC = INTRCCLKGPにクロックを出力するようにPICに指示しませんか?FOSC使用する必要がある別のオプションはありませんか?
brhans

@brhansはい、今気づきました!INTRCCLKは、マイクロコントローラーに内部クロックを使用させ、それをGP4に接続します。ただし、INTRCIOは、GP4をIOとして使用するように構成することを除いて、同じことを行います。お知らせいただきありがとうございます!
Ali Abo Shady

回答:


12

Spehroの正しい答えに追加するだけです。

使用しているマイクロコントローラーにはピンが8つしかないため、デバイスで使用できるさまざまな機能を提供するために、機能を共有する必要があります。

構成がどのように機能するかを説明するための一種の「ロードマップ」を提供したかっただけです。

データシートのページ2 のピン機能図を確認してください。

データシートのピン図

物理ピン3には少なくとも5つの機能(GP4、AN3、!T1G、OSC2、およびCLKOUT)があることに気づくでしょう。時には、ピンが持つべき機能を設定で指定する必要があります。常に明確であるとは限りません。データシートで、問題のあるレジスタまたはピン機能への参照を検索すると役立ちます。

GP4が見つかった52ページの抜粋を次に示します。

データシートFOSCの詳細

マイクロコントローラは、内部発振器がある場合はそれを使用して、または水晶などの外部発振器から動作することが非常によくあります。さらに、内部発振器をピンに接続して、他のデバイスをクロックすることができます。ここの構成レジスタにはFOSC、これがどのようにセットアップされるかを決定する3つのビット()があります。

101100でリストされた2つのモードを見ると、どちらも内部発振器を使用するように指定されていますが、オプションの1つはGP4をクロックに接続し、もう1つのオプションはGPIOとして機能を維持します。

定義された定数INTRCCLKINTRCIO前述のSpehroは、これらの値を反映する必要があります。


1
どうもありがとうございました。あなたの説明はとても役に立ちました、そしてそれがどのように機能するかを理解しました。
Ali Abo Shady

13

を使用して、GP4で内部クロック信号を出力するようにPICを設定しました

#pragma config FOSC = INTRCCLK

INTRCCLKをINTRCIOに置き換えます。


2
本当にありがとうございました!私はそれがどのように機能するかを理解しました。
Ali Abo Shady

3
どういたしまして。提案-できるだけ単純なプログラムで問題を再現することをお勧めします。この場合、GP4を1にコピーする単純なループが問題を示し、完全なプログラムの邪魔にならないようにします。
Spehro Pefhany

2
了解しました。次回はそうします。再度、感謝します。
Ali Abo Shady
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.