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

ATMega8 TQFP - kłopoty z zewnętrznym oscylatorem

Tomekelektronik 28 Sie 2011 15:10 2932 8
  • #1 9871570
    Tomekelektronik
    Poziom 11  
    Witam serdecznie

    Napisałem krótki program wykorzystujący asynchroniczny licznik Timer2. Jako rezonator kwarcowy posłużył mi oscylator zegarkowy (32.768kHz). Program ma za zadanie generowanie przebiegu 1Hz na porcie PD1.
    Program:
    [syntax=c]#include <avr/io.h>
    
    #include <avr/interrupt.h>
    #include <util/delay.h>
    
    #define TIMER2_BUSY	((ASSR & 0x01) | (ASSR & 0x02) | (ASSR & 0x04))
    
    SIGNAL(SIG_OUTPUT_COMPARE2){
    	cli();
    	if(PORTD & 0x02){
    		PORTD &= ~(1<<PD1);
    	}else{
    		PORTD |= (1<<PD1);
    	}
    	sei();
    
    }
    
    int main(void)
    {
    	DDRD |= (1<<PD1);
    	PORTD |=(1<<PD1);
    
    	TIMSK &=~_BV(TOIE2);
    	ASSR |= (1<<AS2);
    
      
    	OCR2 = 	0x7f;
    	TCCR2 &= ~((1<<WGM20)|(1<<COM21)|(1<<COM20));
    	TCCR2 |= (5<<CS20)|(1<<WGM21);
    
    	while(TIMER2_BUSY){
    
    	}
    	TIMSK |= (1<<OCIE2);
    	sei();
        while(1)
        {   
    
        }
        return 0;
    }[/syntax]


    Dla układu w obudowie DIP wszystko chodzi bez problemu, jednak po przerzuceniu go do układu w TQFP program nie chce działać. Fusebity dla obu układów są ustawione identycznie. Dla TQFP pin 3, 5, 21 zwarte jako masa, pin 4,6,18 zwarte jako VCC, kondensator 100nF w pobliżu pinów zasilania. Wykluczam brak połączeń i zimne luty ponieważ zmontowałem już 2 układy: jeden na płytce drukowanej w docelowym urządzeniu, drugi "w pająku" na drugim scalaku.
    Moim zdaniem problem tkwi w obwodzie obsługi rezonatora. Podczas dochodzenia co działa nieprawidłowo, ustawiłem w fusebitach taktowanie zewnętrznym oscylatorem i teraz już nie mam komunikacji z uC poprzez programator, pomimo, iż oscylator jest podpięty wraz z kondensatorami 30pF.
    Na szczęście miałem jeszcze drugi scalak, więc walczyłem dalej. Przypadkowo podłączyłem odwrotnie złącze ISP i układ zaczął działać poprawnie... Okazuje się, że podpięcie zasilania do pinów MISO(16), SCK (17) oraz odłączenie Vcc i GND od zasilania sprawia, że układ funkcjonuje prawidłowo, chociaż nie jest to prawidłowy sposób.

    Jeżeli ktoś spotkał się z podobnym problemem lub ma jakikolwiek pomysł to proszę o pomoc.

    Z góry dziękuję
  • #2 9871860
    mirekk36
    Poziom 42  
    Tomekelektronik napisał:

    Na szczęście miałem jeszcze drugi scalak, więc walczyłem dalej. Przypadkowo podłączyłem odwrotnie złącze ISP i układ zaczął działać poprawnie... Okazuje się, że podpięcie zasilania do pinów MISO(16), SCK (17) oraz odłączenie Vcc i GND od zasilania sprawia, że układ funkcjonuje prawidłowo, chociaż nie jest to prawidłowy sposób.


    Panie kolego Tomek, z całego postu płynie jeden wielki chaos, no ale to co wyżej zacytowałem to już mega chaos z kosmosu niestety. Proponowałbym nie ferować podobnych opinii bo zaraz czytając to forum, spora rzesza początkujących przyjmie to wprawdzie za niezrozumiały i jakiś parapsychologiczny sposób ale zacznie go stosować co gorsze. To mniej więcej brzmi wszystko tak jak kiedyś w dzieciństwie straszono dzieci "czarną wołgą" ..... tak właśnie brzmi najnowszy w dziejach sposób na odratowywanie procka. Odwrócić podstawkę ISP. W sumie jakież to proste. Po cóż więc nam te wszystkie programatory wysokonapięciowe, Fusebit Doctor'y itp...

    --------------------------------

    Nie ma żadnej ale to żadnej różnicy w działaniu procka czy to w TQFP czy to w DIP. Najlepsze jest to co piszesz, że wykluczasz wszystko co sam robisz - pomimo , że opisujesz sam na gorąco dziesiątki błędów jakie popełniasz. Poza tym jeśli ustawiłeś taktowanie procka na zewnętrzny oscylator - to co za problem go uruchomić - podłączając kondensator z rezystorem do XTAL1, które będą takim oscylatorem. Zabrakło ci kondków i rezystorów? Czy może jednak mylisz oscylator z kwarcem albo z generatorem TTL.

    Proponuję na spokojnie jeszcze raz opisać swój problem i pokazać schemat co ty w ogóle tam robisz. Bo tym bardziej nie rozumiem jak można upatrywać jakiegoś błędu w obwodzie jak to napisałeś oscylatora. To cóż to u ciebie za obwód??? Skoro wystarczy podłączyć mały kwarc zegarkowy do dwóch pinów i to bez żadnych kondensatorów.
  • #3 9871941
    Tomekelektronik
    Poziom 11  
    Faktycznie to co napisałem jest chaotyczne, za co przepraszam.
    Zdaję sobie sprawę z tego, iż nie powinno być różnicy w działaniu układów DIP i TQFP.
    A teraz po kolei:
    1) przytoczony w 1 poście program dla Atmegi w DIP'ie działał bezproblemowo, zaś dla Atmegi w TQFP już nie, choć zastosowałem ten sam kwarc zegarkowy i ustawiłem tak samo fusebity,
    2) ATMega w której zmieniłem fusebity na taktowanie zewnętrznym kwarcem nie chce się komunikować z programatorem pomimo tego, że kwarc jest podpięty pod XTAL1 i XTAL2.

    Schematu nie będę zamieszczał, bo jest to najzwyczajniejszy układ pracy uC.
    Proszę o jakieś sugestie.

    P.S. Z tym odwróconym złączem wyszło całkiem przez przypadek i sądziłem, że może będzie w czymś pomocna taka informacja. Oczywiście odradzam takich świadomych prób :)
  • #4 9872077
    drzasiek
    Specjalista CNC
    Tomekelektronik napisał:
    Schematu nie będę zamieszczał, bo jest to najzwyczajniejszy układ pracy uC.

    W takim razie nikt Ci nie będzie pomagał, bo jest to najzwyczalniejszy problem.

    No chyba, że jednak pokażesz co tam pokręciłeś, to ktoś zobaczy błąd.
    Dopóki Twój błąd jest wg Ciebie nieistotny i nie pokażesz, co robisz żeby ktoś mógł zobaczyć co robisz źle, to nawet jeśli kogoś nie zrazi twoje podejście to i tak Ci nie pomoże..
    Bo nie ma jak..
  • #5 9872093
    dondu
    Moderator na urlopie...
    Tomekelektronik napisał:
    Schematu nie będę zamieszczał, bo jest to najzwyczajniejszy układ pracy uC.

    Nie na darmo Mirek prosi o schemat, bo juz dziesiątki, setki, a może tysiące razy okazywało się, że ten "najzwyczajniejszy układ pracy" był źle zaprojektowany, albo brakowało niezbędnych połączeń do prawidłowej pracy mikrokontrolera.

    EDIT. Trochę się spóźniłem :)
  • #6 9872869
    Tomekelektronik
    Poziom 11  
    Załączam schemat oraz zrzut ekranu ustawień fusebitów dla 1 opisywanego przypadku (drugi po prostu pomińmy).
    ATMega8 TQFP - kłopoty z zewnętrznym oscylatorem ATMega8 TQFP - kłopoty z zewnętrznym oscylatorem
  • #8 9873086
    mirekk36
    Poziom 42  
    Ciekaw jestem jak to ci niby działało na TQFP

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Po pierwsze skończ z tymi nazwami SIGNAL i zacznij stosować ISR (chociaż to tutaj nie jest powodem problemu)

    No ale:

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    co to ma być niby? Chcesz odczytać jakieś wejście z pinu PD2 a ty piszesz PORT tutaj ???

    Już nie wspomnę że stosowanie CLI oraz SEI w przerwaniu jak ty to zrobiłeś jest zupełnie ale to zupełnie bez sensu, ponieważ procesor i tak sam to za ciebie domyślnie robi wchodząc w obsługę przerwania.
  • #9 9874864
    LordBlick
    VIP Zasłużony dla elektroda
    mirekk36 napisał:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    co to ma być niby? Chcesz odczytać jakieś wejście z pinu PD2 a ty piszesz PORT tutaj ???
    Niekoniecznie... Kod jak najbardziej prawidłowy, sprawdzający stan wyjścia PORTD1, chociaż optymalniej byłoby całość obsługi przerwania zminimalizować, usunąć to co już i tak wynika z automatycznej natury przerwań (cli/sei) i unowocześnić w/g manuala avr-libc :
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
REKLAMA