Ich verwende einen PIC12F675 für ein Projekt, und bis auf eine Sache funktioniert alles einwandfrei . GP4 funktioniert nicht als digitales E / A. Ich habe mir die Konfigurationen und den Code viel angesehen, aber nichts gefunden.
Konfiguration:
#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
Code:
#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;
}
pic
c
embedded
programming
audio
oscillator
spark
dc-dc-converter
boost
charge-pump
eagle
analog
battery-charging
failure
humidity
hard-drive
power-supply
battery-charging
charger
solar-energy
solar-charge-controller
pcb
eagle
arduino
voltage
power-supply
usb
charger
power-delivery
resistors
led-strip
series
usb
bootloader
transceiver
digital-logic
integrated-circuit
ram
transistors
led
raspberry-pi
driver
altium
usb
transceiver
piezoelectricity
adc
psoc
arduino
analog
pwm
raspberry-pi
converter
transformer
switch-mode-power-supply
power-electronics
dc-dc-converter
phase-shift
analog
comparator
phototransistor
safety
grounding
current
circuit-protection
rcd
batteries
current
battery-operated
power-consumption
power-electronics
bridge-rectifier
full-bridge
ethernet
resistance
mosfet
ltspice
mosfet-driver
ftdi
synchronous
fifo
microcontroller
avr
atmega
atmega328p
verilog
error
modelsim
power-supply
solar-cell
usb-pd
i2c
uart
Ali Abo Shady
quelle
quelle
#pragma config FOSC = INTRCCLK
der PIC nicht an, seine Uhr auf GP4 auszugeben? Gibt es nicht eine andereFOSC
Option, die Sie verwenden sollten?Antworten:
Nur um Spehros richtige Antwort zu ergänzen:
Da der von Ihnen verwendete Mikrocontroller nur 8 Pins hat, müssen diese unbedingt die Funktionalität gemeinsam nutzen, um die verschiedenen Funktionen bereitzustellen, die das Gerät unterstützt.
Ich wollte nur eine Art "Roadmap" bereitstellen, um zu erklären, wie die Konfiguration funktioniert.
Überprüfen Sie das Pin-Funktionsdiagramm auf dem Datenblatt Seite 2:
Sie werden feststellen, dass der physische Pin 3 mindestens fünf Funktionen hat: GP4, AN3 ,! T1G, OSC2 und CLKOUT. Manchmal müssen Sie in der Konfiguration angeben, welche Funktion der Pin haben soll. Es ist definitiv nicht immer klar. Ich finde es hilfreich, das Datenblatt nach Verweisen auf das Register oder die Pin-Funktion zu durchsuchen, mit denen ich Probleme habe.
Hier ist ein Auszug aus Seite 52, auf dem GP4 gefunden wurde:
Mikrocontroller können sehr oft mit einem internen Oszillator (falls vorhanden) oder mit einem externen Oszillator wie einem Kristall betrieben werden. Darüber hinaus können sie ihren internen Oszillator an einen Pin anschließen, um andere Geräte zu takten. Das Konfigurationsregister hat hier drei Bits (
FOSC
), die bestimmen, wie dies eingerichtet wird.Wenn Sie sich die beiden mit den Werten
101
und aufgelisteten Modi ansehen100
, geben beide die Verwendung des internen Oszillators an, aber eine der Optionen verbindet GP4 mit der Uhr, wobei die andere ihre Funktion als GPIO beibehält.Die genannten definierten Konstanten
INTRCCLK
undINTRCIO
Spehro sollten diese Werte widerspiegeln.quelle
Sie haben den PIC so konfiguriert, dass er das interne Taktsignal auf GP4 mit ausgibt
Ersetzen Sie INTRCCLK durch INTRCIO.
quelle