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



Teraz jest 15 cze 2026, o 17:13


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 5 ] 
Autor Wiadomość
PostNapisane: 12 sie 2014, o 22:59 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 mar 2013
Posty: 67
Pomógł: 1

Więc problem polega na mojej niewiedzy, nieumiejętności przedstawienia sobie tego zagadnienia w głowie.

Na wejście INT podaje impulsy z wentylatorka PC przeliczam i otrzymuje RPM i tu zaczyna się moja bolączka (i zajawka do analogowego wskazania) otóż niby "ładnie" działa pokazuje te 5-7k RPM lecz podczas zerowania licznika impulsów wskazówka spada w okolice zera po czym znów rusza do góry i tak co 1sek (okres zliczania impulsów).

Walczę z tym od 3 dni by uzyskać efekt płynności jak na filmie poniżej :
https://www.youtube.com/watch?v=c5nKSAdUxw8

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



Sun podpowiedział bym analogowo serwem sterował lecz przyznam że wolałbym programowo to rozwiązać.

_________________
Zdravim



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 sie 2014, o 00:45 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 07 kwi 2013
Posty: 418
Lokalizacja: Rzeszów
Pomógł: 102

Działanie adekwatne do kodu programu ;) - przy zerowaniu zmiennej "r", wartość "rpm" jest również równa 0, ponieważ jest ona mnożona przez zerową wówczas wartość. Ciągnie to za sobą dalsze konsekwencje, a w efekcie "OCR1A = 1260".
Najprościej inkrementuj jakąś nową zmienną (nie "r") i kiedy licznik doliczy już do 100 to zeruj tą nową zmienną jednocześnie przepisując jej wartość do zmiennej "r".

Zmodyfikowany fragment, który kopiuje nowy pomiar dopiero w momencie porównania licznika:

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


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 sie 2014, o 08:16 
Offline
Użytkownik

Dołączył(a): 26 lut 2014
Posty: 227
Lokalizacja: LDZ
Pomógł: 22

Poza tym wywal to goto. To nie basic/bascom. Zrób funkcję wywoływaną w miejscu goto.



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

Dołączył(a): 07 kwi 2013
Posty: 418
Lokalizacja: Rzeszów
Pomógł: 102

Zamiast "goto NORMAL" można "break" wstawić, co przerwie działanie wewnętrznej pętli "while (1)". Zbędna się wtedy staje etykieta "NORMAL".
Można również wyrażenie warunkowe umieścić w pętli "while":

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


Nie jest to jednak przyczyną zaistniałego problemu.



Ostatnio edytowano 13 sie 2014, o 17:59 przez atmel, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 sie 2014, o 15:31 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 mar 2013
Posty: 67
Pomógł: 1

To że układ działa adekwatnie do programu to wiedziałem :P głupie jedno przypisanie i 3 dni w (wiadomo co)

Dzięki jeszcze raz. Musiałem jeszcze zmienić "częstotliwość konwersji" bo skakało to co 1 sek.

_________________
Zdravim



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

Strefa czasowa: UTC + 1


Kto przegląda forum

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