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;} }

	}	
}
Помогите.
Оценка
Компания Ruimeng выпустила 24-битный Σ-Δ аналого-цифровой преобразователь MS5148T, который является достойной заменой популярному АЦП Axx1248. Модель сочетает в себе сопоставимые характеристики с полной совместимостью по корпусу и функциям, но имеет в качестве преимущества более низкое энергопотребление. Незначительные отличия в точности источников тока и уровне шумов компенсируются выгодной стоимостью и широкой доступностью на российском рынке.
Новичок
 
Регистрация: 17.08.2011
Сообщений: 31
Репутация: 30
20 3
0 1
 
19.04.2012 18:21 #2
какую ошибку выдаёт что не работает? Или просто тупо не работает? Схема точно правильная? Отдельные куски кода работают?
Оценка
Китайские электролитические конденсаторы уверенно занимают лидирующие позиции на российском рынке, демонстрируя высокую надежность и конкурентоспособность в стоимости. Компания КОМПЭЛ является одним из крупнейших поставщиков пассивных компонентов, в том числе электролитических конденсаторов, и предлагает широкий ассортимент этой продукции, включая более 1500 уникальных моделей на складе от таких ведущих производителей, как JB Capacitors, Suscon, AiSHi и другие.
Новичок
 
Регистрация: 08.06.2011
Сообщений: 3
Репутация: 10
 
19.04.2012 19:31 #3
Схемку включения контроллера не мешало-бы. А по сути попробуй это делать на контрах Atmel. В AVR Studio есть отличный эмулятор позволяющий протестить программу на предмет ошибок.
Хм, а что за панель 8х8? Как её звать то? А то кажется что ты пытаешся построить комп на транзисторах
Последний раз редактировалось Alexs-560; 19.04.2012 в 19:40.
Оценка
Знаток
 
Аватар для 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, время: 17:47.
Обратная связь РадиоЛоцман Вверх