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



Teraz jest 31 sty 2026, o 07:37


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 23 ] 
Autor Wiadomość
PostNapisane: 17 cze 2015, o 14:16 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 gru 2014
Posty: 32
Lokalizacja: UD
Pomógł: 0

Witam, mam problem, ponieważ chciałbym napisać program - prosty licznik impulsów wyświetlający wynik na wyświetlaczu LCD.
Przykładowo po wciśnięciu tact switcha do liczby wyświetlonej na lcd dodawałaby się określona wartość (w domyśle 1).

Mam nadzieję, że dobrze wytłumaczyłem istotę sprawy.

Bardzo proszę o jakieś wskazówki, ponieważ jestem zielony i kompletnie nie wiem jak się za to zabrać :( (Chodzi o sam kod programu)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 cze 2015, o 14:27 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27449
Lokalizacja: Szczecin
Pomógł: 1045

Pokaż najpierw co sam napisałeś ? twoje próby ...

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



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

Dołączył(a): 04 cze 2014
Posty: 855
Lokalizacja: pod Warszawą
Pomógł: 58

cześć
masz dwa wyjścia
odpalić timer w trybie normal i zliczać impulsy - ale to tak tylko dla zabawy czy działa - jak zaczynałem to bawiłem się tak z timerami :lol:

wykorzystać któryś z pinów INT, powołać zmienną którą będziesz inkrementował w każdym przerwaniu spowodowanym wciśnięciem klawisza
do wyświetlania na LCD użyj bibliotek P.Mirka są świetne
no i jeszcze poczytaj o obsłudze klawiszy tu na forum lub na blogu P.Mirka

i nie pękaj jak Ci coś nie wychodzi, ale na gotowca to raczej nie licz jak sam nie zaczniesz czegoś robić

pozdrawiam Marek

_________________
Pomóżcie mi stanąć na nogi



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

Dołączył(a): 22 gru 2014
Posty: 32
Lokalizacja: UD
Pomógł: 0

Tak jak pisałem nie wiem nawet jak się za to zabrać. Wszelkie moje próby nawet znalezienia jakiejś podpowiedzi kończyły się fiaskiem :(

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: 17 cze 2015, o 19:49 
Offline
Użytkownik

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

hmm... wklejasz kod do migania ledem przyciskiem ?? co to ma do liczenia impulsów ??

do tej pory wydawało mi się że używa się timera ??
Sprecyzuj jakie impulsy chcesz mierzyć i w jaki sposób ... na czym ...



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 cze 2015, o 19:54 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 gru 2014
Posty: 32
Lokalizacja: UD
Pomógł: 0

Miganie przyciskiem to tylko przykład. Chodzi mi o to, że po naciśnięciu tego switcha program będzie robić określoną czynność (czyli w moim przypadku dodawał 1 do wyniku i wyświetlał na lcd).



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 cze 2015, o 20:01 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 17 lip 2013
Posty: 208
Lokalizacja: Kielce
Pomógł: 15

Czyli rozumien, że bardziej Ci chodzi o zliczanie naciśnięć przycisku?

DDRB |= (0<<PRZYCISK);

Zero jest domyślnie w rejestrze po resecie. Ponadto robisz tu maly błąd w definicjach preprocesora, bo w/g mnie po podstawieniu wychodzi Ci:

DDRB |= (0<<(1<<PB2));

----

W instrukcji warunkowej if tak samo:

if (PINB & (1<<PRZYCISK)) --> if (PINB & (1<<(1<<PB2)))



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 cze 2015, o 20:20 
Offline
Użytkownik

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

Rozumiem że ci chodzi w takim wypadku o coś takiego ??

Obrazek

Wprawdzie akurat tu użyłem 16Bitowego MSP430 ale zasada jest taka sama
opisałem to tutaj: http://www.sunduino.pl/wordpress/55/


może cię natchnie i coś napiszesz :) albo przynajmniej postarasz się poszukać rozwiązania


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 cze 2015, o 01:59 
Offline
Nowy

Dołączył(a): 19 maja 2015
Posty: 24
Pomógł: 1

Tutaj znajdziesz coś takiego: http://hobby.abxyz.bplaced.net/index.php?pid=4&aid=8
Szukaj "Przykład drugi - Licznik owiec"
Cały kurs jest warty polecenia, bo link poprowadzi Cię do ostatniej części.
Ale jeśli, jak sam to zaznaczyłeś jesteś zielony, to może zacznij od 7-segmentowego wyświetlacza LED -> http://hobby.abxyz.bplaced.net/index.php?pid=4&aid=7
Powodzenia!


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 cze 2015, o 14:53 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 gru 2014
Posty: 32
Lokalizacja: UD
Pomógł: 0

O to chodziło - dzięki wielkie wszystkim za pomoc :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 cze 2015, o 11:26 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 gru 2014
Posty: 32
Lokalizacja: UD
Pomógł: 0

Jeszcze jedna sprawa jeśli można :P

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


Mam coś takiego i przycisk podpięty do PD2 i do VCC. Licznik ani drgnie.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 cze 2015, o 12:22 
Offline
Użytkownik
Avatar użytkownika

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

Przycisk masz podłączony do PD2 i Vcc a sprawdzasz stan niski na pinie PD1. Taki zapis
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
to nic innego jak
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Zamiast tych kocich wartości hex lepiej używać przesunięć bitowych
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Od razu widać o jaki pin chodzi.

No i określ się jaki stan chcesz sprawdzać na pinie: niski czy wysoki.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 cze 2015, o 13:37 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 10 mar 2013
Posty: 739
Lokalizacja: Poznań
Pomógł: 84

Nie wiem czy dobrze rozumiem .

Zwierasz przyciskiem do VCC pin PD2 ?.
Jeśli tak to musisz sprawdzać stan wysoki na PD2 żeby wiedzieć kiedy jest wciśnięty
i dodatkowo podciągnąć pin do GND zewnętrznym rezystorem.

Wygodniej zwierać przyciskiem do GND i korzystać ze sposobu podanego przez
kolegę @jacekk232 a pin podciągnąć programowo do VCC.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 cze 2015, o 15:12 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 gru 2014
Posty: 32
Lokalizacja: UD
Pomógł: 0

Wszystko ok z tym, że dostaję odwrotny efekt od zamierzonego. Mianowicie gdy nie trzymam przycisku zegar liczy, zaś gdy nacisnę zatrzymuje się. Mógłby ktoś mi z tym pomóc? ;P



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 cze 2015, o 17:35 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 10 mar 2013
Posty: 739
Lokalizacja: Poznań
Pomógł: 84

wstaw schemat jak masz ten przycisk podłączony



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 cze 2015, o 08:53 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 gru 2014
Posty: 32
Lokalizacja: UD
Pomógł: 0

Przepraszam za taki schemat ale nie mam eagle'a ;p

Obrazek



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 cze 2015, o 09:45 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 10 mar 2013
Posty: 739
Lokalizacja: Poznań
Pomógł: 84

Jeśli uruchamiasz kod z pierwszego postu
to przeczytaj jeszcze raz uważnie post kolegi @jacekk232
ponieważ PD2 to nie to samo co 0x02



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 cze 2015, o 10:40 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 gru 2014
Posty: 32
Lokalizacja: UD
Pomógł: 0

Wszystko śmiga, dzięki :) Oto kod:

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: 21 cze 2015, o 11:20 
Offline
Użytkownik
Avatar użytkownika

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

Nie do końca masz wszystko dobrze. Tutaj
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

ustawiłeś wszystkie piny portu D jako wyjścia i ustawiłeś na nich stan wysoki. A potem PD2 (które jest wyjściem w stanie wysokim) zwierasz do masy. Ciekawe jak długo ten pin to wytrzyma.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 cze 2015, o 18:51 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 gru 2014
Posty: 32
Lokalizacja: UD
Pomógł: 0

Kurcze, to ja już nie wiem - mógłbyś mi podpowiedzieć co konkretnie zmienić?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 cze 2015, o 19:25 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 10 mar 2013
Posty: 739
Lokalizacja: Poznań
Pomógł: 84

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


W praktyce nie musisz portu ustawiać jako wejściowy ponieważ jest on
tak ustawiony po restarcie uC



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 cze 2015, o 19:47 
Offline
Użytkownik
Avatar użytkownika

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

Chodziło mi o to, że w tej linii
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
ustawiłeś wszystkie piny Portu D jako wyjścia.

Natomiast w tej linii
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
wystawiłeś na tych liniach stan wysoki czyli np. 5V jeśli procek jest zasilany akurat takim napięciem.

A potem przyciskiem zwierasz PD2 do masy. W ten sposób na tym pinie robisz normalne zwarcie. Nie zdziwił bym się gdybyś tym sposobem upalił port w procku.

Radzę poczytać jak się ustawia kierunki pinów a avr-kach http://mirekk36.blogspot.com/2012/01/av ... stawy.html



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 cze 2015, o 15:12 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 gru 2014
Posty: 32
Lokalizacja: UD
Pomógł: 0

Dzięki za wskazówki ;)



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

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