Elektroda.pl
Elektroda.pl
X
Tektronix
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

ATMEGA328 - Problem z uzyskaniem zmian sygnału na pinach więcej niż 1,34kHz

01 Paź 2012 13:29 1338 9
  • Poziom 9  
    Proszę o pomoc.
    Nie mogę uzyskać zmian sygnału wyższego niż 1,13kHz na żadnym pinie mimo, że ustawianie SUT i CKSEL przebiega poprawnie. Program, który napisałem zajmuje się tylko zmianą stanów na poszczególnych portach, oczekiwałem przebiegu o częstotliwości około 1MHz a uzyskuję około 1,34kHz.
    Z góry dziękuję za pomoc.
  • Tektronix
  • Poziom 9  
    Program jest jak sądzę najprostszy z możliwych

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Głównie chodziło mi o sygnł zegara na pinie PB0 (CLOKO), który po zaprogramowaniu przez ustawienie fus bitów powinien dać zegar do sterowania innych urządzeń. Jednak po zaprogramowaniu CLOKO na wskazanym pinie pojawia się około 1,3kHz. więc napisałem powyższy programik żeby sprawdzić jaki sygnał można uzyskać na dowolnym pinie (w tym przypadku PC0) i uzyskałem prawie podobną częstotliwość. Dodam, że przy zmianie kwarca z 8MHz na 16MHz ww częstotliwość prawie podwaja się, co wskazywałoby, że sygnał jest brany z rezonatora kwarcowego (zgodnie z zaprogramowanymi fus bitami). Zastanawiam się jak tak niską czestotliwością zegara można sterować inny procesor a podobno to wyjście jest do tego przeznaczone. Prawdę mówiąc to i kształt sygnału na tej nóżce (przy tak niskiej częstotliwości) pozostawia wiele do życzenia. Byłbym wdzięczny za ewentualne wskazówki i wyjaśnienia tego problemu.
  • Tektronix
  • Moderator Mikrokontrolery Projektowanie
    elpenor18 napisał:
    Program jest jak sądzę najprostszy z możliwych

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Przeczytaj ten artykuł: http://mikrokontrolery.blogspot.com/2011/04/gcc-avr-funkcje-opoznienia-delay.html


    elpenor18 napisał:
    Byłbym wdzięczny za ewentualne wskazówki i wyjaśnienia tego problemu.

    A my za pokazanie tego, o co prosiłem w pierwszym poście.
  • Poziom 39  
    elpenor18 napisał:
    _delay_us(0.1);

    A co to jest??? Tam się tylko liczby naturalne wprowadza. Wywal to z kodu. Jak chcesz żeby pin przełączał się najszybciej jak to możliwe to wywal te dziwne opóźnienia.
  • Poziom 9  
    Ustawienia fus bitów
    (znak [ ] - oznacza niezaprogramowany a [v] zaprogramowany)

    Programowanie wykonuję AVRISP mkII

    BOODLEVEL Brown-out detection disabled
    RSTDISBL - [ ]
    DWEN - [ ]
    SPIEN - [V]
    WDTON - [ ]
    EESAVE - [V]
    BOOTSZ Boot Flash size = 2048 words start addres = $3800
    BOOTRST - [ ]
    CKDIV8 - [ ]
    CKOUT - [ ]
    SUTCKSEL - Ekst Cryst osc 8MHz .... 258CK14CK + 4.1ms
    -----------------------------------------------------------------------
    EXTENDED - 0XFF
    HIGH - 0XD1
    LOW - 0XCE

    DO MIKROKONTROLERA NIC NIE JEST PODŁĄCZONE OPRÓCZ OSCYLOSKOPU
  • Pomocny post
    Moderator Mikrokontrolery Projektowanie
    elpenor18 napisał:
    DO MIKROKONTROLERA NIC NIE JEST PODŁĄCZONE OPRÓCZ OSCYLOSKOPU

    Po pierwsze nie krzycz.
    Po drugie plecam lekturkę tego i tego
    to się dowiesz dlaczego:

    elpenor18 napisał:
    ... uzyskać na dowolnym pinie (w tym przypadku PC0)
    ...
    Prawdę mówiąc to i kształt sygnału na tej nóżce (przy tak niskiej częstotliwości) pozostawia wiele do życzenia.
  • Poziom 9  
    Serdecznie Panom dziękuję za cenne uwagi.

    Duże litery na końcu poprzedniego wpisu były przypadkowe i nie maiły żadnego kontekstu emocjonalnego - Przepraszam jeśli przez nieuwagę kogoś obraziłem.
    Wskazaną literaturę przejrzałem i dołączyłem do moich ulubionych dlatego, że czasem rzeczywiście zapomina się o podstawach.
    Chciałbym na koniec wskazać przyczynę mojego błędu(przebieg obserwowany na PB0 po zaprogramowaniu fus bitu CKOUT), co jak sądzę może komuś oszczędzić czasu. Otóż problem wynikał ze zbiegu okoliczności wynikających z zasady działania cyfrowego oscyloskopu. O ile pamiętam pojęcie jakie występuje przy pracy tego oscyloskopu (aliasing - może nie do końca poprawnie napisane). Tak się złożyło, że na zakresie podstawy czasu 1ms pojawiał się podobny sygnał jak na 0.1us, gdzie jest on poprawnie zobrazowany i wynosi dokładnie tyle co dołączony kwarc. W oscyloskopach starego typu taki przypadek raczej nie występuje.

    Po usunięciu opóźnienia na pinie PC0 pojawił się ładny sygnał około 276kHz.
    Jeszcze raz serdecznie dziękuję za zaangażowanie i pomoc.
  • Moderator Mikrokontrolery Projektowanie
    elpenor18 napisał:
    Duże litery na końcu poprzedniego wpisu były przypadkowe i nie maiły żadnego kontekstu emocjonalnego - Przepraszam jeśli przez nieuwagę kogoś obraziłem.

    Żaden problem - po prostu od czasu do czasu mamy tutaj bardzo nerwowych i emocjonalnych forumowiczów :)
    BTW. ode mnie 25 pkt, bo mogą się przydać, a masz zaledwie 3,5.
  • Poziom 9  
    Problem spowodowany był przez moją nieuwagę oraz zasadę funkcjonowania cyfrowego oscyloskopu. Po zaprogramowaniu fiusbitu CKOUT oczekiwałem na odpowiednim pinie sygnału o częstotliwości podłączonego kwarcu 8MHz. Jednak przypadek sprawił, że oscyloskop ustawiony był na taki zakres podstawy czasu, że na ekranie pojawił się sygnał podobny do oczekiwanego ale o częstotliwości około 1,3kHz. Dodatkowo oscyloskop (w okienku cyfrowego odczytu obserwowanych przebiegów) potwierdził taką częstotliwość. Zdziwiony wynikiem nie zwróciłem uwagi na dodatkowe kropki w okolicy szczytów przebiegu i tak dałem się zapędzić ma kilka godzin poszukiwania błędu przy okazji angażując życzliwych specjalistów na forum Elektrody.
    Dziękuję wszystkim, którzy wskazywali możliwe błędy jakie mogłem popełnić.
    Mam nadzieję, że moje doświadczenie oszczędzi czasu innym.