Witam.
Próbuje uruchomić wysyłanie znaków do komputera za pomocą RS232 i mam problem, nie mogę nic wysłać. Korzystam z programatora skt200 i po dłuższej analizie przebiegu programu przy pomocy diody doszedłem do wniosku, że nie jest ustawiany bit UDRE1 czyli rejestr UDR1 niby jest zajęty. Moje doświadczenie z AVR nie jest duże ale z innymi peryferiami nie miałem problemu natomiast tutaj utknąłem. Próbowałem już różnych zmian w kodzie programu i żadnych rezultatów. Korzystam z ATmegi128 i USART1. Prędkość transmisji 19200 be bitu parzystości i jeden bit stopu, taktowanie uC 1MHz. Dodatkowo na linii do komputera mam umieszczoną kolejną diodę, jeśli zaszła by jakaś transmisja a Terminal na komputerze by nie pokazał to zauważył bym to na diodzie. Poniżej kod programu wraz z if który pomagał mi sprawdzać ustawienie poszczególnych bitów. Próbowałem również najpierw odczytywać z UDR1 żeby może jakoś tak go "zwolnić" ale nic nie pomagało.
Jeśli ktoś ma jakiś pomysł będę wdzięczny za pomoc.
Edit: Dodałem brakujący średnik.
Próbuje uruchomić wysyłanie znaków do komputera za pomocą RS232 i mam problem, nie mogę nic wysłać. Korzystam z programatora skt200 i po dłuższej analizie przebiegu programu przy pomocy diody doszedłem do wniosku, że nie jest ustawiany bit UDRE1 czyli rejestr UDR1 niby jest zajęty. Moje doświadczenie z AVR nie jest duże ale z innymi peryferiami nie miałem problemu natomiast tutaj utknąłem. Próbowałem już różnych zmian w kodzie programu i żadnych rezultatów. Korzystam z ATmegi128 i USART1. Prędkość transmisji 19200 be bitu parzystości i jeden bit stopu, taktowanie uC 1MHz. Dodatkowo na linii do komputera mam umieszczoną kolejną diodę, jeśli zaszła by jakaś transmisja a Terminal na komputerze by nie pokazał to zauważył bym to na diodzie. Poniżej kod programu wraz z if który pomagał mi sprawdzać ustawienie poszczególnych bitów. Próbowałem również najpierw odczytywać z UDR1 żeby może jakoś tak go "zwolnić" ale nic nie pomagało.
Jeśli ktoś ma jakiś pomysł będę wdzięczny za pomoc.
#include <avr/io.h>
#include <util/delay.h>
void main( void )
{
DDRB = 48;
PORTB = 32;
int dioda1=16;
int dioda2=32;
char data = 0x51;
/* Set baud rate */
UBRR1H = 0;
UBRR1L = 2;
/* Enable transmitter */
UCSR1B =(1<<TXEN1);
/* Set frame format: 8data, 1stop bit */
UCSR1C = 0x06; //(1<<UCSZ11)|(1<<UCSZ10);
//data=UDR1;
_delay_ms(1000);
if ((UCSR1A & 32))
{PORTB |= dioda1;
}
//data = 0x51;
while(1)
{
while ( !( UCSR1A & (1<<UDRE1)) );
UDR1 = data;
PORTB |= dioda1;
_delay_ms(200);
PORTB &=~ dioda1;
_delay_ms(200);
}
}Edit: Dodałem brakujący średnik.