Страница 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 цифрами с клавиатуры, затем сверяем его с "эталоном", и, если все совпадает, открываем дверь. Но оно открывает дверь, если ввести любые четыре символа.
ткните пожалуйста носом :cry:
Спойлер

Код: Выделить всё

#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]
Сообразил в чём дело? :roll:
Кстати сказать 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 цифрами с клавиатуры, затем сверяем его с "эталоном", и, если все совпадает, открываем дверь.
Проверку ведённых значений с "эталоном" очень хорошо делается на конечных автоматах + можно добавить другие условия (к примеру время нажатия кнопки) Выглядит это примерно следующим образом:

Сигнал о введённом "правильном" коде поступит только тогда когда все комбинации совпадут.
Что устраняет ложное срабатывания.
Да, подобное решение я видел где-то, в будущем и такое попробую.