как шьется мк ? разжуйте пожалуйста просто начинающий .
кодовый замок
- Сообщения: 17
- Зарегистрирован: Вт ноя 12, 2013 00:02:24
собрал схему кодового замка . не могу никак понять в чем дело проблема в тои что схема не работает либо из за прошивки либо из за фьюзов . источник тут http://radioparty.ru/device-avr/49-codzamok-attiny2313
как шьется мк ? разжуйте пожалуйста просто начинающий .
как шьется мк ? разжуйте пожалуйста просто начинающий .
- Реклама
- Сообщения: 24
- Зарегистрирован: Ср апр 24, 2013 22:27:51
Для помощи Вам нужна следующая инфо: Как называется ваш программатор, прошивка модернизировалась или используется как есть? В описании к устройству указывается что прошивка и файл данных записываются отдельно (скачать файлы не смог, или выложите здесь или укажите прямую ссылку)
Какие ошибки возникают при прошивке (если возникают)?
Какие ошибки возникают при прошивке (если возникают)?
- Сообщения: 17
- Зарегистрирован: Вт ноя 12, 2013 00:02:24
Последовательный программатор построенный на буферной мкросхеме 74hc244 прошивка не модернизировалась такая и есть которая есть на сайте . Проблемма с том что кнопки все реагируют на нажатие . Т.е. светодиод показывает что кнопки нажимаются . Только они и делают что только нажимаются больше ни чего не происходит .пароль не запоминает управляющего сигнала на транзистор нету магнит не работает кнопка открыть закрыть двери не работают
- Сообщения: 17
- Зарегистрирован: Вт ноя 12, 2013 00:02:24
Решил попробовать что-то на практике сделать. И что-то как-то я заступорился.
Пишу кодовый замок.
В моей теории мы заполняем массив 4 цифрами с клавиатуры, затем сверяем его с "эталоном", и, если все совпадает, открываем дверь. Но оно открывает дверь, если ввести любые четыре символа.
ткните пожалуйста носом
Пишу кодовый замок.
В моей теории мы заполняем массив 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); };
};
}[b]— Да не боись, всего двенадцать вольт… и восемьсот ампер.[/b]
- Реклама
Вот смотри здесь правильно
Кстати сказать 90s2313 уже не выпускают зачем на неё писать прошивку, сейчас идут Tiny2313
здесь нетPIND.0==0
Сообразил в чём дело?npas[0]=pas[0]
Кстати сказать 90s2313 уже не выпускают зачем на неё писать прошивку, сейчас идут Tiny2313
- Сообщения: 1163
- Зарегистрирован: Ср янв 05, 2011 16:25:15
.. а на практике все будет иначеWaL97 писал(а):В моей теории мы заполняем массив 4 цифрами с клавиатуры, затем сверяем его с "эталоном", и, если все совпадает..
1) что будет если одновременно нажать 2 и более кнопок ?
2) ..по-хорошему опрашивать кнопки лучше всего в прерывании по таймеру, иначе весь ресурс МК сведется к работе delay_ms()
3) в С не нужно путать "=" - присваивание и сравнение "=="
Тьфу, вот я балбес.3) в С не нужно путать "=" - присваивание и сравнение "=="
Но, надеюсь, что со временем научусь, не зря же на программиста учиться начал
Просто первые у меня есть. Да и такую простую программу несложно переделать на тиньку будет.Кстати сказать 90s2313 уже не выпускают зачем на неё писать прошивку, сейчас идут Tiny2313
А я делаю сейчас его не для практических целей, а чтоб научиться.. а на практике все будет иначе, например:
1) что будет если одновременно нажать 2 и более кнопок ?
2) ..по-хорошему опрашивать кнопки лучше всего в прерывании по таймеру, иначе весь ресурс МК сведется к работе delay_ms()
Как мне кажется, на этом устройстве программу можно улучшать и усложнять практически бесконечно.
[b]— Да не боись, всего двенадцать вольт… и восемьсот ампер.[/b]
- Сообщения: 1163
- Зарегистрирован: Ср янв 05, 2011 16:25:15
.. усложнение и правильная работа, не одно и то же )WaL97 писал(а):.. на этом устройстве программу можно улучшать и усложнять практически бесконечно.
- Сообщения: 574
- Зарегистрирован: Вт ноя 02, 2010 17:46:37
Проверку ведённых значений с "эталоном" очень хорошо делается на конечных автоматах + можно добавить другие условия (к примеру время нажатия кнопки) Выглядит это примерно следующим образом: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;
}
}
Что устраняет ложное срабатывания.
Да, подобное решение я видел где-то, в будущем и такое попробую.pokk писал(а):Проверку ведённых значений с "эталоном" очень хорошо делается на конечных автоматах + можно добавить другие условия (к примеру время нажатия кнопки) Выглядит это примерно следующим образом:WaL97 писал(а): В моей теории мы заполняем массив 4 цифрами с клавиатуры, затем сверяем его с "эталоном", и, если все совпадает, открываем дверь.
Сигнал о введённом "правильном" коде поступит только тогда когда все комбинации совпадут.
Что устраняет ложное срабатывания.
[b]— Да не боись, всего двенадцать вольт… и восемьсот ампер.[/b]


