Błędna transmisja UART.

To forum jest dla wszystkich pasjonatów mikrokontrolerów AVR Atmela. Wymiana doświadczeń i pomoc dla początkujących w pisaniu programów zarówno w C, Asemblerze jak i BASCOM. Zapraszam znawców tematu, aby pomogli wszystkim początkującym!
ODPOWIEDZ
hagop
-
Posty: 16
Rejestracja: 15 maja 2009, 18:53
Lokalizacja: Słupsk

Błędna transmisja UART.

Post autor: hagop » 23 kwie 2011, 20:58

Witam!
Chciałem uruchomić transmisje UART ale nie wyszło mi coś więc postanowiłem napisać najprostszy program do wysyłania danych. Na terminalu otrzymuje tylko bzdury typu

Kod: Zaznacz cały

80 00 00 00 80 00 00 00 80 00 80 80 00 00 00 80 80 00 00 00 80 00 00 00 80 00 00 00 00 00 80 00 00 00 80 00 80 80 80 00 00 80 00 80 80 00 00 00 80 00 00 00 80 00 80 80 00 00 00 80 80 00 00 00 80 00 00 00 80 00 00 00 00 00 80 00 00 00 00 00 80 80 00 00 00 00 00 80 00 00 00 80 00 80 00 80 00 00 80 80 00 80 80 80 00 00 80 00 80 80 80 00 00 80 00 80

Oto listning (kopia z datasheeta)

Kod: Zaznacz cały

#include <avr/io.h>
#include <avr/iom1280.h>

#define BAUD 9600
#define MYUBRR F_CPU/16/BAUD-1

void USART_Init( unsigned int ubrr)
{
UBRR0H = (unsigned char)(ubrr>>8);
UBRR0L = (unsigned char)ubrr;
UCSR0B = (1<<RXEN0)|(1<<TXEN0);
UCSR0C = (1<<USBS0)|(3<<UCSZ00);
}

void USART_Transmit( unsigned char data )
{
while ( !( UCSR0A & (1<<UDRE0)) );
UDR0 = data;
}


void main( void )
{
USART_Init ( MYUBRR );

for(;;)
	{
	unsigned char dane=1;
	int n;
		for(n=0;n=10;n++)
			{
			USART_Transmit(dane);
			dane++;
			}
}

}

W czym może być problem?

Awatar użytkownika
Luminofor
Użytkownik
Posty: 1373
Rejestracja: 27 lis 2007, 17:17
Lokalizacja: Polska

Post autor: Luminofor » 24 kwie 2011, 0:15

Kod: Zaznacz cały

for(;;)
{
    unsigned char dane=1;
    int n;
        for(n=0;n=10;n++)
            {
            USART_Transmit(dane);
            dane++;
            }
} 
Ta pętla będzie się wykonywała w nieskończoność. Przydałaby się w niej jakiś break. Na AVR się nie znam, ale na C++ trochę tak. ;)

Awatar użytkownika
c4r0
Moderator
Posty: 2150
Rejestracja: 13 kwie 2004, 19:56
Lokalizacja: z lasu
Kontakt:

Post autor: c4r0 » 24 kwie 2011, 9:42

Zdaje się, że ma się wykonywać w nieskończoność i w kółko wysyłać te same dane (dla testu).

keruseykaryu

Post autor: keruseykaryu » 24 kwie 2011, 14:07

Jakie F_CPU? Jak ustawione bezpieczniczki? Czy wyliczony błąd transmisji jest mniejszy niż 1,5%?

hagop
-
Posty: 16
Rejestracja: 15 maja 2009, 18:53
Lokalizacja: Słupsk

Post autor: hagop » 24 kwie 2011, 19:28

F_CPU 8000000 (kwarc 8MHz), błąd 0,2% fusbity : Reading fuses address 0 to 2.. 0x5E, 0x99, 0xFF .. OK!

tak pętla ma się wykonywać w nieskończoność dla testu.

Awatar użytkownika
c4r0
Moderator
Posty: 2150
Rejestracja: 13 kwie 2004, 19:56
Lokalizacja: z lasu
Kontakt:

Post autor: c4r0 » 24 kwie 2011, 20:29

Próbowałeś na innych baudrejtach?

hagop
-
Posty: 16
Rejestracja: 15 maja 2009, 18:53
Lokalizacja: Słupsk

Post autor: hagop » 25 kwie 2011, 8:50

tak też nie działa. przy baud 250000 jest 0% błedu i tez nie działa otrzymuje same bzdury.


jakieś pomysły? dodam jeszcze że nie ma kostki max232 a jest ft232

problem rozwiązany. Miałem ustawiony FUSEBIT CKSEL

ODPOWIEDZ