Harman 세미콘 아카데미 92

2024.6.20 [Verilog]⑤ - 비동기 카운터, 동기카운터, BCD 카운터, 업다운 카운터, 링카운터, 주종형 D플립플롭

2024.6.20 수업날오늘은 카운터의 종류에 대해 알아보고, 주종형 D플립플롭에 대해 알아본다. 카운터에 대해 알아보기 전에 기본 단어에 대해 알아보자.먼저 카운터란, 클록 펄스를 계수하는 디지털 회로이다.카운터는 플립플롭으로 구성하며, 업카운트와 다운 카운터로 구분한다. 업 카운터는 계수가 계속 증가하는 카운터이다. 초기 상태를 00으로 설정하면, 클록 펄스가 주어질 대마다 증가하고, 클록 펄스가 계속 주어지면 00으로 돌아가 동작을 반복한다.다운 카운터는 계수가 감소하는 카운터이다. 초기 상태를 11로 설정하면 클록 펄스가 계속 주어지면 11로 돌아가 계수 동작을 반복한다.   비동기 카운터란 클록 펄스를 첫 번째 플립플롭에만 연결한다.나머지 플립플롭들은 앞단의 출력이 클록 펄스로 작용하며, 각각 ..

2024.6.19 [Verilog]④ - 7세그먼트 디코더, 인코더, 멀티플렉서+디멀티플렉서, 플립플롭

2024.6.19 수업날오늘은 어제 코드만 작성했던 7세그먼트 디코더를 실행시켜보고조합 논리회로인 인코더, 멀티플렉서, 디멀테플렉서를 알아보고순서 논리회로인 플립플롭의 종류에 대해 알아본다.어제 마지막 시간에 Basys3 보드에 있는 FND를 사용하여 숫자를 표현하기 위해 4개의 스위치를 누름에 따라 각각 다른 기능을 할 수 있도록 코딩했다. 보드에 나타나는 결과를 관찰하기 위해 vivado에서 몇 가지 설정해주어야 하는 것이 있다.먼저 어제 작성했던 코드의 구조를 가볍게 살펴보자7세그먼트 디코더 소스코드////////////////////////////////////////// 7세그먼트 디코더module decoder_7seg( input [3:0] hex_value, //0~15까지의 ..

2024.6.18 [Verilog]③ - 전압, 저항, 캐패시터, 반도체, 디코더

2024.6.18 수업날오늘은 어제 배웠던 병렬 가산기의 연산 속도가 느린 이유에 대해 알기 위해 캐패시터에 대해 알아보고n, p형 반도체와 디코더에 대해 알아본다. 그 전에 간략하게 전압과 저항에 대해 알아보자.전압이란, 전류를 흐르게 하는 능력으로 전위차가 클수록 전압이 크다.저항이란, 전기의 흐름을 방해하는 부품으로, 직렬연결일때는 값을 더하면 되지만 병렬연결일때는 각가 역수해서 더한 값을 다시 역수로 취하면 된다.캐패시터란 전기를 축적하고, 방출할 수 있는 장치이다.기본적으로 2장의 전극판이 나란히 마주보고 있고, 전극판 사이에는 절연체(전기가 안통하는 무질)가 있다.전극판의 간격과 면적, 절연체 재질에 따라 축적되는 전하의 크기가 달라지게된다. 전압이 걸리면 각 전극판에 전하가 축적되고, 축적되..

[Verilog]② - 병렬 가산기, 병렬 가감산기, 비교기

2024.6.17 수업날오늘은 저번주에 배운 Verilog 연산자의 응용버전에 대해 알아보고 직접 Basys3 보드와 연결하여 결과를 살펴본다.아래의 사진은 병렬 가산기를 나타난 회로도이다.병렬 가산기란 전가산기 여러 개를 병렬로 연결한 회로이다.이 회로도를 보면 입력값이A(4개), B(4개), Cin이고, 출력값이 S(4개), Carry임을 알 수 있다. 1. full_adder_4bits_structural(구조적 모델링)병렬 가산기를 코드로 작성한 full_adder_4bits_structural의 회로도를 자세하게 살펴보면,아래와 같이 여러 개의 게이트들이 합쳐져 있는 것을 확인할 수 있다.  이제 시뮬레이션 full_adder_4bits_structural의 시뮬레이션 결과를 확인해보자.이번에는..

[Verilog]① - Vivado 사용법과 논리게이트 구현하기

2024.6.14 수업날임베디드 시스템을 위한 SW 구조설계 수업과 취업특강 수업을 잠시 마치고 오늘부터 5일동안 Verilog와 관련된 수업을 듣게 되었다. 우선 아래 사진과 같은 Vivado 프로그램이 필요하다.이 프로그램으로 Verilog를 사용하여 시뮬레이션도 돌려보고, 회로도를 구현해 볼 수 있다. 반드시 2019.2 버전을 깔아줘야한다.최신 버전을 다운로드 받게되면 버전끼리의 호환이 되지 않기 때문이다 아래의 링크에 들어가서 다운받을 수 있다. 용량이 약 100GB이기 때문에 충분한 용량을 확보한 후 다운로드 받는 것을 추천한다.https://www.xilinx.com/support/download/index.html/content/xilinx/en/downloadNav/vitis.html D..

[ATmega 128a]⑦ - UART 통신

2024.6.11 수업날이번에는 시리얼 통신 방법 중 하나인 UART 통신에 대해 알아본다. ATmega128a pdf 교재 - 174p~ATmega 128로 배우는 마이크로컨트롤러 프로그래밍 - 200p~먼저 USART 통신에 대해 알아보자. USART 통신은 반이중 방식 통신이다.USART는 동기 모드로, 데이터 동기화를 위해 별도의 클록 신호를 전송한다.클락의 유무만 체크하면 되기 때문에 데이터 송수신 효율이 높다.하지만 클락 핀을 추가로 요구하므로 구조적인 어려움이나 추가적인 비용을 가지고 있다. 아래는 RXBn(수신), TXBn(송신)을 가지고 있는 UDRn의 datasheet이다.  아래는 UCSRnA의 datasheet이다. 다음으로 UART 통신에 대해 알아보자.  UART 통신은 전이중 ..

[ATmega 128a]⑥ - LCD 8bit, LCD 8bit counter, LCD 4bit

2024.6.10 수업날이번에는 1602A라는 LCD 부품을 가지고 어떻게 작동하는 지에 대해 알아본다.아래의 파일은 LCD 1602A의 메뉴얼이다. LCD에는 총 16개의 핀이 있다.아래의 표는 핀 번호에 따른 기능과 의미를 해석한 것이다. 실질적으로 LCD에 불이 들어오게 하려면, LED+, LED-인 15, 16번 핀에 Vcc와 Gnd에 연결해야한다. 전선 정리를 제대로 하지 못했지만, 핀 번호에 따른 기능과 의미를 나타낸 표를 보고 참고하여 연결하였다.PF의 0~7번 핀은 LCD의 D0~D7과 연결하였다.PE의 5~7번 핀은LCD의 4~6번 핀과 연결하였다. 아래의 그림은 LCD의 타이밍 특성 회로도와 심볼, 최소시간, 최대시간 표를 나타낸 것이다.아래의 표는 8bit 일때, 4bit 일때 어떻게..

[ATmega 128a]⑤ - CTC, NOMAL, FastPWM, PWM16BIT, dalay 함수

2024.6.5 수업날이번에는 타이머/카운터 모드의 종류에 대해 알아보고 오실로스코프를 사용하여 파형을 관찰해본다.본격적으로 타이머/카운트 모드의 종류에 대해 알아보기 전에 자주 나오게 되는 용어들을 정리해본다. BOTTOM: 카운터가 0이 되었을 때(0x00)MAX: 카운터가 0xFF에 도달했을 때TOP: 각 동작 모드에 따라 카운터가 도달하는 최대 값 아래의 표는 타이머/카운터의 4가지 모드를 나타낸 것이다.여기서 Mode 2번을 보면CTC모드일때 TOP이 OCR0, OCR0 업데이트는 Immediate(즉시)라고 나와있는 것을 확인할 수 있다.CTC모드에서는 OCR0라는 레지스터에 사용자가 원하는 카운트횟수를 써 넣으면, TCNT0가 그 수까지 카운트 하고 0으로 초기화된다.예를 들어, OCR0에 ..

2024.6.4 이전(3) [ATmega 128a]④ - FND

7세그먼트 표시장치를 이번에 ATmega 128a와 연결해본다. 7세그먼트 표시장치는 7개의 선분으로 숫자나 글자를 표시하기 위해 발광 다이오드를 사용하여 만든 출력장치의 일종이다.7개의 선분에 소수점을 표시하는 LED를 추가하여 8개의 세그먼트로 구성하는 것이 일반적이다.7세그먼트 표시장치는 FND라고도 불리며, 한자리 뿐 아니라 두자리 이상도 표시할 수 있는 제품도 있다. 1. 한자리 7세그먼트 표시장치공통 핀: 항상 Vcc나 Gnd 중 하나가 가해진다.(2개)제어 핀: 해당 세그먼트를 켜거나 끄기 위해 Vcc나 Gnd 중 하나의 전압을 선택하여 가한다.(8개)공통 양극 방식: 공통 핀에 Vcc를 연결하고 제어 핀을 Gnd에 연결하면 해당 세그먼트가 켜지는 방식공통 음극 방식: 공통 핀을 Gnd에 연..

2024.6.4 이전(2) [ATmega 128a]③ - LED_div, Button, Button_toggle

저번 블로그 글에서의 LED에 관하여 내용을 이어가보면, 이번에도 총 3개의 파일이 필요하다.또한, 아래 사진과 같은 LED_bar를 사용하여 결과값을 확인한다. /* * led.h */ #ifndef LED_H_#define LED_H_#include typedef struct LED{ volatile uint8_t *port; // LED가 연결될 포트 uint8_t pinNumber; // LED가 연결될 핀번호}LED; // 내가 만든 LED라는 데이터형// 사용자 정의 함수void ledInit(LED *led);void ledOn(LED *led);void ledOff(LED *led);#endif /* LED_H_ */ /* * led.c */ #include "led.h"void l..