attiny2313의 DIY 회로. 버튼을 간단한 프로그램인 ATtiny2313 마이크로컨트롤러에 연결합니다. MK에서 프로그램의 컴파일 및 펌웨어

간단한 회로를 조립하는 방법, 프로그래머를 ATtiny2313 마이크로 컨트롤러에 연결하는 방법, 작성하는 방법 가장 간단한 프로그램 C 언어로 작성된 프로그램과 ATtiny2313 마이크로컨트롤러를 플래시하는 방법에 대한 모든 내용은 이 기사에서 찾을 수 있습니다.

우선 프로그래머가 필요한데, 프로그래머의 종류가 많은데, 어떤 프로그래머를 선택해야 할까요?
마이크로컨트롤러를 삽입하고, 플래시하고, 마이크로컨트롤러를 제거한 다음 보드에 삽입하여 결과를 확인해야 하는 일반 프로그래머가 있는데, 이 시퀀스는 처음에 수백 번 수행되어야 합니다. 의견은 편리하지 않습니다.
우리의 마이크로컨트롤러 ATtiny2313 SPI 포트를 통해 ISP(시스템 내 프로그래밍) 기능을 지원합니다. 이 회로 내 프로그래밍 사용 사례는 다음과 같습니다. ISP제 생각에는 가장 편리하고 빠른 것 같습니다. 왜냐하면... 펌웨어를 업데이트할 때마다 보드에서 마이크로컨트롤러를 제거할 필요가 없습니다. 컴퓨터와 보드에서 프로그래머를 분리하지 않고도 마이크로컨트롤러를 수백 번 프로그래밍할 수 있으며 즉시 마이크로컨트롤러를 플래시한 후 결과, 디버깅 프로세스를 확인할 수 있습니다. 소프트웨어아마추어 무선 장치의 설치가 눈에 띄게 단순화되고 설치 시간이 단축됩니다.
회로 내 ISP 프로그래머를 직접 만들 수 있습니다. 인터넷에는 많은 것들이 있습니다. 간단한 회로이것이 LPT를 통해 어떻게 수행되는지, COM 포트, 예를 들어 프로그래머 포니프로그만드는 방법에 대한 다이어그램은 인터넷에서 찾을 수 있습니다.

이 기사에서는 마이크로컨트롤러용 회로 내 ISP 프로그래머와 작업하는 방법에 대해 설명합니다. AVR(PX-400) COM 포트를 통해 작동합니다.
컴퓨터에 COM 포트가 없으면 다음과 같은 어댑터도 필요합니다. USB 포트 COM 포트에는 다양한 종류의 어댑터도 있으므로 제가 작업한 어댑터를 추천합니다. UCON-232S USB-직렬 포트 변환기 보드
프로그래머의 사진 PX-400, 어댑터 UCON-232S USB , 데이터시트 ATTiny2313

이 구성표의 모든 세부 사항을 더 자세히 살펴 보겠습니다.
(만약에 대비하여 모든 부품, 프로그래머, 어댑터(USB에서 COM 포트까지)를 Chipdip.ru에서 구입했습니다.)

1 - PBD-20 보드 소켓 2.54mm 2x10 직선- 편의상 마이크로 컨트롤러 핀의 신호를 더 쉽게 확인할 수 있도록 이 작업을 수행했지만 이 작업은 수행할 수 없습니다.
2 - SCS-20 DIP 패널 20핀- 필요한 경우 보드의 마이크로컨트롤러를 교체할 수 있도록 패널을 보드에 납땜합니다.
ATtiny2313-20PU, DIP20, MCU, 5V, 1K 플래시, 12MHz- 마이크로컨트롤러를 DIP 패널에 삽입합니다.
3 - 수정 4.000MHz(절두형) HC-49S- 수정 4MHz
4 - 세라믹 커패시터 K10-17B imp. 22pF NPO,5%,0805- 22pF 세라믹 커패시터 2개
5 - 78M05 (+5V, 0.5A) TO220- 5V 전압 안정기는 마이크로 컨트롤러에 +5V 이하의 안정화된 전력을 공급합니다. 이 경우에는 4.4V를 얻었으므로 충분합니다.
6 - NP-116 전원 플러그 1.3x3.4x9.5mm MP-331(7-0026c)- 전원 플러그가 기존 플러그에 납땜되어 있음 충전기~에서 휴대전화 DC 5.7V/800mA
7 - DS-213 전원 소켓 온보드- 손쉬운 전원 연결을 위해 NP-116 플러그의 전원 공급 장치는 어디에 있습니까?
8 - IDC-10MS(BH-10), 스트레이트 플러그- 회로 내 ISP 프로그래머 연결용 플러그
9 - 일정한 저항 0.25W 150Ω- MISO, SCK, MOSI 핀에 3개의 150Ω 저항기
10 - 일정한 저항 0.25W 47Ω- RESET 핀당 47Ω 저항기 1개
11 - 택트버튼 h=5mm, TC-0103 (TS-A2PS-130)- 버튼 재설정 재설정, 버튼을 누른 후 마이크로 컨트롤러의 프로그램이 처음부터 시작되므로 버튼을 만들 수 없습니다.
12 - 녹색 LED d=3mm, 2.5V, 2mA - 표시기의 기능을 수행하며 이 항목을 수행할 수 없습니다.
13 - 일정한 저항 0.25W 110Ω- LED에 2V가 있도록 LED용 저항기를 사용합니다. 이 단계는 생략할 수 있습니다.
14 - 마이크로 컨트롤러 핀의 신호를 확인하기 위해 LED에 연결된 두 개의 와이어, 이 단계를 수행할 수 없습니다.
15 - Dip-RM 인쇄 브레드보드 100x100mm

포인트 3 및 4 외부 클록 생성기와 같은 단일 장치로 작동합니다. 내부 RC 발진기의 정확성과 안정성에 대한 높은 요구 사항을 두지 않으면 이 지점을 생략할 수 있습니다. 내부 RC 발진기에는 약 10%의 오류가 있습니다. 온도 변화에 따라 정확도가 영향을 받을 수 있습니다.

그래서 다운로드하고 설치했습니다. 아트멜 스튜디오 :
발사하자 아트멜 스튜디오 LED를 깜박이는 간단한 프로그램을 C 언어로 작성합니다.
클릭: 새 프로젝트... \ AVR GCC \ C \ C 실행 가능 프로젝트
프로젝트를 저장할 폴더와 프로젝트 이름(예: Test1)을 지정하고 확인을 클릭합니다.
목록에서 ATtiny2313 마이크로컨트롤러를 선택하고 확인을 클릭하세요.
창에 나타나는 모든 내용을 지우고 아래에 프로그램 코드를 붙여넣습니다.

#define F_CPU 4000000L //외부 석영 4MHz의 주파수를 지정합니다.
#포함하다
#포함하다
정수 메인(공허)
{
//모든 PORTB 핀을 출력으로 설정
DDRB=0xFF;//정보 전송 방향 등록(1-출력, 0-입력)
동안(1)
{
//데이터 레지스터 PORTB(정보 출력에 사용)
PORTB=0b00000001;//MK PB0의 포트 12에 1을 공급합니다. LED를 켭니다.
PORTB=0b00000000;//MK PB0의 포트 12에 0을 적용 - LED를 끕니다.
_delay_ms(1000);//1초 지연.
}
}

메뉴로 이동 빌드\구성 관리자\활성 솔루션 구성\
선택하다 풀어 주다, 누르다 닫다
우리는 프로젝트에 폴더를 가질 수 있도록 이렇게 했습니다. 풀어 주다, 아래에서 이야기하겠습니다.

딸깍 하는 소리 F7, 준비되었습니다. 애플리케이션이 컴파일되었습니다!
ATtiny2313 마이크로 컨트롤러 펌웨어를 플래시하려면 확장자가 있는 파일 하나만 필요합니다. 마녀
이는 우리 프로젝트 폴더에 있습니다: ...
파일 참고해주세요 테스트1.hex그냥 폴더에서 가져가세요 풀어 주다 !
헷갈리지 마세요 왜냐면 폴더 디버그파일도 있어요 테스트1.hex, 하지만 이 파일에는 여전히 디버깅 정보이로 인해 이 파일로 플래시할 수 없습니다. 보통 그런 일이 일어난다 큰 사이즈 MK의 메모리에는 맞지 않습니다.

.hex 파일을 찾았습니다. 이제 ATtiny2313 마이크로 컨트롤러를 플래시하는 프로그램이 필요합니다. 그러한 프로그램은 많지만 우리는 다음 프로그램을 사용하겠습니다. Avr-Osp II
다운로드:

프로그래머를 회로에 연결하고 회로에 전원을 공급하십시오!

프로그램 실행 Avr-Osp II, FLASH 섹션에 파일 경로를 지정하세요... \Test1\Test1\Release\Test1.hex, 프로그램의 확인란을 선택하고 버튼을 누르십시오. 프로그램그게 다야, 마이크로 컨트롤러 ATtiny2313이 플래시되었습니다!

회로 내 ISP 프로그래머의 장점은 무엇입니까?이제 회로에서 전선을 분리하지 않고도 프로그램을 변경할 수 있으며 위에서 설명한 대로 마이크로 컨트롤러를 플래시하고 즉시 결과를 확인할 수 있습니다.

포럼에 질문과 의견을 남겨주세요

AVR RISC 아키텍처:

RISC(축소 명령어 세트 컴퓨터). 이 아키텍처에는 대형 세트명령어는 대부분 1개의 기계 사이클에서 실행됩니다. 따라서 CISC 아키텍처를 기반으로 하는 이전 마이크로 컨트롤러(예: MCS51)에 비해 RISC 마이크로 컨트롤러는 12배 더 빠릅니다.

또는 일정 수준의 성과를 기본으로 삼는다면, 이 조건 RISC(Attiny2313) 기반 마이크로컨트롤러는 생성기의 클록 주파수가 12배 더 적게 필요하므로 전력 소비가 크게 감소합니다. 이런 점에서 디자인이 가능해진다. 다양한 장치 Attiny2313에서는 배터리 전원을 사용합니다.

RAM(작동 저장 장치) 및 데이터와 프로그램의 비휘발성 메모리:

  • 10,000회의 쓰기/삭제 반복을 제공할 수 있는 2KB의 자체 프로그래밍 가능 플래시 프로그램 메모리.
  • 100,000회의 쓰기/삭제 반복을 제공할 수 있는 128바이트의 EEPROM 쓰기 가능 데이터 메모리.
  • 128바이트 SRAM 메모리(읽기 전용 RAM).
  • 프로그램 코드 및 EEPROM 데이터를 보호하는 기능을 사용할 수 있습니다.

주변 속성:

  1. 마이크로컨트롤러 애티니2313최대 계수가 256인 프리스케일러가 별도로 설치된 8비트 타이머 카운터가 장착되어 있습니다.
  2. 별도의 프리스케일러, 캡처 및 비교 회로를 갖춘 16비트 타이머 카운터도 있습니다. 타이머의 시간이 측정됩니다. 카운터는 다음과 같이 다를 수 있습니다. 외부 소스신호 및 내부에서.
  3. 두 개의 채널. 빠른 PWM 변조 및 위상 보정 기능이 있는 PWM의 작동 모드가 있습니다.
  4. 내부 아날로그 비교기.
  5. 내부 발진기가 있는 감시 타이머(프로그래밍 가능).
  6. USI(직렬 범용 인터페이스).

Attiny2313의 특수 기술 지표:


  • 게으른— 유휴 모드. 이 경우 중앙 프로세서만 작동을 멈춥니다. 유휴 상태는 SPI, 아날로그 비교기, A/D 변환기, 카운터 타이머, 감시 장치 또는 인터럽트 시스템의 작동에 영향을 주지 않습니다. 실제로 커널 동기화만 중지됩니다. 중앙 프로세서그리고 플래시 메모리. Attiny2313 마이크로컨트롤러는 외부 또는 내부 인터럽트에 의해 유휴 모드에서 정상 작동으로 돌아갑니다.
  • 전력 다운— Attiny2313 마이크로컨트롤러가 실제로 전력 소비를 차단하는 가장 경제적인 모드입니다. 이 상태에서는 클록 생성기가 중지되고 모든 주변 장치가 꺼집니다. 외부 소스의 인터럽트 처리 모듈만 활성 상태로 유지됩니다. 인터럽트가 감지되면 Attiny2313 마이크로 컨트롤러는 전원 차단을 종료하고 정상 작동으로 돌아갑니다.
  • 대기– 마이크로컨트롤러는 SLEE 명령을 사용하여 이 전력 소비 대기 모드로 전환합니다. 이는 종료와 유사하며 유일한 차이점은 시계가 계속 실행된다는 것입니다.

Attiny2313 마이크로컨트롤러의 입출력 포트:

마이크로컨트롤러에는 설계 요구 사항에 따라 프로그래밍할 수 있는 18개의 I/O 핀이 있습니다. 특정 장치. 이러한 포트의 출력 버퍼는 상대적으로 높은 부하를 견딜 수 있습니다.

  • 포트 A(PA2 - PA0) - 3비트. 프로그래밍 가능한 풀업 저항기가 있는 양방향 I/O 포트.
  • 포트 B(PB7 - PB0) – 8비트. 프로그래밍 가능한 풀업 저항기가 있는 양방향 I/O 포트.
  • 포트 D(PD6 - PD0) – 7비트. 프로그래밍 가능한 풀업 저항기가 있는 양방향 I/O 포트.

공급 전압 범위:

마이크로컨트롤러는 1.8~5.5V의 공급 전압으로 성공적으로 작동합니다. 전류 소비는 컨트롤러의 작동 모드에 따라 다릅니다.

활성 모드:

  • 32kHz의 클록 주파수와 1.8V의 공급 전압에서 20μA.
  • 1MHz의 클록 주파수와 1.8V의 공급 전압에서 300μA.

절전 모드:

  • 1.8V 공급 전압에서 0.5μA.

(3.6Mb, 다운로드 수: 5,934)

이 기사의 장치는 SD 카드를 사용하여 작동합니다. 주제는 오래되고 상당히 진부한 주제이지만 SD 카드 사용에 대해서는 다시 쓸 가치가 있습니다.
일반적으로 SD 카드(SDC, SD 카드)는 많은 장점을 가지고 있으며 소규모 임베디드 프로젝트에서 사용하기 매우 간단하고 편리합니다. 이에 기여하는 요인은 다음과 같습니다.
- 카드와 상호작용하기 위한 매우 간단한 인터페이스(SPI를 통해 구현됨)
- 높은 작동 속도(마이크로컨트롤러는 10Mbit/s에 가까운 속도로 SD 카드에서 데이터를 전송할 수 있음)
- 낮은 전력 소비(문자 그대로 몇 밀리암페어 - 더 이상은 아님)
- 작은 크기;
- 가용성과 저렴한 비용.
SD 카드에는 사실상 단점이 없습니다(초기화 절차 제외).

1. 소개.

나는 이 기사에서 설명한 장치에 SD 카드 말하는 장치를 호출했습니다. 약간 가식적이지만;) 이름을 보면 이것이 말하는 장치라는 것이 분명해집니다. 이는 귀하의 프로젝트를 표명하기 위한 것입니다. 간단히 말해서 다음과 같이 작동합니다. 번호가 지정된 사운드 파일이 SD 카드에 녹음되고 장치는 사용자의 명령에 따라 재생됩니다. 적용 범위는 매우 넓습니다 - 경고 시스템, 장난감, 로봇, 스마트 하우스등. 장치의 크기는 매우 작습니다(더 작을 수도 있지만 의도적으로 더 저렴하고 구입하기 쉬운 ATtiny2313 마이크로 컨트롤러를 선택했습니다). 저는 단순함과 기능성의 극대화에 중점을 두려고 노력했습니다.
앞을 내다보며 결국 어떤 일이 일어날지 살펴보겠습니다.

그러한 장치가 유용합니까? 그럼 모아보자!

2 메모리 카드.

해당 장치는 SD 메모리 카드를 사용합니다. 선택한 이유에 대해 이미 썼으며 SD 카드가 거의 표준 메모리 카드가 되고 있다는 점만 추가하겠습니다. 모바일 장치. 자신의 메모리 카드 유형을 열성적으로 홍보/홍보하는 제조업체에서도 서서히 SD 카드를 사용하기 시작하고 있습니다. 이러한 인기의 이유는 아마도 이 카드의 저렴한 가격 때문이었을 것입니다. 아마추어 장치의 경우 실제로 SD 카드는 사용하기에 적합한 유일한 카드이며 그 이유는 작업을 위한 간단한 인터페이스 때문입니다.

SD 카드는 많은 발전을 이루었으며 구현을 위한 여러 옵션이 있습니다(MMC - SD 카드 옵션, SD ver1, SD ver2, SDHC, SDXC). 카드와 통신하는 절차는 모든 유형의 카드에 대해 간단하고 보편적이지만 카드를 작동(카드 초기화)하는 것은 카드를 의식적으로 "저킹"하고 빈 "더미" 명령을 보내는 등 다소 모호하고 혼란스러운 프로세스입니다. 및 기타 이해할 수 없는 것들(간단히 말하면 탬버린과 함께 춤을 추는 것이 필요합니다 :)). SDC 프로토콜의 사양 자체에는 초기화 프로세스가 상당히 자세하게 설명되어 있으며 이는 이해할 수 있습니다. 각각 고유한 하드웨어와 고유한 특성을 가진 많은 카드 제조업체가 있습니다... 무슨 뜻인가요? - 초기화 절차를 최대한 보편적으로 만들려고 노력했지만 일부 카드가 작동하지 않을 수 있다는 점에 대비하세요. 따라서 장치에 문제가 있는 경우 다른 메모리 카드를 사용해 보십시오. 이것이 원인일 수 있습니다.

안에 이 기기최대 2GB 크기의 SD 카드가 지원됩니다. 더 높은 수준(SDHC 및 SDXC)은 모두 지원되지 않습니다.
카드의 폼 팩터(SD, MiniSD 또는 MicroSD)는 장치마다 다르지 않지만 카드 핀아웃에 따라 올바르게 연결해야 합니다.

3 파일 시스템.

장치는 FAT16 파일 시스템의 카드를 사용합니다. 이 시스템은 구현이 간단하고 쉽기 때문에 우리와 같은 장치에 이상적으로 적합합니다(FAT12 및 FAT32도 원칙적으로 구현하기 어렵지 않지만 FAT16에 비해 장점이 없기 때문에 실용적이지 않습니다).

카드 포맷에 대한 특별한 요구 사항은 없습니다. 사용 가능한 모든 장치에서 포맷할 수 있습니다. 기준 창 서식 지정이러한 목적에 매우 적합합니다.

장치가 올바르게 작동하려면 SD 카드에 있는 사운드 파일이 특정 요구 사항을 충족해야 합니다.
a) 파일 형식은 비압축 WAV여야 합니다.
파일 매개변수는 다음과 같습니다:
- 비트 전송률 - 샘플링 주파수(주파수) - 32000Hz;
- 채널 수(채널) - 1(모노);
- 샘플 크기 - 8비트.
또 다른 가능한 감소는 WAV PCM 8U입니다.

b) 파일 이름은 특별한 방식으로 지정되어야 합니다. 장치가 어떤 파일이 첫 번째, 두 번째, 세 번째 등인지 알기 위해 파일 이름의 첫 번째 문자는 라틴 알파벳의 대문자여야 합니다(파일 확장자와 같은 이름의 나머지 부분은 무시됩니다).
예를 들어, 다음 파일 이름은 정확합니다.
A_Lai_dog.wav - 첫 번째 트랙
B-두 번째 트랙입니다.wav - 두 번째 트랙입니다.
경고와 함께! Error!.wav - 세 번째 트랙

c) 장치의 추가 기능을 사용하기 위해 파일은 "1"과 "2"라는 두 개의 폴더에 위치할 수 있습니다. 장치에는 활성 폴더를 선택하는 스위치가 있습니다. 즉, 재생을 시작하는 동일한 명령으로 전환 입력 레벨(일종의 사운드 구성표 선택)에 따라 폴더 "1" 또는 "2"에서 트랙을 재생할 수 있습니다. - 매우 유용한 것!) . 폴더 중 하나(또는 둘 다)가 없으면 파일은 루트 디렉터리에서 재생됩니다.

이름과 충돌하지 않는 한 오디오 트랙과 함께 다른 파일을 저장할 수 있습니다(별도의 디렉토리에 저장하는 것이 더 좋으며, 그러면 이름이 어떻게 지정되는지 신경 쓸 필요가 없습니다).

d) ATtiny2313의 SRAM 용량이 작기 때문에 데이터를 미리 읽어오기 위한 버퍼 생성이 불가능하여 파일의 데이터를 바로 출력하여 재생합니다. 따라서 FAT 테이블을 사용하여 파일 조각을 검색할 방법이 없습니다(시간이 충분하지 않습니다). 즉, 카드에 기록된 파일은 조각화되어서는 안 됩니다.

사실 이건 큰 문제가 아니기 때문에 운영 체제항상 파일을 전체 조각으로 쓰려고 시도하며 카드에 공간이 있는 한 파일에 대한 모든 작업(삭제, 복사, 이름 바꾸기)은 파일 무결성에 영향을 미치지 않습니다. 매우 작은 카드가 있거나 큰 카드를 가득 채운 경우 파일의 무결성을 확인하려면 간단히 복사하십시오. HDD컴퓨터에서 카드를 포맷하고 파일을 다시 가져오세요.

4 계획. 인쇄 회로 기판.

장치 다이어그램은 최대한 간단합니다. 실제로 마이크로 컨트롤러 자체와 SD 카드 외에는 아무것도 없습니다. 이 장치를 제한된 크기의 장소에서 사용할 계획이므로 나 자신을 위해 SMD 구성 요소에 대한 인장을 만들었습니다. 치수가 중요하지 않은 경우 DIP 버전의 브레드보드에 회로를 조립할 수 있습니다. 브레드보드의 경우 장치를 조립하는 데 최대 15분이 소요됩니다. SD 카드에 허용되는 공급 전압은 2.7~3.6V입니다. 마이크로 컨트롤러도 이 간격에서 정상적으로 작동하므로 일치하는 구성 요소를 사용할 필요가 없습니다. 5V 전원 공급 장치를 사용하여 전체 장치의 작동을 확인했습니다. 모든 것이 잘 작동했지만 이 작업을 권장하지 않습니다. 영구적인 기초, 다른 카드는 과전압에 다르게 반응할 수 있기 때문입니다. 저는 어댑터를 microSD 카드 홀더로 사용하여 접점에 직접 납땜했습니다. 더 작은 크기가 필요한 경우 microSD용 실제 카드 홀더를 사용하는 것이 좋습니다.

마이크로 컨트롤러 펌웨어를 플래시하려면 SD 카드와 동일한 커넥터가 사용되므로 프로그래머를 여기에 연결하는 방법을 생각해야 합니다(저는 특별히 어댑터를 만들었습니다).

보드를 납땜한 후 마이크로컨트롤러를 플래시할 수 있습니다.

완성된 장치의 작은 갤러리:




계획에 관한 작은 뉘앙스.
SD 카드를 카드 홀더에 설치(카드를 전원에 연결)할 때 전류 서지가 발생하고 이에 따라 회로에 전압 강하가 발생합니다(현재 카드에 상당한 용량이 충전되고 있는 것으로 보입니다). 하락폭이 너무 커서 마이크로컨트롤러가 재설정됩니다. 이를 사용하여 카드 초기화 절차를 시작합니다. 카드를 설치하면 마이크로 컨트롤러가 다시 시작되고 펌웨어가 수행하는 첫 번째 작업은 카드를 검색하고 초기화하는 것입니다. 카드(강력한 전원 공급 장치 또는 대형 평활 ​​커패시터)를 설치할 때 마이크로 컨트롤러를 재설정하지 않으면 마이크로 컨트롤러를 수동으로 재설정하기 위해 회로의 재설정 버튼을 관리해야 합니다("핫"할 계획인 경우). 카드를 바꾸세요).

5 장치 작동.

위에서 쓴 것처럼 장치 작업은 매우 간단합니다. 올바른 이름의 트랙을 SD 카드에 복사하고 카드 홀더에 카드를 삽입하면 장치가 자동으로 카드를 찾고 녹색 LED가 켜집니다. 그게 전부입니다. 장치는 다음과 같습니다. 트랙을 재생할 준비가 되었습니다. 이제 자신에게 가장 적합한 방식으로 트랙을 선택하고 재생하기만 하면 됩니다.

5.1 장치 버튼 및 해당 동작.

나는 장치를 가능한 한 기능적으로 만들려고 노력했기 때문에 작동 모드 스위치에 많은 마이크로 컨트롤러 다리가 사용되었습니다 (이로 인해 장치가 고슴도치와 비슷해졌습니다 :)). 어떤 기능도 필요하지 않다면 다리를 "공중"에 "매달려" 두기만 하면 됩니다.
스위치 동작:
- "Monster" - 트랙 재생 속도를 느리게(2배)하여 낮은 음성 효과를 생성할 수 있습니다. 스위치는 "즉시" 작동합니다. 즉, 전환 시 속도가 변경됩니다.
- "Helium" - 트랙 재생 속도를 1/3로 높여 고음의 음성 효과를 생성합니다. 스위치는 즉시 작동합니다.
- "반복" 이 스위치가 접지로 단락되면 선택한 트랙이 끝없이 재생됩니다(스위치가 열릴 때까지). 예를 들어, 비오는 소리, 불이 타는 소리, 개울물 흐르는 소리 등 특정 사운드 배경을 만들어야 하는 경우 유용할 수 있습니다.
- 재생을 위해 트랙을 시작하는 "선택/재생" 버튼(아래 설명)
- "트랙 선택" - 재생 중인 트랙 번호 설정(아래 설명)
- "Dir1 / Dir2" - 사운드 구성표를 선택합니다(아래 설명 참조).

5.2 재생을 시작합니다.

특정 트랙 재생을 시작하는 방법에는 세 가지가 있습니다.
- UART를 통해 라틴 알파벳 대문자를 전송하면 이름 시작 부분에 이 문자가 포함된 파일의 재생이 즉시 시작됩니다.
- "트랙 선택"을 사용하는 경우 파일 번호가 선택됩니다(바이너리 코드 0001="A", 0010="B" 등. 1 - 다리가 지면에 닫혀 있음, 0 - "공중"에 "매달림"). 그런 다음 "선택/재생" 버튼을 누르면 해당 파일의 재생이 시작됩니다.
- "트랙 선택"(0000 - 다리가 "공기"에 "걸림")을 사용하여 아무것도 선택하지 않은 경우 "선택 / 재생"버튼을 특정 횟수만큼 눌러 해당 트랙을 시작합니다 (1 회 = “A”, 2번 =”B” 등).

5.3 사운드 구성표.

매우 유용한 기능은 두 가지 사운드 구성표 중 하나를 선택하는 기능입니다. 이는 "Dir1 / Dir2" 스위치가 트랙이 재생될 카드의 폴더를 선택한다는 의미입니다.

응용 프로그램이 많이 있습니다: 러시아어와 영어로 된 메시지(교육용 장난감), 어린이와 성인의 목소리, 물 흐르는 소리와 불이 타는 소리, 고양이/개, 선하고 악한 경찰관 :), 진정/활력을 주는 소리 등 여러 가지 비슷한 옵션.

예를 들어, 남성과 여성의 목소리로 의사소통하려면 장치가 필요합니다. 다음과 같이 구현됩니다.
- 여성 버전과 남성 버전으로 각각 두 개의 메시지 세트를 만듭니다.
- 두 옵션의 파일 번호는 동일합니다. 장치는 파일 이름의 첫 번째 문자만 "인식"하므로 이름을 더 쉽게 이해할 수 있도록 만들 수 있습니다. 예를 들어 "S_Waiting for command_male.wav" 및 "S_Waiting for command_female.wav"는 꽤 의미가 있습니다. 옳은;
- 남성 메시지 세트를 폴더 “1”에 복사하고, 여성 메시지 세트를 폴더 “2”에 복사합니다.
이제 "Dir1 / Dir2" 스위치의 상태에 따라 동일한 명령으로 "male" 또는 "female" 폴더의 트랙을 재생합니다.

5.4 장치 작동 표시.

Teeny2313에는 다리가 거의 없고 대부분이 스위치에 사용되기 때문에 정상적인 표시를 희생하고 그 대가로 정상적이지 않은 것을 부착해야 했습니다. 다양한 작동 모드를 표시하기 위해 마이크로 컨트롤러의 한쪽 다리만 사용되며 여기에는 두 개의 LED(빨간색과 녹색(또는 원하는 것))가 연결됩니다. 장치의 다양한 작동 모드는 특정 색상 코드로 표시됩니다.
- 빨간색 LED가 깜박임 - SD 카드가 없거나 해당 유형이 장치에서 지원되지 않습니다.
- 빨간색 LED가 켜집니다. - SD 카드가 지원되고 성공적으로 초기화되었지만 카드가 FAT16으로 포맷되지 않았습니다.
- 녹색 LED가 켜집니다. - SD 카드가 성공적으로 초기화되었으며 필요한 카드를 찾았습니다. 파일 시스템장치가 트랙을 재생할 준비가 되었습니다. 명령을 기다리고 있습니다.
- 녹색 LED가 깜박임 - 장치가 트랙을 재생 중입니다.
- 녹색 불이 켜졌다가 빨간색 불이 잠시 켜졌다가 다시 녹색 불이 켜졌습니다. - 트랙을 찾을 수 없습니다.
- 녹색 불이 켜졌다가 잠시 꺼졌다가 다시 녹색으로 켜집니다. - 트랙 선택 키를 눌렀습니다.

5.5 디버깅 정보.

문제 영역을 더 쉽게 찾을 수 있도록(장치가 작동하지 않는 경우) UART를 통한 메시지를 사용하여 프로그램의 각 초기화 단계를 복제했습니다. 각 단계가 성공하면 해당 문자가 UART로 전송됩니다.
- "S" - (시작) 마이크로컨트롤러 주변 장치가 정상적으로 초기화됩니다.
- “C” - (카드 초기화) SD 카드가 정상적으로 초기화되어 지원됩니다.
- "F" - (FAT 초기화) 지방 시스템지원됨;
- “1” - (No 1 Dir) 폴더가 없습니다. “1” 읽기는 루트 디렉터리에서 수행됩니다.
- “2” - (No 2 Dir) 폴더가 없습니다. “2” 읽기는 루트 디렉터리에서 수행됩니다.
- "R" - (준비) 장치가 완전히 준비되었습니다 - 트랙 시작 명령을 기다리고 있습니다.
- 또한, 트랙이 시작될 때마다 트랙명의 대문자가 UART로 전송됩니다.

장치 더빙을 위한 6개 트랙.

6.1 트랙 변환

위의 라이브러리에서 적합한 항목을 찾지 못했다면 인터넷에서 필요한 트랙을 얻을 수 있습니다(대규모 사운드 라이브러리가 이미 수집되어 있는 음악가 및 비디오 편집을 위한 특수 사이트가 많이 있습니다), 게임 설치( 게임플레이 사운드는 트랙으로 나누어 별도의 폴더에 저장되는 경우가 많습니다. 영화와 음악 작곡에서 사운드 효과를 잘라낼 수도 있습니다. 발견된 트랙은 장치가 지원하는 형식으로 변환되어야 합니다. 파일 형식은 압축되지 않은 WAV여야 함을 알려드립니다. 32000Hz, 1채널, 8비트(WAV PCM 8U)
모든 음악 편집기는 이 형식으로 변환하는 데 적합합니다. 또는 트랙을 편집하지 않고 변환해야 하는 경우 -

비교적 최근에 생산된 많은 가전제품과 산업 자동화 장치에는 기계식 카운터가 설치되어 있습니다. 컨베이어 벨트 위의 제품, 권취기의 전선 감김 등이다. 고장이 났을 경우 유사한 계기를 찾기도 쉽지 않고, 예비 부품이 부족해 수리도 불가능하다. 저자는 기계식 카운터를 전자식 카운터로 교체할 것을 제안합니다. 기계식 카운터를 대체하기 위해 개발된 전자 카운터는 집적도가 낮거나 중간인 미세 회로(예: K176, K561 시리즈)를 기반으로 구축되면 너무 복잡해집니다. 특히 역 계좌가 필요한 경우. 그리고 전원이 꺼졌을 때 결과를 저장하려면 다음을 제공해야 합니다. 보조 배터리영양물 섭취.

그러나 다양한 기능을 포함하는 범용 프로그래밍 가능 마이크로컨트롤러인 단 하나의 칩에 카운터를 구축할 수 있습니다. 주변기기그리고 매우 광범위한 문제를 해결할 수 있습니다. 많은 마이크로 컨트롤러에는 특수 메모리 영역인 EEPROM이 있습니다. 여기에 기록된 데이터(프로그램 실행 중 포함), 예를 들어 현재 계수 결과는 전원이 꺼진 후에도 저장됩니다.

제안된 카운터는 Almel의 AVR 제품군의 Attiny2313 마이크로 컨트롤러를 사용합니다. 장치는 역방향 계산을 구현하여 중요하지 않은 부분을 취소하여 결과를 표시합니다.

4자리 LED 표시기에 하이브를 하여 전원이 꺼지면 결과를 EEPROM에 저장합니다. 마이크로컨트롤러에 내장된 아날로그 비교기는 공급 전압 감소를 적시에 감지하는 데 사용됩니다. 카운터는 전원을 끄면 계수 결과를 기억하고, 켜면 복원되며, 기계식 카운터와 마찬가지로 리셋 버튼이 장착되어 있습니다.

카운터 회로가 그림에 나와 있습니다. 포트 B의 6개 라인(РВ2-РВ7)과 포트 D의 5개 라인(PDO, PD1, PD4-PD6)은 LED 표시기 HL1에 카운팅 결과의 동적 표시를 구성하는 데 사용됩니다. 포토트랜지스터 VT1 및 VT2의 컬렉터 부하는 마이크로컨트롤러에 내장된 저항기이며 마이크로컨트롤러의 해당 핀을 전원 공급 회로에 연결하는 소프트웨어에 의해 활성화됩니다.

방출 다이오드 VD1과 포토 트랜지스터 VT1 사이의 광학 연결이 중단되는 순간 카운팅 결과 N이 1 증가하여 마이크로 컨트롤러의 INT0 입력에서 레벨 차이가 증가합니다. 이 경우 INT1 입력의 레벨은 낮아야 합니다. 즉, 광트랜지스터 VT2는 방출 다이오드 VD2에 의해 조명되어야 합니다. INT1 입력에서 차동이 증가하고 INT0 입력에서 로우 레벨이 발생하는 순간 결과는 1씩 감소합니다. 입력 INT0 및 INT1의 레벨과 차이의 다른 조합은 계산 결과를 변경하지 않습니다.

최대값인 9999에 도달하면 0부터 계속 계산됩니다. 0 값에서 1을 빼면 결과는 9999가 됩니다. 카운트다운이 필요하지 않은 경우 카운터에서 방출 다이오드 VD2 및 포토트랜지스터 VT2를 제외하고 마이크로 컨트롤러의 INT1 입력을 공통 와이어에 연결할 수 있습니다. 개수는 계속 증가할 뿐입니다.

이미 언급했듯이 공급 전압 감소 감지기는 마이크로 컨트롤러에 내장된 아날로그 비교기입니다. 정류기(다이오드 브리지 VD3) 출력의 불안정한 전압과 통합 안정기 DA1 출력의 안정화된 전압을 비교합니다. 프로그램은 비교기의 상태를 주기적으로 확인합니다. 미터가 네트워크에서 분리된 후 정류기 필터 커패시터 C1의 전압이 떨어지고 안정화된 전압은 한동안 변경되지 않습니다. 저항 R2-R4는 다음과 같이 선택됩니다. 이 상황에서 비교기의 상태가 반전됩니다. 이를 감지하면 프로그램은 전원이 꺼져 작동이 중지되기 전에도 마이크로컨트롤러의 EEPROM에 현재 계산 결과를 기록합니다. 다음에 전원을 켜면 프로그램은 EERROM에 기록된 숫자를 읽고 표시기에 표시합니다. 이 값부터 계산이 계속됩니다.

마이크로 컨트롤러 핀 수가 제한되어 있기 때문에 카운터를 재설정하는 SB1 버튼을 연결하기 위해 비교기(AIM)의 반전 아날로그 입력 역할과 동시에 "디지털" 입력 역할을 하는 핀 13이 사용되었습니다. PB1. 여기의 전압 분배기(저항 R4, R5)는 마이크로컨트롤러가 인식하는 레벨을 논리 높음으로 설정하며, SB1 버튼을 누르면 낮음이 됩니다. AIN0 입력의 전압이 AIN1의 전압보다 여전히 높기 때문에 이는 비교기의 상태에 영향을 미치지 않습니다.

SB1 버튼을 누르면 프로그램은 표시기의 모든 숫자에 빼기 기호를 표시하고 놓으면 0부터 계산을 시작합니다. 버튼을 누른 상태에서 측정기의 전원을 끄면 현재 결과가 EEPROM에 기록되지 않고 EEPROM에 저장된 값이 동일하게 유지됩니다.

이 프로그램은 배선이 다른 다른 표시기(예: 공통 음극 사용)가 있는 미터에 쉽게 적용할 수 있도록 설계되었습니다. 인쇄 회로 기판등. 사용시 프로그램의 약간의 수정이 필요합니다. 석영 공진기지정된 주파수와 1MHz 이상 다른 주파수로.

소스 전압이 15V인 경우 공통 와이어(핀 10)를 기준으로 마이크로 컨트롤러 패널의 핀 12 및 13의 전압을 측정합니다. 첫 번째는 4~4.5V 범위에 있어야 하고, 두 번째는 3.5V보다 크지만 첫 번째보다 작아야 합니다. 다음으로 소스전압을 점차 감소시킨다. 9 ... 10 V로 떨어지면 핀 12와 13의 전압 값 차이가 0이 된 다음 부호가 변경되어야 합니다.

이제 프로그래밍된 마이크로컨트롤러를 패널에 설치하고 변압기를 연결한 후 여기에 주 전압을 적용할 수 있습니다. 1.5~2초 후에는 SB1 버튼을 눌러야 합니다. 카운터 표시기에 숫자 0이 표시됩니다. 표시기에 아무것도 표시되지 않으면 마이크로 컨트롤러의 AIN0.AIN1 입력에서 전압 값을 다시 확인하십시오. 첫 번째는 두 번째보다 커야 합니다.

카운터가 성공적으로 실행되면 남은 것은 IR 광선에 불투명한 판으로 포토트랜지스터를 교대로 음영 처리하여 카운트의 정확성을 확인하는 것입니다. 을 위한 더 큰 대비빨간색 유기 유리 필터로 표시기를 덮는 것이 좋습니다.

오늘 우리는 더 많은 것을 활용하려고 노력합니다 간단한 마이크로컨트롤러 ATtiny2313그리고 상징적인 것을 그것에 연결하세요 LCD 디스플레이, 16자로 구성된 두 줄이 포함되어 있습니다.

디스플레이를 연결해보겠습니다 표준적인 방법으로 4비트 방식.

먼저 마이크로컨트롤러부터 시작하겠습니다. 우리는 이미 이전 강의의 디스플레이에 매우 익숙하기 때문입니다.

컨트롤러 데이터시트를 열어보겠습니다. ATtiny2313그리고 핀아웃을 보자

우리는 그것을 본다 이 컨트롤러두 가지 유형의 케이스가 존재하지만 DIP 케이스로 제 손에 들어왔기 때문에 이 특정 버전의 케이스를 고려해 보겠습니다. 원칙적으로 다리 개수가 동일 - 20.

우리가 계속 작업해 왔고 앞으로도 계속 작업할 ATMega8 컨트롤러의 28개 다리에 비해 20개 다리가 있으므로 가능성도 더 적어질 것입니다.

원칙적으로 ATmega8의 모든 것이 여기에 있으며 유일한 것은 포트 클로가 적다는 것입니다. 그러나 우리 앞에 놓인 임무는 SPI 버스를 통해 다른 컨트롤러와 연결을 시도하는 것이기 때문에 이것이 우리를 크게 우울하게 만들지는 않습니다.

다른 차이점도 있지만 사소한 것이므로 필요에 따라 알아 보겠습니다.

이런 회로를 구성해보겠습니다. (이미지를 클릭하시면 확대됩니다)

디스플레이는 포트 D의 핀에 연결됩니다. PD1과 PD2는 제어 입력에 연결되고 나머지는 디스플레이 모듈 D4-D7의 핀에 연결됩니다.

TINY2313_LCD라는 이름의 프로젝트를 만들고 디스플레이를 Atmega8에 연결하기 위해 프로젝트의 메인 모듈을 제외한 모든 것을 프로젝트로 전송해 보겠습니다.

물론 몇 가지 작업을 다시 수행해야 합니다. 이렇게하려면 어느 다리가 무엇에 연결되어 있는지주의 깊게 연구해야합니다. 디스플레이의 E 버스는 PD2에, RS 버스는 PD1에 연결되어 있으므로 파일을 변경해 보겠습니다. LCD.h

#정의하다e1포트D|=0b0000 01 00 // E행을 1로 설정

#정의하다e0포트D&=0b1111 10 11 // E행을 0으로 설정

#정의하다RS1포트D|=0b00000 01 0 // RS 라인을 1(데이터)로 설정

#정의하다RS0포트D&=0b11111 10 1 // RS 라인을 0으로 설정(명령)

선택에서 볼 수 있듯이 굵은 글씨로, 우리는 그렇게 급격한 변화를 겪지 않았습니다.

이제 정보가 입력됩니다. 여기서는 다리 PD3-PD6을 사용합니다. 즉, Atmega8 연결에 비해 1포인트 이동되므로 파일의 내용도 수정합니다. lcd.c기능상 반바이트 보내기

포트D&=0b 1 0000 111; // 입력 DB4-DB7의 정보를 지우고 나머지는 그대로 둡니다.

그러나 그것이 전부는 아닙니다. 이전에는 전송된 데이터를 4만큼 이동했지만 이제 위의 변경으로 인해 3만큼만 이동하면 됩니다. 따라서 동일한 함수에서 첫 번째 라인도 수정합니다.

<<=3 ;

이것이 모든 변경 사항입니다. 동의하세요. 그다지 훌륭하지 않습니다! 이는 우리가 항상 범용 코드를 작성하고 매크로 대체를 사용하려고 노력한다는 사실에 의해 달성됩니다. 이에 대해 한 번에 시간을 소비하지 않았다면 라이브러리의 거의 모든 기능에서 코드를 수정해야 했을 것입니다.

메인 모듈에서는 포트 D의 초기화를 건드리지 않고 12과에서와 같이 전체 모듈을 출력 상태로 전환시킵니다.

프로젝트를 조립하고 먼저 Proteus에서 결과를 살펴보겠습니다. Proteus에 대한 프로젝트도 만들었기 때문입니다. 이 프로젝트는 Atmel Studio용 프로젝트와 함께 첨부된 아카이브에도 있을 것입니다.

모든 것이 우리에게 잘 작동합니다! 이것이 한 컨트롤러의 프로젝트를 다른 컨트롤러의 프로젝트로 신속하게 다시 만들 수 있는 방법입니다.

프로테우스는 매우 훌륭하지만 실제 세부 사항을 보는 것이 항상 더 좋습니다. 이 컨트롤러에 대한 디버그 보드를 직접 제작하거나 조립하지 않았기 때문에 전체 회로는 브레드보드에 조립되었습니다. 다음과 같은 표준 커넥터를 통해 프로그래머를 연결하겠습니다.

전체 다이어그램은 다음과 같습니다.

여기에서는 모든 것이 표준입니다. RESET 등을 위한 풀업 저항

이제 avrdude에서 컨트롤러를 플래시하기 전에 컨트롤러를 선택하고 해당 플래시 메모리를 읽어야 합니다.

그런 다음 퓨즈 탭으로 이동하여 퓨즈를 올바르게 설정하십시오. 석영 공진기가 없기 때문에 퓨즈를 이런 식으로 설치합니다.




맨 위