>

많은 소비자 기기처럼 작동하는 재설정 버튼이있는 ATmega328을 사용하여 회로를 만들려고합니다.

<올>
  • 짧게 누르면 마이크로 컨트롤러가 다시 시작됩니다
  • 길게 누르면 (5 초?) 설정이 기본값으로 복원됩니다
  • 이 행동을 달성하는 가장 좋은 방법은 무엇입니까? 두 개의 핀이 필요하다고 생각합니까? 수동 구성 요소 만 사용하여 수행 할 수 있습니까?

    감사합니다!


    • 답변 # 1

      1 개의 버튼, 1 개의 저항기, 1 개의 커패시터 및 1 개의 GPIO 핀 (리셋 핀 외에)으로 수행 할 수 있습니다.

      이 회로 시뮬레이션 – CircuitLab을 사용하여 만든 회로도

      버튼을 누르면 RESET 핀에 ​​LOW 펄스가 발생합니다 (USB 인터페이스와 똑같은 방식으로).

      시동 과정에서 선택한 GPIO 핀을 읽습니다. LOW이면 버튼을 계속 누르고 있습니다. HIGH이면 해제되었습니다.

      일반 부트 로더와 함께 Arduino를 사용하는 경우 부트 로더 자체에 2 초 지연이 발생합니다 (충분할 수 있음). 또는 실수로 설정을 재설정하지 않도록 버튼을 놓을 시간이 충분한 지 확인하기 위해 버튼을 읽기 전에 프로그램에서 자체 지연을 설정해야합니다.

    • 답변 # 2

      상태 머신 사용 왕의 프레스를 감지합니다. 완료되면 하드웨어 또는 소프트웨어 재설정을 트리거하거나 재설정 벡터로 이동하여이를 시뮬레이션 할 수 있습니다. 변수를 명시 적으로 초기화하는 등이를 지원하는 코드를 작성해야합니다.

    • 답변 # 3

      RSTDISBL(높은 퓨즈의 비트 7)을 설정하여 외부 재설정을 비활성화하고재설정PC6으로 고정하여 프로그램의 재설정 동작을 관리합니다.

      두 번째 부분은 재설정 버튼을 눌렀을 때 캡처하는 것입니다. 핀이 변경 될 때PCINT1 처리기 ISR에 코드를 넣으십시오 (PCINT14핀 기능). Arduino 보드를 프로그래밍하는 경우 재설정 버튼을 위로 당깁니다 (누르면 LOW가되고 릴리스는 HIGH가됩니다).

      길게 누르거나 짧게 누르는 것은 타이머 문제입니다. 요구 사항에 따라 길게 누르면 마이크로 컨트롤러가 재설정되기 전에 일부 EEPROM 값 또는 외부 상태를공장 기본값으로 복원합니다.

      이 C 스 니펫은 짧게 또는 길게 누르면 마이크로 컨트롤러를 재설정합니다 (워치 독 타이머 기능) :

      #include <avr/wdt.h>
          // ...
          wdt_enable(WDTO_15MS);
          for (;;) {}
      
      

    관련 자료

  • 이전 arduino - 인터넷 및 블루투스를 통한 Arduino 제어
  • 다음 microsoft excel 2010 - 조건부로 이전 셀의 값 반환