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

Analog Devices, ADuC 842 - kłopot z odebraniem ramki Modbus przez UART

bart_90 16 Lut 2014 19:54 3129 1
  • #1 13310700
    bart_90
    Poziom 9  
    Witam wszystkich forumowiczów.
    Jest to mój pierwszy post dlatego też bardzo proszę o dużo wyrozumiałości.

    Mam do wykonania pracę inżynierską polegającą na zaprojektowaniu, wykonaniu i uruchomieniu węzła SLAVE sieci przemysłowej PROFIBUS DP. Węzeł ten zbudowany jest w oparciu o układ AB6000 firmy HMS oraz mikrokontroler ADuC842 (dokładnie to płytkę evaluacyjną na bazie tego mikrokontrolera). Węzeł powinien udostępniać dane pobierane z kanału SCI (asynchroniczny, pracujący z protokołem MODBUS RTU) oraz z kanału SSC (synchroniczny przewidziany do obsługi).
    Do kanału SSC podłączone zostały rejestry przesuwne wejściowe oraz wyjściowe, natomiast kanał SCI posiada dwie możliwości łączenia, pierwszy przy użyciu kostki MAX 232, który łączy się z PCtem (programowanie w turboC) lub po przełożeniu zworek bezpośrednio z ADuC842 przez UART i na tym właśnie chciałbym się skupić, ponieważ program utworzony w turbo C poprawnie wyświetla wartości leczy nie jest tam wykorzystywany układ przerwań poprzez transmisję szeregową.
    Problem polega na tym że nie mogę odebrać ramki danych z wartością podawaną na switchach połączonych z wejściowymi rejestrami przesuwnymi. Układ przerwań, jak sądzę został skonfigurowany poprawnie, przynajmniej w części, ponieważ napisałem prosty program wysyłający ramkę danych przy pomocy buttona do sterowania wyjściowych rejestrów przesuwnych i diod na ich końcówkach i działa poprawnie. Nie mogę natomiat wysłać ramki zczytującej wartości przy uaktywnieniu kolejnego buttona, które chciałbym wyświetlić na wyświetlaczu LCD.
    Poniżej przedstawiam schemat układu oraz kod programu.

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


    Komenda, która pojawiła się pod koniec "show" odnosi się do wyświetlenia wartości na wyświetlaczu LED, nie chce wciskać kolejnych lini kodu odnośnie wyświetlacza. Wystarczy że wbudowane zostały dwie diody diagnostyczne, które pokazują odebranie i wysłanie spowrotem do ADuC842 ramki z odpowiedzią. Pierwsza z nich przy naciśnięciu buttona zapala się co świadczy o tym, że ramka została wysłana z ADuC842, a odebrana przez AB6000, nie zapala się druga mówiąca o wysłaniu z poziomu AB6000 ramki zwrotnej z wartościami podanymi na switchach.
    Wszystkie programy pisane są w Keil µVision3, zrzucane na eval ADuC842 i później dalej w "świat". Analog Devices, ADuC 842 - kłopot z odebraniem ramki Modbus przez UART

    Bardzo proszę również o sprawdzenie czy poprawnie został zdeklarowany oraz napisany układ przerwań UART. Może problem rzeczywiście tkwi w wyświetlaniu wartości na wyświetlaczu LCD, a nie przy odbiorze wamki zwrotnej.

    Bardzo proszę o pomoc i z góry dziękuję za zainteresowanie się moim problemem.
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • #2 13310786
    BlueDraco
    Specjalista - Mikrokontrolery
    Proponuję zacząć od znaczników "Syntax C" i sformatowania kodu tak, żeby dawał się
    czytać oraz wyrzucenia pustych else.
REKLAMA