Witam,
Usiłuję zmusić ATmegę128 do komunikacji z komputerem przez RS-232. Niestety mam z tym duży kłopot.
Procesor chodzi z kwarcem na 16MHz, a transmisja do komputera ma się odbywać poprzez wbudowany w procesor USART z prędkością 115,2kbps. Transmisja ma być w zasadzie ciągła do póki są dane do wysłania (a będą cały czas) i jedynie procesor będzie nadawał cokolwiek do komputera i nie przewiduję żadnej zwrotnej komunikacji.
Poniżej zamieszczę fragmenty programu gdzie jest skonfigurowany USART i tam gdzie ma się odbyć wysyłanie. Pomiędzy wysyłka poszczególnych bajtów procesor prowadzi też komunikację SPI z przetwornikiem i zbiera próbki oraz wykonuje obliczenia. Nie używam przerwań gdyż zarówno SPI jak i USART jest zautomatyzowany a i tak muszę czekać po kolei na próbki potem to przefiltrować, policzyć i wysłać do komputera. SPI jest o wiele szybsze niż te 115,2kbps więc zbieram próbki w czasie gdy odbywa się transmisja RS'em.
Wydaje mi się że program napisany jest dobrze, a przynajmniej dobrze działa w symulatorze AVR Studio, ale w praktyce już nie udaje mi się skomunikować z komputerem. Więc może coś przeoczyłem, albo mam mylne pojęcie o zasadach takiej komunikacji.
Posiadam Laptopa z systemem Windows Vista, który nie ma wbudowanego żadnego "terminala" czy coś w tym rodzaju. Pościągałem z sieci kilka programów do tego takich jak: Hercules 3.2.3.0, Hyper Terminal 6.4, Terminal 1.0.1, Serial monitor (ser232mon), ale mimo ustawienia odpowiedniego portu com, prędkości transmisji 115.2k, oraz formatu ramki (1bit startu, 8bitów danych, bez bitu parzystości, 1bit stopu) nie udało mi się nic odebrać.
Niepokoi mnie nieco fakt iż w dokumentacji procesora przy ustawieniach prędkości transmisji jest stosowana ustawiana programowo podziałka która w zależności od wybranej prędkości transmisji i częstotliwości oscylatora daje różnej wielkości błąd w stosunku do ustandaryzowanej prędkości transmisji. I tak w przypadku fosc=16MHz i transmisji 115,2kbps może być -3,5% czyli 111,168kbps lub +2,1% czyli 117,62kbps i nie może być idealnie. Zastanawiam się czy w ogóle jest dopuszczalna taka różnica w prędkości transmisji i czy ten błąd nie może być powodem braku komunikacji.
Poza tym może coś robię nie tak, może coś źle zmontowałem, a może taka transmisja musi się odbywać dwukierunkowo (musi być jakoś sterowana)?
Może fakt, że nie posiadam portu szeregowego w komputerze tylko używam przejściówki RS232->USB uniemożliwia prawidłową transmisję? Chociaż mało to prawdopodobne bo używam tej samej przejściówki i tej samej prędkości do programowania i wszystko działa jak należy.
Bardzo proszę o pomoc bo już nie wiem co mam robić.
tu jeszcze fragment układu do sprawdzenia:
Dodano po 4 [godziny] 44 [minuty]:
Może jeszcze usystematyzuję te problemy.
Dobrze by było gdyby ktoś umiał mi odpowiedzieć między innymi na pytania:
1. Czy wspomniane odstępstwa -3,5% lub +2,1% od standardowej teoretycznej prędkości transmisji mogą mieć wpływ na poprawność transmisji?
2. Czy można używać USART'a do komunikacji w standardzie RS232 w taki sposób jak ja to zrobiłem. Czyli uruchamiam w procesorze tylko nadajnik i tylko procesor nadaje, a niczego nie odbiera.
3. Czy sama struktura ramki jest już wystarczająca do właściwej transmisji czy może trzeba posługiwać się jeszcze jakimiś dodatkowymi sygnałami sterującymi transmisją (w najprostszej formie)?
4. Czy wspomniane programy (trochę się wysypują pod Vistą) i system operacyjny, a także używanie wirtualnego portu com przy zastosowaniu przejściówki RS232->USB mogą być przyczyną braku prawidłowej komunikacji? (jak wspomniałem przejściówka z programatorem sprawuje się bardzo dobrze)
5. Może są jeszcze inne aspekty na które nie zwróciłem uwagi, a moga być kluczowe dla transmisji?
Będę bardzo wdzięczny za wszelką pomoc
Usiłuję zmusić ATmegę128 do komunikacji z komputerem przez RS-232. Niestety mam z tym duży kłopot.
Procesor chodzi z kwarcem na 16MHz, a transmisja do komputera ma się odbywać poprzez wbudowany w procesor USART z prędkością 115,2kbps. Transmisja ma być w zasadzie ciągła do póki są dane do wysłania (a będą cały czas) i jedynie procesor będzie nadawał cokolwiek do komputera i nie przewiduję żadnej zwrotnej komunikacji.
Poniżej zamieszczę fragmenty programu gdzie jest skonfigurowany USART i tam gdzie ma się odbyć wysyłanie. Pomiędzy wysyłka poszczególnych bajtów procesor prowadzi też komunikację SPI z przetwornikiem i zbiera próbki oraz wykonuje obliczenia. Nie używam przerwań gdyż zarówno SPI jak i USART jest zautomatyzowany a i tak muszę czekać po kolei na próbki potem to przefiltrować, policzyć i wysłać do komputera. SPI jest o wiele szybsze niż te 115,2kbps więc zbieram próbki w czasie gdy odbywa się transmisja RS'em.
Wydaje mi się że program napisany jest dobrze, a przynajmniej dobrze działa w symulatorze AVR Studio, ale w praktyce już nie udaje mi się skomunikować z komputerem. Więc może coś przeoczyłem, albo mam mylne pojęcie o zasadach takiej komunikacji.
Posiadam Laptopa z systemem Windows Vista, który nie ma wbudowanego żadnego "terminala" czy coś w tym rodzaju. Pościągałem z sieci kilka programów do tego takich jak: Hercules 3.2.3.0, Hyper Terminal 6.4, Terminal 1.0.1, Serial monitor (ser232mon), ale mimo ustawienia odpowiedniego portu com, prędkości transmisji 115.2k, oraz formatu ramki (1bit startu, 8bitów danych, bez bitu parzystości, 1bit stopu) nie udało mi się nic odebrać.
Niepokoi mnie nieco fakt iż w dokumentacji procesora przy ustawieniach prędkości transmisji jest stosowana ustawiana programowo podziałka która w zależności od wybranej prędkości transmisji i częstotliwości oscylatora daje różnej wielkości błąd w stosunku do ustandaryzowanej prędkości transmisji. I tak w przypadku fosc=16MHz i transmisji 115,2kbps może być -3,5% czyli 111,168kbps lub +2,1% czyli 117,62kbps i nie może być idealnie. Zastanawiam się czy w ogóle jest dopuszczalna taka różnica w prędkości transmisji i czy ten błąd nie może być powodem braku komunikacji.
Poza tym może coś robię nie tak, może coś źle zmontowałem, a może taka transmisja musi się odbywać dwukierunkowo (musi być jakoś sterowana)?
Może fakt, że nie posiadam portu szeregowego w komputerze tylko używam przejściówki RS232->USB uniemożliwia prawidłową transmisję? Chociaż mało to prawdopodobne bo używam tej samej przejściówki i tej samej prędkości do programowania i wszystko działa jak należy.
Bardzo proszę o pomoc bo już nie wiem co mam robić.
tu jeszcze fragment układu do sprawdzenia:
Dodano po 4 [godziny] 44 [minuty]:
Może jeszcze usystematyzuję te problemy.
Dobrze by było gdyby ktoś umiał mi odpowiedzieć między innymi na pytania:
1. Czy wspomniane odstępstwa -3,5% lub +2,1% od standardowej teoretycznej prędkości transmisji mogą mieć wpływ na poprawność transmisji?
2. Czy można używać USART'a do komunikacji w standardzie RS232 w taki sposób jak ja to zrobiłem. Czyli uruchamiam w procesorze tylko nadajnik i tylko procesor nadaje, a niczego nie odbiera.
3. Czy sama struktura ramki jest już wystarczająca do właściwej transmisji czy może trzeba posługiwać się jeszcze jakimiś dodatkowymi sygnałami sterującymi transmisją (w najprostszej formie)?
4. Czy wspomniane programy (trochę się wysypują pod Vistą) i system operacyjny, a także używanie wirtualnego portu com przy zastosowaniu przejściówki RS232->USB mogą być przyczyną braku prawidłowej komunikacji? (jak wspomniałem przejściówka z programatorem sprawuje się bardzo dobrze)
5. Może są jeszcze inne aspekty na które nie zwróciłem uwagi, a moga być kluczowe dla transmisji?
Będę bardzo wdzięczny za wszelką pomoc
