BASIC4MCU | 질문게시판 | 답변 : atmega128 각종 센서와 블루투스 USART관련 질문입니다!
페이지 정보
작성자 master 작성일2020-09-07 23:26 조회9,229회 댓글1건
https://www.basic4mcu.com/bbs/board.php?bo_table=gac&wr_id=13328
본문
#include 뒤에 헤더파일명이 없는 것을보니 네이버에 올린 글을 복사해서 붙인 것 같은데요
다음부터는 제대로된 소스코드를 첨부해주세요
//
void USART_Transmit(unsigned char tx_data) //USART0번으로 블루투스 송신을 할때 사용하였습니다
{
while(!(UCSR0A & (1<)));<> <-- 소스코드가 왜 깨졌을까요?
UDR0 = tx_data;
}
//
void function_1(int sw){unsigned short value;switch(sw){case 0x01:{ //MPU6050용 //첫번쨰 스위치가 눌렸을때는 mpu6050이 아래와 같이 반응합니다clcd_position(0,1); clcd_str("MPU6050 START");if(roll <=-20){ PORTG=0x00; USART_Transmit('8'); clcd_clear(); clcd_position(1,5); clcd_str("GO "); }if(roll >= 20){ USART_Transmit('2'); clcd_clear(); clcd_position(1,5); clcd_str("BACK "); }if(pitch<=-20){ USART_Transmit('4'); clcd_clear(); clcd_position(1,5); clcd_str(" "); }if(pitch>= 20){ USART_Transmit('6'); clcd_clear(); clcd_position(1,5); clcd_str("Right"); }roll=0; pitch=0;break;}case 0x02:{ ///조이스틱용 //조이스틱 용으로 2번 스위치가 눌렸을 경우 조이스틱으로 반응합니다clcd_position(0,1); clcd_str("JOYSTICK START");PORTG=0x00;init_adc1();value=read_adc();if(value<= 5){ USART_Transmit('2'); clcd_clear(); clcd_position(1,5); clcd_str("Back"); }if(value>=1000){ USART_Transmit('8'); clcd_clear(); clcd_position(1,5); clcd_str("GO "); }init_adc2();value=read_adc();if(value<= 5){ USART_Transmit('4'); clcd_clear(); clcd_position(1,5); clcd_str("LEFT "); }if(value>=1000){ USART_Transmit('6'); clcd_clear(); clcd_position(1,5); clcd_str("RIGHT"); }break;}case 0x04:{ PORTG=0x00; USART_Transmit('0'); clcd_clear(); clcd_position(0,1); clcd_str("AUTOMODE START"); break; } //자율주행용 //자율주행용으로 스위치3번이 눌렸을때 이용합니다case 0x0A:case 0x09:{ USART_Transmit('5'); clcd_clear(); clcd_position(1,0); clcd_str("STOP "); break; } //mpu6050,조이스틱 정지용case 0x03:{ USART_Transmit('5'); clcd_clear(); clcd_position(0,1); clcd_str("DONT PUSH"); break; }case 0x05:{ USART_Transmit('5'); clcd_clear(); clcd_position(0,1); clcd_str("DONT PUSH"); break; }case 0x06:{ USART_Transmit('5'); clcd_clear(); clcd_position(0,1); clcd_str("DONT PUSH"); break; }case 0x07:{ USART_Transmit('5'); clcd_clear(); clcd_position(0,1); clcd_str("DONT PUSH"); break; }default: { PORTG=0xff; USART_Transmit('5'); clcd_clear(); clcd_position(0,1); clcd_str("CHOICE MODE"); }}}//ISR(TIMER0_OVF_vect){ //0.002s-----------------------mpu6050관련 코딩함수들입니다!------------------------------dt+=0.002;TCNT0=256-62;}위 소스코드에는 없지만 ADC 함수에서 값을 읽을 때에 문제가 있지만...
특별히 LCD가 멈추거나 UART가 멈출 이유는 보이지 않습니다.
TWI(I2C) 케이블이 잘 연결되어 있는지, 풀업저항이 적당한지 체크하세요
(오실로스코프가 없어서) 풀업저항 체크가 어려우면 통신속도를 낮추는 것이 도움이 됩니다.
댓글 1
조회수 9,229seojc님의 댓글
seojc 작성일
감사합니다!
예상하신대로 TWI통신쪽이 문제였던거 같습니다(풀업저항,통신속도문제)
문제는 아직 정확하게 발견하지 못해
twi통신 쪽이 부족하다고 생각되어 처음부터 다시 공부해보겠습니다 ㅠㅠ