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ą?

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?

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:  rektim [ 12 maja 2021, o 15:10 ]
Tytuł:  Re: Atmega32- zestaw ATB- problem z delay_us

Składnia: [ Pobierz ] [ Ukryj ]
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

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:  rektim [ 13 maja 2021, o 10:17 ]
Tytuł:  Re: Atmega32- zestaw ATB- problem z delay_us

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

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:

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?

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:
Składnia: [ Pobierz ] [ Ukryj ]
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/