Блин, да что же это такое с PENIRQ в ADS7843 ?! Сплошное издевательство! Замкнутый круг: к тач-панели с контроллером ADS7843 (входит в состав LCD AT320240Q...) подключен PIC18F452 по SPI. Подключен правильно. Выход PENIRQ подключен на RB0 пика, резюк 100 К - между +пит. и RB0. Зациклил, смотрю осциллом - вроде импульсы все есть, при нажатии на панель инф-ция на RC4(SDI) меняется, т.е. ADS7843 с пиком общается. Но!!! На PENIRQ (RB0 пика) единица стоит глухо, хотя при нажатии на панель должна давать перепад в ноль! Прерывания запретил! Все!
Что это? Неужели я совсем тупой?
Помогите, плиз, кто чем может!
Спасибо.
Пример проги:
// ОСЦИЛЛЯТОР ТИПА HS, ЧАСТОТА КВАРЦА - 20 МГц
// WDT - ОТКЛЮЧЕН, Power Up Timer - ВКЛЮЧЕН,
// Brown Out Detect - ВЫКЛЮЧЕН, Low Voltage Program - ВЫКЛЮЧЕН
// В приборе используется графический ЖКИ AT320240Q4FAT35 c TOUCH-панелью от фирмы "Ampire"
// Контроллер ЖКИ - SED1335F, контроллер Touch-панели - ADS7843
//===============================================================
// Линии связи с LCD :
// --------------------------------
#include
#include
#include
#include
#include
#include
#include
#define IRQ_TOUCH RB0 // определить бит0 порта B (прерывание при нажатии на экран)
#define CS_TOUCH RC2 // определить бит2 порта C (выборка ADS7843)
//--------------------------------------------------------------
//-----------ОПИСАНИЕ ПОДПРОГРАММ ДЛЯ ADS7843 ------------------
void read_touch();// команда опроса сенсорной панели
//---- КОНЕЦ ОПИСАНИЯ ПОДПРОГРАММ - КОМАНД ДЛЯ ADS7843 ---------
//==================================================
void main()
{
INTCON = 0x00;
INTCON2 = 0b10000000;
PIE1 = 0x00;
ADCON1 = 0x07; // настр.портов RA и RE как цифровой I/O
TRISC = 0b11111101;// настройка RC с учетом CS_TOUCH для SPI
CS_TOUCH = 1; // запретить обращение к TOUCH
TRISB = 0b00000001; // настр.RB
// ============ ========== ===================
// Пробный кусок с TOUCH-ПАНЕЛЬЮ
cykl: read_touch(); // проверочная
goto cykl;
}
//-------------------------------------------------
//Подпрограмма "read_touch" ДЛЯ ADS7843
//-------------------------------------------------
void read_touch()// команда опроса сенсорной панели
{
unsigned char a;
unsigned char i;
a = TRISC; // сохранение настроек RC до вызова подпрограммы
TRISC = 0b11010011; // настр.SDO/RC5 - на вывод, SDI/RC4 - на ввод,
// SCK/RC3 - на вывод, CS_TOUCH/RC2 - оставить на вывод
CS_TOUCH = 1; // запретить выбор ADS7843
SSPSTAT = 0b01000000;
SSPCON1 = 0b00100001; // Скорость тактов SPI 20/16=1,25 МГц
BF = 0; // очистить флаг завершения приема/передачи
CS_TOUCH = 0; // разрешить выбор ADS7843
for (i=0;i<50;i++); // задержка
SSPBUF = 0b10010100; // тестовая настройка
while(!BF);// Ожидание, пока завершится прием/передача команды
BF = 0; // очистить флаг завершения приема/передачи
SSPBUF = 0; // Инициируем прием старшего байта
while(!BF);// Ожидание, пока завершится прием/передача команды
BF = 0; // очистить флаг завершения приема/передачи
SSPBUF = 0; // Инициируем прием старшего байта
while(!BF);// Ожидание, пока завершится прием/передача команды
BF = 0; // очистить флаг завершения приема/передачи
}
//-----------------------------------------