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



Teraz jest 5 lut 2026, o 19:00


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 12 ] 
Autor Wiadomość
PostNapisane: 18 maja 2015, o 10:51 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 12 mar 2014
Posty: 197
Lokalizacja: Kielce
Pomógł: 3

Witam. Jestem po dziale adc z niebieskiej książki. Wykonałem sobie na płytce stykowej taki mały woltomierz. Wszystko fajnie działa, postanowiłem wykonać klawiaturę analogową. Nie bardzo wiem jak definiować wciśnięcie przycisku. Pierwszy mój pomysł, po prostu wartość ADC:

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


totalnie dla testów to zrobiłem i zauważyłem, że strasznie wolno to działa. Wciskam przycisk i po około 3 sekundach dioda zmienia swój stan na przeciwny. W sumie na wyświetlaczu zmienia się to tak samo, który kolwiek przycisk nie wcisnę to trzeba dość długo poczekać aż zmieni się wartość adc.

Jak mogę rozwiązać ten problem ?? Efekt jaki chce uzyskać to, żeby moja klawiatura reagowała tak jak normalny przycisk klikam i jest :D

Brak mi pomysłów, proszę was o wskazówki :D

_________________
BlueBook



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 maja 2015, o 11:01 
Offline
Użytkownik

Dołączył(a): 22 sty 2014
Posty: 1806
Zbananowany użytkownik

Pomógł: 168

Po pierwsze spróbuj dać większy przedział, po drugie pokaż resztę kodu. Po trzecie wszystkie wyrażenia warunkowe dawaj w nawiasy, więcej pisania ale kod czytelniejszy i masz pewność że wykonują się w kolejności takiej jak Ty chcesz.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 maja 2015, o 11:10 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 12 mar 2014
Posty: 197
Lokalizacja: Kielce
Pomógł: 3

Proszę bardzo o to mój cały kod:

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


Zwiekszyłem również przedział:

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


ale nic nie pomogło.

Dodam, że pracuję na procesorze Atmega8 taktowaną częstotliwością 1Mhz.

_________________
BlueBook



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 maja 2015, o 11:34 
Offline
Użytkownik

Dołączył(a): 22 sty 2014
Posty: 1806
Zbananowany użytkownik

Pomógł: 168

Z moich obliczeń że Twój timer programowy tyka co 2,6 sekundy i to w nim robisz pomiar... więc czemu się dziwisz?

------------------------ [ Dodano po: 2 minutach ]

Twoje przerwanie wykonuje się co:

Fclk/(prescaler*(OCR+1)) = 1000000/(1024*(9+1)) = 97,7 Hz czyli 0,01024 sekundy.

Teraz sobie to pomnóż razy 250..

------------------------ [ Dodano po: 3 minutach ]

Moja rada, dokonuj pomiaru poza przerwaniem i przyspiesz ten procesor do jakiegoś normalnego taktowania. Chyba że lubisz ślimaki.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 maja 2015, o 15:39 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 12 mar 2014
Posty: 197
Lokalizacja: Kielce
Pomógł: 3

Zwiększyłem częstotliwość taktowania do 8Mhz. Nie rozumiem jak mogę dokonywać pomiaru poza przerwaniem. Przecież muszę co jakiś czas wywoływać polecenie pomiaru. _delay_ms blokuje procesor na jakiś czas, Timery programowe też się nie nadają to jak to zrobić ??

_________________
BlueBook



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 maja 2015, o 15:44 
Offline
Użytkownik

Dołączył(a): 22 sty 2014
Posty: 1806
Zbananowany użytkownik

Pomógł: 168

A w którym miejscu przerwania dokonujesz pomiaru? Bo ja jakoś tego nie widzę ;)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 maja 2015, o 17:24 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 12 mar 2014
Posty: 197
Lokalizacja: Kielce
Pomógł: 3

Już widzę gdzie zrobiłem błąd jeśli chodzi o przerwanie. Cała moja pętla główna to było jedno wielkie przerwanie (tak mi się wydaje :oops: ). Troszkę pokombinowałem, po wstawieniu w pętlę główną :

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


Zaczeło działać tak jak chciałem, czyli płynnie.

Ale dlaczego po użyciu okropnego delaya, przecież to zatrzymuję procesor. Czy jest to związane z czasem konwersji ADC ??
W książce Pana Mirka też jest użyty delay.

Odnośnie samej klawiatury, wystarczy ustawić przedział ADC i to tylko tyle ?? Czy da się to inaczej zrobić ??

_________________
BlueBook



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 maja 2015, o 17:30 
Offline
Użytkownik

Dołączył(a): 22 sty 2014
Posty: 1806
Zbananowany użytkownik

Pomógł: 168

Wywal tego delaya. Tą linijkę:

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


wstaw poza kod timera programowego... nie widzisz że teraz pomiar dokonuje Ci się co 2,7 sekundy? Bo co tyle przy preskalerze 1024 i zegarze 1 MHZ oraz timerze równym 250 wykonuję się tego kod spod ifa w Twojej pętli głównej.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 maja 2015, o 19:06 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 12 mar 2014
Posty: 197
Lokalizacja: Kielce
Pomógł: 3

Ach no tak :) Dzięki za pomoc :)

_________________
BlueBook



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 maja 2015, o 19:21 
Offline
Użytkownik

Dołączył(a): 22 sty 2014
Posty: 1806
Zbananowany użytkownik

Pomógł: 168

Spoko, po to tu jesteśmy, żeby sobie pomagać. :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 maja 2015, o 19:33 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 12 mar 2014
Posty: 197
Lokalizacja: Kielce
Pomógł: 3

Takie jeszcze jedno pytanko :) Jak sobie poradzić z drganiami styków, bo takie występują chyba prawda ??

Klawiaturka ładnie, się przełącza ale po dłuższej zabawie widać że coś jest nie tak.

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


to dioda zmienia stan na przeciwny, a po którymś razie się zapala i trzeba kliknąć 2 razy bądź przytrzymać dłużej przycisk.
Jak naciskam dość szybko, to na wyświetlaczu pojawia się wynik, ale na diodę led już nie łapie :(

------------------------ [ Dodano po: 41 minutach ]

Znalazłem odpowiedź, tak mi się wydaję :) Poradnik Pana Mirka ADC Part 6a :) Muszę go obejżeć, chyba tam będzie recepta na mój problem :D

_________________
BlueBook



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 maja 2015, o 20:28 
Offline
Użytkownik

Dołączył(a): 22 sty 2014
Posty: 1806
Zbananowany użytkownik

Pomógł: 168

musisz zwiększyć tolerancje na conajmniej +- 40 w jedną i w drugą stronę. Niestety przetwornik ADC w megach nie należy do zbyt dokładnych. Ale jak się obejrzy Mirka poradniki o ADC to można z niego wykrzesać dużo. Zadbaj o odpowiednią filtracje zasilania przede wszystkim.



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

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:  
cron
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO