witam,
od godzinki walcze z ustawieniem USART1 w tryb synchroniczny w mojej Atmedze 162. Po przeczytaniu pdf'a wnioskuje, ze ustawiam UMSEL = 1 oraz XCK na 1 lub 0 w zaleznosci od tego czy master czy slave. Czyli ze jak ustawie XCK1 jako wyjscie to atmega powinna generowac sygnal zegarowy synchronizujacy transmisje. Niestety podpinam oscyloskop i nie ma zadnego sygnalu ....
Czy mam dobrze skonfigurowany USART ?
od godzinki walcze z ustawieniem USART1 w tryb synchroniczny w mojej Atmedze 162. Po przeczytaniu pdf'a wnioskuje, ze ustawiam UMSEL = 1 oraz XCK na 1 lub 0 w zaleznosci od tego czy master czy slave. Czyli ze jak ustawie XCK1 jako wyjscie to atmega powinna generowac sygnal zegarowy synchronizujacy transmisje. Niestety podpinam oscyloskop i nie ma zadnego sygnalu ....
#include <avr/io.h>
#define USART_BAUDRATE 9600
#define BAUD_PRESCALE (((F_CPU / (USART_BAUDRATE * 2UL))) - 1)
int main (void)
{
char ReceivedByte;
UCSR1B |= (1 << RXEN1) | (1 << TXEN1); // Turn on the transmission and reception circuitry
UCSR1C |= (1 << UMSEL1) | (1 << UCSZ10) | (1 << UCSZ11) | (0 << UCPOL1); // Use 8-bit character sizes
UBRR1L = BAUD_PRESCALE; // Load lower 8-bits of the baud rate value into the low byte of the UBRR register
UBRR1H = (BAUD_PRESCALE >>8 ) ; // Load upper 8-bits of the baud rate value into the high byte of the UBRR register
//DDRD |= (1 << PD2); // pin XCK1 jako wyjście
DDRD |= 0 << DDD2;
for (;;) // Loop forever
{
while ((UCSR1A & (1 << RXC1)) == 0) {}; // Do nothing until data have been recieved and is ready to be read from UDR
ReceivedByte = UDR1; // Fetch the recieved byte value into the variable "ByteReceived"
while ((UCSR1A & (1 << UDRE1)) == 0) {}; // Do nothing until UDR is ready for more data to be written to it
UDR1 = ReceivedByte; // Echo back the received byte back to the computer
}
}
Czy mam dobrze skonfigurowany USART ?