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

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

06 Sie 2008 23:08 4862 12
  • Użytkownik usunął konto  
  • Poziom 20  
    moze powinieneś skorzystać z instrukcji inkey() , zobacz w helpie jej zastosowanie.
  • Użytkownik usunął konto  
  • 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.
  • Użytkownik usunął konto  
  • Poziom 32  
    Próbuj z innym baudem. Widocznie jest zła prędkość transmisji.
  • Użytkownik usunął konto  
  • 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
    Poziom 24  
    :arrow: Mictronic: Predkosc transmisji to 9600!

    Ponizej wklejam wycinki mojego programu do obslugi tego modulu:

    Code:
    '-------------------------------
    
    ' 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
  • Poziom 1  
    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!!!
  • Użytkownik usunął konto  
  • Poziom 13  
    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.
  • Poziom 25  
    Za pomocą funkcji Mid wycinasz znaki a za pomocą funkcji Val zamieniasz na wartość.