BASIC4MCU | 질문게시판 | 아트메가와 아두이노 통신 하는방법!
페이지 정보
작성자 jiseok 작성일2020-06-01 00:11 조회2,690회 댓글0건본문
제가 atmega128의 uart와 아두이노 우노를 연결해서 사용하려고 합니다.
i2c, spi는 아직까지고려중이지는 않습니다만,
uart1, uart0으로 두개의 통신이 가능하게 할 수있나요??
일단 코드는 만들었는데, 어떻게 통신하면될지 몰라서 이곳에 여쭤봅니다.!!
코드는 아래와 같습니다.
아두이노에서 '1'을 보내면 아트메가에서 led가 켜지게하는 프로그램입니다.
아트메가 코드
#define F_CPU 16000000L
#include <stdio.h>
#include <util/delay.h>
#include <avr/io.h>
#include "UART0.h"
#include "UART1.h"
#include <avr/interrupt.h>
#define V (340.0 * 100.0)
int time1, distance;
int interrupt_flag1;
float temp, m;
volatile unsigned char flag1, flag0;
FILE OUTPUT0 \
= FDEV_SETUP_STREAM(UART0_transmit, NULL, _FDEV_SETUP_WRITE);
FILE INPUT0 \
= FDEV_SETUP_STREAM(NULL, UART0_receive, _FDEV_SETUP_READ);
FILE OUTPUT1 \
= FDEV_SETUP_STREAM(UART1_transmit, NULL, _FDEV_SETUP_WRITE);
FILE INPUT1 \
= FDEV_SETUP_STREAM(NULL, UART1_receive, _FDEV_SETUP_READ);
ISR(USART0_RX_vect)
{
flag0 = UDR0;
}
ISR(USART1_RX_vect)
{
flag1 = UDR1;
}
int main(void)
{
DDRA = 0XFF;
DDRB = 0xFF;
DDRC = 0XFF;
//DDRE = 0X01;
TWCR = 0x04;
TCCR0 =0x06;
PORTB = 0x00;
UART0_init();
UART1_init();
stdout = &OUTPUT0;
stdin = &INPUT0;
stdout = &OUTPUT1;
stdin = &INPUT1;
SREG = 0X80;
while (1)
{
if(flag1 == '1')
{
PORTA=0xFF;
}
if(flag0 == '1')
{
PORTA = 0xFF;
}
/*_delay_ms(1000); //delay 설정
while(!(PINE & (1<<PINE2))) // ECHO가 LOW일 때 TCNT0를 0으로 유지
{
TCNT0=0;
}
while(PINE & (1<<PINE2)) // ECHO가 HIGH일 때 시간을 측정
{
time1=TCNT0; // 시간측정 ECHO가 High에서 Low로 변할 때 까지거 파형이 물체까지 갔다가 반사 돼서 온 시간
}
temp=time1*256.0/F_CPU; // 시간을 분주기를 통하여 계산
distance=(int)(temp*V)/2.0; // 거리 = 속도 * 시간 /2 해주는 이유 갔다가 돌아오는 시간이기 때문에 반을 해줘야 됨
if(distance <= 10)
{
PORTA=0xFF;
PORTB = 0X00;
}
else
{
//PORTA=0x00;
PORTB = 0x9A;
}*/
}
return 0;
}
아두이노 코드
#include <SoftwareSerial.h>
SoftwareSerial atmega(0,1);
void setup()
{
Serial.begin(9600);
atmega.begin(9600);
Serial.write(33);
}
void loop()
{
tmega.write('1');
}
댓글 0
조회수 2,690등록된 댓글이 없습니다.