logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

ATMEGA8a, USART - ATMEGA8 i aplikacja w C++. Komunikacja po rs232.

MacFis 13 Cze 2015 14:25 1551 10
REKLAMA
  • #1 14767736
    MacFis
    Poziom 17  
    Witam.
    Od dość długiego czasu zmagam się z projektem ramienia i aplikacji nim sterującej. Cały projekt jest już prawie ukończony, poza komunikacją usart, która przysparza mi olbrzymich problemów. Aplikację napisałem w visualu. W skrócie, po kliknięciu przycisku "wyślij" program wysyła po serial porcie 18 bajtów (6x[bajt kontrolny+wybór serwa+wartość wychylenia w zakresie 0-255]), każdy w odstępach co 100ms w przerwaniach od timera.
    Np:
    17 X 128
    17 Y 255
    17 D 10
    ....... itp.

    Aplikacja została sprawdzona poprzez program, który emuluje mi na komputerze dwa porty Com i terminal do jednego z nich. Odebrane dane zgadzają się z wysyłanymi.

    Posiadam dwa konwertery usb-RS232.
    Pierwszy z nich ma z jednej strony wtyczkę usb, z drugiej DE-9.
    Dane są wysyłane, mruga dioda podłączona do TX.
    Drugi kupiony na znanym portalu aukcyjnym to "USB TO TLL, D-SUN".
    Na wyjściu na TX ma ciągle 3,5V.

    Po podłączeniu jednego konwertera z drugim i wysłaniu danych w terminalu pojawiają się bajty o innych wartościach niż te wysłane.


    Sterownik ramienia jest na ATMEGA8A. Jest on taktowany zewnętrznym oscylatorem 16MHz. Do sprawdzania odebranych danych korzystam z wyświetlacza LCD 2x16(wyświetla prawidłowo tekst z pamięci uC).
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Na całej długości wyświetlacza pojawiają się różne krzaczki i znaki ASCII.
    Układ zbudowany na płytce stykowej. Reset podciągnięty do Vcc przez 4,7k. Kondensatory przy GND i Vcc mikrokontrolera. Fusebity ustawione prawidłowo.


    Kawałek kodu wysyłania bajtów z visuala:
    Kod: Objective-C
    Zaloguj się, aby zobaczyć kod


    Bardzo prosiłbym o pomoc w rozwiązaniu tego problemu i wyrozumiałóść.
    Dziękuję i pozdrawiam,
    MacFis.
  • REKLAMA
  • REKLAMA
  • #4 14768090
    dondu
    Moderator na urlopie...
    Pokaż funkcję LCD_WriteText(), bo sądzić można, że jako parametr zawiera wskaźnik na tekst i nie służy do wyświetlania liczby 8-bit.

    Jeśli jest tak jak napisałem, to musisz najpierw przekonwertować liczbę na ciąg znaków ASCII i zapisać w buforze (tablicy) i dopiero funkcji LCD_WriteText() wskazać jej początek.

    Przykłady: http://mikrokontrolery.blogspot.com/2011/03/adc-prezentacja-wyniku-na-lcd.html
    znajdziesz tam użycie itoa() oraz sprintf() do konwersji liczb.
  • #5 14768253
    MacFis
    Poziom 17  
    Funkcja LCD_WriteText:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    Funkcja LCD_WriteData:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Po skorzystaniu z funkcji WriteData LCD wyświetla niepoprawne dane. Dla 17 jest to dwukropek
  • #6 14768342
    namok
    Poziom 25  
    Jeśli masz "zwykły" konwerter usb-rs232 i usb-rs232-ttl to nie łącz ich ze sobą bo słabszy może tego nie wytrzymać(inne poziomy napięć).
  • REKLAMA
  • #8 14768447
    dondu
    Moderator na urlopie...
    Rozumiem, że na razie Twoim problemem jest wyświetlenie czegokolwiek na wyświetlaczu. Odłącz więc RS i doprowadź do sytuacji, w której będą prawidłowo wyświetlane napisy i liczby. Możesz to zrobić na przykładzie z linku, który podałem - tam także są wykorzystane biblioteki Radosława Kwietnia.

    Dopiero gdy poprawnie będziesz wyświetlał co zechcesz zajmij się RS-em.
  • REKLAMA
  • #9 14768491
    MacFis
    Poziom 17  
    Tekst z pamięci uC jest wyświetlany prawidłowo, umiem wyświetlić teksty i liczby, problem mam z komunikacją i odbieraniem danych. LCD jest użyty tylko aby zweryfikować odbierane informacje i zmusić jakoś to wszystko do działania. Podłączyłem go tylko dlatego aby wyświetlić przychodzące dane i doprowadzić do poprawnej komunikacji.

    Dane odebrane przez usart na wyświetlaczu 1x16:
  • #10 14768637
    dondu
    Moderator na urlopie...
    MacFis napisał:
    Tekst z pamięci uC jest wyświetlany prawidłowo, umiem wyświetlić teksty i liczby,...

    Nie jestem tego taki pewien, skoro chciałeś wyświetlać odebrany bajt w nieprawidłowy sposób.
    W dodatku nieprawidłowo definiowałeś F_CPU, co całkowicie rozwalało obsługę LCD.

    Wysyłałeś dane terminalem?

    Tutaj znajdziesz kolejny przykład: http://mikrokontrolery.blogspot.com/2011/03/rs-232-atmega8-komputer-terminal.html
    Masz tam gotowca - podłącz RS włącz Realterm i sprawdź swoje konwertery.

    Zwróć uwagę na ostatni punkt w artykule.
REKLAMA