ATNEL tech-forum https://forum.atnel.pl/ |
|
Atmega32- zestaw ATB- problem z delay_us https://forum.atnel.pl/topic23771.html |
Strona 1 z 1 |
Autor: | rektim [ 12 maja 2021, o 10:22 ] |
Tytuł: | Atmega32- zestaw ATB- problem z delay_us |
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ą? 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? |
Autor: | micky [ 12 maja 2021, o 11:23 ] |
Tytuł: | Re: Atmega32- zestaw ATB- problem z delay_us |
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 |
Autor: | mirekk36 [ 12 maja 2021, o 14:34 ] |
Tytuł: | Re: Atmega32- zestaw ATB- problem z delay_us |
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 |
Autor: | mirekk36 [ 12 maja 2021, o 15:48 ] |
Tytuł: | Re: Atmega32- zestaw ATB- problem z delay_us |
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 |
Autor: | wojtek1000 [ 12 maja 2021, o 17:43 ] |
Tytuł: | Re: Atmega32- zestaw ATB- problem z delay_us |
A interfejs JTAG nie powinien być wyłączony? pozdrawiam Wojtek |
Autor: | mirekk36 [ 12 maja 2021, o 18:32 ] |
Tytuł: | Re: Atmega32- zestaw ATB- problem z delay_us |
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ć |
Autor: | auers [ 12 maja 2021, o 21:55 ] |
Tytuł: | Re: Atmega32- zestaw ATB- problem z delay_us |
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. |
Autor: | mirekk36 [ 13 maja 2021, o 11:15 ] |
Tytuł: | Re: Atmega32- zestaw ATB- problem z delay_us |
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 |
Autor: | rektim [ 13 maja 2021, o 14:47 ] |
Tytuł: | Re: Atmega32- zestaw ATB- problem z delay_us |
Przesyłam projekt |
Autor: | mirekk36 [ 13 maja 2021, o 15:33 ] |
Tytuł: | Re: Atmega32- zestaw ATB- problem z delay_us |
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: 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? |
Autor: | rektim [ 13 maja 2021, o 17:01 ] |
Tytuł: | Re: Atmega32- zestaw ATB- problem z delay_us |
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. |
Autor: | mirekk36 [ 13 maja 2021, o 18:38 ] |
Tytuł: | Re: Atmega32- zestaw ATB- problem z delay_us |
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 |
Autor: | Wirnick [ 13 maja 2021, o 19:04 ] |
Tytuł: | Re: Atmega32- zestaw ATB- problem z delay_us |
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? |
Autor: | Marhef [ 13 maja 2021, o 19:42 ] |
Tytuł: | Re: Atmega32- zestaw ATB- problem z delay_us |
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 |
Autor: | Wirnick [ 14 maja 2021, o 16:00 ] |
Tytuł: | Re: Atmega32- zestaw ATB- problem z delay_us |
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: 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. |
Autor: | micky [ 14 maja 2021, o 17:40 ] |
Tytuł: | Re: Atmega32- zestaw ATB- problem z delay_us |
A jakie masz fuse bity? Przyjrzyj im się dokładnie. |
Autor: | Wirnick [ 14 maja 2021, o 18:02 ] |
Tytuł: | Re: Atmega32- zestaw ATB- problem z delay_us |
Jeżeli to do mnie pytanie, to mkAVR Calkulator wyświetla " ATmega32, LOW-E4, HIGH-D9, LOCK BAJT-3F" |
Autor: | micky [ 14 maja 2021, o 18:20 ] |
Tytuł: | Re: Atmega32- zestaw ATB- problem z delay_us |
Przyjrzałeś im się? Masz wewnętrzny oscylator czy kwarc? |
Autor: | Wirnick [ 14 maja 2021, o 18:54 ] |
Tytuł: | Re: Atmega32- zestaw ATB- problem z delay_us |
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" |
Autor: | micky [ 14 maja 2021, o 18:58 ] |
Tytuł: | Re: Atmega32- zestaw ATB- problem z delay_us |
Na zewnętrznym kwarcu działa dobrze, czy też za wolno? |
Autor: | pagosa747 [ 14 maja 2021, o 21:48 ] |
Tytuł: | Re: Atmega32- zestaw ATB- problem z delay_us |
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. |
Autor: | Wirnick [ 15 maja 2021, o 17:25 ] |
Tytuł: | Re: Atmega32- zestaw ATB- problem z delay_us |
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. |
Autor: | pagosa747 [ 15 maja 2021, o 19:47 ] |
Tytuł: | Re: Atmega32- zestaw ATB- problem z delay_us |
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". |
Autor: | rektim [ 23 maja 2021, o 10:45 ] |
Tytuł: | Re: Atmega32- zestaw ATB- problem z delay_us |
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. |
Strona 1 z 1 | Strefa czasowa: UTC + 1 |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |