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



Teraz jest 5 sty 2025, o 12:29


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 8 ] 
Autor Wiadomość
PostNapisane: 1 lip 2015, o 17:11 
Offline
Użytkownik

Dołączył(a): 01 sty 2014
Posty: 116
Pomógł: 14

Witam!
Od dzisiaj jestem posiadaczem płytki STM32VLDISCOVERY z mikrokontrolerem STM32F100RB. Chciałem dzisiaj porównać osiągi Atmegi 328p i STM. W tym celu napisałem na obydwa mikrokontrolery program, który w głównej pętli miał tylko zmianę stanu wyjścia. W 328p udało mi się uzyskać częstotliwość około 2MHz przy taktowaniu 12MHz. W STM na wyjściu jest maksymalnie 1,2MHz przy taktowaniu 24MHz. Czy może mi ktoś wytłumaczyć czym to jest spowodowane?? Może coś w programie jest nie tak? Poniżej program:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 lip 2015, o 18:34 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 26 sie 2013
Posty: 119
Lokalizacja: Cinisi
Pomógł: 12

nie sprawdzałem w jaki sposób ustawiłeś rejestry do taktowania procka jednak tutaj szukałbym ewentualnego problemu, skoro od niedawna programujesz stm32 to być może coś przeoczyłeś właśnie tutaj. A drugie co to jeśli robisz takie porównanie to zmieniaj stan wyjścia stm32 nie przez bibliotekę a bezpośrednio na rejestrach. Pozdrawiam

_________________
sig off :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 lip 2015, o 18:55 
Offline
Użytkownik

Dołączył(a): 01 sty 2014
Posty: 116
Pomógł: 14

Zmieniałem też stany poprzez

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


Wyniki są porównywalne. Bez ustawiania taktowania z tego co doczytałem mikrokontroler startuje z HSI i jest taktowany 8MHz. Przy takich ustawieniach na wyjściu stan zmienia się z częstotliwością około 340kHz czyli 1/3 tego co przy ustawieniu częstotliwości.

Widać zależność 340kHz/1,2MHz = 8/24 = 1/3 Dlatego też zakładam, że częstotliwość ustawiona jest poprawnie.

Będę próbował uruchomić timery i zobaczymy czy potwierdzi się częstotliwość.


edit:

Zegar jest ustawiony na 24MHz to jest pewne. Potwierdziło to przerwanie od SysTick. Ustawione co 1ms dla 24MHz jest wywoływane dokładnie co 1ms;)
Jestem bardzo ciekawy dlaczego nie mogę uzyskać szybszej zmiany wyjścia.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 2 lip 2015, o 09:38 
Offline
Użytkownik

Dołączył(a): 25 cze 2015
Posty: 123
Pomógł: 4

Tylko czego się spodziewasz po serii VL, w dodatku tej starej i najsłabszej. To jak byś wziął attiny2313 i narzekał że jest wolne ;).

Chcesz migać szybciej, są nowsze rdzenie/procki na STM32. VL to totalny lowend.

_________________
"O sygnałach bez całek" Czesław Frąc



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 2 lip 2015, o 14:07 
Offline
Nowy

Dołączył(a): 09 maja 2013
Posty: 7
Pomógł: 0

Wydaje mi się ,że problem tkwi gdzie indziej - jeśli zobaczysz jaki kod wynikowy assemblera wygenerował kompilator to okaże się dlaczego działa to tak wolno. Szybciej będzie jeśli pin będzie zmieniać jakieś peryferium np zegar (np PWM) lub kod zawierający po sobie kilkadziesiąt następujących po sobie instrukcji ustawiających i zerujących pin ale napisanych wprost a nie w pętli.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 lip 2015, o 10:14 
Offline
Użytkownik

Dołączył(a): 01 lis 2013
Posty: 301
Pomógł: 32

Witam,

Może walnę gafę, ale jakie taktowanie ma magistrala APB2 ?

_________________
Pozdrawiam,
sq8mvy, Paweł



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 lip 2015, o 11:41 
Offline
Użytkownik

Dołączył(a): 01 sty 2014
Posty: 116
Pomógł: 14

No więc udało mi się uzyskać zmianę co trochę ponad 40ns. Wychodzi prawie 24MHz więc wydaje mi się, że jest dobrze:) Faktycznie dopiero przy użyciu timera udało się uzyskać taką częstotliwość. Dzisiaj sprawdzę jeszcze jak ze zmianą wyjść bez pętli - tylko w ciągu;) ale rzeczywiście czasy trwania stanu wysokiego i niskiego nie były sobie równe;)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 lip 2015, o 13:28 
Offline
Użytkownik

Dołączył(a): 29 lip 2014
Posty: 195
Pomógł: 44

Witam,

Nie mam pojęcia, dlaczego kompilator generuje taki "pokręcony" kod - sama zmiana stanu wyjść trwa krótko, ale pętla nieskończona - porażka. Widocznie kompilator wie, że takie testy są bez sensu ;-). Z tego widać, że w takich wypadkach warto rzucić okiem na kod wynikowy. Jako ciekawostkę napiszę, że ten sam kompilator potrafi wygenerować dla ARM pętlę while(1) składającą się z 1 instrukcji .asm. Ostatnio testowałem jakieś tam procedury obsługi przerwań, a program główny składał się tylko z takiej pustej pętli. Przerwania się nie wykonywały, ja straciłem kupę czasu, a wystarczyło rzucić okiem na plik .lss :-(.

Pozdrawiam, QuadMan.



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 6 gości


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