Atmega8 - usart - hyperteminal 문제

C

calin17us

Guest
y를 프로그램에 보내 "안녕"USART로 (Tx는)와, 그리고 내가보고에서 하이퍼 터미널 사용 전 atmega8 내가 문자를보고 다른.그물에 내가 serch와 문자 코드는 아스키에서 확장.
내가 해달라고 이해가 왜 일이 그것.
제발 손을 수있는 당신이 내게주는.

이것은 그것을하는 대구 사용하고 난 :

#은 <avr/io.h> 포함
#은 <util/delay.h> 포함

1000000UL를 F_CPU # 정의
9600 보드를 # 정의
F_CPU/16/BAUD-1 UBRR_VAL을 # 정의

무효의 delay_ms (int 지연) (
int 나;
0은 (i =; 난 <= 지연; 난 ) (
_delay_ms (1);
)
)

무효의 init_uart (서명 int의 ubrr) (
/ * 전송 속도의 설정 * /
UBRRH = (메기 서명) (ubrr>> 8);
UBRRL = (메기 서명) (ubrr);
/ * 사용 수신기와 송신기 * /
UCSRB | = (1 <<RXEN);
UCSRB | = (1 <<TXEN);
/ * 설정 프레임 형식 : 8data, 2stop 비트 * /
UCSRC = (1 <<URSEL) | (1 <<USBS) | (3 <<UCSZ0);
)

무효의 send_char (서명 번째 문자 데이터) (
/ *는 *를 버퍼 잠깐 전송을위한 빈 /
(보면서! (UCSRA & (1 <<UDRE)));
/ 데이터가 버퍼에 넣어 *의 *를 보내는 데이터 /
UDR = 데이터;
)

무효의 send_string (char *로 데이터) (
(동안 (* 데이터)
) send_char (* 자료;
데이터 ;
)
)

(int 주 (무효)
init_uart (UBRR_VAL);
(동안 (1)
send_string ( "안녕");
delay_ms (1000);
)
반환 1;
)

이것은 하이퍼 터미널 무엇을 본다는 그림입니다 :
http://images.elektroda.net/55_1274543482.jpg

제발 도와 줘요 날.

 
그래서 수정 1MHz의 작동으로 ...또는 oscilator과 함께 내부 발진기 (될 수있는 innacurated) 또는 외부 당신은 사용하고 퓨즈가 그것은 프로그래밍 올바르게 구성으로?

 
터미널 사용자 설정 않습니다 비율을 보드와 일치하지 장치 대부분의 임베디드 네 도착할 시간의 속도를 보드 쓰레기를 전송 터미널 때.

실행 높은 문제를 다른 케이블이나 커패시턴스있다 가끔은한다면 엉망 최대 문자를 얻을 것이다 당신이 보드 때문에 속도와 긴 케이블.

나는 속도가 다른 정확한 더 속도가납니다 보드 있도록 주파수에 보이는 것처럼 수정을 필요로 변경합니다.

도망 간다에서 시도 변경 또는 9600 보드 보드에 2400 오류가 타이밍 낮은 볼 수 있도록하십시오.

그때면, 당신의 결정을 변경할 수 9600 및 죽은 - 변화는 그것을 위해 16 1.8432 MHz 이상, 이후 115200 115200 *이 정확하게 1 / 12입니다.좀 주파수 일부보기이 테이블에 대한 크리스탈 다른 죽었 요금을 킷에는 UART 보드는 ... http://en.wikipedia.org/wiki/Crystal_oscillator_frequencies

 
아주 많이 고마워, 난 변화는 2400에 속도를 보드와 작동 ... 또 감사 당신은

 
크리스탈 / 16 / 보드

1000000 / 16 / 9600 = 6.510

정수 변환 반올림이 내려 6

6 * 9600 * 16 = 921,600

921600 / 1000000 = 0.9216

귀하의 전송 속도는 보드가 7.84보다 9,600퍼센트 느리게.

당신은 그러나, 7 수도 반올림 최대 6.510부터 차이가 거의 많이 죽었 센터하게하지 않았을 가능성이 높습니다.

가장 가까운 정수로 라운딩에, 당신은 다음을 사용해야합니다 :
(서명 int) ((더블) F_CPU / (더블) 16 / (더블) 보드 (더블) 0.5)
그때
가치에 대한 빼기 1을 등록하여 배치해야합니다.올린날짜 분 후에 3 :
크리스탈 / 16 / 보드

1000000 / 16 / 2400 = 26.041666

정수 변환 반올림이 내려 26

26 * 2400 * 16 = 998,400

998400 / 1000000 = 0.9216

귀하의 전송 속도는 보드가 0.16보다 2천4백% 느리게.

이 상황에서는, 당신은 괜찮아 거의 죽은 보드 -에 2400 평가, 따라서있다 당신은.등록일 분 후 8 :위의 오타 수정 방법 :
998400 / 1000000 = 0.9984등록일 분 후에 7 :속도를한다면 보드 원하는 높은거야 갖고 그것을 같이 1.8432 MHz 이상 또는 일부 다중 선택 뭔가를, 그때 그때 당신이 할 선택 고속 요금 보드에 - 죽었 으면 크리스탈 클럭 속도를 경우와,.

더 마이크로 컨트롤러받을 수 있도록 해당 없음 / 남 소수점 배율을 가지고 더 많은 유연성을 가지고 평가 발전기, 어디로 최고의 보드에 킷에는 UART 그들의 죽음이 요금에 보오드.올린날짜 분 후에 2 :하이퍼 터미널 짜증 플러스, 그것은 7과 비스타와 함께하지 않는, 그래서 좋은 선택이 단말기는 무료로 노출된 - 뼈 uCon의.화려한 아니지만, 작품입니다 100 % 무료.
http://www.umonfw.com/ucon/index.html

 
이며, 세트 standar 가치와 함께이 1이 문제는 내가 MHz 이상이 때문에 내부 오실레이터를 사용하여, 결국 난 그나마 changeit 알고하는 방법.난 내 보드 난 시계를하지만, 4MHz 그나마 그것을 사용할 수 있습니다.
나와 ponyprog 내 프로그램 avr과 시계를 내 변경하려고, s의 와 설정 퓨즈 비트 (CTR)을,하지만에서 결국, 나는이 프로그램은, 및 "쓰기 실패"이 메시지를 내 avr 시도가 제가 사라 (해당되는 경우 읽거나 작업에 쓸 그에게 그것 챔피온).
그것은 비트를하는 다른 퓨즈 이런 방식으로 설정할 수 있습니까?
수 .... 좀 도와

 

Welcome to EDABoard.com

Sponsor

Back
Top