Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki

KURS HOME ASSISTANT

Chcesz zautomatyzować swój dom bez skomplikowanego kodowania?
Zastanawiasz się nad wyborem sprzętu, oprogramowania i aplikacji?
Od czego zacząć przygodę z HA w 2025? Co będzie najlepsze na start?

Nasz kurs Home Assistant nauczy Cię krok po kroku, jak łatwo zautomatyzować swój dom i oszczędzić na rachunkach za prąd i ogrzewanie. Bez chmur, bez zbędnych abonamentów. Twoja przygoda z Home Assistant zaczyna się tutaj!

↓↓↓

    Szanujemy Twoją prywatność. Możesz wypisać się w dowolnym momencie.




    Teraz jest 8 kwi 2025, o 01:48


    Strefa czasowa: UTC + 1





    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 3 ] 
    Autor Wiadomość
    PostNapisane: 11 wrz 2020, o 10:27 
    Offline
    Nowy

    Dołączył(a): 11 wrz 2020
    Posty: 2
    Pomógł: 0

    Dzień Dobry,

    Mam pytanie odnośnie programowania mikro kontrolerów.

    Zajmuję się akurat ATTINY2313A.
    Mam ustawiony wewnętrzny oscylator na częstotliwość 4 MHz bez wewnętrznego podziału zegara przez 8.

    Poniżej mój krótki kod w C:

    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


    W moim przypadku według dokumentacji czyli wzoru poniżej:

    fOC0A=fclk_I/O/(2·N·(1+OCR0A))

    fOC0A=4000000/(2·1·(1+1))

    fOC0A=1000000=1MHz


    A teraz do meritum:) Co robię nie tak? Częstotliwość którą uzyskuję to --> 207.4KHz. W załączniku przesyłam zdjęcie z oscyloskopu z widocznym przebiegiem na pinie PB0.

    Pozdrawiam,
    Oskar Zaremba



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 11 wrz 2020, o 11:42 
    Offline
    Użytkownik

    Dołączył(a): 07 cze 2016
    Posty: 563
    Pomógł: 143

    oskar_zaremba napisał(a):
    A teraz do meritum:) Co robię nie tak? Częstotliwość którą uzyskuję to --> 207.4KHz.

    Po pierwsze - tego się tak nie robi. Zamiast programowego sprawdzania flagi i zerowania jej należałoby wykorzystać przerwania.
    Po drugie - flaga przerwania jest ustawiana co 4 takty zegara. Twój kod sprawdzający flagę, zerujący ją i ustawiający stan pinu na pewno nie zdąży się wykonać w tym czasie (nawet jeśli użyjesz przerwań), więc niektóre przerwania zostaną pominięte. Stąd ta niższa częstotliwość.

    W zasadzie jedynym rozwiązaniem w celu uzyskania częstotliwości tak bardzo zbliżonej do częstotliwości taktowania mikrokontrolera jest generowanie sprzętowe na jednym z pinów: PB2 (OC0A) lub PD5 (OC0B) poprzez właściwe ustawienie odpowiednich bitów COM0A1:COM0A0 lub COM0B1:COM0B0 w rejestrze TCCR0A na tryb (w przypadku trybu CTC timera): Toggle OC0x on Compare Match.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 11 wrz 2020, o 11:52 
    Offline
    Nowy

    Dołączył(a): 11 wrz 2020
    Posty: 2
    Pomógł: 0

    Uprzejmie dziękuje:)

    O taką odpowiedź mi właśnie chodziło:))))

    Poniżej kod który zrobił robotę:)

    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


    Jeszcze raz wielkie dzięki:)



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    Wyświetl posty nie starsze niż:  Sortuj wg  
    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 3 ] 

    Strefa czasowa: UTC + 1


    Kto przegląda forum

    Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 2 gości


    Nie możesz rozpoczynać nowych wątków
    Nie możesz odpowiadać w wątkach
    Nie możesz edytować swoich postów
    Nie możesz usuwać swoich postów
    Nie możesz dodawać załączników

    Szukaj:
    Skocz do:  
    Sitemap
    Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
    phpBB SEO