20140605 (TWI)

75일차











--------------------------

ATMega2560  TWI

--------------------------



--- TWI (Two Wire Interface)

2개의 선으로 통신을 하는 규약이다.


2선을 규약 중

UART(RS-232) 방식,

TWI 방식

이 있다.



이 두 가지를 비교하자면




똑같이 2개의 선을 사용하지만

쓰임새가 좀 다르다.







- 속도 모드

속도 모드는 3가지로

표준모드 (100 Kbps)

고속모드 (400 Kbps)

초고속모드 ( 3.4 Mbps)


하지만 ATMega2560 에서는 표준모드와 고속모드만 사용할 수 있다.



- Address 모드

Address는 2 종류가 있는데

10 bit

7 bit


ATMega2560 에서는 7 bit만 사용한다.





- 장비 접속




여러 장비를 장착할 수 있다.


위에서 언급한 Address가 각 장비의 ID이다.

7bit 를 사용하기 때문에 이론적으론 최고 128개 장비를 장착 가능하다.








오늘은 Reg 등록까지....























'부산IT학원 > 스마트컨트롤러' 카테고리의 다른 글

20140610 (TWI로 외부 EEPROM과 통신)  (0) 2014.06.10
20140609 (TWI)  (0) 2014.06.10
20140603 (추가보드에 7segment)  (0) 2014.06.03
20140602 (추가보드)  (0) 2014.06.03
20140530 (EEPROM)  (0) 2014.05.30

설정

트랙백

댓글

20140603 (추가보드에 7segment)

74일차









-------------------------------------

ATMega2560 추가보드 7segment

-------------------------------------



--- 추가보드에 7segment 제어








이런 식으로 연결하기로 했다.


2진수를 넣으면 10진수로 변환하는 이런 것을 BCD(Binary Conversion Decimal)라고 부른다





--- 추가 소스

- decoder.h




- decoder.c










--- 주변 장치의 데이터시터와 회로도를 보고

장치 제어법을 배우는 중이다....





'부산IT학원 > 스마트컨트롤러' 카테고리의 다른 글

20140609 (TWI)  (0) 2014.06.10
20140605 (TWI)  (1) 2014.06.05
20140602 (추가보드)  (0) 2014.06.03
20140530 (EEPROM)  (0) 2014.05.30
20140529  (0) 2014.05.30

설정

트랙백

댓글

20140602 (추가보드)

73일차













-------------------------

ATMega2560 추가보드

-------------------------




--- 스위치에 잡신호를 잡아주는 회로가 없어

스위치를 누르면 잡신호도 함께 입력되서

다른 보드를 받았다.








1 . 보드의 구성

전하 출적 -> 전하 축적

 

 

 

 

2. 데이터시트 보는 법!

2-1. 좌표보기 (시트 가장자리) : 세로 ABCD .. / 가로 1234 ... (ex sensor test 도면 A1번 )

2-2. 도면정보 ( 우측 하단 ) 도면 제목, 번호 , 수정횟수등이 기록되어 있다. (가끔 자신의 것과 갱신 횟수다 다를때도 있음.)

 

 

 

 

 

 3. 스위치 도면.

 

3-1. 도면의 번호와 보드의 도면번호를 잘~ 맞춰 보다 (j 16 오른쪽 하단 핀 집단)

3-2. 5v 의 전하가 병렬저항 (R31)로 흘러 들어가서 아래로 흘러가면 하단의 분홍색 점이 있는 부분에서 교차한다

(분홍색 점이 없는 부분은 그냥 엇갈린 곳)

3-3. 그리고 스위치의 on off 상태에 따라 전하의 위치가 달라진다. (풀업 저항*)

1. 플로팅 (floating)
 칩에 입력을 5V 또는 0V를 가한다. 하지만 입력을 가하지 않는 경우는 칩 자체에서는 5V를 입력하였는지 1V를 입력하였는지 모른다. 이런 문제에 의하여 오작동이 발생할 수 있다. 이런 상태를 플로팅되었다라고 한다. 플로팅 상태는 잡음에 매우 취약해지므로 시스템이 불안정해진다. 이를 해결 하기 위해서 풀업 / 풀다운 저항을 사용하게 된다.

 

2. 풀업 저항 (Pullup resistor)

풀업 저항을 사용한다면 스위치가 열려 있을 때 칩에는 항상 5V의 전압이 가해진다. 따라서 회로에 입력을 몰라도 항상 5V의 전압을가진 상태가 된다. 스위치를 닫는다면 그라운드 쪽으로 전류가 흐르게 되며 회로의 전압은 0V가 되며,1을 입력한 것으로 인식하게 된다. 핀을 높은 저항에 매달아 둔다는 뜻에서 '풀 업 저항'이라 한다.

 

 

3. 풀다운 저항 (Pulldown resistor)

회로는 5V의 전압을 받으면 1로 인식하고, 0V의 전압을 받으면 0으로 인식한다. 스위치가 열려있는 상태에서 그라운드와 연결되어 있으므로 전류가 항상 그라운드로 흐르게 되어 0V가 된다. 스위치를 닫게되면 소량의 전류가 저항을 통해 그라운드로 흘러 나가지만 많은 양의 전류가 회로(핀)로 흘러 5V가 된다. 따라서 1이 입력된 것으로 인식한다. 항상 그라운드에 묶어둔다는 의미에서 '풀 다운 저항' 이라 한다.

 

 

 

 

 

 

 

 

 

 

 자료출처 : http://air802.tistory.com/2

 

 

 

 

 

 

 

 

4. 세븐세그먼트 도면 보기

 

4-1.CD4511이 세그먼트 칩의 이름이다. ( 도면 pdf중 CD4511 이 세그먼트의 도면 )

4-2. LATCH* 부분은 GND 로 연결 되는데 이건, 이 보드에선 LATCH를 사용하지 않는다는 뜻이다.

4-3-1. 세븐세그먼트는 이전과 다르게 4개의 핀만으로 진리표를 이용해서 숫자를 표현한다. 이때, VCC는 1 GND는 0이고

이걸 2진수로 만들어 그 수의 합을 세븐세그먼트로 출력한다. (ex : 0 0 0 1 =>1 )

SAMSUNG|SHV-E330K|Normal program|Center-weighted average|1/20sec|F/2.2|0.00 EV|4.1mm|ISO-160|Flash did not fire|2014:06:02 17:14:54

4개의 핀을 사용할 때 9 이상의 수는 표기 되지 않고 출력이 꺼진다. 그리고 오른쪽 하단 . 는 점등하지 않는다.

4-3-2.  4PIN (칩 이용) VS 8PIN (코딩 이용)

우리가 8개의 핀에 대하여 각각 코딩으로 제어하던 것을 칩이 대신해줘 핀 4개만 제어하면 된다.

4pin 전용 : 다른 기능을 사용 할 수 없다. 한가지 업무만 전담하므로 빠르기는 더 빠르다.

8inn 범용 : 코딩으로 다른 기능과 함께 활용 할 수 있다.

 

 

latch

시간적으로 변화하는 레지스터 및 카운터데이터 신호 버스상의 디지털 정보를 원하는 시각에 판독하여 등록하는 동작 또는 그 회로보통 플립플롭으로 구성된 레지스터로입력 정보는 클록 펄스의 상승 시각에서 표본화되어 입력되고다음 클록 펄스까지 그 이후의 입력에 관계없이 출력이 보존된다계전기 회로에서는 수동 또는 전자적 조작으로 리셋되지 않는 한 그 상태를 유지하도록 하는 동작 또는 그 계전기를 말한다






 이 칩을 연결할 때에는 선 하나(빨간선) 더 연결해서

그 선으로 데이터를 보낸다는 신호를 먼저 보내고

나머지 선으로 데이터를 보낸다.


이 네 선을 7 Segment로 데이터를 보내지 않을 때에는

다른 장치와 연결하는데 사용할 수 있다는 장점이 있다.


이런 역할을 latch 라고 한다.


'부산IT학원 > 스마트컨트롤러' 카테고리의 다른 글

20140605 (TWI)  (1) 2014.06.05
20140603 (추가보드에 7segment)  (0) 2014.06.03
20140530 (EEPROM)  (0) 2014.05.30
20140529  (0) 2014.05.30
20140528 (PCINT)  (0) 2014.05.28

설정

트랙백

댓글

20140530 (EEPROM)

72일차







---------------------------

ATMega2560 EEPROM

---------------------------



--- EEPROM

EEPROM은 SRAM, FLASH와 다르게 하나의 장치로 인식하기에

cpu와 bus로 연결되어 있어 EEPROM 메모리에 접근하려면

Reg 를 사용해야한다.







--- 관련 Reg




EEPROM 주소 Reg





읽고 쓰기 할 때 사용할 데이터 버퍼.






제어 관련 Reg



5, 4번 bit








--- test source


- eeprom.h




- eeprom.c



- smart.c

아래 소스 추가




'부산IT학원 > 스마트컨트롤러' 카테고리의 다른 글

20140603 (추가보드에 7segment)  (0) 2014.06.03
20140602 (추가보드)  (0) 2014.06.03
20140529  (0) 2014.05.30
20140528 (PCINT)  (0) 2014.05.28
20140527 (timer, counter)  (0) 2014.05.27

설정

트랙백

댓글

20140529

71일차








-----------------

ATMega2560 

-----------------



--- ++, -- 버튼 재구현, reset 추가

PCINT10, 11 번 추가.

선 새로 연결하고 소스 추가.



- int.c






- smart.c










--- 채터링


스위치를 누를 때, 바로 전기 신호가 변하는게 아니라

미세한 잡신호가 감싸고 있다.




잡신호 때 L, H 도 아닌 상태인 잡신호가 발생한다.

이것 때문에 이상한 값이 들어가는데


잡신호를 방지하는 것을 채터링이라고 한다.

이건 회로적으로 하는 것이기에

지금 나의 제어에서 벗어난 것이라

개념만 이해하고 넘어간다.


소프트웨어 적으로도 방지하는 방법이 있다고는 하나

그래도 하드웨어적인 방법을 추천한다고 한다....



'부산IT학원 > 스마트컨트롤러' 카테고리의 다른 글

20140602 (추가보드)  (0) 2014.06.03
20140530 (EEPROM)  (0) 2014.05.30
20140528 (PCINT)  (0) 2014.05.28
20140527 (timer, counter)  (0) 2014.05.27
20140526 (7 Segment)  (0) 2014.05.26

설정

트랙백

댓글

20140528 (PCINT)

70일차










-------------------------

ATMega2560  PCINT

-------------------------



--- Start Interrupt

어제 7 Segment에 숫자가 멈추는 것까지 하였고

이번엔 숫자가 다시 시작하는 것을 구현합니다.








- 확인








--- Interrupt의 처리 방식


Interrupt 처리 방식에는 2가지가 있습니다.




첫번째는

인터럽트가 발생할 때 인터럽트를 요청한 장치가

CPU에게 인터럽트 벡터를 전송하는 방식.




두번째는

주번 장치가 별개의 인터럽트 신호선이 있어 인터럽트 발생시
CPU는 각각의 인터럽트에 따라 정의된 벡터 루틴을 찾아가는 방식.




두번째는 Reset, external, .. 등등 인터럽트들 이고,

첫번째는 PIN CHANGE INTERRUPT 라고 이번에 배울 인터럽트 입니다.









--- Pin change Interrupt


말 그대로 pin에 값이 변했을 때 인터럽트를 발생시킵니다.

전에 배운 external interrupt는 low 일 때, low → high 일 때, high → low 일 때, 값이 변했을 때

총 4가지 동작 설정을 할 수 있었지만 PCINT는 값이 변했을 때 인터럽트가 발생하는 것 밖에 없습니다.


PCINT0 ~ PCINT23 번까지 총 24개 있습니다.




- 벡터 테이블




PCINT0 가  0 ~ 7 PIN Interrupt 발생시 호출.

PCINT1 가  8 ~ 15 PIN Interrupt 발생시 호출.

PCINT2 가  16 ~ 23 PIN Interrupt 발생시 호출.






- PCINT 관련 Reg




PCIE0 에 1이 되면  0 ~ 7 PIN Interrupt 발생하도록 설정.

PCIE1 에 1이 되면  8 ~ 15 PIN Interrupt 발생하도록 설정.

PCIE2 에 1이 되면  16 ~ 23 PIN Interrupt 발생하도록 설정.





0 ~ 7 PIN Interrupt 발생되면 PCIE0 에 1.

8 ~ 15 PIN Interrupt 발생되면 PCIE1 에 1.

16 ~ 23 PIN Interrupt 발생되면 PCIE2 에 1이 됩니다.







0 ~ 23번 까지 각각 인터럽트를 발생시킬지 안시킬지 설정하는 Reg 입니다.









--- 실습


사용할 인터럽트는 9번을 사용해 보기로 했습니다.

Pin 번호는 회로도를 참고하여 63번.





- int.h 에서

PCINT 관련 Reg 추가








- int.c 에서

초기화





- smart.h

PCINT9가 PORTJ 라서 PORTJ 관련 Reg 추가





- smart.c

벡터 함수 추가





















'부산IT학원 > 스마트컨트롤러' 카테고리의 다른 글

20140530 (EEPROM)  (0) 2014.05.30
20140529  (0) 2014.05.30
20140527 (timer, counter)  (0) 2014.05.27
20140526 (7 Segment)  (0) 2014.05.26
20140523 (USart, Interrupt)  (0) 2014.05.23

설정

트랙백

댓글

20140527 (timer, counter)

69일차






-------------------------------------------

ATMega2560 timer/counter (타이머, 카운터)

-------------------------------------------



--- 7 Segment 함수화



--- Timer/Counter 추가.

ATMega128에서 포팅.

Reg 정보만 바꾸고 그에 떠라 소스 조금만 변경한다.



소스)

- main.c







- int.c








전체 소스


20140527.zip


'부산IT학원 > 스마트컨트롤러' 카테고리의 다른 글

20140529  (0) 2014.05.30
20140528 (PCINT)  (0) 2014.05.28
20140526 (7 Segment)  (0) 2014.05.26
20140523 (USart, Interrupt)  (0) 2014.05.23
20140522 (ATMeaga2560 외부 LED, LCD)  (0) 2014.05.22

설정

트랙백

댓글

20140526 (7 Segment)

68일차







--------------------------

ATMega2560 7 Segment

--------------------------





--- 포팅

비슷한 소스를 조금 변형해서 사용한다는 뜻.

ATMega128 소스에 쬐매만 변형하여 ATMega2560에 사용할 수 있다.







--- 7 Segment


요래 생긴 놈이다.




내부 회로도(?)와 Pin 번호와 연결한 번호.






이 녀석은 그냥 LED가 8개인 것 뿐이다...

그래서 PORTX를 만져서 사용한다.



- 실습




'부산IT학원 > 스마트컨트롤러' 카테고리의 다른 글

20140528 (PCINT)  (0) 2014.05.28
20140527 (timer, counter)  (0) 2014.05.27
20140523 (USart, Interrupt)  (0) 2014.05.23
20140522 (ATMeaga2560 외부 LED, LCD)  (0) 2014.05.22
20140521 (ATMega2560)  (0) 2014.05.21

설정

트랙백

댓글

20140523 (USart, Interrupt)

67일차








------------------------------

ATMega2560  USart, Interrupt

------------------------------



--- USart

128에서 사용하던 소스 그대로 가져와서

Reg 주소만 바꿔 그대로 사용했다.


그런데 핀을 연결하는데



위와 같은 이유로 몰렉스에 바로 연결하면 안되기에 PORTE에 연결했다.





--- Interrupt

인터럽트도 마찬가지로 위와 같은 작업을 하였다.

추가로 인터럽트의 경우 벡터 테이블에 순위가 다를 수도 있으므로

벡터 테이블을 확인하여 인터럽트 함수의 이름을 바꾼다.




소스


20140523.zip


'부산IT학원 > 스마트컨트롤러' 카테고리의 다른 글

20140527 (timer, counter)  (0) 2014.05.27
20140526 (7 Segment)  (0) 2014.05.26
20140522 (ATMeaga2560 외부 LED, LCD)  (0) 2014.05.22
20140521 (ATMega2560)  (0) 2014.05.21
20140520 (make, makefile 실습)  (0) 2014.05.20

설정

트랙백

댓글

20140522 (ATMeaga2560 외부 LED, LCD)

66일차







----------------------------

ATMega2560 외부 LED, LCD

----------------------------





--- 외부 LED를 켜기 위해서 PortA 0 Pin 을 사용하여 LED를 켜고 끄기를 해보자.



- 우선 PortA 0 Pin 위치





- smart.h 에 Reg 등록






- smart.c 소스 코딩





- 실습 사진









--- LCD 연결

소스는 이전에 ATMega128 에서 쓰던 LCD 소스에서

PORTA, PORTC Reg 주소만 바꿔 그대로 사용할 수 있다.


소스)

- smart.h




- smart.c




- 실습 사진







'부산IT학원 > 스마트컨트롤러' 카테고리의 다른 글

20140526 (7 Segment)  (0) 2014.05.26
20140523 (USart, Interrupt)  (0) 2014.05.23
20140521 (ATMega2560)  (0) 2014.05.21
20140520 (make, makefile 실습)  (0) 2014.05.20
20140519 (make, makefile)  (0) 2014.05.19

설정

트랙백

댓글