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



Teraz jest 25 cze 2026, o 13:04


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 21 ] 
Autor Wiadomość
PostNapisane: 12 gru 2015, o 17:48 
Offline
Nowy

Dołączył(a): 14 kwi 2015
Posty: 18
Pomógł: 0

Witam chiałem prosić o program w którym obliczany był by czas pomiędzy przyciskaniem 2 przycisków. Domyślam się że trzeba to zrobić na przerwaniach INT, ale musze przyznac że, jestem noga z programowania i nie bardzo rozumiem tą procedurę. Z góry dziękuje za pomoc i wyrozumiałość.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 gru 2015, o 17:49 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 mar 2014
Posty: 1475
Pomógł: 167

Cytuj:
Witam chiałem prosić o program w którym obliczany był by czas pomiędzy przyciskaniem 2 przycisków.

Listy do Świętego Mikołaja to chyba należy pisać nie w tym dziale.

--
Pozdrawiam,
Robert

------------------------ [ Dodano po: 1 minucie ]

Osoby na forum mogą pomóc Ci zrozumieć, jak czegoś nie rozumiesz. Albo poprawić błędy jak coś nie działa poprawnie.
Ale nie licz, że ktoś będzie za Ciebie pisał program.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 gru 2015, o 18:27 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 20 sie 2013
Posty: 795
Lokalizacja: Poznań
Pomógł: 59

A ja podpowiem Ci że gotowca - praktycznie z modyfikacją jednej linii znajdziesz w BB czyli niebieskim mirku.

http://atnel.pl/mikrokontrolery-avr-jezyk-c.html

A teraz mała wędka z mojej strony:
poczytaj o drganiach styków
po wykryciu wciśnięcia startujesz timer powiedzmy 100ms
w każdym cyknięciu sprawdzasz, czy klawisz znów wciśnięto. jeśli tak, to zwiększasz zmienną, jeśli nie wyłączasz timer i wartośc zmiennej określa ilość czasu pomiędzy wciśnięciami klawisza.



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

Dołączył(a): 22 paź 2013
Posty: 1988
Lokalizacja: Lipsko
Pomógł: 125

...i wcale nie musisz do tego wykorzystywać INT, poza tym nie napisałeś jaki rząd dokładności cię interesuje - 1s, 100ms, 10ms, a może 10us...

_________________
http://www.sylwekkuna.com



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 gru 2015, o 22:33 
Offline
Nowy

Dołączył(a): 14 kwi 2015
Posty: 18
Pomógł: 0

w sumie to zależy mi na jak dokładniejszym pomiarze rzędu 10us. Czy moge wykorzystac do tego port PD6 (ICP) na atmedze 32?



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

Dołączył(a): 22 paź 2013
Posty: 1988
Lokalizacja: Lipsko
Pomógł: 125

Jak najbardziej, tym dość dokładnie można zmierzyć czas. Przykład - np. obsługa podczerwieni :)

_________________
http://www.sylwekkuna.com



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 gru 2015, o 23:32 
Offline
Nowy

Dołączył(a): 14 kwi 2015
Posty: 18
Pomógł: 0

próbuje to zrozumieć na przykładzie podczerwieni

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


czy mój tok myslenia jest dobry?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 sty 2016, o 17:30 
Offline
Nowy

Dołączył(a): 14 kwi 2015
Posty: 18
Pomógł: 0

Ponieważ jeszcze nie poradziłem sobie z tym problemem, chciał bym wrócić do tematu i prośić o naprowadzenie. Próbuje coś z tym zrobić i jestem obecnie takim etapie
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Nie do końca rozumiem procedurę obslugi przerwań, powinienem zliczać czas pomiedzy dwoma zboczami narastajacymi (czyli 1 a 2, 3 a 4, 5 a 6... ). Tak zaglądałem do noty katalogowej.
Prosze o pomoc w postaci naprowadzenia ;) , nie w postaci gotowego kodu.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 sty 2016, o 19:07 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 mar 2014
Posty: 1475
Pomógł: 167

Ustawiasz zmienną start =0.
Gdy odbierzesz zdarzenia naciśnięcia przycisku i masz start = 0, to ustawiasz zmienną licznik = 0 i zmieniasz start na 1. A gdy po naciśnięciu przycisku masz start = 1, to zmieniasz go na 0 i robisz coś z uzyskaną daną czasu w zmiennej licznik.
W przerwaniu przepełnienia timera sprawdzasz czy masz start = 1 i jak tak to robisz licznik++.

Możesz też robić ciągły pomiar bez używania zmiennej start. Każde naciśnięcie "zapamiętuje" aktualną wartość licznik a następnie ją zeruje. W timerze zawsze zwiększasz wartość licznik.

--
Pozdrawiam,
Robert

------------------------ [ Dodano po: 7 minutach ]

Przerwanie przepełnienia timera zlicza ci czas np. ilość milisekund.
Przerwanie INT reaguje na zmianę stanu na linii, czyli zdarzenie naciśnięcia.

Będziesz jeszcze musiał uwzględnić problem "drgania styków". Ale na ten temat masz artykuły Mirka:
http://mirekk36.blogspot.com/2012/10/drgania-stykow-to-bajki-wiec-jak-to.html
http://forum.atnel.pl/topic1633.html



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 sty 2016, o 13:51 
Offline
Nowy

Dołączył(a): 14 kwi 2015
Posty: 18
Pomógł: 0

Próbowałem to zrobić przy pomocy 2 klawiszy, nie wiem czy o to Ci chodziło. Niestety nie uzyskuje tutaj oczekiwanego efektu.
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: 4 sty 2016, o 15:23 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 mar 2014
Posty: 1475
Pomógł: 167

Cytuj:
Niestety nie uzyskuje tutaj oczekiwanego efektu.
A jaki efekt uzyskujesz?

Tak na szybko, a przy okazji by było przejrzyściej, zmieniłbym obsługę przerwania na:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

a zerowanie licznika i sekund przeniósłbym do uruchamianiu startu:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


--
Pozdrawiam,
Robert



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 sty 2016, o 16:14 
Offline
Nowy

Dołączył(a): 14 kwi 2015
Posty: 18
Pomógł: 0

Poprawiłem błędy i juz program działa
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
teraz dodam wyswietlanie wartosci na wyswietlaczy lcd. Moje pytanie to jak moge zrobić żeby przy wcisnieciu 2 klawisza zapisywać sobie obliczny czas timera1 w zmiennej którą wyswietle na wyśiwetlaczu lcd?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 sty 2016, o 17:55 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 mar 2014
Posty: 1475
Pomógł: 167

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

Oczywiście dajesz to w warunku drugiego klawisza i masz zapamiętany stan licznika. I tą zmienną wyświetlasz na lcd.

Możesz też bazować na inteligentnym wyświetlaniu wartości ze zmiennej licznik / sekundy - wyświetlasz tylko gdy masz start = 0.

--
Pozdrawiam,
Robert

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

A możesz też zrobić inteligentny warunek (bazując tylko na zmienych start i licznik / sekunda) i wyświetlać informacje:
- ostatni odstęp między naciśniętymi klawiszami
- informację o tym że naciśnięto klawisz 1 i czas jaki do ej pory minął od tego zdarzenia

------------------------ [ Dodano po: 5 minutach ]

A jak chcesz się jeszcze pobawić, to możesz w prosty sposób wyświetlać minimalny oraz maksymalny czas odstępu (ze średnią wartości, jest już trochę większy problem)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 sty 2016, o 13:51 
Offline
Nowy

Dołączył(a): 14 kwi 2015
Posty: 18
Pomógł: 0

A może mi ktoś podpowiedzieć co mogę zrobić żeby ustawiać czestotliwości taktowania na atmedze 32 która nie jest obsługiwana przez mkAVR calculator? Ponieważ chiałem ten projekt przeniesć na wiekszy procek i trochę rozbudować.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 sty 2016, o 14:54 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 lis 2012
Posty: 298
Pomógł: 13

np. programem avr burn-o-mat



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 sty 2016, o 17:17 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 mar 2014
Posty: 1475
Pomógł: 167

Możesz konfigurować sobie fuse bity też bezpośrednio z Eclipse http://forum.atnel.pl/topic13557.html#p145354. Wgrywanie ich jest w dostępne w Project -> Properties i przy avrdude masz zakładkę fuses i tam możesz wybrać czy programujesz konkretną wartość, czy z formatki fuses.bits czy tam ręcznie zaznaczysz które mają być ustawione.

--
Pozdrawiam,
Robert



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 sty 2016, o 00:28 
Offline
Nowy

Dołączył(a): 14 kwi 2015
Posty: 18
Pomógł: 0

Zostałem jeszcze przy tamedze 8, podpiąłem lcd i staram sie wyswietlic wartosc "n", tylko coś mi kurcze nie wyswietla ani napisów ani wartości, sprawdziłem dokładnie lcd i ustawiłem kontrast.

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



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


Licznik działa, diody się swieca zgodnie z założenie programu, tylko ten lcd nic nie wyswietla, moze ktoś dopatrzył się błędu?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 sty 2016, o 08:32 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 sty 2013
Posty: 1760
Pomógł: 196

Witam
pawelszel1993 napisał(a):
lcd nic nie wyswietla

...nic jako nic ?
Nie masz błędów po kompilacji?
Może spróbuj dla testów zaraz po while(1){.. wpisać np.:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Jak podpięty RW?

Pozdr.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 sty 2016, o 21:07 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 mar 2014
Posty: 1475
Pomógł: 167

A co chcesz tym wyświetlić? n to jest liczba ...
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Zwracaj uwagi na informacje podawana przy kompilacji - okno konsoli (Console) oraz na ikonki w kodzie.

Jeżeli nie masz poprawnego wyświetlania, to znaczy, że masz coś nie tak w podłączeniu wyświetlacza. Na pewno piny są poprawnie podłączone zgodnie z zapisem w hd44780.h?


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


--
Pozdrawiam,
Robert



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 sty 2016, o 12:30 
Offline
Nowy

Dołączył(a): 14 kwi 2015
Posty: 18
Pomógł: 0

Już obsługuje licznik impulsów wszytko fajnie działa, mam na lcd to co chciałem i dziekuje za wszelekie podpowiedzi ;) .
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Mam jeszcze jedno pytanie troche z innej beczki: wykorzystuje jedną atmege 16 do obsługiwania kodów z podczerwieni i sterowania silnikami DC - czyli zdalny tryb sterowania. Atmege 8 wykorzystuje jako licznik pomiedzy 2 zboczami narastającymi - jest to tryb półautomatyczny. Teraz chciał bym w bardzo prosty sposób z atmegi 8 dawać sygnały atmedze 16 jak maja pracować silniki DC i zastanawiałem się czy mogę w atmedze 16 ustawić 4 porty jako wejscia- podłączenie na stanu wysokiego, a na atmedze 8 4 piny jako wyjścia (coś jak sterowanie klawiszami)? Czy takie podłączenie 2 procesorów spowoduje uszkodzenie ich uszkodzenie?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 sty 2016, o 15:21 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 mar 2014
Posty: 1475
Pomógł: 167

Jeżeli oba układy będą miały wspólne masy oraz poziomy zasilania będą zgodne (oba 5V lub oba 3,3V) to możesz śmiało łączyć. Jak chcesz mieć bardziej zaawansowane połączenie, to możesz też pomyśleć o wysyłaniu danych między układami po RS232 / SPI / I2C (TWI) :)

--
Pozdrawiam,
Robert


Autor postu otrzymał pochwałę


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

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