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.

[Atmega8][C][WinAvr] Problem z odbiorem ramki z EM4095

elektronik12z 28 Maj 2010 09:01 3174 16
  • #1 28 Maj 2010 09:01
    elektronik12z
    Poziom 13  

    Witam

    Zbudowałem swój układ na podstawie (część z EM4095):

    http://sklep.avt.pl/photo/_pdf/5186.pdf

    Sercem układu jest Atmega8 (kwarc 11059200MHz +12pF), wszystko jest dobrze podłączone.

    Napięcie jest stabilizowane 7805 + 4 kondensatory + 1N4007.

    Niestety mam dziwną sytuację przy zasilaniu z zasilacza sieciowego stabilizowanego 12V, przy ustawieniu MOD oraz SHD jako wyjścia i ustawienie na 0 (DEMO jest podłączone do INT0 PD2), cały czas jest wyzwalane przerwanie INT0, nawet jak nie zbliżę tagu RFID. Jak zbliżę tag to zlicza się szybciej i mogę zdetektować czy karta jest zbliżona, ale to oczywiście jest mało zdatne do czegokolwiek, bo z tego szumu raczej nie odczytam co to za tag i kiedy jest początek, a kiedy koniec transmisji.

    W przypadku zasilania z baterii 9V jest ok, zliczonych wywalań INT0 jest 0 (licznik w przerwaniu), jak zbliżę tag to dopiero mi zlicza.

    Atmega 8, ma wszędzie tam gdzie jest wymagane
    kondensatory 100nF.

    Proszę o pomoc.

    Pozdrawiam

    2 16
  • #2 28 Maj 2010 09:40
    markosik20
    Poziom 33  

    Nie che mi się wierzyć że problem leży po stronie zasilania. Nie znam układu EM4095 ale wydaje mi się że on cały czas wysyła dane a Ty musisz sprawdzać czy to tylko szum czy zakodowany numer w kodzie Manchaster (o ile dobrze pamiętam).

    0
  • #3 28 Maj 2010 09:58
    elektronik12z
    Poziom 13  

    Witam

    A jednak, podłączam baterię 9V, na wyświetlaczu 0, przykładam tag >500. TAk powinno być i mógłbym już zabrać się za dekodowanie manchester.
    Podłączam zasilacz, na wyświetlaczu rośnie ok. +100 na sek. Przykładam tag >+500.

    Pozdrawiam

    1
  • #4 28 Maj 2010 10:28
    deksta84
    Poziom 24  

    Kliknij tu Link
    Swoją drogą po co atmega8 ma ciągle nasłuchiwać. Wystarczy że będzie pobierać dane co sekundę z czasem trwania ramki powiedzmy 10ms.

    0
  • #5 28 Maj 2010 11:51
    elektronik12z
    Poziom 13  

    Witam

    Ok, ale od kiedy mam zacząć dekodowanie ramki i wyłuskać właściwą, jeśli są śmieci? W RC5 był dłuższy początek transmisji.

    Niestety nie mam dostępu do oscyloskopu.

    Pozdrawiam

    0
  • #6 28 Maj 2010 12:13
    deksta84
    Poziom 24  

    Co do śmieci to link chyba wyjaśnia przyczyny.
    Co do ramki co za różnica? Jak przyłożysz co tam masz to EM zacznie wysyłać dane. Jak się spóźni z synchronizacją to Atmega8 poczeka, aż kolejny raz będzie się synchronizować z EM. Jak zdekoduje połowę ramki bez początku transmisji? Jak wyjdzie błąd wtedy atmega8 zacznie ciągły nasłuch, aż się zsynchronizuje. I wsio. Tak, czy owak pdf rządzi. Czytniki kart dostępu też czasami nie działają od razu i trzeba powtarzać przykładanie. Mają zwłokę i tyle.

    1
  • #7 28 Maj 2010 14:10
    elektronik12z
    Poziom 13  

    Witam

    Czytałem chyba ze 4 razy posty z linka i nie zrozumiałem dlaczego są śmieci, mogę prosić o podpowiedź?

    Pozdrawiam

    0
  • #8 28 Maj 2010 14:32
    deksta84
    Poziom 24  

    Antena i dobry ekran. Ja bym to wcisnął w starą głowicę UHF.

    0
  • #9 28 Maj 2010 15:22
    elektronik12z
    Poziom 13  

    Witam

    Nie mam głowicy UHF :) A teoretycznie samo dodanie kondensatora 100nF na wejściu zasilania do EM4095, coś mogłoby dać?

    Pozdrawiam

    0
  • #10 28 Maj 2010 15:27
    deksta84
    Poziom 24  

    Tak, śmieci z EM nie będą tak fruwać po szynach zasilających. Ale jak wspomniał zasilanie 9V tego EM, to niewiele by pomogło w tym problemie.
    A głowica ze starego telewizora, video, radia... Chodzi tylko o ekran.
    Tylko, że Uc= max6V. Daj koralik ferrytowy.

    0
  • #11 28 Maj 2010 15:53
    markosik20
    Poziom 33  

    elektronik12z napisał:
    dlaczego są śmieci,


    Śmieci wynikają przeważnie z niedopasowania anteny.. praktycznie zawsze bedą. EM4095 wysyła stan jaki panuje na antenie (przesunięcia fazowe) i nie analizuje tego, poczytaj trochę o zasadzie działania RFID a zrozumiesz.

    0
  • #12 29 Maj 2010 11:52
    elektronik12z
    Poziom 13  

    Witam

    Wiecie co, aż wstyd się przyznać zasilacz miał napisane na obudowie 5V (niestety rutyna, skupiłem się na EM4095, avr, antenie, a podłączałem to o 1 w nocy i tak wyszło ...), a przecież 7805 wymaga min. 7,5V... (proszę nie komentować :))

    Po zakupie nowego zasilacza 12V jest ok, nie ma śmieci...

    Dziękuję za pomoc

    Przy okazji, aby nie tworzyć kolejnego wątku:
    Mam problem z odbiorem logicznym tej ramki, mierzę czas dla 20 piewszych próbek i niestety przy każdym kolejnym odczycie czasy te są losowe. Myślałem, że mniej więcej powinno być podobnie.

    Kod:


    Code:

    #define ENABLE_INTO_FALLING MCUCR|=_BV(ISC01);MCUCR&=~_BV(ISC00);GIFR = (1<<INTF0);GICR=_BV(INT0);

    //Max dl. ramki
    #define maxRFID 500

    //Tablica czasów
    volatile uint8_t time_pin[maxRFID+1];

    //Wykorzystane piny
    #define PINB_MOD 1
    #define PINB_SHD 0
    #define PIND_INT0 2

    //Licznik wystąpień INT0
    volatile uint16_t rfid_c=0;

    //Timery
    #define TIMER_OFF_64()  TCCR0=0; //Wyłącz
    #define TIMER_ON_64()  TCCR0|=(1<<CS00)|(1<<CS01); //Włącz


    //Przerwanie INT0
    ISR(INT0_vect)
    {
          
                           TIMER_OFF_64();
             TMER_ON_64();
             TCNT0=0;
                
             int i=0;
                         
                if(rfid_c< maxRFID)
                {
                      uint8_t _counter=0;
                   for(_counter=0;_counter<=300000;_counter++)
                   {
                      if(bit_is_set(PIND,PD2))
                      {
                         break;
                      }   
                   }   

                




                 rfid_c++;   
                }
                
             
             TIMER_OFF_64();
       

    }

    int main(void)
    {
       //ustaw port D
       DDRD=0x02;
       PORTD=0x00;

       //ustaw port B
       DDRB|=_BV(PINB_MOD)|_BV(PINB_SHD);//wyjscia
       PORTB&=~PINB_MOD;
       PORTB&=~PINB_SHD;
       
       //Ustaw przerwanie
       ENABLE_INTO_FALLING;
       sei();

        while (1)
       {
                if(rfid_c>= maxRFID )
          {

                          //Wyświetl 20 elementów tablicy time_pin
                          ClearLCD();
                          int _itemp=0;
                          for (_itemp=0;_itemp<= maxRFID ;_itemp++)
             {                           
                                 LCD_Write(0,0,time_pin[_itemp]);
                                _delay_ms(1000);                  
              }
                     }

    }



    Pozdrawiam

    0
  • #13 09 Lut 2013 17:39
    kremir
    Poziom 11  

    Dziwna sprawa. Mam taki sam objaw jak ten opisany w temacie. Zasilam całość z programatora USBasp czyli mam 5V. Czyżby jednak chodziło o wydajnośc prądową portu USB (zasilam z aktywnego huba USB)? Wyjście CLK podłączyłem do T0 (jako generator dla timer0) a wyjście DEMOD do ICP1 i mam cały czas aktywnośc na DEMOD - wciąz wykrywam zmiany zboczy... Spr,obuje to jeszcze zasilić z innego źródła. Może to pomoże?

    @elektronik12z
    Widzę że odgrzebuję zapomniany temat, ale chciałbym się spytać czy udało Ci się odczytać poprawnie kod karty?

    0
  • #15 09 Lut 2013 20:55
    kremir
    Poziom 11  

    opisałem ten problem też w innym temacie. Zapoznam się z artykułem - dzięki

    0
  • #16 09 Lut 2013 21:34
    boss87
    Poziom 11  

    Kod: c
    Zaloguj się, aby zobaczyć kod

    To jest błąd _counter dojdzie do 255 i przeskoczy na zero.

    0