현재까지 발견된 위 책의 오탈자 정보와 오류, 그리고 보다 매끄러운 문장을 위해 수정한 내용을 알려드리며, 아울러 집필과 편집 시에 미처 확인하지 못하고 불편을 끼쳐 죄송하다는 말씀을 드립니다. 아래의 오탈자 사항은 추후 재쇄 시에 반영하도록 하겠습니다.
이외의 오탈자 정보를 발견하시면 저자(hgycap@deu.ac.kr)나 출판사(jeipub@gmail.com)로 연락주시면 고맙겠습니다.
최종수정일자: 2017년 2월 23일
1쇄본 오탈자
200쪽 코드 12-1 12행(저자 제공)
ADMUX |= (ADMUX & 0xE0) | channel); // 채널 선택
==>
ADMUX = (ADMUX & 0xE0) | channel); // 채널 선택
214쪽 코드 12-5의 밑에서 11행(저자 제공)
ADC_INIT(0x0E); // 15번 채널 선택
==>
ADC_INIT(0x0E); // 14번 채널 선택
214쪽 코드 12-5의 밑에서 7행(저자 제공)
read = read_ADC(); // 15번 채널 선택
==>
read = read_ADC(); // 14번 채널 선택
263쪽 그림 15-2(저자 제공)
(그림 15-2에서 사각형 우측 변 누락됨)
296쪽 표 16-6(저자 제공)
(표 16-6의 우측 하변의 선 종류가 잘못됨)
315쪽 코드 17-1 제목 수정(저자 제공)
코드 17-1 현재 날짜의 시간 설정 및 읽기
=>
코드 17-1 TWI 초기화 함수
455쪽 코드 24-2의 WordDataWrite 함수의 들여쓰기 수정(저자 제공)
for(uint8_t i = 0; i < 16; i++){
if(data & 0x8000)
PORTB |= 0b00001000;
else
PORTB &= 0b11110111;
ShiftClock();
data = data << 1;
}
==>
for(uint8_t i = 0; i < 16; i++){
if(data & 0x8000)
PORTB |= 0b00001000;
else
PORTB &= 0b11110111;
ShiftClock();
data = data << 1;
}
275쪽 세 번째 문단 마지막 행(저자 제공)
OCR2A 핀을 통해
=>
OC2A 핀을 통해
279쪽 두 번째 문단 4행(저자 제공)
ICR1 레지스터는 TNCT1 레지스터와 마찬가지로
==>
ICR1 레지스터는 TCNT1 레지스터와 마찬가지로
303쪽 16.4절 요약 1행(저자 제공)
고속의 주변장치와 통산을 위해
=>
고속의 주변장치와 통신을 위해
308쪽 첫 번째 문단 2행(저자 제공)
클록 전송을 위한 SCA(Serial Clock) 2개의 선만
==>
클록 전송을 위한 SCL(Serial Clock) 2개의 선만
315쪽 2행(저자 제공)
Holt) 비트를
==>
Halt) 비트를
319쪽 두 번째 문단 2-6행(저자 제공)
코드 17-5는 1바이트의 데이터를 수신하는 함수이다. 코드 17-5는 코드 17-3과 설정이 동일하게 보이며 데이터 레지스터인 TWDR에 데이터를 대입하거나 읽는 것만 차이가 있다. 그림 17-4와 17-5에서 알 수 있듯이 I2C 통신에서 송신과 수신은 주소를 전송할 때 LSB에 의해 이미 결정되어 있으므로 데이터 송신과 수신 함수에서의 설정에는 차이가 없다.
==>
코드 17-5는 1바이트의 데이터를 수신하는 두 종류의 함수를 나타낸다. 데이터 송신의 경우 데이터를 전송하고 ACK를 확인하는 하나의 함수만으로 충분하지만, 데이터 수신의 경우에는 데이터를 수신한 후 ACK를 보내는 경우와 NACK를 보내는 두 가지 경우가 있다. 그림 17-5에서도 알 수 있듯이, 여러 바이트의 데이터를 수신하는 경우 마지막 바이트를 제외하고는 ACK를 보내지만, 마지막 바이트를 수신한 후에는 NACK를 보내야 한다. 기본적으로 코드 17-5와 코드 17-3의 설정은 동일하다. 다만, 코드 17-3에서는 데이터 송신을 위해 TWDR 레지스터에 값을 대입하고 있는 반면, 코드 17-5에서는 데이터 수신을 위해 TWDR 레지스터의 값을 읽는다는 차이가 있다.
319쪽 코드 17-5의 1행(저자 제공)
uint8_t I2C_receive(void) {
==>
uint8_t I2C_receive_ACK(void) {
319쪽 코드 17-5 끝부분에 아래 내용 추가(저자 제공)
uint8_t I2C_receive_NACK(void) {
TWCR = _BV(TWINT) | _BV(TWEN);
while( !(TWCR & (1 << TWINT)) ); // 수신 완료 대기
return TWDR;
}
320쪽 코드 17-6의 위에서 3-4행(저자 제공)
void I2C_transmit(uint8_t data); // 1바이트 전송
uint8_t I2C_receive(void); // 1바이트 수신
==>
uint8_t I2C_receive_ACK(void); // 1바이트 수신 & ACK
uint8_t I2C_receive_NACK(void); // 1바이트 수신 & NACK
320쪽 코드 17-7 아래에서 8행(저자 제공)
uint8_t I2C_receive(void) {
==>
uint8_t I2C_receive_ACK(void) {
320쪽 코드 17-7의 끝에서 1-3행(저자 제공)
void I2C_stop(void) {
TWCR = _BV(TWINT) | _BV(TWSTO) | _BV(TWEN) | _BV(TWEA);
}
==>
uint8_t I2C_receive_NACK(void) {
TWCR = _BV(TWINT) | _BV(TWEN);
while( !(TWCR & (1 << TWINT)) ); // 수신 완료 대기
return TWDR;
}
void I2C_stop(void) {
TWCR = _BV(TWINT) | _BV(TWSTO) | _BV(TWEN) | _BV(TWEA);
}
322쪽 코드 17-8 아래에서 4-1행0(저자 제공)
write_message(bcd_to_decimal(I2C_receive()), " second\n");
write_message(bcd_to_decimal(I2C_receive()), " minute\n");
write_message(bcd_to_decimal(I2C_receive()), " hour\n");
write_message(bcd_to_decimal(I2C_receive()), " day of week\n");
write_message(bcd_to_decimal(I2C_receive()), " day\n");
write_message(bcd_to_decimal(I2C_receive()), " month\n");
write_message(bcd_to_decimal(I2C_receive()), " year\n");
==>
write_message(bcd_to_decimal(I2C_receive_ACK()), " second\n");
write_message(bcd_to_decimal(I2C_receive_ACK()), " minute\n");
write_message(bcd_to_decimal(I2C_receive_ACK()), " hour\n");
write_message(bcd_to_decimal(I2C_receive_ACK()), " day of week\n");
write_message(bcd_to_decimal(I2C_receive_ACK()), " day\n");
write_message(bcd_to_decimal(I2C_receive_ACK()), " month\n");
write_message(bcd_to_decimal(I2C_receive_NACK()), " year\n");
403쪽 코드 21-5 밑에서 4행
lcd.write('3');
==>
lcd.write('4');
353쪽 아래에서 두 번째 문단 5행에서(이*인 님 제공)
타이머/카운터 1번은 8비트이므로
==>
타이머/카운터 0번은 8비트이므로
234-235페이지 EIMSK 레지스터와 EICRA 레지스터 표기 오류건(박*규 님 제공)
178페이지 첫 문단 (저자 제공)
입출력 객체의 정의는 main 함수 마지막으로 표준 입출력 장치와 위에서 정의한 입출력 객체들을 연결한다.
==> 마지막으로 main 함수에서 표준 입출력 장치와 위에서 정의한 입출력 객체들을 연결한다.
229쪽 테이블에서 4째 줄 (저자 제공)
0x004 jmp EXT_INT0 ; IRG1 Handler ==> 0x004 jmp EXT_INT1 ; IRG1 Handler
229쪽 테이블에서 마지막 줄 (저자 제공)
0X036 ==> 0x036
239쪽 표 13-6에서 (제자 제공)
PD0 ~ PC7 ==> PD0 ~ PD7
404페이지 코드 21-6에서 밑에서 4번째 줄(저자 제공)
lcd.write('3'); ==> lcd.write('4');
'오탈자 정보' 카테고리의 다른 글
[핵심만 골라 배우는 iOS 9 프로그래밍]_오탈자 (0) | 2016.04.26 |
---|---|
[실무에 바로 적용하는 Node.js]_오탈자 (0) | 2016.03.30 |
[사물인터넷을 품은 라즈베리 파이]_오탈자 (0) | 2016.02.29 |
[스프링 인 액션(제4판)]_오탈자 (0) | 2016.02.04 |
[전문가를 위한 오라클 PL/SQL(제3판)]_오탈자 (0) | 2016.01.06 |