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 5 maja 2025, o 03:08


    Strefa czasowa: UTC + 1





    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 26 ] 
    Autor Wiadomość
    PostNapisane: 12 maja 2021, o 10:22 
    Offline
    Nowy

    Dołączył(a): 17 paź 2018
    Posty: 13
    Pomógł: 0

    Witam,
    mam taki problem z ustawieniem zwłoki czasowej na Atmedze.

    W programie potrzebuję ustawić stan wysoki na pinie na 10us, korzystam z _delay_us(10).
    Po tym czasie zdejmuje stan wysoki z PINu.

    Problem polega na tym, że przy pomiarze na oscyloskopie czas 10us jest nieosiągalny. Bez żadnej zwłoki stan wysoki utrzymuje się około 2 ms.

    Jak dam dłuższy czas zwłoki np 100 ms to na oscyloskopie wychodzi dobrze. Sygnał wysoki na 10us ma uruchomić pomiar ultradźwiękowego czujnika odległości

    Co może być przyczyną?

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



    Pozdrawiam

    ------------------------ [ Dodano po: kilkunastu sekundach ]

    Dodam jeszcze, że na pinach portu C mam generalnie cały czas stan wysoki, niezależnie od tego co zadam w programie.

    Więc może procek jest uszkodzony?



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 12 maja 2021, o 11:23 
    Offline
    Użytkownik

    Dołączył(a): 25 lip 2013
    Posty: 2595
    Pomógł: 128

    A zrob test bez delaya us i daj miganie pinem - zobaczysz ile będzie trwał najkrótszy z impulsów. Dodatkowo takie rzeczy to zdecydowanie lepiej analizatorem logicznym podglądać i mierzyć. Nawet tym najprostszym za 40zl



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 12 maja 2021, o 14:34 
    Offline
    Moderator
    Avatar użytkownika

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

    rektim napisał(a):
    Więc może procek jest uszkodzony?


    Proszę nie osłabiaj ;) .... weź ty pokaż panie jaki masz cały kod ale tylko testowy z tym 10us, do tego jak masz ustawione fusebity w procku, jakie masz taktowanie no i czy jak masz ustawioną częstotliwość w ustawieniach projektu w Eclipse - bo mam nadzieję że Eclipse to robisz - a jak w AtmelKocimStudio no to już się nie dziwię, że masz DZIWOLĄGOWATE czasy.

    bo nie procek uszkodzony tylko ty mogłeś wiele baboli i to naraz zrobić i nawet na 100% zrobiłeś bo taki odstęp 10uS to nie problem - no chyba że jedziesz na ślimaczym tempie 1MHz ale to i tak nigdy w życiu nie wyszłyby 2ms tylko np może 12-14us

    _________________
    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: 12 maja 2021, o 15:10 
    Offline
    Nowy

    Dołączył(a): 17 paź 2018
    Posty: 13
    Pomógł: 0

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



    Bardzo możliwe, że coś mam namieszane. Używam eclipse.
    W trakcie pisania kodu miałem też problemy z definicjami #define, jak zrobiłem w pliku nagłówkowym np. #define SYG_PORT A, to po napisaniu wywołania SYG_PORT w procedurze wyskakiwał mi błąd, że "A" nie jest zdefiniowane.


    Przy mruganiu pinem czas między środkami zboczy to około 30us.


    screeny z atmegi:
    ObrazekObrazekObrazek



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 12 maja 2021, o 15:48 
    Offline
    Moderator
    Avatar użytkownika

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

    rektim napisał(a):
    W trakcie pisania kodu miałem też problemy z definicjami #define, jak zrobiłem w pliku nagłówkowym np. #define SYG_PORT A, to po napisaniu wywołania SYG_PORT w procedurze wyskakiwał mi błąd, że "A" nie jest zdefiniowane.

    A to nie dziwne i nie może działać - polecam Bluebooka żebyś zobaczył i nauczył korzystać się z preprocesora - bo tak na zasadzie zgadywania to jak sam widzisz ciężko.

    Ok procek masz ustawiony na wewn oscylator 8 MHz - tylko teraz czy ustawiłeś tę częstotliwość dla projektu w Eclipse ? jeśli tak to pokaż screen jak masz to ustawione w eclipse - bo coś czuję że tam masz 1MHz i stąd bierze się babol

    _________________
    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: 12 maja 2021, o 17:43 
    Offline
    Użytkownik

    Dołączył(a): 05 gru 2012
    Posty: 67
    Lokalizacja: Warszawa
    Pomógł: 4

    A interfejs JTAG nie powinien być wyłączony?

    pozdrawiam
    Wojtek



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 12 maja 2021, o 18:32 
    Offline
    Moderator
    Avatar użytkownika

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

    rektim napisał(a):
    A interfejs JTAG nie powinien być wyłączony?

    Warto wyłączyć, ale przekonałby się o tym szybciej albo przekona jak będzie chciał użyć pinów na PORTC i nie będą mu działać ... wtedy pewnie kolega znowu zapyta dlaczego nie działają i czy procek uszkodzony. A tu wystarczy JTAG'a wyłączyć ;)

    _________________
    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: 12 maja 2021, o 21:55 
    Offline
    Użytkownik

    Dołączył(a): 11 sty 2015
    Posty: 166
    Pomógł: 24

    mirekk36 napisał(a):
    a jak w AtmelKocimStudio no to już się nie dziwię, że masz DZIWOLĄGOWATE czasy.

    A Ja się dziwię skąd taki pomysł, że problem wynika z AtmelKociegoStudio.
    Ja się przesiadłem z Eclipsa właśnie na ten koci AtmelStudio i nie ma w nim żadnych problemów z czasami,
    dodatkowo skończyły się problemy z pluginem, rozindeksowanymi odwołaniami, aktualnymi toolchainami, brakiem nowszych procków, itd.
    Oczywiście nikogo nie namawiam do przesiadki, każdy używa to do czego się przyzwyczaił i co mu bardziej pasuje.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 13 maja 2021, o 10:17 
    Offline
    Nowy

    Dołączył(a): 17 paź 2018
    Posty: 13
    Pomógł: 0

    Ustawienie częstotliwości w eclipse:
    Obrazek

    ------------------------ [ Dodano po: 6 minutach ]

    Zastanawiam się czy tutaj nie zrobiłem błędu przy wyborze typu projektu.

    Obrazek



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 13 maja 2021, o 11:15 
    Offline
    Moderator
    Avatar użytkownika

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

    No tu masz wszystko dobrze i projekt i taktowanie, prześlij więc krótki kod jakim testujesz tę przerwę 10us. Ale nie to co wcześniej pokazałeś bo tam w ogóle nie można się zorientować o co chodzi.

    Zrób najprostszy plik main.c i w nim w pętli głównej tylko zmieniaj stany pinów i zrób tego _delay_us(10us) ok? i pokaż - tak żeby ktoś mógł sobie ew nawet wprost wkleić i sprawdzić na swoim procku

    albo najlepiej spakuj cały projekt z Eclipsa do ZIP'a

    _________________
    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: 13 maja 2021, o 14:47 
    Offline
    Nowy

    Dołączył(a): 17 paź 2018
    Posty: 13
    Pomógł: 0

    Przesyłam projekt



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 13 maja 2021, o 15:33 
    Offline
    Moderator
    Avatar użytkownika

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

    Usunąłem załącznik bo w załączniku nie wiem po co dałeś kod pełnej biblioteki do LCD a po co ? Każdy na forum czy czytelnik ma ten kod więc po co ? Proszę zapamiętaj, żeby nie udostępniać w ten sposób bibliotek z książek wydawnictwa Atnel na forach - tym forum również. Szanujmy się - pracę autora książek i bibliotek - dobrze. To moja gorąca prośba

    ------------------------ [ Dodano po: 3 minutach ]

    tym bardziej że twój kod z main.c był taki:

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


    Jaki sens tu w ogóle było inicjalizować LCD ?

    Po drugie - banglujesz sobie pinem PB0 ale gdzie jest twoje 10us ??? Ty z tego kodu chcesz mieć 10us pomiędzy zmianą stanu pinu PB0 ?

    Proszę cię wklej porządny kod w którym mówiłeś że dawałeś niby 10us a wychodziły ci 2ms - czyli napisz ten krótki kod testowy i bez żadnej biblioteki LCD, z opóźnieniem o jakie ci chodzi i wtedy pokaż ten kod a w załączniku do posta spakuj do ZIP cały projekt ok?

    _________________
    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: 13 maja 2021, o 17:01 
    Offline
    Nowy

    Dołączył(a): 17 paź 2018
    Posty: 13
    Pomógł: 0

    Jeszcze raz wrzucam projekt.

    Przepraszam za wrzucenie LCD w poprzednim poście.

    ------------------------ [ Dodano po: 1 minucie ]

    Przy mruganiu pinem PB0 w poprzednim projekcie czas między środkami zbocza narastającego i opadającego wynosi około 30 us.


    Załączniki:

    Aby zobaczyć załączniki musisz się zalogować. Tylko zalogowani użytkownicy mogą oglądać i pobierać załączniki.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 13 maja 2021, o 18:38 
    Offline
    Moderator
    Avatar użytkownika

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

    Noooo Panie, to chyba już czujesz RÓŹNICĘ pomiędzy 2ms a 30us ;) co ?

    To teraz - zamiast ustawiać ŚLIMACZE tępo 8 MHz i wewn oscylator, podłącz sobie kwarc 20MHz, przestaw Fusebity na kwarc > 8MHz, przestaw taktowanie w Eclipse na 20 MHz i wtedy sprawdź jakie masz czasy - to zrozumiesz zależności i utrwali ci się to na zawsze - co od czego jest zależne ok ?

    Daj znać po testach ;)

    _________________
    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: 13 maja 2021, o 19:04 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 31 mar 2015
    Posty: 310
    Pomógł: 18

    Mnie nadal coś nie pasuje w tych rozważaniach. Częstotliwość 1/0.00003=33333.33Hz. Z czego wynika tak niska częstotliwość pracy funkcji while?



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 13 maja 2021, o 19:42 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 26 sty 2016
    Posty: 1168
    Lokalizacja: Kraków
    Pomógł: 93

    A może problem nie jest w działaniu procka, tylko w pomiarze oscyloskopem?
    Nie wiem, jaki ma kolega rektim, ale może być tak, że jest za długi czas próbkowania i "łapie" stan wysoki z kilkunastu impulsów



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 14 maja 2021, o 16:00 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 31 mar 2015
    Posty: 310
    Pomógł: 18

    Podjąłem wyzwanie i na moim zestawie osiągnąłem prędkość funkcji while 1000000 operacji dodawania na sekundę(1Mhz), lecz jest to 8 razy mniej od FCPU. Ja nie wiem, może ktoś podpowie dlaczego?
    Dodaję kod testowy:
    Składnia: [ Pobierz ] [ Ukryj ] [ Zaznacz wszystko ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

    Mnie też interesuje zagadnienie zjawiska Dopplera.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 14 maja 2021, o 17:40 
    Offline
    Użytkownik

    Dołączył(a): 25 lip 2013
    Posty: 2595
    Pomógł: 128

    A jakie masz fuse bity? Przyjrzyj im się dokładnie.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 14 maja 2021, o 18:02 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 31 mar 2015
    Posty: 310
    Pomógł: 18

    Jeżeli to do mnie pytanie, to mkAVR Calkulator wyświetla " ATmega32, LOW-E4, HIGH-D9, LOCK BAJT-3F"



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 14 maja 2021, o 18:20 
    Offline
    Użytkownik

    Dołączył(a): 25 lip 2013
    Posty: 2595
    Pomógł: 128

    Przyjrzałeś im się? Masz wewnętrzny oscylator czy kwarc?



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 14 maja 2021, o 18:54 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 31 mar 2015
    Posty: 310
    Pomógł: 18

    Poprzedni odczyt dotyczył wewnętrznego oscylatora. Po zmianie fuse bitów na zewnętrzny kwarc 8MHz działanie jest bez zmian.
    mkAVR Calkulator wyświetla " ATmega32, LOW-FF, HIGH-D9, LOCK BAJT-3F"



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 14 maja 2021, o 18:58 
    Offline
    Użytkownik

    Dołączył(a): 25 lip 2013
    Posty: 2595
    Pomógł: 128

    Na zewnętrznym kwarcu działa dobrze, czy też za wolno?



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 14 maja 2021, o 21:48 
    Offline
    Użytkownik

    Dołączył(a): 31 paź 2012
    Posty: 99
    Pomógł: 4

    Witam.
    Wirnick napisał(a):
    osiągnąłem prędkość funkcji while 1000000 operacji dodawania na sekundę(1Mhz), lecz jest to 8 razy mniej od FCPU. Ja nie wiem, może ktoś podpowie dlaczego?

    Jeżeli dobrze rozumiem masz taktowanie 8Mhz i zastanawiasz się dlaczego pętla while działa z prędkością 1 Mhz ( tzn z taką częstotliwością wykonują się operacje dodawania) ?

    Odpowiedź jest raczej prosta ( nie zaglądałem do kodu ani C ani asemblera tak dla ścisłości ) 8 Mhz to częstotliwość taktowania procesora i jeżeli w twojej pętli while ilość rozkazów jest równa 8 i każdy rozkaz zajmuje tylko jeden takt procesora no to chyba widzisz, że potrzeba 8 taktów procesora na wykonanie całej pętli while.
    Żadne czary mary i nic nigdzie nie znika.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 15 maja 2021, o 17:25 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 31 mar 2015
    Posty: 310
    Pomógł: 18

    Sprawdzałem ATmegę32 z kwarcami 8MHz,12MHz, 14,318MHz i doszedłem do stałej zależności - Częstotliwość pętli while(1) jest równa F_CPU/8. Zaznaczam, że w moim programie powyżej są 2 rozkazy w każdym takcie i 2 rozkazy co 65535 taktów. Dochodzi jeszcze rozkaz zmiany stanu led co sekundę dobrany ze wzoru F_CPU/8/0xFFFF/p=0. Możliwe,że takty to nie takty - mało czytam i czasami brak mi odpowiednich słów.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 15 maja 2021, o 19:47 
    Offline
    Użytkownik

    Dołączył(a): 31 paź 2012
    Posty: 99
    Pomógł: 4

    Witam
    Wirnick napisał(a):
    Sprawdzałem ATmegę32 z kwarcami 8MHz,12MHz, 14,318MHz i doszedłem do stałej zależności - Częstotliwość pętli while(1) jest równa F_CPU/8.

    Stała ilość rozkazów w pętli while wymusza stałą zależność w stosunku do taktowania procesora.
    Dodaj do pętli jakiekolwiek rozkazy naprawdę cokolwiek: odczyt pinu, ustawienie portu, porównanie dwóch zmiennych, dekrementacja kilku zmiennych a zobaczysz, że zależność F_CPU/8 ulegnie zmianie
    Wirnick napisał(a):
    Zaznaczam, że w moim programie powyżej są 2 rozkazy w każdym takcie
    no niestety nie są
    http://ww1.microchip.com/downloads/en/devicedoc/atmel-0856-avr-instruction-set-manual.pdf
    pod tym linkiem znajdziesz zestaw rozkazów AVR i jak zauważysz to najmniejsza ilość cykli (czyli taktów zegara procesora) wynosi 1. Każdy rozkaz języka C jest przekładany na 1 lub więcej rozkazów assemblera zatem niemożliwe są "2 rozkazy w każdym takcie".



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 23 maja 2021, o 10:45 
    Offline
    Nowy

    Dołączył(a): 17 paź 2018
    Posty: 13
    Pomógł: 0

    Witam,
    jeżeli o mnie chodzi to po ponownym ustawieniu migania pinem w pętli while uzyskałem czas 5 us- regularnie się powtarzał na oscyloskopie. Nie zmieniałem częstotliwości- zostawiłem 8 MHz, więc nie wiem gdzie był błąd.
    Używam oscyloskopu Rigol DS1052E. Nie znalazłem tam opcji ustawienia częstotliwości próbkowania.

    Czujnik uruchomiłem. Dziękuję za pomoc.



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

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