Shenler: реле, интерфейсные модули
Новичок
 
Аватар для RomanEfimov
 
Регистрация: 02.03.2012
Сообщений: 193
Репутация: 14
4 55
0 0
 
17.04.2012 09:37 #1
К PIC16f877a подключил(в протеусе, но это неважно) матричную панель 8х8 кнопок к порте c и d. c попорядку посылает сигналы d принимает, порт а выводит. Написал програмку, чтобы порт а показывал куда я виду по понельке, но чивото непоказывает...
Ошибка точно в программе. Вот программа:
Код:
#include <pic.h> 
__CONFIG(0x03F72);

int a=0,aa=0;
void main(void)
{
	T0IE=0;
	GIE=0;	
	TRISC=0;
    TRISA=0;
	TRISD=0b11111111;
    TRISB=0;
    PORTB=0;
    PORTA=0;
	while(1)
	{

while(1) //установка начальной точки нажатия
{
a=0;
PORTC=0b00000001;
if(RD0) { a=1; }
if(RD1) { a=2; }
if(RD2) { a=3; }
if(RD3) { a=4; }
if(RD4) { a=5; }
if(RD5) { a=6; }
if(RD6) { a=7; }
if(RD7) { a=8; }
if(a!=0) break;
PORTC=0b00000010;
if(RD0) { a=9; }
if(RD1) { a=10; }
if(RD2) { a=11; }
if(RD3) { a=12; }
if(RD4) { a=13; }
if(RD5) { a=14; }
if(RD6) { a=15; }
if(RD7) { a=16; }
if(a!=0) break;
PORTC=0b00000100;
if(RD0) { a=17; }
if(RD1) { a=18; }
if(RD2) { a=19; }
if(RD3) { a=20; }
if(RD4) { a=21; }
if(RD5) { a=22; }
if(RD6) { a=23; }
if(RD7) { a=24; }
if(a!=0) break;
PORTC=0b00001000;
if(RD0) { a=25; }
if(RD1) { a=26; }
if(RD2) { a=27; }
if(RD3) { a=28; }
if(RD4) { a=29; }
if(RD5) { a=30; }
if(RD6) { a=31; }
if(RD7) { a=32; }
if(a!=0) break;
PORTC=0b00010000;
if(RD0) { a=33; }
if(RD1) { a=34; }
if(RD2) { a=35; }
if(RD3) { a=36; }
if(RD4) { a=37; }
if(RD5) { a=38; }
if(RD6) { a=39; }
if(RD7) { a=40; }
if(a!=0) break;
PORTC=0b00100000;
if(RD0) { a=41; }
if(RD1) { a=42; }
if(RD2) { a=43; }
if(RD3) { a=44; }
if(RD4) { a=45; }
if(RD5) { a=46; }
if(RD6) { a=47; }
if(RD7) { a=48; }
if(a!=0) break;
PORTC=0b01000000;
if(RD0) { a=49; }
if(RD1) { a=50; }
if(RD2) { a=51; }
if(RD3) { a=52; }
if(RD4) { a=53; }
if(RD5) { a=54; }
if(RD6) { a=55; }
if(RD7) { a=56; }
if(a!=0) break;
PORTC=0b10000000;		
if(RD0) { a=57; }
if(RD1) { a=58; }
if(RD2) { a=59; }
if(RD3) { a=60; }
if(RD4) { a=61; }
if(RD5) { a=62; }
if(RD6) { a=63; }
if(RD7) { a=64; }
if(a!=0) break;
}
do                //установка второй точки,
{                 
aa=0;
PORTC=0b00000001;
if(RD0) { aa=1; }
if(RD1) { aa=2; }
if(RD2) { aa=3; }
if(RD3) { aa=4; }
if(RD4) { aa=5; }
if(RD5) { aa=6; }
if(RD6) { aa=7; }
if(RD7) { aa=8; }

PORTC=0b00000010;
if(RD0) { aa=9; }
if(RD1) { aa=10; }
if(RD2) { aa=11; }
if(RD3) { aa=12; }
if(RD4) { aa=13; }
if(RD5) { aa=14; }
if(RD6) { aa=15; }
if(RD7) { aa=16; }

PORTC=0b00000100;
if(RD0) { aa=17; }
if(RD1) { aa=18; }
if(RD2) { aa=19; }
if(RD3) { aa=20; }
if(RD4) { aa=21; }
if(RD5) { aa=22; }
if(RD6) { aa=23; }
if(RD7) { aa=24; }

PORTC=0b00001000;
if(RD0) { aa=25; }
if(RD1) { aa=26; }
if(RD2) { aa=27; }
if(RD3) { aa=28; }
if(RD4) { aa=29; }
if(RD5) { aa=30; }
if(RD6) { aa=31; }
if(RD7) { aa=32; }

PORTC=0b00010000;
if(RD0) { aa=33; }
if(RD1) { aa=34; }
if(RD2) { aa=35; }
if(RD3) { aa=36; }
if(RD4) { aa=37; }
if(RD5) { aa=38; }
if(RD6) { aa=39; }
if(RD7) { aa=40; }

PORTC=0b00100000;
if(RD0) { aa=41; }
if(RD1) { aa=42; }
if(RD2) { aa=43; }
if(RD3) { aa=44; }
if(RD4) { aa=45; }
if(RD5) { aa=46; }
if(RD6) { aa=47; }
if(RD7) { aa=48; }

PORTC=0b01000000;
if(RD0) { aa=49; }
if(RD1) { aa=50; }
if(RD2) { aa=51; }
if(RD3) { aa=52; }
if(RD4) { aa=53; }
if(RD5) { aa=54; }
if(RD6) { aa=55; }
if(RD7) { aa=56; }

PORTC=0b10000000;		
if(RD0) { aa=57; }
if(RD1) { aa=58; }
if(RD2) { aa=59; }
if(RD3) { aa=60; }
if(RD4) { aa=61; }
if(RD5) { aa=62; }
if(RD6) { aa=63; }
if(RD7) { aa=64; }

}
while( a==aa || aa==0 ); //проверка не является ли вторая точка первой.
if(a<aa) { if(aa-8==a) { PORTA=1; } else{ PORTA=0b000010;} } //обработка инф.
else     { if(a-8==aa) { PORTA=0b001000;} else{ PORTA=0b0000100;} }

	}	
}
Помогите.
Оценка
Азиатские датчики влажности сегодня — это сочетание надёжности, высокой точности и доступной цены, достигнутое благодаря активным инвестициям в разработки и оптимизированному производству. Они успешно конкурируют с западными аналогами, позволяя снижать себестоимость проектов без ущерба для качества. КОМПЭЛ предлагает широкий выбор датчиков влажности от популярных азиатских брендов для любых задач. В статье — обзор ключевых параметров китайских датчиков влажности и практические рекомендации по их установке.
Новичок
 
Регистрация: 17.08.2011
Сообщений: 31
Репутация: 30
20 3
0 1
 
19.04.2012 18:21 #2
какую ошибку выдаёт что не работает? Или просто тупо не работает? Схема точно правильная? Отдельные куски кода работают?
Оценка
КОМПЭЛ продолжает серию публикаций, посвященных азиатским АЦП, их сравнению по цене, функционалу и ограничениям. В этом выпуске – обзор изолированных сигма-дельта модуляторов, предназначенных для точной оцифровки слабых сигналов в условиях высоких помех. Такие компоненты особенно востребованы, когда требуется гальваническая развязка аналогового тракта от цифровой части системы. Рассмотрим характеристики, конкретные модели изолированных сигма-дельта модуляторов рекомендованных производителей
Новичок
 
Регистрация: 08.06.2011
Сообщений: 3
Репутация: 10
 
19.04.2012 19:31 #3
Схемку включения контроллера не мешало-бы. А по сути попробуй это делать на контрах Atmel. В AVR Studio есть отличный эмулятор позволяющий протестить программу на предмет ошибок.
Хм, а что за панель 8х8? Как её звать то? А то кажется что ты пытаешся построить комп на транзисторах
Последний раз редактировалось Alexs-560; 19.04.2012 в 19:40.
Оценка
Растущие требования к эффективности, компактности и надёжности в промышленной автоматизации, телекоммуникациях, дата-центрах и электротранспорте делают карбид кремния (SiC) не просто альтернативой кремнию, а ключевым инструментом инженерных решений. Китайские производители предлагают SiC-диоды и транзисторы, сопоставимые по характеристикам с мировыми аналогами при оптимизированной стоимости. В каталоге КОМПЭЛ представлен широкий выбор SiC-дискретов, доступных со склада для ваших проектов.
Знаток
 
Аватар для dimmich
 
Регистрация: 12.11.2010
Адрес: Владимир
Сообщений: 246
Репутация: 114
104 86
1 0
 
20.04.2012 10:18 #4
Язык Си не знаю. Я на ассемблере лабаю. Но может что умное скажу. Если глупость - сильно не бейте )))

Во-первых, вижу установку портов A и B в двух соседних строчках. Стараюсь избегать этого. На ассемблере вставляю штуки три "nop" в таких случаях. Это из-за особенности ПИКов по записи значений в порты, оно производится в три этапа: Чтение - Модификация - Запись, и на эти этапы процу нужно время, например в виде пустых команд "nop". Да, возможно в данном случае это и не требуется, так как порты разные (A и B), но лучше перебздеть чем недобздеть ))

А где настройка переферии? И еще я не вижу где в этой программе настройка АЦП например. Они на порту A задействованы могут быть. И значит порт A в качестве порта ввода-вывода цифровых сигналов использовать не сможете. Вобщем для начала в проге единоразово надо пройтись по установке регистров периферии.
Оценка
Новичок
 
Аватар для RomanEfimov
 
Регистрация: 02.03.2012
Сообщений: 193
Репутация: 14
4 55
0 0
 
20.04.2012 10:39 #5
Панель, (если Вы знакомы с протеусом) это сенсорная панель от шахмат, немного доработанная. Называется CHEES-KEYPAD.
В архиве программа , файл протеуса и документ с фотографией схемы.
Вы не поверите, я открыл чтобы вспомнить какие глюки и обноружил что все работает, хочу доработать программу чтобы распозновалось движение по диагонали. Я думаю получится.
Я же помню что несколько дней назад я двигал хоть куда, а эта схема показывала вверх, а сейчас работает
Оценка
Ответ
Похожие темы
Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход
ТМ Электроникс. Электронные компоненты и приборы. Скидки, кэшбэк и бесплатная доставка
Часовой пояс GMT +3, время: 16:58.
Обратная связь РадиоЛоцман Вверх