Witam,
mam problem z połączeniem po USARCIE tych dwóch procesorów. Sprawa wygląda następująco: atmega1284p ma być docelowo masterem, wysyła ramkę i w odpowiedzi dostaje ramkę zwrotną od atmega8. Obsługa ramek nie jest jeszcze napisana, na razie wysyłam 8 bajtów atmegą1284p i jeżeli wszystkie bajty zostają poprawnie odebrane, to atmega8 odsyła mi 11 bajtów. I tu zaczyna się problem, mianowicie ramka od atmegi8 przy prędkości 9600 zostaje odebrana prawidłowo kilka pierwszych razy, potem "się rozjeżdża" bajty wysyłane później są odbierane jako pierwsze, nie ma reguły które. Warto dodać, że przy prędkości 230400 wszystko działa idealnie. Kwarce w obu atmegach 14,7456MHz. Muszę jeszcze napisać, że atmega1284p ma w sobie wgranego także freemodbusa, który komunikuje się z komputerem przez drugiego USARTA. Funkcja while(1) wygląda w niej następująco:
Sam USART napisany jest na podstawie książki Pana Kardasia "Mikrokontrolery AVR Język C Podstawy Programowania", oczywiście na przerwaniach, z buforem cyklicznym, tak wyglądają funkcje:
Natomiast część odpowiedzialna za komunikację z Atmegą8 jest następująca:
Czyli zwyczajnie wypisane wszystkie funkcje które chcę zrealizować. Próbowałem zarówno w Atmega8 jak i Atmega1284p korygować wszystko delay'ami, żeby poczekało na odbiór, ale nie chciało mi to działać. Siedzę nad tym już kilka dni, nie wiem czy to jakaś głupota czy nie, dlatego zdecydowałem się napisać. Czy ma ktoś jakiś pomysł, jak to rozwiązać? Z góry dziękuję za wszystkie rady
mam problem z połączeniem po USARCIE tych dwóch procesorów. Sprawa wygląda następująco: atmega1284p ma być docelowo masterem, wysyła ramkę i w odpowiedzi dostaje ramkę zwrotną od atmega8. Obsługa ramek nie jest jeszcze napisana, na razie wysyłam 8 bajtów atmegą1284p i jeżeli wszystkie bajty zostają poprawnie odebrane, to atmega8 odsyła mi 11 bajtów. I tu zaczyna się problem, mianowicie ramka od atmegi8 przy prędkości 9600 zostaje odebrana prawidłowo kilka pierwszych razy, potem "się rozjeżdża" bajty wysyłane później są odbierane jako pierwsze, nie ma reguły które. Warto dodać, że przy prędkości 230400 wszystko działa idealnie. Kwarce w obu atmegach 14,7456MHz. Muszę jeszcze napisać, że atmega1284p ma w sobie wgranego także freemodbusa, który komunikuje się z komputerem przez drugiego USARTA. Funkcja while(1) wygląda w niej następująco:
Kod: C / C++
Sam USART napisany jest na podstawie książki Pana Kardasia "Mikrokontrolery AVR Język C Podstawy Programowania", oczywiście na przerwaniach, z buforem cyklicznym, tak wyglądają funkcje:
Kod: C / C++
Natomiast część odpowiedzialna za komunikację z Atmegą8 jest następująca:
Kod: C / C++
Czyli zwyczajnie wypisane wszystkie funkcje które chcę zrealizować. Próbowałem zarówno w Atmega8 jak i Atmega1284p korygować wszystko delay'ami, żeby poczekało na odbiór, ale nie chciało mi to działać. Siedzę nad tym już kilka dni, nie wiem czy to jakaś głupota czy nie, dlatego zdecydowałem się napisać. Czy ma ktoś jakiś pomysł, jak to rozwiązać? Z góry dziękuję za wszystkie rady