Страница 1 из 1
кодовый замок
Добавлено: Вт янв 20, 2015 13:59:56
camecadze333
собрал схему кодового замка . не могу никак понять в чем дело проблема в тои что схема не работает либо из за прошивки либо из за фьюзов . источник тут
http://radioparty.ru/device-avr/49-codzamok-attiny2313
как шьется мк ? разжуйте пожалуйста просто начинающий .
Re: кодовый замок
Добавлено: Вт янв 20, 2015 15:32:01
andrikll
Для помощи Вам нужна следующая инфо: Как называется ваш программатор, прошивка модернизировалась или используется как есть? В описании к устройству указывается что прошивка и файл данных записываются отдельно (скачать файлы не смог, или выложите здесь или укажите прямую ссылку)
Какие ошибки возникают при прошивке (если возникают)?
Re: кодовый замок
Добавлено: Вт янв 20, 2015 16:21:43
camecadze333
Последовательный программатор построенный на буферной мкросхеме 74hc244 прошивка не модернизировалась такая и есть которая есть на сайте . Проблемма с том что кнопки все реагируют на нажатие . Т.е. светодиод показывает что кнопки нажимаются . Только они и делают что только нажимаются больше ни чего не происходит .пароль не запоминает управляющего сигнала на транзистор нету магнит не работает кнопка открыть закрыть двери не работают
Re: кодовый замок
Добавлено: Вт янв 20, 2015 16:49:40
camecadze333
здесь прошивки которые прилагаются на сайте
- 49 (1).rar
- прошивка и печатка на замок
- (10.13 КБ) 118 скачиваний
Re: кодовый замок
Добавлено: Сб фев 14, 2015 02:22:39
WaL97
Решил попробовать что-то на практике сделать. И что-то как-то я заступорился.
Пишу кодовый замок.
В моей теории мы заполняем массив 4 цифрами с клавиатуры, затем сверяем его с "эталоном", и, если все совпадает, открываем дверь. Но оно открывает дверь, если ввести любые четыре символа.
ткните пожалуйста носом
Спойлер
Код: Выделить всё
#include <90s2313.h>
#include <delay.h>
void main(void)
{
DDRB=0x00;
DDRD=0xF8;
PORTB=0xFF;
PORTD=0x07;
while (1)
{
int pas[]={2,3,4,5}; //правильный пароль
int npas[4]; //введеный пароль
int i=0;
while(i<4) {
if(PINB.0==0) //если PB0 на массу, то выполняем {это}
{
npas[i]=0;
i=i+1;
delay_ms(50);
};
if(PINB.1==0) //если PB1 на массу, то выполняем {это}
{
npas[i]=1;
i=i+1;
delay_ms(50);
};
if(PINB.2==0) //если PB2 на массу, то выполняем {это}
{
npas[i]=2;
i=i+1;
delay_ms(50);
};
if(PINB.3==0) //если PB3 на массу, то выполняем {это}
{
npas[i]=3;
i=i+1;
delay_ms(50);
};
if(PINB.4==0) //если PB4 на массу, то выполняем {это}
{
npas[i]=4;
i=i+1;
delay_ms(50);
};
if(PINB.5==0) //если PB5 на массу, то выполняем {это}
{
npas[i]=5;
i=i+1;
delay_ms(50);
};
if(PINB.6==0) //если PB6 на массу, то выполняем {это}
{
npas[i]=6;
i=i+1;
delay_ms(50);
};
if(PINB.7==0) //если PB7 на массу, то выполняем {это}
{
npas[i]=7;
i=i+1;
delay_ms(50);
};
if(PIND.0==0) //если PD0 на массу, то выполняем {это}
{
npas[i]=8;
i=i+1;
delay_ms(50);
};
if(PIND.1==0) //если PD1 на массу, то выполняем {это}
{
npas[i]=9;
i=i+1;
delay_ms(50);
};
};
if ((npas[0]=pas[0])&&(npas[1]=pas[1])&&(npas[2]=pas[2])&&(npas[3]=pas[3]))
{
PORTD.3=1;
delay_ms(100); };
};
}
Re: кодовый замок
Добавлено: Сб фев 14, 2015 08:22:17
alex_
Вот смотри здесь правильно
PIND.0==0
здесь нет
npas[0]=pas[0]
Сообразил в чём дело?

Кстати сказать 90s2313 уже не выпускают зачем на неё писать прошивку, сейчас идут Tiny2313
Re: кодовый замок
Добавлено: Сб фев 14, 2015 09:04:01
ChipKiller
WaL97 писал(а):В моей теории мы заполняем массив 4 цифрами с клавиатуры, затем сверяем его с "эталоном", и, если все совпадает..
.. а на практике все будет иначе

, например:
1) что будет если одновременно нажать 2 и более кнопок ?
2) ..по-хорошему опрашивать кнопки лучше всего в прерывании по таймеру, иначе весь ресурс МК сведется к работе delay_ms()
3) в С не нужно путать "=" - присваивание и сравнение "=="
Re: кодовый замок
Добавлено: Сб фев 14, 2015 11:05:33
WaL97
3) в С не нужно путать "=" - присваивание и сравнение "=="
Тьфу, вот я балбес.

Постоянно то запятую потеряю, то еще что. Спасибо
Но, надеюсь, что со временем научусь, не зря же на программиста учиться начал
Кстати сказать 90s2313 уже не выпускают зачем на неё писать прошивку, сейчас идут Tiny2313
Просто первые у меня есть. Да и такую простую программу несложно переделать на тиньку будет.
.. а на практике все будет иначе

, например:
1) что будет если одновременно нажать 2 и более кнопок ?
2) ..по-хорошему опрашивать кнопки лучше всего в прерывании по таймеру, иначе весь ресурс МК сведется к работе delay_ms()
А я делаю сейчас его не для практических целей, а чтоб научиться

Как мне кажется, на этом устройстве программу можно улучшать и усложнять практически бесконечно.
Re: кодовый замок
Добавлено: Сб фев 14, 2015 16:00:49
ChipKiller
WaL97 писал(а):.. на этом устройстве программу можно улучшать и усложнять практически бесконечно.
.. усложнение и правильная работа, не одно и то же )
Re: кодовый замок
Добавлено: Вт фев 17, 2015 08:13:10
pokk
WaL97 писал(а):
В моей теории мы заполняем массив 4 цифрами с клавиатуры, затем сверяем его с "эталоном", и, если все совпадает, открываем дверь.
Проверку ведённых значений с "эталоном" очень хорошо делается на конечных автоматах + можно добавить другие условия (к примеру время нажатия кнопки) Выглядит это примерно следующим образом:
Код: Выделить всё
unsigned char mass_code[5];
switch(code_mode){
case 0:{
if(mass_code[0]=='1'){ // Если первый ведённый символ 1 то переходим в следуюшее состояние
//тут можно наставить ещё кучу разных условий
code_mode=1;
break;
}
code_mode=0; // Иначе выдаём введённый код неверен.
break;
}
case 1:{
if(mass_code[1]=='2'){ // Второй введённый символ 2 ?Если да проверяем третий символ если нет то код неверен
code_mode=2;
break;
}
code_mode=0;
break;
}
case 2:{
if(mass_code[2]=='3'){
code_mode=3;
break;
}
code_mode=0;
break;
}
case 3:{
if(mass_code[3]=='4'){
//--------------------->>>>>>> Введённый код правильный
code_mode=0;
break;
}
code_mode=0;
break;
}
}
Сигнал о введённом "правильном" коде поступит только тогда когда все комбинации совпадут.
Что устраняет ложное срабатывания.
Re: кодовый замок
Добавлено: Вт фев 17, 2015 16:27:39
WaL97
pokk писал(а):WaL97 писал(а):
В моей теории мы заполняем массив 4 цифрами с клавиатуры, затем сверяем его с "эталоном", и, если все совпадает, открываем дверь.
Проверку ведённых значений с "эталоном" очень хорошо делается на конечных автоматах + можно добавить другие условия (к примеру время нажатия кнопки) Выглядит это примерно следующим образом:
Сигнал о введённом "правильном" коде поступит только тогда когда все комбинации совпадут.
Что устраняет ложное срабатывания.
Да, подобное решение я видел где-то, в будущем и такое попробую.