이 프로젝트에서는 ATMEGA32 타이머를 사용하여 간단한 알람 시계 를 디자인 할 것 입니다. ATmega32A 마이크로 컨트롤러에는 16 비트 타이머가 있으며이 타이머를 사용하여 초를 세고 디지털 시계를 개발할 것입니다.
모든 디지털 시계에는 시계의 핵심 인 크리스탈이 내부에 있습니다. 이 크리스탈은 시계뿐만 아니라 모든 실시간 컴퓨팅 시스템에도 존재합니다. 이 크리스탈은 타이밍 계산에 필요한 클럭 펄스를 생성합니다. 클럭 펄스를 얻는 다른 방법이 있지만 정확도와 더 높은 주파수를 위해 대부분 크리스탈 기반 클럭을 선호합니다. 정확한 클럭을 얻기 위해 크리스탈을 ATMEGA32에 연결합니다.
필요한 구성 요소
하드웨어: ATmega32 마이크로 컨트롤러, 11.0592MHz 크리스털, 22pF 커패시터 (2 개), 전원 공급 장치 (5v), AVR-ISP PROGRAMMER, JHD_162ALCD (16x2 LCD), 100uF 커패시터 (전원 공급 장치에 연결됨), 버튼 (4 개), 10KΩ 저항 (6 개), 100nF 용량 r (4 개), 3 핀 스위치 (2 개), 2N2222 트랜지스터, 부저, 200Ω 저항.
소프트웨어: Atmel studio 6.1, progisp 또는 flash magic.
회로도 및 작동 설명
정확한 타이밍을 위해 클럭 용 11.0592MHz 크리스탈을 연결했습니다. 이제 ATMEGA의 내부 클럭을 비활성화하려면 LOW FUSE BITS를 변경해야합니다. 높은 퓨즈 비트를 건드리지 않기 때문에 JTAG 통신이 계속 활성화됩니다.
ATMEGA에 내부 시계를 비활성화하고 외부에서 작동하도록하려면 다음을 설정해야합니다.
낮은 사용 바이트 = 0xFF 또는 0b11111111.
ATMEGA32의 회로 PORTB는 데이터 포트 LCD에 연결됩니다. 여기서 PORTC를 일반 통신 포트로 사용하려면 높은 퓨즈 바이트를 변경하여 ATMEGA의 PORTC에서 JTAG 통신을 비활성화해야합니다. 16x2 LCD에는 블랙 라이트가 있으면 16 개의 핀이 있고, 백라이트가 없으면 14 개의 핀이 있습니다. 백라이트 핀에 전원을 공급하거나 남겨 둘 수 있습니다. 이제 14 핀에는 8 개의 데이터 핀 (7-14 또는 D0-D7), 2 개의 전원 공급 장치 핀 (1 & 2 또는 VSS & VDD 또는 gnd & + 5v), 대비 제어를위한 3 번째 핀 (VEE- 문자의 두께 제어)이 있습니다. 표시) 및 3 개의 제어 핀 (RS & RW & E)
회로에서 제어 핀이 두 개뿐임을 알 수 있습니다. 이는 더 나은 이해의 유연성을 제공하며, 대비 비트 및 READ / WRITE는 자주 사용되지 않으므로 접지로 단락 될 수 있습니다. 이렇게하면 LCD가 가장 높은 명암비 및 읽기 모드가됩니다. ENABLE 및 RS 핀을 제어하여 문자와 데이터를 적절하게 전송하면됩니다.
LCD에 대해 수행되는 연결은 다음과 같습니다.
접지에 대한 PIN1 또는 VSS
PIN2 또는 VDD 또는 VCC ~ + 5v 전원
PIN3 또는 VEE to ground (초보자에게 최상의 대비를 제공)
uC의 PD6에 PIN4 또는 RS (등록 선택)
PIN5 또는 RW (읽기 / 쓰기)를 접지 (LCD를 읽기 모드로 설정하여 사용자의 통신을 용이하게 함)
PIN6 또는 E (활성화)-uC의 PD5
uC의 PIN7 또는 D0 ~ PB0
uC의 PIN8 또는 D1 ~ PB1
uC의 PIN9 또는 D2에서 PB2
uC의 PIN10 또는 D3 ~ PB3
uC의 PIN11 또는 D4 ~ PB4
uC의 PIN12 또는 D5 ~ PB5
uC의 PIN13 또는 D6 ~ PB6
uC의 PIN14 또는 D7 ~ PB7
회로에서 우리는 8bit 통신 (D0-D7)을 사용했음을 알 수 있습니다. 그러나 이것은 필수는 아닙니다. 우리는 4bit 통신 (D4-D7)을 사용할 수 있지만 4bit 통신 프로그램은 약간 복잡해집니다. 따라서 위의 표에서 볼 수 있듯이 LCD의 10 핀을 컨트롤러에 연결하고 있는데 8 핀은 데이터 핀이고 2 핀은 제어용입니다.
스위치 1은 알람과 시간 사이의 조정 기능을 활성화하기위한 것입니다. 핀이 낮 으면 버튼을 눌러 알람 시간을 조정할 수 있습니다. 높은 버튼이 TIME 조정을위한 것이라면. 여기에 4 개의 버튼이 있습니다. 첫 번째는 알람 또는 시간에서 MINUTES 씩 증가하는 것입니다. 두 번째는 알람 또는 시간에서 MINUTES 감소를위한 것입니다. 세 번째는 알람 또는 시간의 증가 HOUR입니다. FOURTH는 알람 또는 시간에서 HOURS 감소입니다.
여기에있는 커패시터는 버튼의 바운싱 효과를 무효화하기위한 것입니다. 제거되면 버튼을 누를 때마다 컨트롤러가 둘 이상을 계산할 수 있습니다. 핀에 연결된 저항은 버튼을 눌러 핀을 접지로 끌어 당길 때 전류를 제한하기위한 것입니다.
버튼을 누를 때마다 컨트롤러의 해당 핀이지면으로 내려가므로 컨트롤러는 특정 버튼이 눌려진 것을 인식하고 해당 동작을 수행합니다.
우선, 여기에서 선택한 클럭은 11059200Hz이고 1024로 나누면 10800이됩니다. 따라서 매초마다 10800 펄스를 얻습니다. 따라서 카운터 클럭을 10800Hz로 얻기 위해 1024 프리스케일러로 카운터를 시작하겠습니다. 두 번째로 ATMEGA의 CTC (Clear Timer Counter) 모드를 사용할 것입니다. 카운터가 비교 값까지 카운트 할 때 인터럽트가 생성하도록 설정된 값 (값 비교)을 저장할 수있는 16 비트 레지스터가 있습니다.
비교 값을 10800으로 설정하므로 기본적으로 매초마다 ISR (모든 비교에 대한 인터럽트 서비스 루틴)이 있습니다. 그래서 우리는 필요한 시계를 얻기 위해이시기 적절한 루틴을 사용할 것입니다.
BROWN (WGM10-WGM13): 타이머 작동 모드를 선택하는 비트입니다.
이제 OCR1A 바이트에서 비교 값이있는 CTC 모드를 원하기 때문에 WGM12를 1로 설정하면되고 나머지는 기본적으로 0으로 유지됩니다.
RED (CS10, CS11, CS12):이 세 비트는 프리 스칼라를 선택하고 적절한 카운터 클럭을 얻기위한 것입니다.
1024를 프리 스케일링으로 원하므로 CS12와 CS10을 모두 설정해야합니다.
이제 고려해야 할 또 다른 레지스터가 있습니다.
GREEN (OCIE1A): 카운터 값과 우리가 설정 한 OCR1A 값 (10800) 사이의 비교 일치시 인터럽트를 얻기 위해이 비트를 설정해야합니다.
OCR1A 값 (카운터 비교 값)은 위의 레지스터에 기록됩니다.
프로그래밍 설명
알람 시계의 작동은 아래 코드에서 단계별로 설명됩니다.
#include // 핀에 대한 데이터 흐름 제어를 활성화하는 헤더 #define F_CPU 1000000 // 텔링 컨트롤러 크리스탈 주파수 부착 #include