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.

[Delphi] Komunikacja przez rs232 z AVR Atmega16

treker 04 Sty 2009 10:48 3263 10
  • #1 04 Sty 2009 10:48
    treker
    Poziom 25  

    Witam,
    robię projekt, w którym potrzebuję skomunikować się jednostronnie przez rs232 tzn. chce przesyłać dane od urządzenia do PC'ta i tam je wizualizować.

    Jednak programista w delphi ze mnie mizerny, w sumie moim największym problemem jest to, że nie wiem jak taka komunikacja musi wyglądać, aby była poprawna.

    Z urządzenie chce wysłać kilka wartości liczbowych, a w programie chce je odpowiednio przedstawić na jakiś Trackbar'ach, Progresbarach itd.

    Wiem jak wysłać i dobierać dane (używam komponentu ComPort), nie wiem jak to wszystko ukształtować.

    Nie wiem w jaki sposób wysłać dane z uC (piszę w bascomie) - czy wysłać dane jakoś wszystkie na raz, czy każdą wartość osobno. Bardziej mój problem leży po stronie algorytmu.

    Wiem, że piszę nie jasno nie potrafię tego lepiej opisać.

    Liczę na jakąś pomoc (jeśli ktoś mnie zrozumie) :D

    0 10
  • #2 04 Sty 2009 12:06
    190175
    Użytkownik usunął konto  
  • #3 04 Sty 2009 12:14
    treker
    Poziom 25  

    Czyli np tak:

    start [wartość crc] 625 84 234 83 koniec
    ?

    I coś takie normalnie wysyłać poleceniem Print?

    A jak najlepiej rozwiązać 'blok danych' tzn, jak zaznaczać że skończyła się jedna wartość a zaczyna druga?

    0
  • #4 04 Sty 2009 12:33
    190175
    Użytkownik usunął konto  
  • #5 04 Sty 2009 19:10
    treker
    Poziom 25  

    Trochę po testowałem, ale na razie to totalna prowizorka i nie działa tak jak bym chciał.

    Biorąc pod uwagę, że nie mam pod ręką żadnego avr'ka, którym mógłbym wysyłać próbny sygnał, użyłem mój programator ma on funkcję testową po wysłaniu mu znaku "S" odpowiada on wysyłając przez rs232 "AVR ISP"

    Kluczowa część programu wygląda tak:
    procedure TForm1.ComPort1RxChar(Sender: TObject; Count: Integer);

    Code:
    begin
    
      ComPort1.ReadStr(RevS, Count);//odczytujemy String z Portu
      Memo1.Text :=Memo1.Text +Revs;//Wyswietlamy go w Memo
      If RevS = 'AVR ISP' then // jeśli odebrano AVR ISP to zwiększamy pozycję Trackbara o 100
      TrackBar1.Position:= TrackBar1.Position +100;
    end;


    Wszystko pięknie, ale w rzeczywistości jest słabo. Gdy programator odpowiada i wysyła to całe "AVR ISP" to zmiana trackbara jest, że tak powiem losowa - zmienia się on co dwa lub co 3 a czasami dopiero po 10 "AVR ISP". Czasami jest też tak, że wartość zmienia się o inna liczbę niż to 100.

    Gdy dodatkowo zmienną RevS przypisują sobie do jakiegoś labela, to czasami jest tam wyświetlane AVR ISP, czasami VR ISP - dzieją się jakieś dziwne rzeczy :/

    Dodano po 3 [godziny] 42 [minuty]:

    Dobra zrobiłem prosty układ na M16, i wysyłam nim słowo 'test', program je odbiera ale coś robię źle bo trackbar nie reaguje.

    0
  • #6 04 Sty 2009 19:28
    190175
    Użytkownik usunął konto  
  • #7 04 Sty 2009 19:47
    treker
    Poziom 25  

    Już widzę, że miałem błąd użyłem
    Print "Test"
    zamiast
    Print "Test";

    Ale dalej nie mam pojęcia jak to rozwiązać przy kilku wartościach, Delphi nie znam praktycznie w ogóle, więc nie wiem jak to najlepiej zrobić.

    Problem mam tez taki, że czasami wartość będzie 2 cyfrowa a czasami 3, więc nie mogę ramki którą dostane ciąć sztywno np na kawałki po 3, jak najlepiej oddzielać dane? Używać jakiegoś separatora typu | i potem szukać liczb znajdujących się pomiędzy | | ?

    Naprawdę bardzo by mi pomógł i bardzo bym był wdzięczny za jakiś prosty gotowiec, operujący na dowolnej ramce danych :)

    0
  • #8 04 Sty 2009 20:07
    190175
    Użytkownik usunął konto  
  • #9 04 Sty 2009 20:11
    treker
    Poziom 25  

    oloam napisał:
    dalsze gdybanie nie ma sensu, bo nie wiem co i jak wysylasz z uc...


    Sam jeszcze nie wiem, bo dopiero kształtuje się projekt wiem, że będę przez uC wysyłał 2 wartości PWM (czyli liczby od 0-255), oraz dwie zmienne, które będą miały wartości 1 lub 0.

    PWM chce pokazywać na wyżej wspomnianych TrackBar'ach, a 2 pozostałe zmienne na checkbox'ach.

    0
  • #10 04 Sty 2009 20:20
    190175
    Użytkownik usunął konto  
  • #11 05 Sty 2009 17:57
    treker
    Poziom 25  

    Dobra, dzięki na razie się poddaje.

    Ale dzięki wielkie za rozjaśnienie sprawy :-)

    0