Witam,
Mam następujący problem. Zakupiłem robota z zamontowaną płytką: http://www.mobot.pl/download/MOBOT-MBv2-AVR_instrukcja.pdf
GPS to FGPMMOPA4, konfiguracja: 9600 bps/8/N/1
Po drobnych modyfikacjach zamontowany jest tam kwarc 7,3728 Mhz. Procesor to Atmega128L (początkowo był Atmega128A z kwarcem 16Mhz). Podłączyłem do RX0 wyjście TX GPS FGPMMOPA4.
Jako że GPS zasilany jest 3,3V a Atmega 5v to napięcie 3,3v uzyskuje za pomocą dwóch diód prostowniczych 1N4007. RX0 nie podłączyłem bezpośrednio do TX ale podłączyłem to w sposób pokazany na obrazku :
Powyższe podłączenie znalazłem na tym forum. Jest i działa dla Atmegi16A - porównywałem charakterystyki Atmegi16A i Atmegi128L i chyba ten układ powinien działać poprawnie również w tym przypadku.
Z jakiegoś powodu wartości wyświetlone na LCD to praktycznie same jakieś krzaki. Dodam że GPS przetestowałem na płytce stykowej używając tego samego podłączenia RX0 do TX, Atmegi16A i kwarcu 16Mhz. Tutaj prawidłowe wartości są odczytywane i wyświetlone. Oczywiście w robocie dostosowalem UBRR do kwarcu 7,3728 Mhz.
Fragment kodu:
W Configuration Options też ustawiłem taktownie 7372800. Używam Avr Studio 4, programatora USBasp i aplikacji SinaProg.
Oczywiście testowałem już wiele możliwości. Starałem się zapisywać znaki do bufora, próbowałem rożne kombinacje UBRR, uruchamiałem opcje U2X – nic nie pomaga. Dla Atmegi16A to wszystko działa. Z tego co wiem to jedyna różnica w UART pomiędzy Atmega16 i Atmega128 to bit URSEL ale w Atmedze128 i tak nie można się do niego dostać, więc tu nie powinno być problemu.
Czy moje problemy mogą być spowodowane tym że Atmega128L korzysta z lini RX0 i TX0 podczas programowania ISP (jakieś zakłócenia, coś?)?
Ogólnie z tego co wyczytałem to tego typu problemy występują dla złej konfiguracji UART. Niestety wydaje mi się że inicjalizuje UART prawidłowo. Na pewno korzystam z kwarcu zewnętrznego: 7,3728 a fusebity to: lowfuse: FF, highfuse: C9, ext. bits:FF.
Czy mogą być jakieś inne powody dla ktorych UART0 może nie odbierać prawidłowych znaków? Nie mogę niestety skorzystać z UART1 (żeby oddzielić SPI od UART)
Być może jest jakiś problem w schemacie (jest w dokumencie który umieściłem na samym początku) albo w tym układziku łączącym RX0 z TX Gpsa?
Czy jest opcja że gdyby zmienić procesor na Atmega128A to zaczęłoby działać tak samo jak dla Atmegi16A? Między Atmega128L a 128A są jakieś minimalne różnice.
Wydaje mi się ze to mimo wszystki kwestia konfiguracji UART0, ale nie wiem co miałoby być źle
Od dłuższego czasu męczę się z tym i wiem że pewnie część z tych pytań jest bez sensu ale już nie mam pomysłów.
Byłbym bardzo wdzięczny za pomoc.
Mam następujący problem. Zakupiłem robota z zamontowaną płytką: http://www.mobot.pl/download/MOBOT-MBv2-AVR_instrukcja.pdf
GPS to FGPMMOPA4, konfiguracja: 9600 bps/8/N/1
Po drobnych modyfikacjach zamontowany jest tam kwarc 7,3728 Mhz. Procesor to Atmega128L (początkowo był Atmega128A z kwarcem 16Mhz). Podłączyłem do RX0 wyjście TX GPS FGPMMOPA4.
Jako że GPS zasilany jest 3,3V a Atmega 5v to napięcie 3,3v uzyskuje za pomocą dwóch diód prostowniczych 1N4007. RX0 nie podłączyłem bezpośrednio do TX ale podłączyłem to w sposób pokazany na obrazku :
Powyższe podłączenie znalazłem na tym forum. Jest i działa dla Atmegi16A - porównywałem charakterystyki Atmegi16A i Atmegi128L i chyba ten układ powinien działać poprawnie również w tym przypadku.
Z jakiegoś powodu wartości wyświetlone na LCD to praktycznie same jakieś krzaki. Dodam że GPS przetestowałem na płytce stykowej używając tego samego podłączenia RX0 do TX, Atmegi16A i kwarcu 16Mhz. Tutaj prawidłowe wartości są odczytywane i wyświetlone. Oczywiście w robocie dostosowalem UBRR do kwarcu 7,3728 Mhz.
Fragment kodu:
Kod: C / C++
W Configuration Options też ustawiłem taktownie 7372800. Używam Avr Studio 4, programatora USBasp i aplikacji SinaProg.
Oczywiście testowałem już wiele możliwości. Starałem się zapisywać znaki do bufora, próbowałem rożne kombinacje UBRR, uruchamiałem opcje U2X – nic nie pomaga. Dla Atmegi16A to wszystko działa. Z tego co wiem to jedyna różnica w UART pomiędzy Atmega16 i Atmega128 to bit URSEL ale w Atmedze128 i tak nie można się do niego dostać, więc tu nie powinno być problemu.
Czy moje problemy mogą być spowodowane tym że Atmega128L korzysta z lini RX0 i TX0 podczas programowania ISP (jakieś zakłócenia, coś?)?
Ogólnie z tego co wyczytałem to tego typu problemy występują dla złej konfiguracji UART. Niestety wydaje mi się że inicjalizuje UART prawidłowo. Na pewno korzystam z kwarcu zewnętrznego: 7,3728 a fusebity to: lowfuse: FF, highfuse: C9, ext. bits:FF.
Czy mogą być jakieś inne powody dla ktorych UART0 może nie odbierać prawidłowych znaków? Nie mogę niestety skorzystać z UART1 (żeby oddzielić SPI od UART)
Być może jest jakiś problem w schemacie (jest w dokumencie który umieściłem na samym początku) albo w tym układziku łączącym RX0 z TX Gpsa?
Czy jest opcja że gdyby zmienić procesor na Atmega128A to zaczęłoby działać tak samo jak dla Atmegi16A? Między Atmega128L a 128A są jakieś minimalne różnice.
Wydaje mi się ze to mimo wszystki kwestia konfiguracji UART0, ale nie wiem co miałoby być źle
Od dłuższego czasu męczę się z tym i wiem że pewnie część z tych pytań jest bez sensu ale już nie mam pomysłów.
Byłbym bardzo wdzięczny za pomoc.