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

[AtMega16][BASCOM]Odczyt danych z RS232 i wyświetlenie LCD

06 Sie 2008 23:08 5255 12
  • #1 5415673
    Konto nie istnieje
    Konto nie istnieje  
  • #2 5423413
    Stepel
    Poziom 20  
    moze powinieneś skorzystać z instrukcji inkey() , zobacz w helpie jej zastosowanie.
  • #3 5423788
    Konto nie istnieje
    Konto nie istnieje  
  • #4 5423955
    ZbeeGin
    Poziom 39  
    Tam nic nie ma o znakach CR/LF które to zakończą INPUT. Jeśli liczba bajtów jest stała (7 bajtów) skorzystaj z INPUTBIN.
  • #5 5424192
    Konto nie istnieje
    Konto nie istnieje  
  • #6 5424572
    dawid512
    Poziom 32  
    Próbuj z innym baudem. Widocznie jest zła prędkość transmisji.
  • #7 5424603
    Konto nie istnieje
    Konto nie istnieje  
  • #8 5425481
    ZbeeGin
    Poziom 39  
    Mictronic napisał:
    Ok zastosowałem instrukcje PRINTBIN,ale co dalej ?Co należy zrobić żeby zamienić to na jakieś strawne dane?:

    Co masz na myśli pisząc "strawne dane"? Przecież układ RFID wysyła nie ciąg znaków ASCII tylko bajty. A jak widać na zdjęciu karta się przedstawia zawsze tak samo - komunikacja jest poprawna.
  • Pomocny post
    #9 5425784
    JmL(TM)
    Poziom 24  
    :arrow: Mictronic: Predkosc transmisji to 9600!

    Ponizej wklejam wycinki mojego programu do obslugi tego modulu:

    '-------------------------------
    ' modul RFiD
    '
    ' 9600.1.0
    ' dane 0xff,x,x,x,x,x,crc8
    '-------------------------------
    
    {...}
    
    $baud = 9600                                                ' predkosc transmisji
    Config Serialin = Buffered , Size = 100                     ' rozmiar bufora
    
    {...}
    
    Dim Uart_buffer As Byte
    
    Dim I As Byte , Crc As Byte
    Dim Card_id(8) As Byte
    
    Declare Sub Uart_clear_buffer()
    
    {...}
    
    Enable Interrupts                                           ' wlacz globalne przerwania
    
       Do
          Card_id(i) = Inkey()
          Uart_buffer = Ischarwaiting()
    
          Incr I                                                ' zwieksz "I" o 1
    
          If I > 7 Then
             Crc = Crc8(card_id(2) , 5)                         ' oblicz check-sume CRC8
    
             If Card_id(1) = &HFF And Crc = Card_id(7) Then     ' jesli pierwszy bajt = 0xff i CRC8 = OK
                Locate 1 , 1                                    ' pozycja 1,1 na LCD
                'Lcd " ID: "
    
                'For I = 2 To 6
                '   Lcd Hex(card_id(i))                          ' wyswietl ID karty na LCD
                'Next I
    
                {...}
    
                Waitms 1500                                  ' czekaj 1,5s
             End If
    
          End If
       Loop Until Uart_buffer = 0
    
    Call Uart_clear_buffer()                     ' czysc bufor UART'a
    
    {...}
    
    Sub Uart_clear_buffer()
       Do
          Card_id(1) = Inkey()
          Uart_buffer = Ischarwaiting()
       Loop Until Uart_buffer = 0
    
       Uart_buffer = 0
       Waitms 100
    End Sub


    Mam nadzieje, ze to rozwiaze twoj problem... :D
  • #10 5526887
    suchy_p
    Poziom 11  
    Witam!!!

    Miałem identyczny problem. Czytniki działały ale nie wysyłały danych w standardzie opisanym w dokumentacji. I wyglądało to tak jak by działały na innej prędkości. Odesłałem je do sprzedawcy i po przeprogramowaniu chodzą jak trzeba. Prawdopodobnie jakaś felerna partia. Proponuję odesłać sprzedawcy do sprawdzenia. U mnie pomogło. Powodzenia!!!
  • #11 5527002
    Konto nie istnieje
    Konto nie istnieje  
  • #12 14813225
    tknefel - GORKY
    Poziom 14  
    Witam
    Chciałbym odnowić temat ze zbliżonym problemem.
    O tuż mam Atmegę32 oraz czujnik z RS232 BAUD 38400. Na chwilę obecną próby przeprowadzane są na PC.
    Aby dokonać pojedynczego pomiaru wysyłam następującą komendę do czujnika /020D0059. po czym czujnik odpowiada np:

    /0B0D00+020000um18.
    /0B0D00+020001um19.
    /0B0D00+019999um1B.
    /0B0D00+020002um1A.
    /0B0D00+020003um1B.

    gdzie 020003um jest wynikiem pomiaru i wynosi 20003 mikrometra.
    Pytanie brzmi: W jaki sposób w BASCOM z tej odpowiedzi "wyłuskać" sam wynik w postaci zmiennej np WORD?
    Potem chce sam wynik wyświetlić na LCD np 20x4 i dokonać średniej arytmetycznej np z 10 pomiarów.
  • #13 14813620
    namok
    Poziom 25  
    Za pomocą funkcji Mid wycinasz znaki a za pomocą funkcji Val zamieniasz na wartość.
REKLAMA