EEPROM Arduino Programmer
저번 포스팅에서 EEPROM에 관한 아날로그 프로그래머를 만들었다. 하지만 그 방식은 각 바이트 별로 손으로 설정해줘야 한다는 단점이 있다. 그러니, 아두이노를 활용해 프로그램으로 순식간에 프로그래밍하는 도구가 필요하다. 이 내용은 다음에 대한 스포기도 한데, 앞으로는 EEPROM 많은 바이트에 값을 입력해야 하기 때문이다.
하지만, EEPROM의 11개의 주소핀과 8개의 I/O핀을 아두이노 칩 하나도 감당할 수 없다. 아두이노 칩에는 13개의 디지털 핀 밖에 없기 때문!
이번 포스팅은 시작부터 참신하다.
Shift Register
적은 수의 아두이노 핀 문제를 해결하기 위해 등장한 참신한 주인공. Shift Register이다.
나도 '하나의 핀으로 순차적으로 전달하면 되겠다!' 라고 생각은 했지만, 과거의 정보를 어떻게 저장할 수 있을까의 의문이 있었다.
Shift Register는 여러 개의 D flip flop을 이용하여 과거 정보를 유지한다.
정확히는, D flip flop이 한 텀 delay를 가지면서 정보를 이동시킨다는 특징을 이용하여 마치 배처럼 정보를 이동시킨다.
(이런 모양새 때문에 처음에는 Ship Register라고 들었었다)
74HC95가 Shift Register관련 칩이다.
이 칩은 8-STAGE SHIFT REGISTER, 8-BIT STORAGE REGISTER, 3-STATE OUTPUTS로 이루어져 있다.
단순히 Shift Register만 있는게 아니라, Storage Register도 같이 있어서 좋다. clock(11,12번 핀)이 분리되어 있어서 Shift Register에서 Storage로 값을 이동시키고 싶을 때만 이동시킬 수 있다.
이 레지스터는 핀 하나로 값을 저장할 수 있는 레지스터이자, 핀 하나를 핀 여덟 개로 늘릴 수 있는 도구인 셈이다.
9번 핀은 단순히 8번째 데이터를 출력하는 핀인데, 이 핀을 다른 Shift Register의 Data Input으로 연결해주면 이어서 사용할 수 있다. 그러면, 저장하는 용량이 16bit로 늘어난다.
+ 하나의 핀으로 들어가고 (Serial-in) 여러 핀으로 나와서 (Parallel-out) SIPO(Serial-in to Parallel-out)라고 불린다고 한다.
프로그래밍
아두이노 함수 중 ShiftOut 함수는 Shift Register에 최적화되어 있다. 데이터 핀, 클락 핀을 맞추고 value에 1바이트의 값을 넣으면 하나의 핀을 이용하여 자동으로 Shift 레지스터에 하나의 핀을 이용하여 값을 넣어준다.
shiftOut 함수를 이용한 코드이다. 1byte를 표현했고, led를 전부 키게 된다.
(SHIFT_LATCH는 Storage Register의 클락 핀이 연결되어 있다.)
Shift Register를 이용한 EEPROM의 주소 입력 부분이 될 것이다. 기능 setAddress로 따로 뺐다.
EEPROM 11비트 주소 핀에 대응해 두 개의 Shift Register를 사용했고, 코드 상에서도 두 줄을 이용해 표현했다.
두 번째 레지스터의 마지막 비트는 11비트 주소 내에 들어가지 않으므로 따로 OutputEnable 플래그 값을 표현하는 데에 활용했다.
readEEPROM 함수이다. 알잘딱깔센하게 이해가능하다.
setup 함수 내에 추가한 내용이다. Serial 모니터를 활용하여 EEPROM의 모든 주소의 데이터를 읽어온다.
아두이노에는 자체 딜레이 기능이 있어서 참 편하다. 최대 시간을 지키기 위해 캐패시터를 이용할 필요가 없다.
다만 저 시간이 최대 시간이랑 아슬아슬하게 걸리는 데, ben eater씨가 데이터 시트를 자세히 보여주면서 High Reliability로 10000~100000 cycle은 버틸 수 있으니 괜찮다고 부연설명해줬다.
이제 모든 함수를 완성했으니, 저번 포스팅의 내용을 아두이노를 활용하여 프로그래밍할 차례이다. 7-segment의 각 숫자에 맞는 핀 값을 16진수로 변환하여 data 변수로 넣어놨다.
이 후 writeEEPROM 함수를 이용하여 대입한다.
마무리
완성!
이번 포스팅은 프로그래밍 코드가 많아서 다소 산만했던거 같다.
다음 포스팅은 여러 개의 7-segment를 어떻게 EEPROM 하나로 작동시킬 수 있는지에 관한 내용이다.
다음 내용이 진짜 참신했다!
'하드웨어 > Ben eater' 카테고리의 다른 글
8비트 컴퓨터 만들기 Ben Eater Part.7(bus) (0) | 2024.03.05 |
---|---|
8비트 컴퓨터 만들기 Ben Eater Part.6(output) [2] (0) | 2024.02.03 |
8비트 컴퓨터 만들기 Ben Eater Part.6(output) [1] (0) | 2024.01.30 |
8비트 컴퓨터 만들기 Ben Eater Part.5(PC) [1] (0) | 2024.01.22 |
8비트 컴퓨터 만들기 Ben Eater Part.5(PC) [0] - Latch, flip-flop (0) | 2024.01.20 |