일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- #시리얼통신
- #채터링
- #CLCD
- #MCU
- sqlite
- avr
- github
- #textLCD
- Interrupt
- #Atmega128
- #ComportMaster
- #PuTTY
- ATMEGA128
- SQLite Studio
- ubutu
- petalinux
- ubuntu
- Database
- #문자열
- 인터럽트
- git
- Linux
- zynq
- #UART
- xilinx
- Embedded linux
- Today
- Total
목록분류 전체보기 (16)
재잼재잼의 티스토리
문자를 송/수신 했지만, 실제 MCU관련 프로젝트를 진행할 때는 문자보다는 문자열을 주고받는 경우가 많다. 문자열 송/수신은 문자 송/수신을 문자열 마지막까지 반복하는 형태로 구성되는데, 여기서 문자열이 어떻게 구성되어 있는지를 알아보자. Hello Worl라는 문자열을 송신하고자 하면, char *str = "Hello World"; 로 작성을 한다. 메모리의 str 위치부터 1바이트씩 배열의 형태로 저장이 되는데, str[0] str[1] str[2] str[3] str[4] str[5] str[6] str[7] str[8] str[9] str[10] str[11] H e l l o W o r l d \0 로 마지막에 '\0'을 포함하여 문자열의 끝임을 표시한다. 예를 들어 ATmega128에서 PC..
UART를 사용해서 PC와 ATmega128 사이에 문자 송/수신을 구현해보자. 이전에 살펴보았던 UART 관련 레지스터에서 송/수신 작업의 상태를 나타내는 레지스터가 있었다. 바로 UCSR1A이다. 7번 비트 : Receive Complete라는 이름을 가지며, Receive Buffer에 읽지 않은 데이터가 있을 때 set되고, Receive Buffer가 비었을 때 clear된다. 6번 비트 : Transmit Complete라는 이름을 가지며, Transmit Shift Register에 있는 데이터 프레임이 전부 전송되고, UDRn에 새로운 데이터가 없을때 set된다. 5번 비트 : UART Data Register Enable이라는 이름을 가진다. UDRn이 새로운 데이터를 받을 준비가 되었을..
UART를 실제로 사용해볼 차례다. UART를 사용하기 위해서 초기화를 시켜줘야하는데, ATmega128의 데이터시트를 참조해보자. 1번 줄 : CPU클럭을 나타낸다. 나는 16Mhz를 사용하고 있기때문에 16000000L을 사용하면 된다. 대부분의 라이브러리가 CPU클럭을 나타내는 이름으로 F_CPU를 사용하기 때문에, #define F_CPU 16000000L 로 작성할 수 있다.(https://www.avrfreaks.net/forum/define-fcpu-explanation) 2~3번 줄 : baud rate를 계산하는 방법. 데이터 시트에 따르면 위와같은 계산식으로 baud rate를 위한 UBRR값을 계산할 수 있다. 10번 줄 ~ 마지막 줄 : USART 초기화 함수. UBRR은 16bit..
각 장치끼리 통신하는 방법은 크게 2가지로 나뉜다. 직렬통신과 병렬통신. 직렬통신은 여러 비트의 데이터(n비트)를 전송할 때, 하나의 핀을 사용해서 한비트씩 전송하는방법이다. 병렬통신은 여러 비트의 데이터(n비트)를 전송할 때, 여러개의 핀을 사용해서 한번에 여러비트씩 전송하는 방법을 말한다. 01100011 이라는 비트 배열을 전송한다고 했을 때, 8개의 핀을 사용해서 한번에 보내는 방법이 병렬, 하나의 핀으로 한비트씩 보내는 것을 직렬통신이라 할 수 있다. ATmega128의 경우에는 56개의 디지털핀이 존재하기 때문에 최대 56핀을 사용한 병렬통신을 사용할 수 있다. 병렬통신은 주로 LCD와 데이터 교환을 할 때, 4개 ~ 8개의 디지털핀을 사용할 수 있다. ----------------------..
예전에 할인할 때 스팀에서 구매한 니어 오토마타 를 플레이 했다. 구매하고나서 계속 하고싶었는데, 작년에 너무 바빠서 못하다가 이제야 계속 플레이를 했다. 스팀 플레이 시간은 21시간인데.. 저기 엔딩 화면에 [A]라는게 무슨 의미가 있는거같다. 엔딩이 여러개 있고, 엔딩볼때마다 저런 글자들이 추가되는 듯. (처음엔 W밖에 없었는데..) 2회차 시작.. -------------------------------------- 캐릭터들의 매력도 너무 좋았고, 전투도 재밌고, 필드별 BGM도 너무 좋아서 OST 사운드트랙을 따로 구했다. (유원지 처음 갔을때 배경이랑 BGM이랑 나온거 생각하면 아직도 소름이.... 너무 잘어울렸다.) 스토리 라인은 뭐 1회차라 잘 모르겠지만 나름 매력있었다고 생각하고.. 파이널..
한달 전 쯤인가 지인한테 구피 몇마리를 받아서 거의 반 강제적으로 키우게 되었다.. 원래는 그냥 복주머니 같은 유리 어항에 냅두고 밥만 줬었는데 애들이 크니까 좁아보이고, 생명을 키우는데 관리를 해줘야겠다 싶었다. 그래서 어항도 바꾸고, 인공수초도 사고, 밑에 스톤도 사서 어항을 꾸며봤다. 뭐 꾸몄다고 해도 마트에서 파는 채집통에 넣어둔 것 뿐이긴하지만 나름 보기 좋다. ㅋㅋㅋㅋ 애들도 활발하게 움직이는거 보니 기분도 좋고! ------------------------------ 문제는 오늘 어항을 살펴보는데 웬 알집이 있는 것. 구피는 알을 안낳는데 뭘까 싶어서 검색을 해보니 물달팽이 알이란다. 처음에 어항 통째로 받을 때, 달팽이 몇마리가 있기는 했는데 뭐 청소하는 역할을 하나보다 하고 그냥 넘겼는데..
환경구성도 끝냈고, LED 점멸도 테스트 해봤다. 출력을 했으니 입력을 해야하는데, 푸쉬버튼으로 해보려 한다. 예전부터 푸쉬버튼 사용할 때, 버튼 채터링 때문에 많이 해맸었는데, 이걸 또 하려하니 여전히 헷갈린다. 그래서 정리하면서 진행하려 한다. --------------------------------- 채터링은 버튼의 물리적 특성 때문에 사용자가 버튼을 눌렀을 때 값이 잠시 스프링처럼 튀었다가 안정된 값으로 들어가게 된다. 이때, 스프링처럼 값이 튈 때도 MCU는 입력으로 받아들이기 때문에, 사용자가 원하는 결과를 얻지 못하는 경우가 발생한다. ex) 버튼을 누를때마다 LED 순차점등을 수행할 때, 한번에 여러개의 LED가 켜지는 것과 같은..(버튼입력을 여러번 한 것과 같은) 이런 채터링을 제거(..
서랍 구석에 쳐박혀있던 ATmega128 개발보드를 꺼냈다. 한참 할 때는 바로바로 했었는데, 지금와서 하려니 뭐가뭔지 모르겠다. 그래서 "마이크로 컨트롤러 프로그래밍" 책을 보고 기억을 되살려 보려 한다. ------------ C나 Java 같은 프로그래밍 언어에 "Hello world" 가 있듯이, MCU프로그램에는 "LED 1초에 한번 점멸"과 같은 코드가 있다. 일단 개발 환경을 구축한다음 다양한 주변 장치들을 제어해보도록 하자. 이전까지는 avr Studio 4.19 버전을 사용해서 코딩을 했는데, 이제는 Atmel Studio 7을 사용해서 하도록 하자. 지금부터 사용할 개발보드는 AT128A-70B라는 M.A.I 에서 판매하는 개발보드. 사용할 ISP는 뉴티씨에서 판매하는 USB-ISP다...