목적: 이 프로젝트의 목적은 Arduino C 환경에 내장될 어셈블리 프로그램을 사용하고 Arduino 보드에서 입력 및 출력을 수행하는 방법을 소개하는 것입니다. 입력은 풀업 또는 풀다운 저항으로 프로그램을 시작하는 스위치가 되며 출력은 모스 부호로 SOS를 깜박이는 LED를 구동합니다. 복잡해 보이지만 매 단계마다 단서를 얻을 수 있습니다. 그리고 다양한 지연 시간에 대해 이전 랩 지연 기능과 R16을 사용할 수 있습니다.
전보와 무선 전신 시대에는 음성이 인코딩되기 전후에도 통신 수단은 모스 부호를 사용하는 '탭퍼' 또는 고급 스위치를 사용하여 발신자가 길고 짧은 문자를 사용하여 메시지를 전달할 수 있었습니다. 지속 시간 또는 '탭'. 수신 측에는 탭을 반복하여 듣고 이를 다시 단어로 번역할 수 있는 릴레이 또는 신호음이 있습니다. 모스 부호에서 문자 S는 3개의 짧은 점 또는 지속 시간으로 인코딩되고 O는 3개의 긴 대시 또는 지속 시간으로 인코딩됩니다. 메이데이나 도움을 나타내는 모스 부호는 SOS입니다. 이는 …---… …---… 등입니다.
본 실습에서는 스위치가 켜져 있을 때 LED에 모스 부호로 SOS를 보내고, 스위치가 꺼지면 완전한 SOS를 보낸 후 중지됩니다.
다음은 소리가 어떻게 나는지에 대한 예입니다: https://www.youtube.com/watch?v=Zsb7stKelq4
스위치에 대한 입력을 생성합니다. 이렇게 단순해 보이는 작업을 마이크로프로세서에서 수행할 때는 약간의 생각이 필요합니다.
다음은 입력을 위한 몇 가지 일반적인 단계입니다.
I/O 포트에 대해서는 AVR 데이터시트 섹션 14를 참조하세요. AVR의 I/O 핀 하나에 대한 하드웨어는 아래에 나와 있습니다.
AVR의 I/O 핀용 내부 하드웨어
이 모든 하드웨어는 핀을 입력 또는 출력으로 구성하고 내부 풀업 저항기, 절전 모드 및 클록과의 동기화와 같은 기타 기능을 구성하는 데 필요합니다. 분명히 I/O 핀은 단순하지 않지만 이 실습에서는 간단한 입력 또는 출력에만 관심을 가질 것입니다. 이를 위해서는 DDR 레지스터와 사용할 입력 또는 출력용 포트가 필요합니다.
이전에는 PORTB 비트 5의 LED가 깜박이도록 출력을 구성하는 방법을 살펴보았습니다.
Arduino에서 사용할 수 있는 포트 핀을 선택할 수 있지만 포트와 비트를 결정해야 합니다.
출력: PORTB, 레지스터 5, 비트 5는 내부적으로 LED에 사용되며 커넥터(UNO의 핀 13)로도 가져오지만 외부적으로는 사용하지 마십시오. 두 개의 LED를 구동하는 데 충분한 전류 용량이 없습니다.
• 제안: PORTB를 사용하고 출력에 5비트 4(UNO의 핀 12)를 등록합니다.
입력: 사용할 수 있는 다른 선택 사항이 많이 있습니다(컴퓨터와 통신하는 데 필요한 I/O 핀 0 또는 1을 사용하지 않는 것을 제외하고). • 제안: PORTB, 레지스터 5 비트 3(UNO의 핀 11)을 입력으로 사용할 수 있습니다.
일반적인 설정: 입력 및 출력용 핀을 선택합니다.
입력 읽기: 포트를 알고 있는 입력을 읽으려면 아래 표시된 IN 명령어와 사용 중인 포트의 핀 주소를 사용합니다. 예를 들어, PORTB, 비트 4(UNO의 핀 18)를 읽으려면 이 명령어를 사용하여 포트를 읽습니다.
고리:
IN r17, 0x03; //PORTB 핀을 레지스터 17로 읽습니다.
이제 다른 모든 비트를 마스크하려면 0x10과 AND로 비트 4를 선택해야 합니다. 그 이후에는 입력 구성과 풀업 또는 풀다운 사용 여부에 따라 달라집니다. 여기서는 풀다운 저항을 사용합니다.
풀업 저항을 사용하는 경우 스위치 폐쇄로 인해 0이 되고 그렇지 않으면 1이 됩니다. 따라서 AND 명령어를 수행한 다음 0이면 분기할 수 있습니다.
ANDI r17, 0x08; //그리고 r17과 08h
BRNE 시작; //스위치가 닫혀 있지 않으면(예: 1) 돌아가서 루프를 반복합니다.
풀다운 저항을 사용하는 경우 스위치 폐쇄로 인해 1이 되고 그렇지 않으면 0이 됩니다.
ANDI r17, 0x08; //그리고 r16과 08h
BREQ 시작; //스위치가 닫혀 있지 않으면(예: 0) 돌아가서 루프를 반복합니다.
출력 생성은 입력 생성과 매우 유사합니다. 포트 핀을 출력으로 설정해야 합니다. 그런 다음 CBI 또는 SBI를 사용하여 0 또는 1로 만들 수 있습니다.
다음은 출력을 수행하는 몇 가지 일반적인 단계입니다.
프로그램 설계 이 실습은 깜박이는 LED에 대한 이전 실습과 매우 유사합니다. 해당 스케치는 시작하기 위한 기반으로 첨부됩니다. 위의 규칙에 따라 SOS를 생성하도록 구조를 변경하고 스위치의 입력을 사용하여 SOS를 실행하고 출력을 사용하여 LED를 구동하기만 하면 됩니다. 아래 상자에 표시된 대로 점, 대시 등에 대해 다양한 지연을 설정하려면 지연 서브루틴을 사용하십시오.
타이밍 관계를 정의하는 문서를 참조하고 SOS 모스 부호에 대한 프로그램을 설계할 때 다음 규칙을 따르십시오.