Witam,
Na dwóch ATmegach chciałem zrobić komunikację za pomocą UARTu.
Miałoby to działać na zasadzie: jeśli ATmega odbierze string (hasło) np.: "1234" to wykona jakieś zadanie
Kod nadajnika działa prawidłowo, potrafię wysłać string (kod w załączniku)
Mam problem z kodem odbiornika, kod działa tak że reaguje tylko na znak, nie potrafi odebrać stringa.
Czy ktoś wie jak to przerobić?
Na dwóch ATmegach chciałem zrobić komunikację za pomocą UARTu.
Miałoby to działać na zasadzie: jeśli ATmega odbierze string (hasło) np.: "1234" to wykona jakieś zadanie
Kod nadajnika działa prawidłowo, potrafię wysłać string (kod w załączniku)
Mam problem z kodem odbiornika, kod działa tak że reaguje tylko na znak, nie potrafi odebrać stringa.
Czy ktoś wie jak to przerobić?
#include <avr/io.h>
#include <stdlib.h>
#include <string.h>
#include <avr/pgmspace.h>
#include <util/delay.h>
#include <avr/interrupt.h>
#include <avr/signal.h>
#define F_CPU 16000000
#define __CR 0x0a
#define osc_freq 16
#define FOSC 16000000// Clock Speed
#define BAUD 4800
#define MYUBRR FOSC/16/BAUD-1
void USART_Init( unsigned int ubrr)
{
/* Set baud rate */
UBRRH = (unsigned char)(ubrr>>8);
UBRRL = (unsigned char)ubrr;
/* Enable receiver and transmitter */
UCSRB = (1<<RXEN)|(1<<TXEN);
/* Set frame format: 8data, 2stop bit */
UCSRC = (1<<URSEL)|(0<<USBS)|(3<<UCSZ0);
}
void usart_send( unsigned char data )
{
/* Wait for empty transmit buffer */
while ( !( UCSRA & (1<<UDRE)) )
;
/* Put data into buffer, sends the data */
UDR = data;
}
unsigned char USART_Receive( void )
{
/* Wait for data to be received */
while ( !(UCSRA & (1<<RXC)) );
/* Get and return received data from buffer */
return UDR;
}
volatile unsigned char i=0;
int main(void){
DDRD|= (1<<DDD6); // konfiguracja - WYJSCIE ustawianie jedynki
sei();
lcd_init();
USART_Init(MYUBRR);
while(1)
{
i=USART_Receive();
if (i==47) {
PORTD|= (1<<PORTD6); //przypisanie "1" na portD6
}
else
{
PORTD&= ~(1<<PORTD6); //przypisanie "0" na portD6
}
}
return (0);
}