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

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

elektronik12z 28 Maj 2010 09:01 3489 16
  • #1 8125905
    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 8125994
    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).
  • #3 8126040
    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
  • #5 8126288
    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
  • #6 8126342
    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.
  • #7 8126698
    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
  • #9 8126956
    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
  • #10 8126977
    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.
  • #11 8127054
    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.
  • #12 8129755
    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:


    
    #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
  • #13 11910838
    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?
  • #15 11911888
    kremir
    Poziom 11  
    opisałem ten problem też w innym temacie. Zapoznam się z artykułem - dzięki
  • #16 11912068
    boss87
    Poziom 12  
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    To jest błąd _counter dojdzie do 255 i przeskoczy na zero.
  • #17 11912369
    piotrva
    VIP Zasłużony dla elektroda
    Ogólnie program zaprezentowany przez @elektronik12z jest dziwny i błędny oraz nieoptymalny. Jeszcze raz zachęcam do lektury mojego artykułu i przykładów...
REKLAMA