J'utilise un PIC12F675 pour un projet, et tout fonctionne bien sauf une chose. GP4 ne fonctionne pas comme E / S numérique. J'ai beaucoup regardé les configs et le code, mais je n'ai rien trouvé.
Config:
#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
la source
la source
#pragma config FOSC = INTRCCLK
dit pas au PIC de sortir son horloge sur GP4? N'y a-t-il pas uneFOSC
option différente que vous devriez utiliser?Réponses:
Juste pour ajouter à la bonne réponse de Spehro:
Étant donné que le microcontrôleur que vous utilisez n'a que 8 broches, ils doivent nécessairement partager des fonctionnalités pour fournir les différentes fonctionnalités dont l'appareil est capable.
Je voulais juste fournir une sorte de "feuille de route" pour aider à expliquer comment fonctionne la configuration.
Consultez le diagramme de fonction des broches sur la page 2 de la fiche technique :
Vous remarquerez que la broche physique 3 a au moins cinq fonctions: GP4, AN3,! T1G, OSC2 et CLKOUT. Parfois, vous devez spécifier dans la configuration quelle fonction la broche doit avoir. Ce n'est certainement pas toujours clair. Je trouve utile de rechercher dans la fiche technique des références à la fonction de registre ou de broche avec laquelle j'ai des problèmes.
Voici un extrait de la page 52 sur lequel GP4 a été trouvé:
Les microcontrôleurs peuvent très souvent fonctionner à l'aide d'un oscillateur interne s'ils en ont un, ou à partir d'un oscillateur externe tel qu'un cristal. Encore plus, ils peuvent connecter leur oscillateur interne à une broche pour cadencer d'autres appareils. Le registre de configuration a ici trois bits (
FOSC
) qui déterminent comment cela est mis en place.Si vous regardez les deux modes répertoriés avec les valeurs
101
et100
, ils spécifient tous deux d'utiliser l'oscillateur interne, mais l'une des options connecte GP4 à l'horloge, où l'autre conserve sa fonction de GPIO.Les constantes définies
INTRCCLK
etINTRCIO
Spehro mentionnées doivent refléter ces valeurs.la source
Vous avez configuré le PIC pour émettre le signal d'horloge interne sur GP4 en utilisant
Remplacez INTRCCLK par INTRCIO.
la source