Jump to content
  • ×   Pasted as rich text.   Restore formatting

      Only 75 emoji are allowed.

    ×   Your link has been automatically embedded.   Display as a link instead

    ×   Your previous content has been restored.   Clear editor

    ×   You cannot paste images directly. Upload or insert images from URL.

  • Similar Content

    • By Игорь Теплов
      Здравствуйте, уважаемы форумчане!
      В ходе проектирования цифрового устройства, я столкнулся с парой проблем, решить которые сам не в силах.
      1) Ниже на аттаче реализован кодовый замок на четырёх RS-триггерах, где R2-Сt - времязадающая цепочка. Как только конденсатор Ct зарядится, на вход S первому триггеру пойдёт напряжение высокого уровня (сбрасывая уже введённый код), и если будет нажата кнопка SB1, то на Reset тоже пойдёт логическая единица, что приведёт к невозможному состоянию триггера. Как это предусмотреть и исправить?
      2) При нажатии неправильных кнопок (SB5-SB10) конденсатор быстро зарядится, и подаст напряжение высокого уровня на вход S первого триггера (сбрасывая уже введённый код), но также и переключит реле К2. Таким образом, нажатие неверных кнопок приводят ко включению реле К2, а это очень и очень плохо. Как этого, опять же, избежать?
      Интересующие части выделены красным цветом. Прошу помощи.

    • By NemoS
      Здравствуйте форумчане)
      Недавно начал заниматься микроконтроллерами. Решил сделать кодовый замок по книге Белов А.В. - "Самоучитель разработчика устройств на микроконтроллерах AVR."
      Так вот, хочу реализовать его на ATmega328P-PU c использованием Atmel Studio.
      Ниже код в СV

      /* * Kodovii_zamok.c * Version: 1 * Created: 17.02.2015 13:57:56 * Author: Белов А.В. - Самоучитель разработчика устройств на микроконтроллерах AVR * Chip type: Tiny2313 */ #include <tiny2313.h> #define klfree 0x77f #define kzad 3000 #define kandr 20 #define bsize 30 unsigned char flz; unsigned int bufr[bsize]; #pragma warn- eeprom unsigned char klen; eeprom unsigned int bufe[bsize]; #pragma warn- interrupt[TIM1_OVF] void timer1_ovf_isr(void){ flz=1; } interrupt[TIM1_COMPA] void timer1_compa_isr(void){ flz=1; } unsigned int incod (void) { unsigned int cod0=0; unsigned int cod1; unsigned char k; for (k=0;k<kandr;k++) { cod1=PINB&amp;amp;0x7; cod1=(cod1<<8)+(PIND&amp;amp;0x7F); if (cod0!=cod1) { k=0; cod0=cod1; } } return cod1; } void wait (unsigned char kodz) { if (kodz==1) TIMSK=0x40; else TIMSK=0x80; TCNT1=0; flz=0; #asm("sei"); if (kodz!=2) while(flz==0); } void main(void) { unsigned char ii; unsigned char i; unsigned int codS; PORTB=0xE7; DDRB=0x18; PORTD=0x7F; DDRD=0x00; TCCR1A=0x00; TCCR1B=0x03; TCNT1=0; DCR1A=kzad; ACSR=0x80; while(1) { m1: while(incod()!=klfree); while(incod()==klfree); ii=0; m2: #asm("cli"); wait(1); codS=incod(); bufr[ii++]=codS; if(ii>=bsize)goto m4; wait(2); m3: if(incod()!=codS)goto m2; if(flz==0) goto m3; m4: if(PINB.7==1) goto comp; klen=ii; for(i=0; i<ii; i++) bufe[i]=bufr[i]; goto zamok; comp: if(klen!=ii) goto m1; for(i=0; i<ii; i++) if(bufe[i]!=bufr[i]) goto m1; zamok: PORTB.4=1; wait(3); PORTB.4=0; } }
      Ниже я пытался его перенести в студию на язык Си

      #define F_CPU 8000000 #include <avr/io.h> #include <avr/eeprom.h> #include <avr/interrupt.h> #define klfree 0x77f #define kzad 3000 #define kandr 20 #define bsize 30 unsigned char flz; unsigned int bufr[bsize]; //#pragma warning (default) EEMEM unsigned char klen; EEMEM unsigned int bufe[bsize]; //#pragma warning (default) ISR(TIMER0_OVF_vect) { flz=1; } ISR(TIMER0_COMPA_vect) { flz=1; } unsigned int incod (void) { unsigned int cod0=0; unsigned int cod1; unsigned char k; for (k=0;k<kandr;k++) { cod1=PINB &amp;amp; 0x7; cod1=(cod1<<8)+(PIND &amp;amp; 0x7F); if (cod0!=cod1) { k=0; cod0=cod1; } } return cod1; } void wait (unsigned char kodz) { if (kodz==1) TIMSK0=0x40; else TIMSK0=0x80; TCNT0=0; flz=0; asm("sei"); if (kodz!=2) while(flz==0); } int main(void) { unsigned char ii; unsigned char i; unsigned int codS; PORTB=0xA7; DDRB=0x40; PORTD=0x7F; DDRD=0x00; TCCR0A=0x00; TCCR0B=0x03; TCNT0=0; OCR0A=kzad; ACSR=0x80; while(1) { m1: while(incod()!=klfree); while(incod()==klfree); ii=0; m2: asm("cli"); wait(1); codS=incod(); bufr[ii++]=codS; if(ii>=bsize)goto m4; wait(2); m3: if(incod()!=codS)goto m2; if(flz==0) goto m3; m4: if(PINB |= (1<<7)) goto comp; klen=ii; for(i=0; i<ii; i++) bufe[i]=bufr[i]; goto zamok; comp: if(klen!=ii) goto m1; for(i=0; i<ii; i++) if(bufe[i]!=bufr[i]) goto m1; zamok: PORTB |= (1<<6); wait(3); PORTB &=~(1<<6); } }
      не работает(
      Посоветуйте как заставить этот код работать)

    • By Masterone
      Добрый день. Собрал кодовый замок по вот этой схеме http://cxem.net/mc/mc130.php
      При включении сразу попросило ввести пароль, я ввожу 0000 и оно просит ввести старый пароль, а я старый до этого не вводил. Уже всю статью даже на анл прочитал, не нашел какой там изначальный пароль. Кто что-то понимает в прошивках, пошу посмотреть, и сказать какой там запраграммирован старый пароль. Заранее спасибо, прошивку и исходники можно скачать в конце статьи)
×
×
  • Create New...