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



Teraz jest 12 lut 2025, o 22:24


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 11 ] 
Autor Wiadomość
PostNapisane: 12 maja 2014, o 18:40 
Offline
Użytkownik

Dołączył(a): 26 mar 2014
Posty: 25
Pomógł: 0

Witam ponownie,
Chciałem zasięgnąć porady dotyczącej mojego kodu. USB ładnie sobie śmigało, więc postanowiłem dobudować pare klocków, które pozwalały by na próbkowanie sygnału i wysyłanie przez USB. Pokleiłem, pokleiłem... i wyszedł mi poniższy kod (zamieszczam zawartość pliku main.c). Pierwsze uruchomienie - w terminalu widze 20 zer. Poprawki, korekty - nic. Zapuściłem sobie miganie diody w przerwaniu od DMA - nie miga, czyli przerwanie takowe w ogóle nie występuje. Mógłby ktoś zerknąć na kod i sprawdzić czego brakuje ?
Pozdrawiam.

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


P.S.
Sam ciągle to sprawdzam jednak może ktoś bardziej doświadczony po rzuceniu okiem na problem rozwieje wątpliwości w znacznie krótszym czasie.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 maja 2014, o 20:39 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 12 sie 2013
Posty: 230
Lokalizacja: Zabrze
Pomógł: 17

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


Ta funkcja ustawia wyjście w stan "1", a nie zmienia stanu naprzemiennie, więc dioda raczej nie będzie migać. To tak na szybko, co zwróciło moją uwagę.

_________________
40-32:2=4!



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 maja 2014, o 20:41 
Offline
Użytkownik

Dołączył(a): 26 mar 2014
Posty: 25
Pomógł: 0

Źle to określiłem - z tym miganiem ;) Ogólnie chciałem zobaczyć czy wchodzi w przerwanie - zaświecenie diody. Nie jestem pewien czy nie trzeba dołączać jakiejś deklaracji związanej z aktywacją zegara dla przerwań, ale w notach od STM32f303 nic o tym nie ma :/



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 maja 2014, o 21:36 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 12 sie 2013
Posty: 230
Lokalizacja: Zabrze
Pomógł: 17

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


To pierwsze chyba powinno być:

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

_________________
40-32:2=4!



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 maja 2014, o 21:51 
Offline
Użytkownik

Dołączył(a): 26 mar 2014
Posty: 25
Pomógł: 0

To nic nie dało :/ Dałem świecenie diody do funkcji main - zero reakcji...



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 maja 2014, o 05:38 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 12 sie 2013
Posty: 230
Lokalizacja: Zabrze
Pomógł: 17

No to jeszcze aktywuj zegar dla portu E, bo nie widzę tego w RCC_Config().

_________________
40-32:2=4!



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 maja 2014, o 15:14 
Offline
Użytkownik

Dołączył(a): 26 mar 2014
Posty: 25
Pomógł: 0

Aktywowałem ale dalej nic ehh...



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 maja 2014, o 18:06 
Offline
Użytkownik

Dołączył(a): 26 mar 2014
Posty: 25
Pomógł: 0

Masakra po całości... dzięki uprzejmości pewnego Pana z ST otrzymałem sprawnie działający program ADC+TIM+DMA. USB mi działało, więc postanowiłem je zestawic do kupy... wyszło mi coś takiego:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Wszystko fajnie, dioda się świeci - czyli void main jest 'widzialny' ale... na terminalu cisza... w dodatku stm32 mi go zawiesza :/



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 maja 2014, o 15:20 
Offline
Użytkownik

Dołączył(a): 26 mar 2014
Posty: 25
Pomógł: 0

Zero pomysłów ?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 maja 2014, o 18:27 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 17 sty 2013
Posty: 123
Lokalizacja: Warszawa
Pomógł: 10

Niestety, ale często własnie tak bywa, że oddzielnie każdy fragment kodu działa, a razem poskładane "do kupy" nie chcą.
Kody te mogą współzawodniczyć ze sobą o dostęp do zasobów mikrokontrolera, a wreszcie o sam czas procesora, który jest przecież ograniczony.
Wystarczy, że któryś z kodów będzie miał w sobie wbudowaną pętlę oczekiwania na jakiś warunek i już będzie blokował pozostałe części programu, które oczywiście nie będą działać poprawnie.
Dlatego między innymi stosuje się róźnego rodzaju RTOS'y, maszyny stanów, itp., żeby zapewnić współbieżność działania tych wszystkich programów.
Jeśli każdy z fragmentów programu Ci działa, a razem nie chcą, to zastanów się, w jaki sposób każdy z nich może oddziaływać na inny.
Który z nich powinien mieć największy priorytet działania, a który może poczekać. Czasami wystarczy zmienić priorytety przerwań i program zaczyna działać.
Niestety są to "najwredniejsze" z możliwych błędów, bo generalnie nie ma błędu programowego jako takiego, są tylko niespełnione warunki czasowe działania programu.
Może warto byłoby wprowadzić flagi informujące pozostałe części programu o uruchomieniu innego jego fragmentu - i w tym czasie wstrzymać się z uruchamianiem jednocześnie innych funkcji.
Spróbuj uruchamiać kod po kolei - najpierw jedną część, tą która działa bezproblemowo, potem dodawaj kolejne fragmenty i patrz czy to dodanie zakłóciło działanie tego pierwszego kodu.
Potem spróbuj przeanalizować co w danym kodzie może mieć wpływ na zaburzenie działania tego pierwszego działającego programu.
Trzeba rozbić problem na mniejsze części.
Dobrze jest też robić regularne backupy-snapshoty pisanego kodu, bo czasami "trąci się jakiś klawisz, bo klawiatura spada ze stołu" i to potrafi we wredny sposób niepostrzeżenie zmienić kod, który nagle przestaje działać. Wtedy odtworzenie kopii z backupu ratuje nas przed wielogodzinnym szukaniem niewiadomego błędu.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 maja 2014, o 21:35 
Offline
Użytkownik

Dołączył(a): 26 mar 2014
Posty: 25
Pomógł: 0

Witam ponownie,
Jado, robiłem tak jak pisałeś i wyszło, że... inicjacja USB wszystko wiesza... Wziąłem dla pewności "surowy" przykład z ST, dodałem zwykłe miganie diody - Set,Reset GPIO + for jako delay - i tnie automatycznie diode. Nie chce się już z tym grzebać bo straciłem już na tą transmisje ponad miesiąc :/ Przerobiłem kod, dodałem obsługe USART i kod wygląda następująco:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Przesyła wybraną próbke do PC (ADC w 100% działa bo sprawdzałem za pomocą potencjometru). Z racji że chciałem mieć 12 bitowe próbki zrobiłem sobie "rozdzielanie" 16bitowej wartości na 2 bajty - młodsza i starsza część próbki. Działa - tylko, że... nie potrafię zsynchronizować wysyłania naprzemiennego (raz leci odpowiednia sekwencja 16 bitów, raz lecą pod rząd same bity mniej znaczącej części, a innym razem bardziej znaczącej). Pierwsza myśl - wprowadze opóźnienie, ale czy to najlepszy sposób ? Wątpie... Kolejna sprawa, że chce osiągnąć częstotliwość próbkowania na poziomie 200-500kHz więc...wysyłanie na bieżąco nie spełni sie za bardzo. Są jakieś inne koncepcje na wysyłanie 12 bitowych wartości za pomocą USART w miare składny sposób ? Tak, wiem np opcja z funkcją ITOA, ale konwersja na char też swoje trwa.... docelowo chce wysyłać do komputera ok 1024-2048 próbek.
Pozdrawiam.



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

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