Привет, я столкнулся с некоторой проблемой при чтении ввода с PIC18f4550 для простой схемы, когда при включении (переключатель = 1) должны светиться несколько светодиодов, а при отпускании переключателя светодиод должен гаснуть (переключатель = 0) ,. При подаче нескольких вольт на контакт (RA0 или RA1) - светодиоды должны светиться, но мне это не удается. Я использую компилятор MPLAB IDE AND C18. также пробовал с компилятором MPLABX и XC8.
Я хотел получить ввод от RA0 и RA1 с помощью двухкнопочного переключателя. И светодиоды накаливания на РД7-РД4. Для этого я сделал простой оператор if then else внутри цикла while(1).
#include <p18f4550.h>
#define switch1 PORTAbits.RA0 // two switches
#define switch2 PORTAbits.RA1
#define led1 LATDbits.LATD7 // defining led’s for making life easy
#define led2 LATDbits.LATD6
#define led3 LATDbits.LATD5
#define led4 LATDbits.LATD4
void main (void)
{
// IO settings
/* tired both ways*/
TRISbits.RA0=1 //making input for switch 1
TRISbits.TRISA1=1 //making input for switch 2
TRISDbits.TRISD7 = 0; // RD7 to RD4 set to output for led.
TRISDbits.TRISD6 = 0;
TRISDbits.TRISD5= 0;
TRISDbits.TRISD4 = 0;
ADCON1bits.PCFG0 = 1; // making all pins digital.
ADCON1bits.PCFG1 = 1;
ADCON1bits.PCFG2 = 1; // referred Data Sheet Page:262
ADCON1bits.PCFG3 = 1;
while(1)
{ if(switch1 == 1)
{ led1 = 1;
led2 = 1;
led3 = 1;
led4 = 1; }
else if (switch1 == 0) // on reading no voltage
{ led1 = 0;
led2 = 0;
led3 = 0;
led4 = 0; }
else { }
}
}
Ничего хорошего не вышло... светодиоды на RD7-RD4 все время горят, что бы я ни делал.
Я попытался изменить
PORTAbits.RA0 to LATAbits.LATA0 but still no help.
Я провел небольшое исследование, и кто-то порекомендовал мне отключить значение АЦП и просмотреть настройки таблицы данных. я отключил адк
ADCON0bits.ADON = 0; //turn off the ADC
Проверял со схемой на макетной плате. Все, но все еще ситуация такая же. Кто-то также рекомендовал, что лучше отключить компаратор. Поэтому я снова отключил компаратор.
CMCON = 0x07; // comparator off.
ADCON1=0x0F; //All pins digital
Я снова построил все это с нуля, но до сих пор не добился успеха. Я нажимаю на выключатель. Светодиоды на RD7-RD4 только порта D горят все время :'( .. Вот и я помогите пожалуйста.
PS: [Чтобы добавить, я также думал, что мой pic18f4550 испортился. Поэтому я протестировал код для мигания светодиода на pic18f4550 http://goo.gl/PosRgg с веб-сайта, он работал нормально… поэтому я уверен, что мой pic184550 не испортился.] Пожалуйста, помогите и порекомендуйте, где я ошибся, у меня есть пытаюсь уже 3 дня :'(
Я не думаю, что ADCON будет иметь значение в этом случае, поскольку контакты PORTD, которые вы используете, мультиплексированы с расширенным режимом PWM и потоковым параллельным портом (SPP), а не модулем аналогового ввода, которые имеют приоритет над портом ввода-вывода.
Вы захотите отключить Enhanced PWM, который также мультиплексирован с выводами PORTD. Также вы, вероятно, захотите отключить SPP, очистив бит 0 регистра SPPCON (SPPEN) до 0
Таким образом, решением в этом случае может быть настройка CCP1CON на что угодно, кроме Dual или Quad PWM, путем установки CCP1CON на 00xx 11xx.
Джо Хасс
Санджу
Джо Хасс