Я использую PIC12F675 для проекта, и все работает отлично, кроме одной вещи. GP4 не работает как цифровой IO. Я много смотрел на конфиги и код, но ничего не смог найти.
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
Код:
#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
Али Або Шейди
источник
источник
#pragma config FOSC = INTRCCLK
говорит PIC выводить свои часы на GP4? Нет ли другогоFOSC
варианта, который вы должны использовать?Ответы:
Просто чтобы добавить к правильному ответу Спехро:
Поскольку используемый вами микроконтроллер имеет только 8 выводов, они обязательно должны иметь общие функции, чтобы обеспечить различные функции, которые устройство может использовать.
Я просто хотел предоставить своего рода «дорожную карту», чтобы помочь объяснить, как работает конфигурация.
Посмотрите функциональную диаграмму контактов на странице технических данных 2:
Вы заметите, что физический вывод 3 имеет как минимум пять функций: GP4, AN3,! T1G, OSC2 и CLKOUT. Иногда в конфигурации необходимо указать, какую функцию должен иметь пин-код. Это точно не всегда понятно. Я считаю полезным поискать в таблице данных ссылки на регистр или функцию вывода, с которыми у меня возникают проблемы.
Вот выдержка из страницы 52, на которой был найден GP4:
Микроконтроллеры очень часто могут работать с использованием внутреннего генератора, если он у него есть, или от внешнего генератора, такого как кристалл. Более того, они могут подключить свой внутренний генератор к контакту для синхронизации других устройств. Регистр конфигурации здесь имеет три бита (
FOSC
), которые определяют, как это будет настроено.Если вы посмотрите на два режима, перечисленных со значениями
101
и100
, они оба указывают на использование внутреннего генератора, но один из вариантов соединяет GP4 с часами, где другой поддерживает свою функцию как GPIO.Определенные константы
INTRCCLK
иINTRCIO
упомянутые Spehro должны отражать эти значения.источник
Вы настроили PIC для вывода внутреннего тактового сигнала на GP4, используя
Заменить INTRCCLK на INTRCIO.
источник