|
Виж темите без отговор | Виж активните теми
Дата и час: Пон Юли 27, 2026 6:38 pm
Кодова брава с PIC16F628A
| Автор |
Съобщение |
|
kalata23
Ранг: Популярен
Регистриран на: Пон Дек 15, 2014 11:05 pm Мнения: 332
|
 Кодова брава с PIC16F628A
Идеята е реализиране на кодова брава с PIC16F628A, като ключът е 4 цифрен и е хардуерно реализиран с DIP-Switch - 9. Схемата, която измислих е тази: http://imagizer.imageshack.us/a/img673/7744/QyOV6M.pngЕдно уточнение към схемата, захранването на дешифратора/демултиплексора е свързано с RA3. а на RA7 има свързан светодиод, който съм забравил да добавя. Проблемът е, че програмата ми върви на симулация на PROTEUS и на PIC SIMULATOR, но в реална среда (с бредборд платка) светодиодът свети и изгасва само при въвеждане на 2 цифри от колона 2, редове 1 или 2. Примерно 55 - свети, 55 - изгасва, 22 - свети, 22 изгасва, 52 свети, 25 изгасва и т.н. Програмата е писана на С с CCS, нямам Micro C на лаптопа, пък и използвам някои готови функции, които ми съкратяват кода като цяло. Сорс код:  |  |  |  | Код: #include <DIP-Switch Keycode pic16f628A.h>
int8 pressed[] = {10,10,10,10}; //Съхранява бутоните, които са натиснати int8 key[] = {10,10,10,10}; // съхранява ключа int8 row = 10; //редове int8 column = 0; // колони int8 num = 0; // колко бутона са натиснати int8 demux[]={8,9,10,11}; //числа отговарящи на таблицата на истиност // на демултиплексора + 1 бит за захранване // на демултилексора
void out() { if (column==0) output_b(6); // подава нула само на един ред if (column==1) output_b(5); //на останалите редове - единица if (column==2) output_b(3); } void read() //четене на редовете { int i; int in = 0; for (i=0;i<4;i++) { in = 8*6 + 3 + i; //за извеждане на високо/ниско ниво на даден пин, използвам адреса на пина. if (input(in)==0) //проверка за нула на дадения ред { delay_ms(32); //елиминиране на претрепвания if (input(in)==0) //запаметяване на числото { while(input(in)==0) { row = i; } } } } }
void press() { if(num<4) { pressed[num] = (column+1) + 3*row; //формула за изчисляване позицията на бутона if(pressed[num] == 11) pressed[num] = 0; //за нулата има изключение num++; } }
void valid() //функция за отключване/заключване { int i; int sum=0; for(i=0;i<4;i++) { sum = key[i] - pressed[i]; pressed[i]=10; } if (sum == 0) output_toggle(47); //ако на изходния пин имаме 1 ще стане нула и обратно. num = 0; }
void start() //ф-ция за четене на DIP-switches { int8 i,inb,ina,outa; for(num=0;num<4;num++) //4 цифри { outa = demux[num]; //управление на демултиплексора output_a(outa); delay_ms(10); for(i=0;i<8;i++) { inb = 6*8 + i; if(input(inb)==0) { delay_ms(32); if(input(inb) == 0) key[num] = i; } } if(key[num] == 10) { ina = 46; if(input(ina)==0) { delay_ms(32); if(input(ina)==0) key[num] = 8; } } delay_ms(10); } num = 0; output_low(PIN_A3); } void main() { setup_oscillator(OSC_4MHZ); port_b_pullups(0xFF); //вътрешните пул-ъп резистори set_tris_a(0x40); SET_TRIS_B(0xFF); delay_ms(10); start(); delay_ms(10); SET_TRIS_B(0xF8); set_tris_a(0x00); output_a(0); delay_ms(10); while(true) { if(num<4) { for(column=0;column<3;column++) { out(); read(); if(row!=10) { press(); row=10; } } } else valid(); row = 10; } } |  |  |  |  |
Сложих пул-ъп резистор на А6, Между редовете и пиновете на PORTB сложих 330 ohm резистори (в Млад конструктор имаше подобна програма на асемблер, оттам взех принципа за четенето на клавиатурата и използваха 220 ома резистори). Нищо не помага.
|
| Пет Апр 10, 2015 5:14 pm |
|
 |
|
dvrachkov
Ранг: Ориентиран
Регистриран на: Вто Сеп 30, 2014 8:20 am Мнения: 231 Местоположение: Bansko
|
 Re: Кодова брава с PIC16F628A
Здравей ! Хубаво ще бъде като за начало, да направиш хубава принципна схема. Не видях нито един кондензатор, което говори лошо за конструктора. Редно е да сложиш кондензатори поне на захранването. Следващото нещо е кварц с два кондензатора към маса, не го видях на схемата. Следваща точка е токоограничаващи резистори на изходите на контролера, пулъпи на dip switches също. /Пулъпите по 10 к, токоограничаващите по 1к мисля че ще ти свършат работа/. Желателно е да бъдат свързани всички компоненти по схемата, не да оставяме публиката да гадае какво е искал да каже лирическият герой. Сложи един активити лед (през 1к резистор) да индицираш работоспособност на софтуера. Какво управлява схемата ? Ако е реле - не виждам такова, ако изпраща код по някакъв интерфейс - UART например - не го виждам... И в крайна сметка, нека да се стараем да бъдем прецизни в изготвянето на схемите. Успех с реализирането на схемата, очаквам feedback  С Уважение: Врачков
_________________ "Спасението на давещите се е дело на самите давещи се" - О.Б. "По въпросите ще ги познаете" - В.Б. "'С изкуствен интелект е хубаво да се занимават хора, които имат естествен такъв" - Д.Б.
|
| Съб Юли 18, 2015 7:46 pm |
|
 |
|
didofen
Ранг: Популярен
Регистриран на: Вто Юни 27, 2006 11:13 am Мнения: 381 Местоположение: Варна
|
 Re: Кодова брава с PIC16F628A
първо, захранване въобще не е указано, за да искаш кондензатори. Второ, човека ползва вътрешиния генератор и затова няма външен. трето, портб има вътрешни подпорки. после, не виждам къде са му нужни ограничаващи резистори (няма нито светодиоди, даже и тогава всеки пин си дава 20мА в краен случей ако не си го ограсничил допълнително). иначе да, няма изход (управление) и не се разбира какво означева захранването на мултиплексора е свързано с РА3 (не че не може директно, но не виждам смисъл да се комутира захранването на мултиплексора). и какво означава 55-свети, 52 угасва
|
| Пон Юли 20, 2015 11:21 am |
|
 |
|
Nikola Kirov
Ранг: Форумен бог
Регистриран на: Нед Окт 31, 2004 9:19 pm Мнения: 4464 Местоположение: Stara Zagora
|
 Re: Кодова брава с PIC16F628A
Я сега си представи че на първия блок ключета си включил всичките. Не ти ли се струва че всичките линии стават накъсо  Не знам как тази глупост ти работи в протеуса,но самата ти идея е неработоспособна. Остава да се сетиш какво може добавиш за да не се случва така 
|
| Чет Юли 23, 2015 8:19 am |
|
 |
|
didofen
Ранг: Популярен
Регистриран на: Вто Юни 27, 2006 11:13 am Мнения: 381 Местоположение: Варна
|
 Re: Кодова брава с PIC16F628A
абсолютно си прав за ключетата 
|
| Чет Юли 23, 2015 9:44 am |
|
 |
|
bateAz
Ранг: Форумен бог
Регистриран на: Нед Сеп 26, 2004 4:11 pm Мнения: 3750 Местоположение: София
|
 Re: Кодова брава с PIC16F628A
Като стана дума за ключета - 10 клича не са ли много ?
|
| Чет Юли 23, 2015 10:32 am |
|
 |
|
michev
Ранг: Форумен бог
Регистриран на: Сря Юли 11, 2007 10:16 am Мнения: 1730
|
 Re: Кодова брава с PIC16F628A
Ти пък сега.. Юзъра няма после да учи двоичната бройна система за да си зададе кода 
|
| Чет Юли 23, 2015 10:49 am |
|
 |
|
tolstolob
Ранг: Ориентиран
Регистриран на: Вто Фев 06, 2007 2:45 am Мнения: 263
|
 Re: Кодова брава с PIC16F628A
А защо не наливаш ключа през UART? (Тия милиони жици като ги видях и ми прилоша).
|
| Чет Юли 23, 2015 11:21 am |
|
 |
|
ToHu
Ранг: Форумен бог
Регистриран на: Нед Сеп 26, 2004 9:21 pm Мнения: 30686 Местоположение: София
|
 Re: Кодова брава с PIC16F628A
А защо не наливаш ключа през клавиатурата ? И без това повечето клавиатури са 12 символа. Примерно комбинация *#+ текуш код почваш да мигаш светодиода и чакаш нов код +# .... чисто програмно няма някакво същшествено усложнение, още 100-на реда код, зависи на какво пишеш.
|
| Чет Юли 23, 2015 7:52 pm |
|
 |
|
bateAz
Ранг: Форумен бог
Регистриран на: Нед Сеп 26, 2004 4:11 pm Мнения: 3750 Местоположение: София
|
 Re: Кодова брава с PIC16F628A
Тия неща са неиздържани от секюрити гледна точка. Ако всеки може да го прави - е*е ти и бравата. Ако за да го направиш, трябва да въведеш стария ключ, възниква въпросът как ще ресетнеш ключа, ако по някаква причина го забравиш. Ако за да го направиш, трябва преди това да въведеш "Admin key", остава отворен въпросът как се въвежда "Admin key" Единствено що-годе издържано решение е на платката да има само 1 клич и с него да се избира след ресет в какъв мод да се тръгва - нормален или въвеждане на ключ(ове).
|
| Пет Юли 24, 2015 9:46 am |
|
 |
|
Tisho
Ранг: Форумен бог
Регистриран на: Пон Ное 22, 2004 11:24 pm Мнения: 1923 Местоположение: Габрово
|
 Re: Кодова брава с PIC16F628A
Пример за разхищение на части. 
|
| Пет Юли 24, 2015 11:01 am |
|
 |
|
pechkov
Ранг: Напреднал
Регистриран на: Пет Фев 14, 2014 4:45 pm Мнения: 439 Местоположение: Монтана
|
 Re: Кодова брава с PIC16F628A
Тези въпроси започват още от хардуерното решение за устройството. Евтините масовки в Преебалник са едномодулни, като клавиатура и процесор са заврени в една обща кутийка, на която като и теглиш един крак - веднага стигаш до пина, който управлява изхода, и можеш да си отвориш без никакъв код. Аз много се дразня на холивудските бълвочи, в които главния герой отваря клавиатурата на алармената инсталация без да ползва поне малка отвертчица, измъква жичките от клемите без да развива никакви винтчета, и от устройство, което се захранва с 5 волта през линеен стабилизатор като даде двете жички накъсо - хвърчат искри като от електрожен, пушека стига до тавана, и вратата се отваря... Както и да е. За кодова брава е нужно отвън да е само клавиатурата, а процесорната платка да е от вътрешната страна на вратата. Още по-добрия вариант е отвън в клавиатурата да има отделен процесор, който обслужва само клавиатурата, и да е свързан с неговия събрат от вътрешната страна посредством интерфейс. Одобряването на въведения код и управлението на механизма за отключване да се прави от процесора от вътрешната страна. При него може да има на платката бутонче, с което се задейства промяна на кода, като се има предвид, че ако нарушителя е стигнал до тази платка - значи вече е отворил вратата, и няма никакво значение колко е лесно да се задейства промяна на кода. Ако пък си забрави кода, а вратата е заключена - въпроса става идентичен като с милионите други подобни случаи с механични брави, при които човек си изгубва ключа... PIC16F628A има собствена EEPROM памет. Може да се ползва за запис на кода за достъп и да се махнат ключетата. С подходящо процедурно програмиране може да се отдели процедурата за четене на клавиатурата, да има по една за запис на кода в паметта и една за четене (проверка) за валидност, с по-голям масив да се направи така че броя на цифрите в кода да не е фиксиран и т.н. Но е добре да се уточнят параметрите на устройството - технически и функционални.
_________________ Не карай по-бързо от своя ангел-пазител!
|
| Пет Юли 24, 2015 1:46 pm |
|
 |
|
ToHu
Ранг: Форумен бог
Регистриран на: Нед Сеп 26, 2004 9:21 pm Мнения: 30686 Местоположение: София
|
 Re: Кодова брава с PIC16F628A
Ееее bate ти току що зачеркна почти 100% от секюриту решенията, включително и за сейфове. Това е стандартният подход при почти всички системи, включително и VdS клас С, кеото е най-високото като ригурност, от там нгоре има разни добавки единствено за говърмънт и военни приложения но те са малко по друг тип. Практиката е такава, всеки потребител може да си смени сам кода из а това е нужно да знае единствено валидният си код. Дали това става в меню или на друго място, но това е начина. Кодове могат да се сменят и с така наречените инжинерни или инсталационни кодове, зависи вече и от системата. Имай в предвид че почти всички продути на пазара все още се прогрмаират и конфигурират единствено през клавиатурата на системата, т.е. същата през която обикновенно си включваш и изключваш алармата. Това може да се види и в контрола на достъп също.
А относно филмите и ония които дават жичките на късо, ами тъпо е, но няма да повярваш в колко от ефтините и не ак толкова евтини системи всичко е в четеца / клавиатурата ... напоследък дори са много модерни едни etehrnet решения при които всичко върпи по IP и всичко е в четеца ... всичко кеото е свързано със сигурност изисква протоколна връзка клавиатура - дор контролер, конторлера задължително в контролираната от него зона, т.е. зад вратата а не пред, всички арматури като мукове, насррещници и др. окабелени от към контролираната зона и с мониторинг на сигналите ... ама ....
п.с. това за джъмпер или др. с което да се разреши режим прогрмаиране, това го имат някои системи, основно е изискване за клас С и нагоре, но това касае конфигурирането, задължително всеки потребител може да смени своя код. Това е наложено точно от мерки за сигурност, не може сервизният техник да знае кода на потребителя. В същото време неможе потребителя да има право на достъп до този джъмпер, админ кий и т.н. Затова инжинера сетва истемата по задание и въвежда някакви стандартни кодове 1234, 5678 и т.н. След това вика потребителите, рпави им обучение, изчаква всеки потребител да си смени кода, проверява дали наистина кода е сменен, т.е. дали старите не са случайно активни и си тръгва. Той не зане какви са новите кодове, потребителите не знаят кодовете за прогрмаиране на системата ... имар зделение, от там и надеждност. Всичко останало означава д аостави бай хуй да може да ти рови системата, или пък да разчиташ на инжинера който може да е подкупен или самия той да има интерес за злоупотреба.
|
| Съб Юли 25, 2015 9:51 pm |
|
 |
|
bateAz
Ранг: Форумен бог
Регистриран на: Нед Сеп 26, 2004 4:11 pm Мнения: 3750 Местоположение: София
|
 Re: Кодова брава с PIC16F628A
Тони, всеки потребител да си има свой код и да си го сменя - това НЕ Е нашият случай. Нашият случай е един код ( нащракан с ДИП свичове ), и който го знае е в джаза. А иначе наистина подходите са каквито ти ги каза.
|
| Съб Юли 25, 2015 11:12 pm |
|
 |
|
ToHu
Ранг: Форумен бог
Регистриран на: Нед Сеп 26, 2004 9:21 pm Мнения: 30686 Местоположение: София
|
 Re: Кодова брава с PIC16F628A
Ами според мен подхода пак трябва да е такъв но е въпрос на гледна точка.
|
| Пон Юли 27, 2015 10:29 pm |
|
|
Кой е на линия |
Потребители разглеждащи този форум: 0 регистрирани и 6 госта |
|
Вие не можете да пускате нови теми Вие не можете да отговаряте на теми Вие не можете да променяте собственото си мнение Вие не можете да изтривате собствените си мнения Вие не можете да прикачвате файл
|
|