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

[Atmega8]odebranie ramki ttl

tiggerek1982 04 Sie 2008 00:54 4029 10
REKLAMA
  • #1 5406223
    tiggerek1982
    Poziom 15  
    witam . meczę sie już jakiś czas z odebraniem danych z modułu czytnika RFID. wysyła on ramkę ttl po zbliżeniu karty do czytnika w takiej postaci:

    RS232 TTL (ramka danych 0xff,x,x,x,x,x,crc8 ), x-dane karty

    oczywiście w Bascomie.

    próbowałem już z poleceniami
    Waitkey()
    inkey()
    czy sprawdzaniem bufora Uart Ischarwaiting().
    $baud = 9600
    oczywiście całość na atmega8 z zewnętrznym kwarcem 8Mhz.
    niby odbiera mi tą ramkę ale po małych kawałkach i nie mogę dojść do tego jak odebrać całą ramkę i ja wyświetlić.szukałem jak wykorzystać przerwania bo z tego co gdzieś znalazłem mógłbym wykorzystać znaczniki początku i końca ramki (0xff i crc8) ale nie wiem jak sie za to zabrać. mogę liczyć chociaż na podpowiedz w tym temacie?
  • REKLAMA
  • #2 5406487
    mirekk36
    Poziom 42  
    na początek zobacz sobie jak wygląda ta ramka gdy przychodzi do zwykłego terminala w komputerze PC.

    prawdopodobnie na końcu tej ramki masz jeszcze znaki CRLF

    ale może się okazać że ich nie masz albo masz tylko CR wtedy trzeba przekonfigurować CONFIG INPUT aby reagowało na samo CR na końcu

    a jak nie ma ani CR ani CRLF to trza samemu kombinować właśnie z ischarwaiting i to musi działać

    chyba, że jeszcze może się okazać że masz kwarc zewnętrzny 8MHz ale nie przestawiłeś fusebitów i mega chodzi sobie na fabrycznie ustawionym 1MHz

    Dodano po 40 [sekundy]:

    aha i obejrzyj sobie w Bascomie polecenie CONFIG SERIALIN i skorzystaj z niego :)
  • #3 5410349
    tiggerek1982
    Poziom 15  
    zrobiłem prowizorycznie rs232 by podłączyć ten czytnik rfid. w terminalu wychodzą same glupoty(jakby byly zaklucenia z transmisji
    [Atmega8]odebranie ramki ttl
    =jedne szlaczki z jednej karty drugie z drugiej.
    . przejechałem cały zakres prędkości spadając aż do 300 i nic) myślałem ze może max232 jest uszkodzony ale po podłączeniu atmegi na rxd wysyłam w terminalu ASCII i bez problemu dochodzą do niej i wyświetla wartości na LCD które wpisze.Gdy podłącze czytnik do atmegi odczytuje wartości typu 235 213 i inne wiec wyświetla je poprawnie. zmiana parametrów w terminalu w handshake czy Emulation nic nie dają. pewnie robie jakiś błąd ,niby coś prozaicznego ale człowiek jak już wnerwiony jest na to to nie do końca myśli właściwie.
  • REKLAMA
  • #4 5412718
    tiggerek1982
    Poziom 15  
    witam. wieczorem zrobiłem trochę inaczej. czytnik RFID podłączyłem od razu pod atmege a sama atmege pod port rs232.poleceniem I=waitkey() patrzyłem co jest na Rxd atmegi .zmienną I zastosowałem jako zmienna integer (choc pewnie i byte by wystarczyło).
    dodatkowo włączyłem Config Serialin = Buffered , Size = 20 (dzięki mirekk36 za podpowiedz :) )i ku mojemu zdziwieniu w terminalu bascoma otrzymywałem taki powtarzający się ciąg liczb
    dla jednej karty:
    255
    1
    4
    254
    242
    145
    253
    i dla pewności dla drugiej:
    255
    20
    0
    252
    142
    107
    227

    co mnie cieszyło bo wreście coś ruszyło. 255 w hexie to 0xFF wiec zgadza sie początek ramki. I jeśli nawet szybko oddale kartę od czytnika, zawsze wyśle ramkę do końca nie urywając jej. kombinowałem jak zczytywac z jednej zmiennej "I " każda z liczb i wstawiać do 6ciu innych zmiennych(powiedzmy B ; C ; D; E ; F ; G. liczbę 255 traktowa jako znacznik przed pojawianiem sie pierwszej zmiennej.gdybym juz mial je tak posegregowane łatwo można by było porównać kartę z zapisaną w epromie.
    a apropo fusebitów jest chyba ok .daje zrzut ekranu dla pewności. pomysły wyczerpały sie a z wszystkie podpowiedzi wykorzystałem;/
    [Atmega8]odebranie ramki ttl

    mogę liczy na pomoc ?:(
  • REKLAMA
  • #5 5413770
    Dr.Vee
    VIP Zasłużony dla elektroda
    Witam,

    Nie widzę problemu. Czytasz dane z portu szeregowego (bądź z bufora) w pętli. Gdy odczytasz 0xff, to w następnej pętli porównujesz kolejne 6 znaków z tymi, które masz po kolei zapisane w EEPROMie.

    CRC nie jest problemem, bo przy tym samym numerze seryjnym powinieneś dostać cały czas to samo CRC - można je ew. zweryfikować przy zapisie nowej karty do EEPROMu.

    Pozdrawiam,
    Dr.Vee
  • #6 5414466
    tiggerek1982
    Poziom 15  
    w epromie chciałem raczej przechowywać zapisane karty do identyfikacji wiec wymyśliłem coś ze zmiennymi a oto kod:
    Do
    Poczatek:
    Waitms 100
    A = 0                                                ' zabezpieczenie dla zmiennych
    I = Waitkey()                                               'czytanie danych z Rfid
    If I = 255 Then                                             'warunek by przejsc do podprogramu(znacznik ramki)
    Call Rfid
    End If
    Loop
    
    Rfid:                                                       '
    B = 0                                                       'resetowanie wszystkich zmiennych  (by nie dodwal wartosci po ponowym wejsciu)
    C = 0
    D = 0
    E = 0
    F = 0
    G = 0
    A = 1
    I = I - 1                                                   ' na chwile musze zmienic zmienna I by wejsc w pętle while
    While I < 255
    I = Waitkey()
    If A = 1 Then                                               'zapisywanie do kazdej z miennej kolejno wartosci I
    B = I + B
    End If
    If A = 2 Then
    C = I + C
    End If
    If A = 3 Then
    D = I + D
    End If
    If A = 4 Then
    E = I + E
    End If
    If A = 5 Then
    F = I + F
    End If
    If A = 6 Then
    G = I + G
    End If
    If A = 7 Then
    Call Wyn
    End If
    Incr A
    Wend
    
    Return
    
    Wyn:
    Locate 1 , 1                                                
    Lcd B ; "." ; C ; "." ; D ; "." ; E ; "." ; F ; "." ; G     'wyswieltana ramka na lcd
    Print B ; "." ; C ; "." ; D ; "." ; E ; "." ; F ; "." ; G   ' wysylanie ramki na rs232
    Waitms 800
    Call Poczatek
    
    Return
    


    i poniżej to co otrzymuje w terminalu:
    [Atmega8]odebranie ramki ttl
    tym razem na 3ch kartach sprawdzałem wyniki.

    nie wygląda to za dobrze. często ramkę dostaje z błędami a program resetuje sie po tych większych błędach.nie było tych błędów jak nie miałem oddzielnie wyniku w podprogramie.zastanawiam sie ale chyba lepiej by było gdyby wykonać tylko jeden odczyt powiedzmy na 5 sekund .w samym programie na pewno sa błędy ale mam nadzieje ze wyłapie je szybko, jednak prośba o podpowiedz :|
  • #8 5418115
    Dr.Vee
    VIP Zasłużony dla elektroda
    Witam,

    Źle to wygląda, jeśli masz tak duże zakłócenia. Piszesz w bascomie, więc raczej program nie "idzie w buraki"...

    Pokaż cały program, ale ładnie sformatowany i z wcięciami.

    Daj schemat układu plus może jakieś zdjęcia płytki? Z czego zasilasz układ i czytnik? Jaka długość kabli itd.

    Pozdrawiam,
    Dr.Vee
  • REKLAMA
  • #9 5930604
    tiggerek1982
    Poziom 15  
    witam .wiem ze wątek dość dawny ale teraz właśnie w święta miałem mnóstwo wolnego czasu, przy okazji choroba wiec w domu i domu się tylko siedzi.Wracając do tematu program zrobiłem od początku korzystając z waszych cennych rad(od nowa bufor odbiory, dodane sprawdzanie poprawności ramek CRC i możliwość dodawania nowych kart.) .. projekt jeszcze nie ukończony (ku mojemu nieszczęściu padł dysk w stacjonarce ) ale byc może uda mis ie odzyskać dane) . Nie chciałbym bym i mój wątek (jak wiele na elektrodzie) by bez rozwiązania wiec za kilka dni umieszczę postępy mojej pracy :D wraz z kolejnymi pytaniami.


    pozdrawiam i życzę udanego Sylwestra
  • #10 6220173
    klops_mops
    Poziom 17  
    Odnawiam...

    Jak możesz to umieść - na pewno przyda się w przyszłości innym, a teraz mi :)

    Pozdrawiam
  • #11 6295444
    mcgyver_lodz
    Poziom 1  
    To i ja się dołączę do prośby o pomoc
    Kupiłem na allegro moduł czytnika RFID z anteną + kartę podłączyłem do Atmegi8 i nic nie trybi
    Podłączenie banalne +5V , GND , ANT1 , ANT2 , TX
    czytnikjak z aukcji http://link_skasowalem


    Proszę nie umieszczać linków do aukcji internetowych/plików tymczasowych itp. - Regulamin. Link skasowałem. [c_p]
REKLAMA