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.
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".
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.
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++
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".
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++
