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



Teraz jest 29 mar 2024, o 16:54


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 7 ] 
Autor Wiadomość
PostNapisane: 19 cze 2018, o 12:58 
Offline
Nowy

Dołączył(a): 11 gru 2014
Posty: 8
Pomógł: 0

Cześć,
mam pewien kłopot ze sprawdzeniem programu, który napisałem.
Próbuję stworzyć sygnał cyfrowy na podstawie protokołu DShot600 (do sterowników silników bezszczotkowych).
Posiłkowałem się programem do diod WS2811 (z bluebooka albo z bloga mk? nie pamiętam) i przerobiłem dwie funkcje do wysyłania bitów 0 i 1.
W załączeniu obrazek jak powinny wyglądać czasy trwania bitów.
[Na razie interesują mnie tylko dane, a nie CRC czy cała ramka.]
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Pytanie tylko jak sprawdzić poprawność działania funkcji (czy czasy się zgadzają)?
Potrzebowałbym zapewne oscyloskopu minimum 25MHz :shock:
Jak widać program jest prosty ale bez narzędzi/pomysłu nigdy go nie zweryfikuję. :(


Obrazek
czas trwania bitów w protokole dshot600


@edit: stąd wziąłem wiedzę o protokole, stronka po angielsku:
https://blck.mn/2016/11/dshot-the-new-kid-on-the-block/



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 cze 2018, o 13:36 
Offline
Użytkownik

Dołączył(a): 29 paź 2017
Posty: 230
Pomógł: 26

Masz Timery programowe którymi możesz zmierzyć czasy
Bym to widział tak:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Każdy z czasów możesz w ten sposób zmierzyć
w pliku .lss masz komendy i możesz wyliczyć ile taktów co zajmuje:

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


Czyli Twój czas to będzie ilość taktów zegara minus to co zajmuje ustawienie zegara i przepisanie wartości do zmiennej
z dokładnością to pojedynczych tyknięć zegara

_________________
Jestem na GG 31324
Nowy soft, nowa nadzieja.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 cze 2018, o 09:39 
Offline
Nowy

Dołączył(a): 11 gru 2014
Posty: 8
Pomógł: 0

Dziękuję za pomoc :)
Faktycznie dobrym sposobem jest wykorzystanie timera, choć oczywiście nie do końca precyzyjnym.

Przemyślałem to i widzę następujące kwestie:

-sprawdziłem ile trwa przypisanie wartości z rejestru do zmiennej czas w poniższy sposób:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

wyszło zero. Następnie dodałem kilka takich samych przypisań:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

kazde przypisanie dodawało po 3 cykle zegara do wyniku. Skoro po jednym przypisaniu wyszło zero cykli, zakładam że nie będzie ono miało wpływu na wynik gdy już zmierzę "czas" wykonywania funkcji. :idea:

-praktycznie wszystkie instrukcje ładnie się dodają, "nopy" po jednym cyklu zegara, ustawienie wyjść dwa cykle itd.
Mimo to przy sterowaniu diodą WS2811 p. Mirek mówił, że w rzeczywistości sygnał jest bardziej zniekształcony, tj wydłużony.
Nawet jeśli tak się stanie z moim dshotem, to czy przy czasach od 625 do 1670 nanosekund będzie to miało znaczenie? Bo zawsze jest jakaś tolerancja, a tamta dioda WS2811 ma z kolei szybszą komunikację (np. 2,5 razy krótszy bit zera).

-zaglądałem do asemblera i kompletnie nic nie zrozumiałem :lol:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Jeśli jednak obliczenia przełożą się na praktykę, to chyba mam problem z głowy ;)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 cze 2018, o 11:06 
Offline
Użytkownik

Dołączył(a): 25 lip 2013
Posty: 2561
Pomógł: 126

A może spróbuj symulatora software'go w Atmel Studio do policzenia czasu wykonywania twoich procedur?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 cze 2018, o 11:31 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 mar 2014
Posty: 1475
Pomógł: 167

aiwa napisał(a):
zaglądałem do asemblera i kompletnie nic nie zrozumiałem
Możesz włączyć dodawanie informacji z jakich linii kodu w C pochodzą te komendy asemblerowe :)

--
Pozdrawiam,
Robert

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

Masz na ten temat informacje tutaj topic3741.html



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 cze 2018, o 12:00 
Offline
Użytkownik

Dołączył(a): 29 paź 2017
Posty: 230
Pomógł: 26

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


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


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

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

_________________
Jestem na GG 31324
Nowy soft, nowa nadzieja.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 cze 2018, o 18:47 
Offline
Użytkownik

Dołączył(a): 07 cze 2016
Posty: 563
Pomógł: 143

JarekB napisał(a):
Kod:
00000098 <main>:
 98:    12 be           out    0x32, r1    ; 50
    ...                                                                      // tu wielki kompilator zrobił numer
  a6:    82 b7           in    r24, 0x32    ; 50                    // dołożył tyle pustych linijek ile jest nop-ów
  a8:    80 93 00 01     sts    0x0100, r24    ; 0x800100 <_edata>  // różnica między 98 a a6


A na czym konkretnie polega ten numer kompilatora? ;)
To nie są puste linijki. Pod tymi adresami pomiędzy 0x98 i 0xA6 są właśnie instrukcje NOP.

Można oczywiście ustawić wyższy poziom Debug Info, ale i tak zapewne nie wszystkie instrukcje będą widoczne w pliku *.lss.

Za to w Atmel Studio podczas symulacji w oknie Disassembly kod wygląda tak:
Kod:
int main( void ) {
    TCNT0 = 0;
00000048  OUT 0x26,R1      Out to I/O location
    asm( "nop" );
00000049  NOP       No operation
    asm( "nop" );
0000004A  NOP       No operation
    asm( "nop" );
0000004B  NOP       No operation
    asm( "nop" );
0000004C  NOP       No operation
    asm( "nop" );
0000004D  NOP       No operation
    asm( "nop" );
0000004E  NOP       No operation
    czas = TCNT0;
0000004F  IN R24,0x26      In from I/O location
00000050  STS 0x0100,R24      Store direct to data space


Poza tym dostępne jest okienko o nazwie Processor Status, w którym jest całe mnóstwo przydatnych informacji, jak np. adres aktualnie wykonywanej instrukcji (PC counter), wskaźnik stosu, licznik cykli wykonanych podczas wykonywania instrukcji, Stop Watch przeliczający wykonane instrukcje na czas (na podstawie zadanej przez nas częstotliwości taktowania).

Trudno tu opisać wszystkie możliwości symulatora, ale bardzo łatwo w takich właśnie sytuacjach przetestować, co wygenerował kompilator. Oczywiście symulator nie jest w stanie zasymulować wszystkiego (np. pracy UARTa), czasami potrzebny jest debugger sprzętowy, ale i tak dużo funkcji naszego programu można przetestować.

Dlatego osobiście podpisałbym się pod radą kolegi micky:
micky napisał(a):
A może spróbuj symulatora software'go w Atmel Studio do policzenia czasu wykonywania twoich procedur?

Oczywiście wymaga to nie tylko zainstalowania Atmel Studio. Trzeba się jeszcze nauczyć obsłużyć taki symulator, ale myślę, że na potrzeby tak prostego programu dużo się uczyć nie trzeba...

Z drugiej strony trochę się obawiam, że mnie kolega Mirek zruga za promowanie ("kociego") Atmel Studio ;)



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

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 8 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