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



Teraz jest 8 lut 2025, o 09:49


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 7 ] 
Autor Wiadomość
PostNapisane: 3 lis 2012, o 17:34 
Offline
Użytkownik

Dołączył(a): 03 lis 2012
Posty: 43
Pomógł: 1

Witam
Po pierwsze, jako że to mój pierwszy post - witam wszystkich.

Muszę zarejestrować ILOŚĆ (czas trwanie nie ma znaczenia) impulsów podanych na któreś z wejść. Impulsy to skok napięcia do 5V. Potrzebuję również pętli na 400 wierszy, które są kolejno uzupełnianie, a kiedy wszystkie zostaną wypełnione, wypełnianie następuje od początku - to już jest rozwiązane, w załączniku plik exe z przykładem (tam jest tylko 10 wierszy - aby lepiej zrozumieć ideę, wpiszcie zmienne przynajmniej 20 razy i obserwujcie co "zwraca" konsola). Rozszerzenie exe jest zablokowane, więc je spakowałem.
Tutaj kod w C:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


W uC zamiast podawania kolejnych elementów do tablicy, ma być podawana ilość impulsów, które pojawiły się na wejściu w ciągu 1/10 sekundy (czyli cała tabela zostanie zapełniona w 40 sekund). Na ekranie (nie wiem jeszcze czy jakiś 2x16, czy z Nokii 3310, zależy jaki załatwię) ma być wyświetlana suma całej tabeli, odświeżana co 1/10 sekundy. Przez pierwsze 40 sekund na zmianę z wynikiem ma być wyświetlany komunikat "Wynik zafałszowany, zbieram dane." (2 sekundy komunikatu, 2 sekundy wyniku). Po tych pierwszych 40 sekundach ma być wyświetlany sam wynik.

Wolałbym nie dostać gotowca, ponieważ chce się czegoś nauczyć, więc bardzo prosiłbym o informacje jak rejestrować ilość impulsów, jak zrobić to ostrzeżenie przez pierwsze 40 sekund itp. Na razie nie mogę przetestować, bo jeszcze nie mam wyświetlacza (a impulsy mogę symulować "zwieraniem" pinu +5V i jakiegoś pinu wejściowego, bo impulsy z mojego urządzenia też będą miały 5V.

Pozostaje jeszcze najważniejsza kwestia - jak przerobić to na formę trawioną przez STM32F0Discovery? :)

A teraz pytanie do Was - pomożecie? ;).
Pozdrawiam
Darken


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: 3 lis 2012, o 20:29 
Offline
Użytkownik

Dołączył(a): 04 paź 2011
Posty: 8605
Pomógł: 337

pomogę ci , ale musisz trochę poczekać , bo mam ks108 na razie rozbebeszony z Antystatycznym
na razie jak nie czytałeś to poczytaj sobie w poradnikach o róznicach w trupestudio i na mojej stronie o timerach w stm32

_________________
Zbuduj swój system [url=https://helion.pl/ksiazki/w-labiryncie-iot-budowanie-urzadzen-z-wykorzystaniem-ukladow-esp8266-i-esp32-andrzej-gromczynski,wlablo.htm#format/d]IOT[/url]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 lis 2012, o 23:17 
Offline
Użytkownik

Dołączył(a): 03 lis 2012
Posty: 43
Pomógł: 1

Spokojnie, poczekam, byle bym się doczekał ;).



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 lis 2012, o 11:46 
Offline
Użytkownik

Dołączył(a): 04 paź 2011
Posty: 8605
Pomógł: 337

No dobra można się za to brać , więc tak najpierw z edytuje ci posta , bo w znacznikach syntax -c lepiej się kod czyta

Impulsy najlepiej mierzyć przez int w przerwaniu timera czyli ustalasz czas zliczania i zliczasz impulsy , następnie zależnie od potrzebnej ilości
wykonujesz proste działanie:

Przykład:

- potrzebujemy liczyć obroty silnika w obr/min
- posłużymy się czujnikiem optycznym (transoptor szczelinowy) umieszczonym tak by pasek zapięty na osi silnika
przy każdym pełnym obrocie przechodził przez transoptor --- w ten sposób uzyskamy 1 impuls na pełny obrót
oczywiście dokładniej możemy liczyć dzieląc obrót osi wirnika na 4 części -- wtedy mamy 4 impulsy na 1 obrót

- wyjście naszego transoptora wpinamy na wejście zliczające wyzwalane stanem wysokim lub niskim zależnie od transoptora
- ustalamy przerwanie timera w którym jest dokonywane zliczanie np:

dla obr/min pomiaru nie musimy wykonywać przez całą minute
wiedząc że 1 ms = 10-3 s = 1/1 000 s czyli 1 min = 60000 ms
wiedząc że na 1 obrót mamy 1 impuls

wykonujemy pomiar na ułamkową cześć naszej min np przez 1 sek
czyli przerwanie od timera ustawiamy na 1000ms

i w tym czasie zliczamy impulsy z naszego transoptora
wynik jaki otrzymamy to liczba obrotów na 1sek i należy go sobie przeliczyć na 1min by otrzymać gotowe dane do prezentacji.

tak to wygląda w teorii i w zasadzie też w praktyce jak więc prosiłeś daje ci tylko nakreślenie tematu

W przypadku przerzucenia kodu na STM32F0 W TrupeStudio wybierz nowy projekt dla F0 i przenieś kod
uwzględniając zmiany bibliotek i niektórych funkcji.

W razie czego pisz , jeśli projekt przekracza 32KB przenieś się na inne środowisko


Autor postu otrzymał pochwałę

_________________
Zbuduj swój system [url=https://helion.pl/ksiazki/w-labiryncie-iot-budowanie-urzadzen-z-wykorzystaniem-ukladow-esp8266-i-esp32-andrzej-gromczynski,wlablo.htm#format/d]IOT[/url]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 lis 2012, o 16:16 
Offline
Użytkownik

Dołączył(a): 03 lis 2012
Posty: 43
Pomógł: 1

SunRiver napisał(a):
Impulsy najlepiej mierzyć przez int w przerwaniu timera czyli ustalasz czas zliczania i zliczasz impulsy.

A czy mógłbyś proszę mi to wyjaśnić (najlepiej jakiś kod bądź pseudokod)

SunRiver napisał(a):
W przypadku przerzucenia kodu na STM32F0 W TrupeStudio wybierz nowy projekt dla F0 i przenieś kod uwzględniając zmiany bibliotek i niektórych funkcji.

Właśnie nie wiem, co muszę zmienić - wystarczy dopisać biblioteki, zdefiniować wyjścia dla LCD oraz wejście impulsów, a w pętli głównej zliczać impulsy na wejściu, tak?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 lis 2012, o 17:36 
Offline
Użytkownik

Dołączył(a): 04 paź 2011
Posty: 8605
Pomógł: 337

tak to wystarczy
z uwzględnieniem twojego procesora :)

_________________
Zbuduj swój system [url=https://helion.pl/ksiazki/w-labiryncie-iot-budowanie-urzadzen-z-wykorzystaniem-ukladow-esp8266-i-esp32-andrzej-gromczynski,wlablo.htm#format/d]IOT[/url]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 2 gru 2012, o 17:05 
Offline
Użytkownik

Dołączył(a): 03 lis 2012
Posty: 43
Pomógł: 1

Na razie ogarnąłem wyświetlanie na LCD 2x16 - na szczęście wszystko działa.
Mój kod wygląda tak:
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 nie ogarniam konfiguracji pinu do zliczenia, a
SunRiver napisał(a):
Impulsy najlepiej mierzyć przez int w przerwaniu timera czyli ustalasz czas zliczania i zliczasz impulsy

niewiele mi mówi. Impulsy +5V chcę podłączyć do np. PA5 i zapisywać do zmiennej $wynik, która będzie wyświetlana w 2 wierszu. Dalej może jakoś mi się uda (założenia z programu w pierwszym poście ;)).
Pozdrawiam

EDIT
Aha - jeżeli mogę prosić to chciałbym jeszcze, aby po kliknięciu przycisku "User" (ten niebieski na płytce) w drugim wierszu wyświetlany był $wynik2 ($wynik2=$wynik/100, czyli jeśli $wynik=2, to $wynik2=0,2). Kiedy klikniemy znowu, ponownie wyświetlany jest $wynik i tak w kółko.

EDIT 2
Aby sprecyzować - proszę o zmodyfikowanie mojego programu tak, aby wyświetlał na LCD ilość podanych impulsów na wejście PA5 (czyli po prostu wyświetlał zmienną $wynik). Dodatkowo (ale niekoniecznie) to, co w pierwszym edicie ;).



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