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



Teraz jest 22 gru 2024, o 10:23


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 13 ] 
Autor Wiadomość
PostNapisane: 18 mar 2014, o 13:47 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 10 lut 2014
Posty: 42
Pomógł: 1

Witam

Próbuje dwoma klawiszami zwiększać i zmniejszać zmienią ,"uint8_t s;" niestety efekt jest taki że albo skaczą mi wartości 0 do 255.
albo zwiększam wartość ale w taki sposób że muszę trzymać wciśnięty przycisk i co sekundę zwiększa się o 1

Jaki najlepiej to rozwiązać ?
Próbowałem jeszcze z modyfikacja kodu z bloga P.mikra gdzie opisywał drgania styków cz.2 ale nic nie dało chodzi mi o użycie zmieniaj key_lock;


tutaj zwiększa się co sekundę >>

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



tutaj działa w miarę prawidłowo ale nie chce stosować _delay_ms()

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



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

Dołączył(a): 28 sty 2013
Posty: 426
Pomógł: 36

Witam.
Jezeli nie chcesz uzywać _delay_ms(), to musisz skorzystać z timerów programowych. Przykład:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



Ostatnio edytowano 18 mar 2014, o 18:13 przez kaka0204, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 mar 2014, o 17:35 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 10 lut 2014
Posty: 42
Pomógł: 1

Sigma dobrze ;)
PS. zmienna timer powinna być zdefiniowana jako volatile ;)



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

Dołączył(a): 28 sty 2013
Posty: 426
Pomógł: 36

Faktycznie. Już poprawiłem.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 mar 2014, o 11:48 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 10 lut 2014
Posty: 42
Pomógł: 1

Mam jeszcze jeden problem

zmienia typu uint8_t s

Chce żaby przyjmowała wartości od 0 do max np 10 tym czasem dzieją się dziwne rzeczy niby uint8_t wiec max 255 a tu n nawet 900 się pojawia nie rozumiem tej sytuacji dla zobrazowania przesyłam filmik i kod w którym próbowałem jakoś to zniwelować



[youtube]
http://www.youtube.com/watch?v=GDSZRVGz4pQ
[/youtube]












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



Ostatnio edytowano 19 mar 2014, o 17:58 przez Bedi, łącznie edytowano 7 razy

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

Dołączył(a): 29 sty 2012
Posty: 777
Lokalizacja: Karpicko k. Wolsztyna
Pomógł: 197

Lepiej pokaż cały kod bo coś czuję, że ta zmienna zmienia swoją wartość w granicach 0...10 a problemem jest jej wyświetlanie na LCD.
Bo wyświetlasz liczbę np. 10. Na drugiej pozycji masz cyfrę zero. I potem przy wyświetlaniu liczb od 0 do 9 cały czas na drugiej pozycji wyświetla się to zero. Żeby się tego pozbyć w najprostszy sposób to wyświetl za zmienną s spację która nadpisze tą cyfrę.

Poza tym jeśli ta zmienna ma przyjmować wartości w zakresie od 0 do 10 to zadeklaruj ją jako int8_t a nie uint8_t. I skracanie jej cyklu zrób w ifach obsługi klawiszy
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Bo teraz masz tak, że ustawianie wartości tej zmiennej klawiszami masz w jednej części programu a skracanie jej cyklu w innej. I dlatego na LCD pojawiają ci się takie wartości jak np.55.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 mar 2014, o 17:22 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 10 lut 2014
Posty: 42
Pomógł: 1

Zmieniłem typ zmiennej jak radziłeś i efekt taki >


[youtube] http://www.youtube.com/watch?v=IZNyMVVW ... e=youtu.be [/youtube]




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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 mar 2014, o 17:26 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 sty 2013
Posty: 426
Pomógł: 36

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


na

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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 mar 2014, o 17:39 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 10 lut 2014
Posty: 42
Pomógł: 1

Gorzej pulsuje w tym miejscu wyświetlacz


Pomiar ADC też coś nie tak jak za mocno fotorezystor oświetlony zachowuje się jak w sytuacji gdy zaciemniony >>


[youtube] http://www.youtube.com/watch?v=8kTX9VVt ... e=youtu.be [/youtube]



Ostatnio edytowano 19 mar 2014, o 18:00 przez Bedi, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 mar 2014, o 18:00 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 sty 2013
Posty: 426
Pomógł: 36

Bedi napisał(a):
To tylko ukrycie wyniku jak dla mnie chyba nie tędy droga

Tędy, tędy :)
W rzeczywistości twoja zmienna, nie wynosi 90 a 9. Dlaczego? Dlatego, że wyświetlacz nie jest kasowany. A jak najlepiej kasować wyświetlacz? Nadpisywać go. Więc pewnie gdzieś masz coś źle. Pokaż filmik, jak wygląda to twoje pulsowanie.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 mar 2014, o 19:50 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 29 sty 2012
Posty: 777
Lokalizacja: Karpicko k. Wolsztyna
Pomógł: 197

Z tymi spacjami to mi chodziło o takie coś
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

I to samo dla wyświetlanej wartości ADC.


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 mar 2014, o 21:50 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 10 lut 2014
Posty: 42
Pomógł: 1

Zrobiłem tak jak radzi kolega jacekk232 i pulsacja ustała wszystko ok teraz już będę pamiętał żeby kasować wyświetlacz, a czy można by było to zrobić poleceniem >> lcd_cls; ?

Od razu zapytam ma ktoś może jaki kod programu link do projektu gdzie tworzył menu np kilku poziomowe jutro zamierzam się za to zabrać i potrzebuje jakiś punkt zaczepu żeby się trochę na czymś sugerować.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 mar 2014, o 22:11 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 sty 2013
Posty: 426
Pomógł: 36

Bedi napisał(a):
Od razu zapytam ma ktoś może jaki kod programu link do projektu gdzie tworzył menu np kilku poziomowe jutro zamierzam się za to zabrać i potrzebuje jakiś punkt zaczepu żeby się trochę na czymś sugerować.


Zobacz sobie na instrukcję swith(). Z jej pomocą można bardzo łatwo zrobić takie menu.

Bedi napisał(a):
a czy można by było to zrobić poleceniem >> lcd_cls; ?


Oczywiście, jednak sposób z nadpisywaniem tak jak pokazał jacekk232 jest dużo lepszy.

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

Strefa czasowa: UTC + 1


Kto przegląda forum

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