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



Teraz jest 27 gru 2024, o 01:54


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: 2590
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: 27319
Lokalizacja: Szczecin
Pomógł: 1041

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 ]
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: 27319
Lokalizacja: Szczecin
Pomógł: 1041

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: 27319
Lokalizacja: Szczecin
Pomógł: 1041

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: 27319
Lokalizacja: Szczecin
Pomógł: 1041

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: 27319
Lokalizacja: Szczecin
Pomógł: 1041

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: 27319
Lokalizacja: Szczecin
Pomógł: 1041

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: 1164
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 ]
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: 2590
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: 2590
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: 2590
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