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

RFID Atmega16 [BASCOM] - Jak wpisać odczyt na sztywno i obsłużyć UART?

MAREK MRK 02 Lut 2013 20:07 2628 9
REKLAMA
  • #1 11879519
    MAREK MRK
    Poziom 18  
    Witam, mam problem i proszę o pomoc. Posiadam czytnik RFID, który ma wyjście TX. W terminalu na komputerze odbiera ok. przykładowy odczyt (0A00A295DD). Dane wysyłane są w 10-ciu znakach i działa to dobrze, praktycznie żadnych błędów. Teraz opiszę mój problem. Chciałem zacząć od prostej obsługi. Czyli odbiór danych przez UART. Wpisanie jednego odczytanego transpondera "na sztywno" (tak na próbę). Jeśli odebrany kod zgadza się z wpisanym na sztywno to oczekiwanie np. 1 sekundę, jeśli nadal jest ten sam odczyt (transponder nie został zabrany z czytnika) wtedy coś się dzieje (powiedzmy zmiana stanu na którymś pinie). Problem polega na tym, że nie potrafię na sztywno wpisać odczytu. Bascom wywala mi błąd i nie mogę skompilować, przez co nawet nie wiem czy dobrze odbierze atmega przez UART. Prosił bym o pomoc. Dodam że czytnik wysyła 19200 bodów, a atmega jest taktowana kwarcem 11.0592MHz. (Będzie 16MHz jak tylko dostanę przesyłkę z częściami).
  • REKLAMA
  • #2 11879781
    mickpr
    Poziom 39  
    MAREK MRK napisał:
    Posiadam czytnik RFID, który ma wyjście TX.
    W standardzie jakim, 3,3V/5V/RS232 ?
    MAREK MRK napisał:
    Jeśli odebrany kod zgadza się z wpisanym na sztywno to oczekiwanie np. 1 sekundę, jeśli nadal jest ten sam odczyt (transponder nie został zabrany z czytnika) wtedy coś się dzieje (powiedzmy zmiana stanu na którymś pinie).
    A czy czytnik nie wysyła czasem kodu 1 raz (po zbliżeniu)? Tego nie wiem. Możesz to sprawdzić, skoro czytnik działa ci z komputerem.
    MAREK MRK napisał:
    Problem polega na tym, że nie potrafię na sztywno wpisać odczytu.
    A co to znaczy "wpisać na sztywno odczyt"?
    MAREK MRK napisał:
    Bascom wywala mi błąd i nie mogę skompilować, przez co nawet nie wiem czy dobrze odbierze atmega przez UART.
    My też nie będziemy wiedzieć, bo kodu ani schematu nie zamieściłeś. Nie wiemy, czy twoja Atmega16 w ogóle działa, a nic o tym nie wspomniałeś.
    MAREK MRK napisał:
    Dodam że czytnik wysyła 19200 bodów, a atmega jest taktowana kwarcem 11.0592MHz. (Będzie 16MHz jak tylko dostanę przesyłkę z częściami).
    Tutaj akurat bym został przy tym kwarcu. Chyba, że dla ciebie robi różnice 5MHz? Dla UART - myślę, że różnica jest żadna (przy tej prędkości).
  • REKLAMA
  • #3 11879820
    MAREK MRK
    Poziom 18  
    Standard 5V, czytnik wysyła kod ciągle po zbliżeniu transpondera i przestaje wysyłać po oddaleniu go, "wpisać na sztywno" miałem na myśli spisać w program jeden transponder (zmienna, może jakaś tablica) i porównywać to z odczytem, o do zamieszczenia kodu lub schematu to wolał bym napisać na nowo cały program, atmega działa na 100%, Kwarc mi nie robi żadnej różnicy, ważne by procesor wyrobił z odbieraniem 19200 bodów.
  • #4 11879835
    mickpr
    Poziom 39  
    MAREK MRK napisał:
    Standard 5V, czytnik wysyła kod ciągle po zbliżeniu transpondera i przestaje wysyłać po oddaleniu go, "wpisać na sztywno" miałem na myśli spisać w program jeden transponder (zmienna, może jakaś tablica) i porównywać to z odczytem,

    Wszystko to się da zrobić.
    MAREK MRK napisał:
    o do zamieszczenia kodu lub schematu to wolał bym napisać na nowo cały program,
    Zacznij od przedstawienia nam kodu.
    MAREK MRK napisał:
    Kwarc mi nie robi żadnej różnicy, ważne by procesor wyrobił z odbieraniem 19200 bodów.
    Wyrobi się bez problemu.
  • #5 11879932
    MAREK MRK
    Poziom 18  
    Przedstawiam kod. Mam nadzieję, że przybliży on ideę działania jaką chciał bym na początek osiągnąć. Mam narazie 5 transponderów do testów.
    Kod: text
    Zaloguj się, aby zobaczyć kod

    Myślałem o wpisaniu tego w jakąś tablicę i porównywanie znak po znaku, ale nie wiem jak się zabrać za to.[/code]
  • REKLAMA
  • #6 11880193
    piotrva
    VIP Zasłużony dla elektroda
    Jakaś masakra a nie kod.
    Gdzie niby masz zaimplementowany odbiór danych z UART?
    Jakim cudem chcesz wpisać do zmiennej String*1 (która nie może przechować nawet jednej litery, bo przechowuje tylko znak końca stringa) ciąg znaków?
    Najprościej kod transpondera zapisać jako tablicę 5-ciu bajtów. Potem masz tablicę z akceptowanymi transponderami (posortowanymi rosnąco lub malejąco) i metodą wyszukiwania połówkowego odnajdujesz (lub nie, jeśli go nie ma) numer akceptowanej karty.
  • #7 11880217
    mickpr
    Poziom 39  
    MAREK MRK napisał:
    Przedstawiam kod.
    Pomijając fakt, że kod napisałeś "na sztukę", to nawet się on nie kompiluje. Czeka ciebie jeszcze dużo nauki, ale zacięcie masz.. :)
  • #8 11880219
    MAREK MRK
    Poziom 18  
    Odbiór jest "input", W zmiennej wiem że nie mogę przechowywać a za tablicę nie wiem jak się zabrać dlatego piszę ten post.

    Dodano po 52 [sekundy]:

    Wiem że się nie kompiluje bo nie można zapisać tego w zmiennej dlatego przychodzę po pomoc.
  • #9 11880254
    piotrva
    VIP Zasłużony dla elektroda
    A w ogóle to ten input zadziała Ci tylko raz, po uruchomieniu programu (poza pętlą Do...Loop), ponadto w przypadku takich urządzeń nie robi się "eliminacji drgań styków".

    A ma szanse się skompilować i ba, nawet działać, tylko chyba bascom nie dopuszcza porównywania stringów wprost, dlatego zastosuj odpowiednio skonfigurowaną funkcję INSTR. Ale pierwsze poczytaj o stringach wogóle i o tym, co oznacza ta gwiazdka i liczba za nią w deklaracji.
  • REKLAMA
  • #10 11881551
    MAREK MRK
    Poziom 18  
    Eliminacji drgań styków nie ma, oczekiwanie sekundowe jest po to, aby stan portu zmienił się raz a nie kilkanaście (ponieważ odczyt RFID jest ciągły a nie tylko 1 po zbliżeniu).

    Dodano po 2 [godziny] 13 [minuty]:

    Troszkę szukałem na temat tej tablicy którą miał bym zrobić. Niestety nic konkretnego (co by przyniosło skutki) nie znalazłem. Prosił bym o pomoc, materiały, fragment kodu, coś co by mi mogło pomóc.
REKLAMA