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

Bascom instrukcja serin serout

sstaniszewski 12 Lip 2009 12:47 2941 10
REKLAMA
  • #1 6768842
    sstaniszewski
    Poziom 15  
    chcę nawiązać komunikację z urządzeniem które wysyła i odbiera dane na jednej linii protokół standardowy jak w rs232 użyłem poleceń SERIN i SEROUT w bascomie ale po wysłaniu ramki odbiera jakieś śmieci podkreślam że transmisja podsłuchiwana była w terminalu i urzadzenie odpowiada poprawnie , ale procesor odbiera śmieci .Czy trzeba stosować jakiś bufor czy poprostu bascom nie wyrabia się z przełączniem kierunku pinu.
    Rezonator mam 110592 Mhz a więc transmisja bezbłędna
  • REKLAMA
  • #2 6768911
    Konto nie istnieje
    Poziom 1  
  • #3 6769064
    Konto nie istnieje
    Poziom 1  
  • REKLAMA
  • #4 6769286
    ZbeeGin
    Poziom 39  
    atom1477 napisał:
    A przełączasz kierunek portu? SerIn samo nie przełącza portu na wejście. Chyba.

    Procedura _SERIN sama przełącza tryb pracy portu. Jednak nie ustawia na nim podciągnięcia.

    [_SERIN]
    ; universal serial input software UART
    ;reg of DDR in Z
    ;pin (0-7) in r24
    ;address of data in X
    ;T is set for inverted output
    ;Y pointer points to the serial params
    ;___SER_BAUD is set to the proper bit delay
    _serin:
      rcall _adjust_pin                                     ; adjust pin so we can use sbr
      ld r0, z                                              ; get DDR
      and r0,r25                                            ; make input pin
      st z,r0                                               ; store
      inc r30                                               ; point to port
      ld r0,z
      and r0,r25
      st z,r0                                               ; make 0
    

    Tak samo wygląda prolog _SEROUT, tylko, że zamiast AND R0, R25 jest OR R0, R25.
  • REKLAMA
  • #5 6769777
    sstaniszewski
    Poziom 15  
    Linia jest podciągnięta do plusa już w urządzeniu
      
    Serout Nag(1)5 , 5 , C , 0 , 9600 , 1 , 8 , 2    'wysyła nagłówek  
    Serin Ans(1) , 1 , C , 0 , 9600 , 1 , 8 , 2        ' odbiera bajt potwierdzenia 
    If Ans(1) = &HA2 Then                                
    Serout rozkaz(1)10 , 10 , C , 0 , 9600 , 1 , 8 , 2  ' wysyła rozkaz
     Else
    End If
    

    niestety przy odbiorze potwierdzenia jest inna wartość bajtów a to jest ważne dla programu który chcę napisać

    Część postu usunąłem.
    [zumek]
  • REKLAMA
  • #6 6770349
    ZbeeGin
    Poziom 39  
    sstaniszewski napisał:
    Linia jest podciągnięta do plusa już w urządzeniu
      
    Serout Nag(1)5 , 5 , C , 0 , 9600 , 1 , 8 , 2    'wysyła nagłówek  
    Serin Ans(1) , 1 , C , 0 , 9600 , 1 , 8 , 2        ' odbiera bajt potwierdzenia 
    If Ans(1) = &HA2 Then                                
    Serout rozkaz(1)10 , 10 , C , 0 , 9600 , 1 , 8 , 2  ' wysyła rozkaz
     Else
    End If
    

    niestety przy odbiorze potwierdzenia jest inna wartość bajtów a to jest ważne dla programu który chcę napisać

    A kto Tobie takie głupoty kazał napisać jak: rozkaz(1)10, Nag(1)5? Co to w ogóle ma być? I jeszcze się kolega dziwi, że nie działa...
  • #7 6770626
    sstaniszewski
    Poziom 15  
    rozkaz(1)10, Nag(1)5 to są zmienne tablicowe w których mam rozkazy
  • #8 6770642
    ZbeeGin
    Poziom 39  
    Przed Tobą długie i wnikliwe czytanie pomocy jak definiowane, i jak obsługiwane są tablice w BASCOM.
  • #9 6771523
    sstaniszewski
    Poziom 15  
    Zmienne tablicowe jak najbardzej są zdefiniowane na poczatku programu ,program poprawnie wysyła dane i urzadzenie odpowiada poprawnie(podsłuchiwane na terminalu) ale z kolei do zmiennej ANS trafia inna wartość bajtu niż widziana terminalu ,moim zdaniem to chyba będzie wina szybkość przełacznia kierunku
  • #10 7716805
    Spoonman
    Poziom 11  
    Witam,
    Podpinam się do tematu, ponieważ napotkałem na problemy podczas próby wykorzystania instrukcji Serout.
    Polegają one mianowicie na tym, że na kontrolerach takich jak ATTINY13 czy ATTINY85 nie działa ona wcale, ustawiając jedynie na wyjściu stan niski,
    natomiast na większych procesorach, takich jak ATMEGA8535 czy ATMEGA162 działa prawidłowo, lecz tylko na niektórych pinach. A na niektórych nie podaje podczas wysyłania ciągu stanu wysokiego i niskiego tylko np. 0-3,8V przy zasilaniu 5V.
    Dziwne jest takie zachowanie i nie wiem, co może być jego przyczyną. Czy ktoś mógłby mi pomóc?
  • #11 7719153
    Spoonman
    Poziom 11  
    Po chwili sam znalazłem rozwiązanie swojego problemu, jeżeli kogoś by to jeszcze interesowało.

    Instrukcje Serin i Serout to jest jakaś pomyłka w ogóle.
    Zamiast nich najlepiej jest użyć instrukcji Open "comx.y:Baud,data,parity,stop,[inverted]" For Input|Output As #Handle i wysyłać oraz odbierać dane za pomocą instrukcji Input #Handle oraz Print #Handle dokładnie tak samo jak prz hardware'owym uarcie.
REKLAMA