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!
-
hagop
- -
- Posty: 16
- Rejestracja: 15 maja 2009, 18:53
- Lokalizacja: Słupsk
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?
-
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.

-
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.
-
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