Witam.
Dzień cały męczę się żeby zrobić głupią komunikację opartą na RS232->PC gdzie nadajnikiem jest uC amtega8-8pu i nie mogę dojść co robię nie tak...
oto mój kod (mocno skrócony ale nadal nie działający tak jak powinien)
i teraz zauważyłem że UART działa lepiej jak ustawie w odbiorniku 7 bitowe słowo danych
PRÓBKA
a jeśli jest 8 bitów to wtedy
już dość długo nad tym siedzę i nie wiem czym to może być spowodowane... Do przesyłania sygnały wykorzystuję parę skrętki o długości 1,5 m (no może 2 ale wątpię) cały czas korzystam z linuxa i programu cutecom (jak dotąd działał OK) próbowałem już przesyłać wykorzystując przerwania, z tym samym skutkiem. Prędkość >19200 jest praktycznie nieosiągalna, na mniejszych jakoś działa, aczkolwiek również są błędy, pamiętam że jeszcze całkiem niedawno temu testowałem uart i działało to bardzo dobrze na tej samej konfiguracji i z dużo większymi prędkościami.
Może mam gdzieś błąd w kodzie którego nie potrafię zlokalizować...
Pozdrawiam zawisza
Dzień cały męczę się żeby zrobić głupią komunikację opartą na RS232->PC gdzie nadajnikiem jest uC amtega8-8pu i nie mogę dojść co robię nie tak...
oto mój kod (mocno skrócony ale nadal nie działający tak jak powinien)
#include <avr/io.h>
#include <stdio.h>
#define BAUD 9600
#define MYUBRR F_CPU/BAUD/16-1
void USART_init(unsigned int myubrr)
{
/* Ustala prędkość transmisji */
UBRRH = (unsigned char)(myubrr>>8);
UBRRL = (unsigned char)myubrr;
/* Włącza nadajnika */
UCSRB = (1<<TXEN)|(1<<RXEN);
/* Format ramki: 8 bitów danych, 1 bit stopu, brak bitu parzystości */
UCSRC = (1<<URSEL) | (1<<UCSZ0 ) | (1<<UCSZ1) ;
}
/* Wysyła znak do portu szeregowego */
static int USART_Transmit(char c, FILE *stream)
{
while(!(UCSRA & (1<<UDRE)));
UDR = c;
return 0;
}
/* Tworzy strumienia danych o nazwie 'mystdout' połączony
z funkcją 'USART_Transmit' */
static FILE mystdout = FDEV_SETUP_STREAM(USART_Transmit, NULL, _FDEV_SETUP_WRITE);
int main(void)
{
USART_init(MYUBRR);
stdout = &mystdout;
uint8_t i=0xa4;
while(1)
{
printf("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\naaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\naaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\naaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n");
while(i){
printf("Testowanie funkcji UART_putint()");
printf("\n");
i--;
}
printf("\n");
printf("Testowanie funkcji UART_getchar() i UART_putchar()");
printf("\n");
printf("Wyslij cokolwiek z terminala, znak \"t\" konczy...");
printf("\n");
printf("Testowanie funkcji UART_getstr() i printf()");
printf("\n");
printf("Wyslij cokolwiek z terminala i nacisnij ENTER");
printf("\n");
}
}
i teraz zauważyłem że UART działa lepiej jak ustawie w odbiorniku 7 bitowe słowo danych
PRÓBKA
aaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
Testowanie funkcji UART_putint()
Testowanie funkcji UART_putint()
Testowanie funkcji UART_putint()
Testowanie funkcji UART_putint()
Testowanie funkcji UART_putint()
Testowanie funkcji UART_putint()
Testowanie funkcji UART_putint()
Testowanie funkcji UART_putint()
Testowanie funkcji UART_putint()
Testowanie funkcji UART_putint()
Testowanie funkcji UART_putint()
Testowanie funkcji UART_putint()
Testowanie funkcji UART_putint()
Testowanie funkcji UART_putint()
Testowanie funkcji UART_putint()
Testowanie funkcji UART_putint()
Testowanie funkcji UART_putint()
Testowanie funkcji UART_putint()
Testowanie funkcji UART_putint()
Testowanie funkcji UART_putint()
Testowanie funkcji UART_putint()
Testowanie funkcji UART_putint()
Testowanie funkcji URT_putint()
Testowanie funkcji UART_putint()
Testowanie funk UART_putint()
Testowanie funkcji UART_putint()
Testowanie funkcji UART_putint()
Testowanie funkcji UART_putint()
Testownie funkcji UART_putint()
Testowanie funkcji UART_putint()
Testowanie funkcji UART_putint()
Testowanie funkcji UART_putint()
Testowanie funkcji UART_putint()
Testowanie funkcji UART_putint()
Testowanie funkcji UART_putint()
Testowanie funkcji UART_putint()
Testowanie funkcji UART_putint()
Testowaniefunkcji UART_putint()
Testowanie funkcji UART_putint()
Testoie funkcji UART_putint()
Testowanie funkcji UART_putint()
Testowanie funkcji UART_putint()
Testowanie funkcji UART_putin()
Testowanie funkcji UART_putint()
Testowanie funkcji UART_utint()
Testowanie funkcji UART_putint()
Testowanie funkcji UART_putint()
Testowanie funkcji UART_putint()
Testowanie funkcji UART_putint()
Testowanie funkcji UART_putint()
Testowafunkcji UART_putint()
Testowanie funkcji UART_putint()
Testowanie funkcji UART_putint()
Testowanie funkcji UART_putint()
Testowanie funkcji UART_putint()
Testowanie funkcji UART_putint()
Testowanie funkcji UART_putint()
Testowanie funkcji UART_putint()
Testowanie funkcji UART_putint()
Testowanie funkcji UART_putint()
Testowanie funkcji UART_putint()
Testowanie funkcji UART_putint()
Testowanie funkcji UART_putint()
Teanie funkcji UART_putint()
Testowanie funkcji UART_putint()
Testowanie funkcji UART_putint()
Testowanie funkcji UART_putint()
Testowanie funkcji UART_putint()
Testowanie funkcji UART_putint()
Testowanie funkcji UART_putint()
Testowanie funkcji UART_putint()
Testowanie funkcji UART_putint()
Testowanie funkcji UART_putint()
Testowanie funkcji UART_putint()
Testowanie funkcji UART_putint()
Testowanie funkcji UART_putintestowanie funkcji UART_putint()
a jeśli jest 8 bitów to wtedy
aaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
Testowanji UART_putint()
T\0xe5stowanie funkcji UART_putint()
Testowa\0xeeie funkcji UART_putint(\0xa9
Testowanie funkcji UART_putint()
Testowanie fART_putint()
Testowanie fu\0xeekcji UART_putint()
Testowanie funkcji UART_putint()
Testowanie funkcji UART_puti\0xeet()
Testowanie fun\0xebcputint()
\0xd4estowanie funkcji UART_putint()
Testowanie funkcji UAR\0xa8)
Testowanie funkcji UART_putint()
Testowa\0xeeie funkcji U\0xc1RT_pu\0xf4itowanie f\0xf5nkcji UA\0xd2T_putint()
Testowanie funkcji UART_putint()
Testowanie funkcji UART_putint()
Testowanie f\0xf5nkcji UART_putint()nie funkcji UART_putint()
Testowani\0xe5 funkcji UART_puti\0xeet()
TestoART_putint()
Testowanie funkcji UART_\0xf0utint\0xa8)
Testowanie funkcjitint()
Testowanie funkcji UART_putint()
Testowanie\0xa0funkcji UART_cji UART_p\0xf5tint()
Testowa\0xeeie funkcji UART_p\0xf5tint()
Testowanie fufunkcji UART_puti\0xeet()
Testowanie fun\0xebcji UART_putint()
Testow\0xe1nie funkcji UART_p\0xf5tint()
Testowanie funkcji UART_putint()
Testowanie funkcji UART_putint()
Testowanie funkcji UART_p\0xf5tint()
Testo\0xf7anie funkcji UART_putint()
Testowanie funkcji UART_putint()
Testo\0xf7anie funkcji UART_putint()
Testowani\0xe5 funkcji UART_putint()
Testowanie fu\0xeekcji UART_putint()
Testowanie funkcji UAR\0xd4_puti\0xeet()
Testowanie fu\0xeekcji UART_putint()
Testowanie funkcji UAR\0xd4_putint()
Testowanie funkcji UART_putint()
już dość długo nad tym siedzę i nie wiem czym to może być spowodowane... Do przesyłania sygnały wykorzystuję parę skrętki o długości 1,5 m (no może 2 ale wątpię) cały czas korzystam z linuxa i programu cutecom (jak dotąd działał OK) próbowałem już przesyłać wykorzystując przerwania, z tym samym skutkiem. Prędkość >19200 jest praktycznie nieosiągalna, na mniejszych jakoś działa, aczkolwiek również są błędy, pamiętam że jeszcze całkiem niedawno temu testowałem uart i działało to bardzo dobrze na tej samej konfiguracji i z dużo większymi prędkościami.
Może mam gdzieś błąd w kodzie którego nie potrafię zlokalizować...
Pozdrawiam zawisza