Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Ładowanie parametrów programu przez port szeregowy.

encore 10 Sie 2005 14:47 1629 13
  • #1 10 Sie 2005 14:47
    encore
    Poziom 17  

    Potrzebuje napisać program, który bedzie pozwalał na ustawianie parametrów z jakimi będzie działał mikrokontroler. Powinno to być zrealizowane przez port szeregowy. Do tej pory ograniczałem się do przesyłania jednej danej i problemu nie było. Teraz kiedy mam powiedzmy określać 30 parametów program zastanawiam się jak to napisać.
    Przesłać adres albo nazwę zmiennej a potem jej wartość?

    Mam w głowie mętlik jak sprawnie napisać program to modyfikacji zestawu zmiennych. Macie jakieś sprawdzone metody.

    Dobrym przykładem tego o co mi chodzi jest program do obsługi centralek gazowych w samochodach.

    0 13
  • #2 10 Sie 2005 20:55
    Robot_
    Poziom 18  

    Witam,
    Najprościej będzie chyba wysłanie wszystkich parametrów na raz.
    Procek w pętli będzie zliczał ilość otrzymanych danych i po odebraniu określonej liczby parametrów wejdzie w program główny. Dodatkowo potrzebny będzie jakiś timeout aby program się nie zapętlił.
    Można oczywiście wprowadzić dodatkowy protokół typu
    |komenda|dana|, ale przy takiej ilości danych można przesłać wszystko na raz za długo to nie potrwa.
    Pozdrawiam

    0
  • #3 10 Sie 2005 21:43
    elektryk
    Poziom 42  

    Musisz zrobić jakaś transmisje pakietową (w pakiecie informacja o operacji, adresie, danych i może jakaś suma kontrolna), jako przykład zobacz modbus.

    0
  • #4 10 Sie 2005 23:01
    kult
    Poziom 16  

    A nie mozesz poprostu podpiac do procesora jakas mala pamiec eeprom np 24c02 i wpisywac do poszczegolnych komorek wartosci? Mikroprocesor przy starcie ladowalby dane z tej pamieci.
    Pozdr.

    0
  • #5 10 Sie 2005 23:16
    marmur99
    Poziom 17  

    elektryk napisał:
    Musisz zrobić jakaś transmisje pakietową (w pakiecie informacja o operacji, adresie, danych i może jakaś suma kontrolna), jako przykład zobacz modbus.


    Po to by przesłać 30 bajtów? I to w dodatku jednorazowo na każde uruchomienie urządzenia?
    Przerost formy nad treścią! Wystarczy je wysłać kolejno jedną po drugiej. Takie przekombinowanie sprawi, że pobranie parametrów do programu stanie się jego podstawowym zadaniem.
    Trzeba iść raczej w stronę uproszczenia a nie zagmatwania.

    Marmur99

    0
  • #6 11 Sie 2005 00:05
    ACULA
    Poziom 34  

    Ja zrobiłbym bufor. Każdy kolejny bajt leci do bufora a po przepełnieniu jest przeładowywana pamięć lub inne działanie.
    Trzeba też zrobić jakąś weryfikację.
    Najlepiej dodatkowo dwa rozpoznawane bajty-zeruj bufor i przepisz dane.
    W ten sposób można powolutku ładować dane i przeładować jedną komendą.

    Dodatkowe pytanie-czy można zmieniać pojedyncze parametry czy wszystkie na raz. Przy 30 parametrach na raz przydało by sie je wczytywać do kompa, i co w związku z tym jest problem w drugą stronę ;)

    A jeśli pojedyńczo to juz masz zrobione ;)

    PS Przy 30 zmiennych trzeba wysłać troszkę więcej niż 30 bajtów ;)

    0
  • #7 12 Sie 2005 01:06
    encore
    Poziom 17  

    Z pewnością lepiej by było żeby były transmitowane tylko te parametry które zostały zmienione. Będzie szybciej i mniej pracy dla procka, w końcu transmisja to zadanie poboczne, więcej czasu i mocy ma przeznaczyć na obliczenia.

    0
  • #8 12 Sie 2005 01:24
    dzik84
    Poziom 17  

    Jak chcesz przesłać wszystkie parametry na raz to wysyłaj je pokoleji i wpisuj do kolejnych zmiennych albo komórek tablicy.
    Jak chcesz wysyłać pojedyńcze dane to zrób prosty protokół
    najpierw wyślij bajt z nr komendy a potem dane

    0
  • #9 12 Sie 2005 10:16
    ACULA
    Poziom 34  

    Sam sobie odpowiedziałeś na swoje pytanie w pierwszym poście. Zastanów się jak chcesz zabezpieczyć dane. Czy już nad tym myślałeś??

    0
  • #10 19 Sie 2005 00:03
    euromatic
    Poziom 21  

    Współpraca procesora z kompem jest bardzo prosta.
    Nie będzie jednak z niej pożytku jeżeli nie wstawisz jej w program główny tak , aby nie kolidowała z resztą programu.
    To twój program musi być przez ciebie tak "wymyślony i ułożony" żeby to działało.
    Pozostanie ci wtedy tylko wybór optymalnej metody na przesłanie danych do procka.
    Możesz trzymać się różnych standartów, jak i możesz zrobić to po swojemu, obie drogi są dobre, jeżeli są skuteczne.

    Na początek zlutuj sobie układ z LCD i baw się podglądając to co odbierze procek z kompa. zjeżeli odbierałeś jeden znak to nie widzę problemu abyś odebrał kilka czy kilkanaście. są na to różne sposoby.
    Pozdrawiam

    0
  • #11 19 Sie 2005 13:16
    cyberdar
    Poziom 31  

    Witam

    Komunikacja procesora i komputera w zasadzie jest stosunkowo prosta od strony programowej jak i sprzętowej. Do sprzętowej potrzebny Ci jest jedynie MAX232 lub dwa tranzystory z rezystorkami żeby dopasowac poziomy logiczne.
    Od strony programowej też nie ma wielkiego kłopotu. Należy zadeklarowac odpowiedni bufor i z niego odczytywac. Rozmiar bufora zależny jest od tego jak będą "szły" dane. Jeśli będzie to zawsze 30 bajtów danych to dobrze byłoby umiejscawiac początek lub koniec porcji danych dodając do całej transmisji np. jakiś znacznik w postaci litery p jako początek. Bufor powinien miec wtedy rozmiar minimum 31 bajtów.
    Program, bez znaczenia gdzie (program główny, przerwanie), powinien odczytywac dane z zadeklarowanego bufora. Te powinny byc albo natychmiast obrabiane ale np. umieszczane w tablicy. Trzeba zwrócic uwagę na fakt, że jeśli dane z bufora nie zostaną wykorzystane a przyjdzie nowa porcja danych to te dane przepadną. W związku z tym wskazane jest zadeklarowac większy bufor. W przypadku gdy dane nie będą wysyłane w porcjach 30 bajtowych a np. tylko jakieś wartości wybiórcze to właściwie należałoby z każdą wartością wysyłac znacznik. Skutkuje to tym, że skrajnego przypadku 30 bajtów danych należałoby zadeklarowac 60 bajtowy bufor.
    Fakt, że dane nie będą przychodziły w jakiś cykliczny sposób w 30 bajtowych porcjach pozwala na zredukowanie wielkości bufora do np. 20 bajtów ale konieczna stanie się wtedy obsługa RSa w przerwaniu (żeby coś się nie zgubiło).

    0
  • #12 20 Sie 2005 20:04
    encore
    Poziom 17  

    ACULA napisał:
    Zastanów się jak chcesz zabezpieczyć dane. Czy już nad tym myślałeś??


    Co rozumiesz pod pojęciem zabezpieczenie danych?

    0
  • #13 20 Sie 2005 20:10
    ACULA
    Poziom 34  

    z tego co pamiętam nie dopisałeś do czego to.
    Jeśli np jest to jakiś sterownik czy coś to ważne jest aby dne przesłane do procesora były danymi przesłanymi.
    Najprościej wysłać-odczytać, jeśli są te same to oki, jeśli nie to wysłać jeszcze raz
    Lub jakieć crc i inengo typu zabezpieczenia, odradzam parzystość ;)

    0
  • #14 30 Sie 2005 16:23
    Jdsoul
    Poziom 23  

    Mam wrażenie, że lepiej byłoby skonstruować coś w rodzaju pakietu np.

    znak startu transmisji :) (#01), adres lub nazwa komórki, dana do komórki pamięci , suma kontrolna CRC pakietu, znak zakończenia transmisji (#13)

    W ten sposób jednocześnie zabezpieczysz poprawność przesyłania danych.
    Nie musisz wtedy alokować kolejnych komórek pamięci, wystarczy kilka
    #def w C w procku w kodzie lub equ w assemblerze.

    CRC sprawdzi poprawność pakietu przy odbiorze.
    Więc raczej nie nabałaganisz w ustawieniach w procku.

    I chajda ...!!!

    Na takim prostym protokole opartych jest kilka Gateway ASCII profesjonalnych systemów takich jak EIB, DMX-512 itd.

    0
  Szukaj w 5mln produktów