본문 바로가기

컴퓨터

[Atmega128] UART Rx 기본적인 셋팅은 UART Tx 포스팅에서 했던 것과 비슷하고http://wjs890204.tistory.com/762 Rx Enable을 위해UCSR0B에 있는 RXEN0 레지스터도 셋 한다 그런데 이거 구현하는데 문제가 있었는데 엄청 골때렸음.... http://cafe.naver.com/carroty/236713 여기 질문글인데 결국 1byte만 선언된 문자열에 그 이상을 구겨 넣어서 생긴 문제... ㅠㅠ 어쨋건 해결 해서 다행... 이번 포스팅의 내용은 Rx Buffer을 구현하여 시리얼 모니터에 문자열을 보내면 Rx buffer에 저장하고 다시 시리얼모니터에 출력해 주는 역할인 코드 1234567891011121314151617181920212223242526272829303132333435363.. 더보기
[Atmega128] UART Tx UART 통신을 하려면 Baudrate 설정이 필수적이다. 계산 식은 위의 표와 같이 하면 된다. ex) 9600bps로 통신을 한다면 UBRR = ( 16Mhz / ( 16 x 9600bps) ) -1 = 106.167 이 되므로 UBRR에는 106즉 0x67을 넣어줘야 한다. 물론 UBRR0H와 UBRR0L로 되어 있어 상위바이트와 하위바이트에 나눠서 넣어주면 된다.(9600은 하위 8비트 안에 들어가므로 상위에는 0x00을 넣는다. UDRn 레지스터는 Tx일 때는 Tx로 보낼 데이터를 저장할 Buffer로 사용되고Rx일 땐 데이터를 받을 Buffer로 사용된다. 이 버퍼가 보낼 준비가 되거나받을 준비가 된다면UCSRnA에 있는 UDREn 레지스터가 Set 된다. TXENn 을 통하여 Tx Enabl.. 더보기
[Atmega128] IO 기초 프로그래밍 기법 기본 IO 프로그래밍 기법 http://cafe.naver.com/circuitsmanual/354 http://cafe.naver.com/circuitsmanual/4618 키패드 스캔 http://cafe.naver.com/circuitsmanual/1747 http://cafe.naver.com/circuitsmanual/25440 더보기
[Atmega128] Fast PWM with LED Fast PWM을 활용하여 LED 점등을 구현해봄 위의 영상 같이 LED가 점점 밝아짐을 확인해 볼 수 있다 Fast PWM은 기본적으로 톱니바퀴(?) 방식으로 카운트를 하는데 카운트를 하면서 OCRn 레지스터와의 비교를 통해 Compare Match가 되면 인터럽트가 발생하고 OCn Output을 Toggle 한다. TCNTn의 카운트가 0xFF가 되거나 Interrupt가 발생했을 때 OCn Output을 초기상태로 리셋해준다. Fast PWM과는 다르게 Phase Correct PWM은 TCNTn 카운트를 처음엔 Up카운트를 하고 그 이후에 Down카운트를 한다. 인터럽트는 최고 카운트 0xFF가 되었을 때 나오고 최하 카운트 0x00에서는 TOVn Interrupt Flag가 셋 된다. 이와중에 .. 더보기
[Atmega128] Stopwatch 8Bit Timer/Counter InterruptExternel Interrupt74HC595 8Bit Shift Register 를 사용하여 분단위 Stop Watch를 제작 뭐 제대로 만든건지는 확실하게 모르겠지만 ㅎㅎㅎㅎㅎ;;; 4 Digit FND와 74HC595 회로는 http://wjs890204.tistory.com/755에 포스팅 되어 있으니 참고 이건 외부 인터럽트를 위한 스위치 회로인데 C1은 채터링 현상 방지를 위해서 하나 낑굼 검색해보니 소자 끼는 것 보단 소프트웨어로 처리하는게 좋다고 하는데나는 외부 인터럽트를 사용하려고 했기 때문에그건 아무래도 힘들 것 같아서 하드웨어적으로 처리했다.소프트웨어적으로 처리하는 방법으로는 약간의 미세한 딜레이를 주는 방법과아니면 채터링이 생기는 것.. 더보기
[Atmega128] 8bit Timer/Counter Interrupt를 이용한 FND 카운팅 상위 2digit은 sec, 하위 2digit 은 microsec로 FND 카운트가 60.00 sec 가 넘어가면 리셋되는 방식으로(분 카운트도 하고 싶지만 74HC595가 부족해서... ㅠㅠ) 시계 구현.. 이제 Externel Interrupt 를 이용해서 스탑워치를 셋팅 예정. Prescaler = 64OCR0 = 249 16Mhz / 64 / (1+249) = 1000Hz 1000Hz => 1ms 1ms 단위로 인터럽트 발생하고 발생할 때마다 count++ 하고 count = 10 이 초시계 msec++ 하여 초시계 작동 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354.. 더보기
[Atmega128] 4Digit FND Count 회로도는 http://wjs890204.tistory.com/755 에 있으며 저기에 더 추가해서 총 4 Digit으로 구성했다 다만 상위 2 Digit은 Common Cathode 이고 하위 2 Digit은 Common Anode 이다 그래서 하위 2 Digit을 HC595write 함수에 전달할 때 반전 시켜준다. 배선은 PORTA.0 DS (DATA)PORTA.1 STCP (LATCH)PORTA.2 SHCP (CLOCK) 로 구성했다. 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778/*.. 더보기
[Atmega128] 2-Digit FND 회로도(74HC595) 내가 갖고 있는 2-Digit FND는 Comon-Cathode 방식으로 어렵사리 찾은 데이터 시트... 위의 방식으로 연결되어 있다. 모델명 : LTD-5x23A (Common Cathode) 또 집에 있는 1-Digit FND는 모델명 : FND507 (Common Anode) 이걸 Atmega 128에 74HC595 8Bit Shift Register 에 연결해서 사용하고자 한다면 아래와 같은 회로도로 구성하면 된다. 아쉽게도 2-Digit FND 라이브러리가 없어서... (만들긴 귀찮고) 그냥 하나짜리로 대체해서 만들었음. 이렇게 구성하고 타이머/카운터 인터럽트와 외부 인터럽트를 사용해서 한번 뭔가 만들고자 만들어 봄. 74HC595 핀배치도 Datasheet 더보기
[Atmega128] 8bit 타이머/카운터 인터럽트 타이머0 에 대한 설정 레지스터 TCCR0 레지스터 1. Mode 설정Normal, CTC, Fast PWM, Phase Correct PWM 모드 설정은 6bit, 3bit의 WGM00과 WGM01 레지스터로 설정한다 Table 52. 를 참고 Normal Interrupt 모드와 Compare Match Interrupt(CTC) 모드의 차이점은 위의 그림처럼 TCNTn 레지스터가 클럭에 비례해서 Up 카운팅이 되는데 8bit 카운터이기 때문에 2^8 = 256 까지 카운팅이 되어 OverFlow가 발생하게 된다 이때 Interrupt가 발생한다 그에 반해 CTC모드는 Compare Match Interrupt로 TCNTn에서 지속적으로 Up 카운팅을 하고 는 있지만 OCRn 레지스터와 지속적으로 C.. 더보기
[Atmega128] 특정 비트만 SET or Clear 하기 위한 Define #define sbi(PORTX, BitX)PORTX |= (1 더보기
[ARM] Nuvoton NUC240 - Keil 프로젝트 생성 전에 Nuvoton사에서 개발자 교육과정을 했었는데 그걸 수강한 사람에겐 NuEdu 킷을 하나씩 줬다. 여지껏 시간이 없어 사용해보질 못하다가 시험 끝나고 이리저리 찾아 보면서 프로젝트 생성법을 작성해 본다. 그리고 이 Edu킷은 위에 Basic01 보드도 함께 있지만 그걸 제외하고 사용해보려 한다 ㅎㅎ 그리고 형태를 보면 Arduino Mega 시리즈와 똑같음을 알 수 있는데 아마 디파인 뭐 하면 Arduino Mega에 사용하는 Shield를 사용할 수 있는 기능이 있는 듯 한데.. 나는 뭐 Mega용 Shield가 없어서... ㅋㅋㅋ http://www.nuvoton.com/opencms/resource-download.jsp?tp_GUID=SW0120140703102345 위의 주소에서 Nuvot.. 더보기
외부 네트워크에서 라즈베리파이 SSH접속 처음에 iptime에서 제공하는 DDNS를 사용하여 접속을 하는데 ftp, 웹 등등은 원격으로도 잘 되고 하는데 왜 ssh 만 안될까... 로컬 네트워크에선 다 잘되는데.. 하다가 찾아낸 해결방법... 이라고 하긴 그렇고 내가 잘못했던 점이랄까.. 기본적으로 ddns 주소로 가면 포트 80(http)로 잡혀서 그런지 안들어가졌던듯.. 그래서 ssh 접속할 때도 외부 포트를 다른 포트로 할당해 주고 내부 포트를 22로 바꿔서 보내주도록 하니 외부 네트워크에서도 접속 잘 되더란.. 물론 터미널에서 ssh -l pi domain_name -p port_number 이렇게 포트 옵션을 줘서 설정해 줘야 하지만 ㅎㅎㅎ 그림처럼 http와 혼선이 오지 않도록........ 그러고보니 원래 외부 포트 22에 내부포트.. 더보기