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

[Atmega8 + Bascom+VB] Atmega8 + Bascom + VB: Jak rozwiązać problem z odbiorem danych RS-232?

Fiercio 30 Gru 2005 00:55 2665 7
REKLAMA
  • #1 2129018
    Fiercio
    Poziom 15  
    Posty: 136
    Pomógł: 5
    Ocena: 47
    Mam mały problem:

    Napisałem program w Bascomie, który odbiera rozkazy przez RS-232 i odpowiada na nie.
    W HyperTerminalu wszystko jest OK.

    W VisualStudio 2005 (Visual Basic) napisalem miniprog który ma po kliknięciu na przycisk wysyłać dane do rs232 (Serialport.WriteLine) a po chwili odbierać odpowiedź przez (Serialport.ReadLine).
    I niestety po kliknięciu na przycisk wysyła dane poprawnie (procek sygnalizuje poprawność danych) natomiast nie odbiera odpowiedzi i wywala się na TimeOucie.

    Co zrobić, aby było wszystko OK?
  • REKLAMA
  • REKLAMA
  • #3 2135230
    Fiercio
    Poziom 15  
    Posty: 136
    Pomógł: 5
    Ocena: 47
    Nie pomaga :/
    TimeOut mam ustawiony na -1 -> czyli brak...
    I program się zawiesza. Pomaga tylko zatrzymanie procesu przez menedżer zadań.
  • #4 2135234
    zerpo
    Poziom 22  
    Posty: 463
    Pomógł: 50
    Ocena: 134
    Sproboj zrobic tak, żeby procesor po odebraniu danych czekał na określony znak (przyslany z komputera przez RS), po jego odebraniu niech natychmiast odsyla dane, w prog. na PC trzeba oczywiscie odbierać dane zaraz po wyslanie tego znaku inicjującego odbiór...
    Upewnij się też, czy nie masz zapełnonenego bufora nadawczego w uC.
  • REKLAMA
  • #5 2136017
    Fiercio
    Poziom 15  
    Posty: 136
    Pomógł: 5
    Ocena: 47
    @zerpo - program w uC to w skrócie
     INPUT a
    PRINT "OK"


    I jeśli wybieramy przez HyperTerm to dziala...
    Natomiast program w VB nie chce dzialac - wywala sie na TimeOucie.
    Próbowałem już różnych trików - jak dodawanie przez proca #13#10 {powrót karetki+ENTER}
    I nadal nic nie dziala...
  • REKLAMA
  • #6 2140062
    PiotrLotnik
    Poziom 15  
    Posty: 207
    Pomógł: 2
    Ocena: 2
    A możesz podesłać mi swój program w VB
  • #7 2258812
    Fiercio
    Poziom 15  
    Posty: 136
    Pomógł: 5
    Ocena: 47
    Niestety, problem nie został jeszcze rozwiązany.
    Ma ktoś jakiś inny pomysł?
  • #8 2259402
    szymtro
    Poziom 30  
    Posty: 1421
    Pomógł: 101
    Ocena: 59
    czy to writeline nie wysyła czasami kilku znaków (cr lf na końcu)? moze wtedy proces głupieje jak uC odpowiada nie wiadomo ile razy.

    Narazie nie widziałem vb2005 ale vb6 jak sie wstawi mscomm (taką kontrolkę) i używa przerwań to działa. Nawet jak używam dość długich ramek.

    Moze spróbuj jakies inne: putchar czy cos w tym stylu. A i wyłacz bufor wejściowy (znaczy ustaw na jeden znak)

Podsumowanie tematu

✨ Problem dotyczy komunikacji RS-232 między mikrokontrolerem Atmega8 programowanym w Bascom a aplikacją napisaną w Visual Basic (Visual Studio 2005). Program w Bascom poprawnie odbiera i odpowiada na komendy wysyłane przez HyperTerminal, natomiast aplikacja VB wysyła dane (SerialPort.WriteLine) poprawnie, lecz nie odbiera odpowiedzi, co skutkuje błędem TimeOut podczas wywołania SerialPort.ReadLine. Ustawienie timeoutu na -1 (brak limitu) powoduje zawieszenie programu. Proponowane rozwiązania obejmują zwiększenie timeoutu, synchronizację transmisji poprzez wysyłanie znaku inicjującego odbiór i oczekiwanie na niego w mikrokontrolerze, sprawdzenie bufora nadawczego w uC, a także modyfikację sposobu wysyłania danych w VB (np. unikanie automatycznego dodawania znaków CR+LF przez WriteLine). Sugerowano także użycie innych metod transmisji, np. wysyłanie pojedynczych znaków (putchar) oraz wyłączenie bufora wejściowego w aplikacji PC. Problem pozostaje nierozwiązany, brak skutecznej komunikacji dwukierunkowej między VB a Atmega8 mimo poprawnego działania z HyperTerminalem.
Wygenerowane przez model językowy.
REKLAMA