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.

[Bascom] Przesyłanie zmiennych po RSie między dwoma uP.

mdcs 30 Lip 2008 01:00 1877 8
  • #1 30 Lip 2008 01:00
    mdcs
    VIP Zasłużony dla elektroda

    Witam...
    Przyznaję na wstępie - mam zaćmienie umysłu (nowa dziewczyna) i morduję się cały wieczór z pewnym problemem. Zapewne jedna podpowiedź, któregoś z doświadczonych "kontrolerowców" rozwiąże mój problem.

    Nadaję do magistrali RS487 ciąg zmiennych typu Byte następującym algorytmem:

    Code:
    Config Portd.2 = Output
    
    Config Serialin = Buffered , Size = 15

    Kierunek Alias Portd.2
    Dim Dane1 As Byte , Dane2 As Byte , Dane3 As Byte
    Enable Interrupts

    Set Kierunek
    Cursor Off
    Dane1 = 1
    Dane2 = 136
    Dane3 = 3
    Lcd Dane1 ; "," ; Dane2 ; "," ; Dane3
    Do
    Printbin Dane1 ; Dane2 ; Dane3
    Wait 4
    Loop


    Jak to po drugiej stronie (na drugiej Atmedze z MAXem487) odebrać, żeby pod zmiennymi Dane1, Dane2 i Dane3 (również typu Byte) mieć przesłane wartości?
    Jak zczytuję jako String, jest ok...ale inaczej nie idzie.
    Próbuję takim kodem:

    Code:
    Config Pind.2 = Output
    
    Config Serialin = Buffered , Size = 15

    Dim Dane1 As Byte , Dane2 As Byte , Dane3 As Byte

    Kierunek Alias Portd.2

    Enable Interrupts

    Cls
    Reset Kierunek
    Do
    Inputbin Dane1 , Dane2 , Dane3
    Lcd Dane1 , Dane2 , Dane 3
    Wait 2
    Loop

    Próbuję takim

    0 8
  • #2 30 Lip 2008 07:59
    n01x
    Poziom 12  

    Czemu w nadajniku komfigurujesz bufor wejsciowy?
    Po co wogole to konfigurujesz?

    0
  • #3 30 Lip 2008 22:53
    ZbeeGin
    Poziom 38  

    n01x napisał:
    Czemu w nadajniku komfigurujesz bufor wejsciowy?
    Po co wogole to konfigurujesz?

    Kolega mógł po prostu się pomylić, i zamiast CONFIG SERIALOUT napisał CONFIG SERIALIN. Przy wolnych prędkościach transmisji lub przy wolnym zegarze kontrolera tak jest nieco lepiej.

    0
  • #4 31 Lip 2008 12:07
    Freddy
    Poziom 43  

    ZbeeGin napisał:
    n01x napisał:
    Czemu w nadajniku komfigurujesz bufor wejsciowy?
    Po co wogole to konfigurujesz?

    Kolega mógł po prostu się pomylić, i zamiast CONFIG SERIALOUT napisał CONFIG SERIALIN. Przy wolnych prędkościach transmisji lub przy wolnym zegarze kontrolera tak jest nieco lepiej.

    Kolega napisał prezecież:mam zaćmienie umysłu (nowa dziewczyna)
    Zamiast się zająć nową dziewczyną, zajmuje się ATMegą :D

    Zwróć uwagę, że w programie wysyłającym masz wait 4, a w odbierającym Wait 2. Tutaj może byc problem.

    0
  • #5 01 Sie 2008 15:47
    mdcs
    VIP Zasłużony dla elektroda

    wait 2 i wait 4 to nie problem... czytnik odczytuje przesłane do bufora dane po prostu dwa razy częściej jak nadaje je nadajnik
    Szanowni Koledzy - ja nie mam problemu z transmisją, czy błędami. Przeczytajcie uważnie to o czym piszę. Dane dochodzą, ale nie wiem jak je pozapisywać z powrotem w zmiennych Dane1, Dane2 i Dane3. Jeśli wyświetlę na LCD odbiornika to co dotarło instrukcją INPUT Dane (gdzie Dane to zmienna typu string) otrzymam poprawny wynik , czyli 11363... ale jak próbuję wrzucić te dane pod zmienne Dane1, Dane2, Dane3 instrukcją 'Printbin Dane1 ; Dane2 ; Dane3' to uzyskuję w nich inen wartości niż wysłane 1 136 i 3.

    0
  • #6 01 Sie 2008 17:35
    zumek
    Poziom 39  

    mdcs napisał:
    ... to uzyskuję w nich inen wartości niż wysłane 1 136 i 3.

    A co dokładnie oznacza "inne wartości" :?:
    Jakie wartości mają zmienne Dana1,... ,itd , w odbiorniku :?:
    Czy zawsze są jednakowe :?:


    Jak w nadajniku masz
    Code:

    Lcd Dane1 ; "," ; Dane2 ; "," ; Dane3
    Do
    Printbin Dane1 ; Dane2 ; Dane3
    '...

    , to w odbiorniku daj
    Code:

    Do
    Inputbin Dane1 , Dane2 , Dane3
    'Lcd Dane1 , Dane2 , Dane 3                   'Co to za dziwna składnia ???????
    Lcd Dane1 ; "," ; Dane2 ; "," ; Dane3
    '...

    i napisz co z tego wyniknęło ;)

    Piotrek

    0
  • Pomocny post
    #7 03 Sie 2008 13:07
    Stepel
    Poziom 20  

    czy nie potrzebna jest tutaj instrukcja INKEY() ?

    swojego czasu zrobiłem taki układ , że dwa procki atmega8535 przesyłały między sobą zmienną. program zajął dosłownie 3,4 linijki w odbiorczym użyłem instrukcji inkey() tzn , jeżeli było coś w buforze(różne od 0 ) to wyświetlało daną. oczywiście czasy w realizacji pętli były takie same oraz kwarce również ( 11,0592 MHz). Wysyłanie oczywiście za pomocą print a odbiór input. Nie wiem czy ma znaczenie, że to było przy RS232.

    0
  • #8 03 Sie 2008 15:40
    Freddy
    Poziom 43  

    Fakt mdcs mnie też troszkę przymuliło, ale nauczony przykrym, choć skąpym doświadczeniem wolę się czepiać do wszystkiego.

    Podam prosty, choć szokujący przykład.

    Code:

    b=10 : a=a/3 : waitus25


    to wcale nie jest to samo co
    Code:

    b=10
    a=a/3 
    waitus25

    0
  • #9 05 Sie 2008 19:18
    mdcs
    VIP Zasłużony dla elektroda

    Dzięki Koledzy...problem rozkminiony. Napisanie nowej procedurki z trzema inkeyami podstawiającymi pod kolejne zmienne poszczególne znaki z bufora rozwiązało problem.

    0