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.

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

06 Sie 2008 23:08 4733 12
  • #1 06 Sie 2008 23:08
    323493
    Użytkownik usunął konto  
  • #2 09 Sie 2008 13:16
    Stepel
    Poziom 20  

    moze powinieneś skorzystać z instrukcji inkey() , zobacz w helpie jej zastosowanie.

    0
  • #3 09 Sie 2008 15:15
    323493
    Użytkownik usunął konto  
  • #4 09 Sie 2008 16:09
    ZbeeGin
    Poziom 38  

    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.

    0
  • #5 09 Sie 2008 17:39
    323493
    Użytkownik usunął konto  
  • #6 09 Sie 2008 20:05
    dawid512
    Poziom 32  

    Próbuj z innym baudem. Widocznie jest zła prędkość transmisji.

    0
  • #7 09 Sie 2008 20:17
    323493
    Użytkownik usunął konto  
  • #8 10 Sie 2008 08:38
    ZbeeGin
    Poziom 38  

    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.

    0
  • Pomocny post
    #9 10 Sie 2008 11:38
    JmL(TM)
    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

    0
  • #10 11 Wrz 2008 21:36
    suchy_p
    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!!!

    0
  • #11 11 Wrz 2008 21:59
    323493
    Użytkownik usunął konto  
  • #12 29 Cze 2015 22:49
    tknefel - GORKY
    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.

    0
  • #13 30 Cze 2015 07:15
    namok
    Poziom 25  

    Za pomocą funkcji Mid wycinasz znaki a za pomocą funkcji Val zamieniasz na wartość.

    1