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 6 kwi 2025, o 22:49


    Strefa czasowa: UTC + 1





    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 8 ] 
    Autor Wiadomość
    PostNapisane: 29 lis 2012, o 22:23 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 29 lis 2012
    Posty: 88
    Pomógł: 2

    Witam, mój pierwszy post, ale czytam od jakiegoś czasuforum.

    Chciałbym wygenerować na Atmedze8A-PU sinus o częstotliwości do 40kHz przy pomocy PWM. Myślałem, że będzie to łatwe zadanie, ale mam problem.

    Powiedzmy, że mam taktowanie 8MHz. Ilość próbek sinusa 256. Częstotliwość funkcji sinus to 40kHz czyli 25us. Jeśli ma być 256 próbek to każda próbka wymaga 97ns, czyli bardzo mało.

    Przerwanie wychodzi mi tyle 8MHz/1prescaler/256 OCRx= 31250kHz a ja potrzebuje więcej na jedną próbkę.

    Ok, to zmniejszam ilość próbek do 128/okres a częstotliwość zegara do 16MHz = 125kHz = 8us. Teraz 25us/128=0.2us co dalej jest znacznie mniejsze od 8us.

    Czy jest mój problem rozwiązywalny?

    _________________
    sig off ;(



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 29 lis 2012, o 22:40 
    Offline
    Użytkownik

    Dołączył(a): 26 lip 2012
    Posty: 291
    Lokalizacja: okolice Opola
    Pomógł: 20

    Podstawowe pytanie: czy to koniecznie musi być sinus, oraz do czego to ma służyć (czy dobrze myślę że chodzi o dalmierz ultradźwiękowy)?

    _________________
    sig off ;(



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 29 lis 2012, o 22:49 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 29 lis 2012
    Posty: 88
    Pomógł: 2

    ma to być generator do ultradźwięków od 30 do 40kHz. Ma to być prostokąt, piła i miał być sinus. Czy mogę drastycznie zmniejszyć liczbę próbek a potem to wygładzić filtrem RC? Czy jest sens lub da się to zrobić prościej.

    _________________
    sig off ;(



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 29 lis 2012, o 22:51 
    Offline
    Moderator
    Avatar użytkownika

    Dołączył(a): 03 paź 2011
    Posty: 27366
    Lokalizacja: Szczecin
    Pomógł: 1043

    gedo napisał(a):
    Powiedzmy, że mam taktowanie 8MHz.


    Tak się zastanawiam, czy jakieś szczególne więzi łączą cię z tym 8MHz ? ;)

    przeliczałeś sobie to wszystko dla 20MHz ? ... jeśli nie to może warto do pewnych zastosowań sięgnąć po zewnętrzny kwarc i znacznie większe taktowanie ?

    _________________
    zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 29 lis 2012, o 23:40 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 29 lis 2012
    Posty: 88
    Pomógł: 2

    mirekk36, myślałem już o wyższym taktowaniu :)
    Cytuj:
    Ok, to zmniejszam ilość próbek do 128/okres a częstotliwość zegara do16MHz = 125kHz = 8us. Teraz 25us/128=0.2us co dalej jest znacznie mniejsze od 8us.


    no dobra to dalej - zmniejszam ilość próbek

    40kHz/37póbek= 25us/37 = 0.6us na jedną próbkę
    20MHz/64 (ograniczam licznik TCNTx do wartosci 64) = 3.2us ( co tyle przerwanie )

    3.2us * 37 próbek = 118us to jest czas prawie pięciokrotnie gorszy od 25us. Dobrze z tym myślę? Macie Panowie inne rozwiązanie?

    _________________
    sig off ;(



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 30 lis 2012, o 00:39 
    Offline
    Moderator
    Avatar użytkownika

    Dołączył(a): 03 paź 2011
    Posty: 27366
    Lokalizacja: Szczecin
    Pomógł: 1043

    no oczywiście że w takim wypadku (kolega krafin dobrze przeczuwał) jak już się za to zabierać to tak jak mówi Antystatyczny.

    TYLKO I wyłącznie tablicowanie sinusa, broń boże obliczanie go w locie ....

    gedo ---> a ty w swoich obliczeniach zapomniałeś zupełnie o preskalerze - i jakoś strasznie dziwnie to próbujesz obliczać - w ogóle nie wiem o co chodzi w tych obliczeniach.... ale mam propozycję. Weź zerknij do książki niebieskiej do rozdziału o multipleksowaniu wyświetlaczy LED i zobacz jak tam się oblicza częstotliwość przerwań do takich celów - to by ci DUUUUŻO ułatwiło przemyślenia i naprowadziło na dobrą drogę. Może pominąłeś ten rozdział ???? hmmmm ???

    _________________
    zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 30 lis 2012, o 01:00 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 29 lis 2012
    Posty: 88
    Pomógł: 2

    mirekk36, jestem już w dziale sterowanie PWM - trochę dalej. Wydaję mi się, że rozumiem na razie wszystko. Problem mam z otrzymaniem tylko tej częstotliwości.

    preskaler pominąłem bo ustawiam go na 1
    sinus oczywiście mam w tablicy

    Antystatyczny, mam wartości sinusa w tablicy i je podstawiam do rejestru OCRx i dzięki modulacji PWM zmieniam amplitudę na wyjściu. Problem mam z otrzymaniem sinusa o częstotliwości 40kHz. Kurcze aż tak słabo to wytłumaczyłem.. ;)

    _________________
    sig off ;(



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 2 gru 2012, o 21:14 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 29 lis 2012
    Posty: 88
    Pomógł: 2

    znalazłem projekt który będzie użyteczny do osiągnięcia mojego celu, problem mam natomiast taki:

    tak jest deklarowana tablica w pamięci
    Kod:
    const uint8_t trianglewave[] __attribute__ ((section (".MySection5")))= ...


    w pliku makefile jest taki zapis
    Kod:
    #Define sections where to store variables
    CFLAGS += -Wl,-section-start=.MySection1=0x1B00
    CFLAGS += -Wl,-section-start=.MySection2=0x1C00
    CFLAGS += -Wl,-section-start=.MySection3=0x1D00
    CFLAGS += -Wl,-section-start=.MySection4=0x1E00
    CFLAGS += -Wl,-section-start=.MySection5=0x1F00


    jak mogę taki zapis zastosować w moim makefile w eclipse bo bez tego najprawdopodobniej mam błąd:
    Kod:
    c:/winavr-20100110/bin/../lib/gcc/avr/4.3.3/../../../../avr/bin/ld.exe: section .MySection5 [00000080 -> 0000017f] overlaps section .data [00000080 -> 0000027f]
    make: *** [test2.elf] Error 1

    _________________
    sig off ;(



    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: 8 ] 

    Strefa czasowa: UTC + 1


    Kto przegląda forum

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


    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:  
    cron
    Sitemap
    Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
    phpBB SEO