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



Teraz jest 12 lip 2025, o 00:08


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 14 ] 
Autor Wiadomość
PostNapisane: 5 mar 2015, o 17:31 
Offline
Nowy

Dołączył(a): 05 mar 2015
Posty: 20
Pomógł: 0

Witam Was wszystkich serdecznie. To mój pierwszy post na tym forum. Od niedawna zaczołem przygodę z programowaniem mikroprocesorów.

Posiadam procesor Atmega8, podłączyłem wyświetlacz lcd 2x16 i kilka przycisków. Chciałem zrobić odmierzanie czasu za pomocą przycisków i podłączonego już wyświetlacza. Oczywiście pojawiło się parę problemów, mianowicie od kilku dni męczę się z pętla która ma odliczać sekundy i minuty. Ogólne założenie jest takie:

Przycisk 1, zwiększamy minuty.
Przycisk 2, zmniejszamy minuty.
Przycisk 3, enter. (zaczynamy odliczać aż do 0).


Częściowo się to udało, ale pętla się kończy i jakoś nie mam pomysłu na to żeby skończyła się dopiero przy końcu czasu. Kombinuję ale nie wychodzi mi to, spowodowane to jest raczej brakiem styczności z takimi pętlami. Nie posiadam BB ale już nie długo się zaopatrzę w niego. Drugi problem jaki posiadam, którego nie mam pojęcia jak rozwiązać to jest samo wyświetlanie zmiennych s(sekund) i m(minut). Mianowicie podczas ustawienia:

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


Nie mogę otrzymać takiej struktury: 00:00 podczas wyświetlanie cyfr pojedynczych od 0 do 9 to jeszcze jak Cie mogę ale jak wyświetlam liczby >10 to sprawa się komplikuje bo wszystko na siebie nachodzi.

Aktualnie efekt wygląda tak, dodawanie i odejmowanie minut jest ok. Natomiast klikam enter, odliczam minutę i stop :(
A i program póki co robię na zwykłych delayach, właśnie żeby pierw dobrze zapoznać się z samym językiem C.

Wrzucam swój cały kod:

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


Nie piszę do was z pierwszym lepszym problemem, bo zazwyczaj staram się rozwiązać to sam ale tu brak mi wiedzy na ten temat i na ten moment zatrzymałem się w miejscu. Bardzo dziękuję za wyrozumiałość i wszelkie wskazówki.

Pozdrawiam :mrgreen:



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 mar 2015, o 17:57 
Offline
Moderator
Avatar użytkownika

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

Ja tylko dopytam bo nic o tym nie wspomniałeś ... posiadasz Bluebooka ? bo jeśli tak to masz tam wszystko o co pytasz opisane i dużo więcej zresztą ....

a jeśli nie posiadasz - to wyświetlaj nieznaczące zero przed cyframi, a przed liczbami nie wyświetlaj tego zera ...

co zaś się tyczy obsługi klawiszy rzuć sobie okiem tutaj:
http://mirekk36.blogspot.com/2012/10/ob ... w-cd2.html

_________________
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: 5 mar 2015, o 18:10 
Offline
Użytkownik
Avatar użytkownika

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

Majster_90 napisał(a):
Nie mogę otrzymać takiej struktury: 00:00 podczas wyświetlanie cyfr pojedynczych od 0 do 9 to jeszcze jak Cie mogę ale jak wyświetlam liczby >10 to sprawa się komplikuje bo wszystko na siebie nachodzi.


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: 5 mar 2015, o 18:22 
Offline
Użytkownik

Dołączył(a): 21 sie 2013
Posty: 43
Lokalizacja: Siekierczyn
Pomógł: 0

Witam
Skoro jesteśmy przy tym temacie. Wykonując ćwiczenia z Bluebooka na wyświetlaczu LCD , na sekundniku po jakimś czasie pojawia się trzecie zero.
Sekundnik dalej wyświetla prawidłowo sekundy na dwóch segmentach a na tym trzecim jest zero. Czym to jest spowodowane?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 mar 2015, o 19:47 
Offline
Nowy

Dołączył(a): 05 mar 2015
Posty: 20
Pomógł: 0

Jeżeli chodzi o BlueBooka to niestety nie posiadam, ale nie długo się zaopatrzę w tą książkę :) Artykuł o klawiszach przeczytałem, no naprawdę efekt porażający. Dużo się dowiedziałem. Tylko nie znalazłem odpowiedzi na mój problem, może źle go przedstawiłem. Problem mam z samym algorytmem, jak po ustawiać zmienne żeby doliczyły czas do końca. Przypomnę założenie projektu, maksymalnie można ustawić 60min, jeden klawisz dodaje 1 min drugi 1min odejmuje (to mi działa). Wzbogacę to tylko o poradnik podany przez Pana Mirka. Wciskając przycisk Enter, odmierzamy czas od nastawionej wartości i zmierzamy do 0, na końcu ewentualna sygnalizacja dioda LED o zakończeniu odliczania. Na wyświetlaczu wyświetla się zmienna m- minuty i s - sekundy.

Kod jaki sam napisałem to :

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


Z tego co napisałem efekt jest następujący:

Ustawiam np. 09:00 min klikam Enter i odmierza czas do 08:00 min. Nie potrafię napisać algorytmu samego jak odmierzyć czas do czasu 00:00.

Mam nadzieję, że przedstawiłem sprawę jasno :D
Pozdrawiam.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 mar 2015, o 17:14 
Offline
Nowy

Dołączył(a): 05 mar 2015
Posty: 20
Pomógł: 0

Witam Ponownie. Zamiast robić swój projekt na delayach postanowiłem uruchomić sprzętowy Timer0. Ustawiłem generowanie impulsu co 1 sekundę. Ustawiłem sobie pętle tak, żeby naliczało mi sekundy i minuty. Po paru próbach udało mi się uzyskać efekt i jestem bardzo zadowolony z uzyskanego efektu :D Aby ulepszyć swój projekt, potrzebuję dodania przycisku, bo póki co mam po prostu zegarek.

Próba dodania przycisku okazała się trochę kłopotliwa. Mianowicie, dodałem przycisk zaraz za wektorem ISR, przycisk działa ale tylko jak go trzymam.

Czy to spowodowane drganiami styków, czy np w wektor przerwania nie należy dodawać przycisków??



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 mar 2015, o 21:07 
Offline
Moderator
Avatar użytkownika

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

Majster_90 napisał(a):
czy np w wektor przerwania nie należy dodawać przycisków??

kolega jest na forum literackim gdzie pisze się opowiadania? beletrystykę? ;) czy na forum programistycznym gdzie przedstawia się kody albo na elektronicznym gdzie przedstawia się schematy ?

_________________
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: 6 mar 2015, o 21:18 
Offline
Nowy

Dołączył(a): 05 mar 2015
Posty: 20
Pomógł: 0

Wstawiam kod, przepraszam że odrazu go nie wrzuciłem ??

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


Nie jestem pewien czy można tak zadeklarować przycisk, oraz czy tak można wyświetlać wyniki operacji. Proszę o sprawdzenie kodu. Dziękuję.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 mar 2015, o 21:22 
Offline
Moderator
Avatar użytkownika

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

w przerwaniu delay??? w przerwaniu obsługa LCD ??? o ile to jest w przerwaniu bo patrząc na te nawiasy to można oczopląsu dostać ... Zapamiętaj w żadnym przerwaniu NIGDY delaya i NIGDY obsługi LCD

_________________
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: 6 mar 2015, o 21:41 
Offline
Nowy

Dołączył(a): 05 mar 2015
Posty: 20
Pomógł: 0

Tak myślałem. Więc skoro dajmy na to zmienna jest w przerwaniu i się zmienia tak. To jak ja wyświetlić jako bieżącą wartość ?? I jak z tym klawiszem można to rozwiązać ??



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 mar 2015, o 21:46 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 23 paź 2014
Posty: 1040
Lokalizacja: Trójmiasto
Pomógł: 190

Przy tak zbudowanej obsłudze przerwania samo przerwanie będzie się prawdopodobnie dłużej wykonywać niż licznik będzie je wywoływał - z tego co z kodu wynika to licznik wywołuje przerwanie co 1/4s a w przerwaniu masz delaya od przycisku oraz obsługę wyświetlacza LCD który niestety demonem prędkości nie jest więc sumarycznie całe przerwanie może się wykonywać dłużej niż 1/4s...
W samym przerwaniu powinno być tylko ładowanie wartości licznika i modyfikacja zmiennych (oczywiście owe zmienne muszą być opatrzone volatile) wysyłanie na wyświetlacz oraz obsługa przycisków w pętli głównej programu i powinno być ok.



Ostatnio edytowano 6 mar 2015, o 21:52 przez xentis, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 mar 2015, o 21:52 
Offline
Nowy

Dołączył(a): 05 mar 2015
Posty: 20
Pomógł: 0

No dobrze dziękuję za wskazówkę, postaram się poprawić kod i sprawdzę czy będzie to działać. O efektach dam znać :) pozdrawiam.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 9 mar 2015, o 14:51 
Offline
Nowy

Dołączył(a): 05 mar 2015
Posty: 20
Pomógł: 0

No i mieliście rację, nie wiem czemu wcześniej obsługi klawiszy jak i obsługi LCD nie wstawiłem do głównej pętli. Faktycznie działa. Wstawiam swój kod:

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


Jeżeli chodzi o wektor przerwania to wygląda to tak:

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


I teraz tak, rozumiem obsługę klawiszy. Rozumiem jak działają przerwania, no może nie jest to wiedza w 100% ale już rozeznanie posiadam. Nie rozumiem jak wyciągnąć wartość zmiennej, która znajduję się w wektorze przerwania. Póki co chciałem samą zmienna s która będzie zawierać sekundy. Wpadłem na taki pomysł, dodałem zmienna i po naciśnięciu przycisku KEY3 wartość zmiennej i zmienia się na wartość 10. W wektorze dodałem warunek, jeśli i będzie równe 10 to ustawiamy s na 60 i dekrementujemy. No ale nie działa to zbytnio. No nie mam pojęcia jak to ogarnąć, czy to trzeba zastosować flagi?? jakoś sprawdzać stan klawiszy?? No nie wiem, poproszę o wskazówki.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 9 mar 2015, o 17:42 
Offline
Nowy

Dołączył(a): 05 mar 2015
Posty: 20
Pomógł: 0

No dobrze. postaram się zmienić podejście i uruchomić Timer w trybie CTC. Odnośnie drugiej sprawy no to wydaję się logiczne zadeklarowanie jednej liczby, również postaram się wprowadzić to w "życie".

Nie wiem czy dobrze rozumiem do końca te odmierzanie czasu. Wektor przerwania traktowałem jak taki generator dający sygnał 1Hz. Po nastawieniu jakiejś dowolnej wartości chciałbym kliknąć przycisk i żeby czas wystartował. Szukam po forum, projektów żeby coś mnie olśniło ale nic nie mogę znaleźć.

Problem polega na tym, że nawet jeśli zastosuję twoją rade, czyli użyję 1 liczby np. 32 bitowej i uruchomię timer w tryb CTC i będzie to bardziej optymalne i szybsze to ja dalej naprawdę po szczerym przeszukaniu wielu ston i projektów nie rozumiem na jakiej zasadzie "wydobyć" tą zmienną z przerwania, a raczej żeby ja uruchomić po kliknięciu przycisku.

Zanim napisałem kod podany wyżej, próbowałem zrobić taki zegareczek i to mi działało tylko od zera. A ja chcę doprowadzić do takiego jakby nastawienia zmiennej na określoną wartość i odpalenia jej.

Oczywiście dziękuję Ci za radę, naprawdę jestem wdzięczny i naprawdę zastosuję je ale jakbyś jeszcze mógł mi tą jedną rzecz wyjaśnić.

Chyba, że należy iść zupełnie inna drogą.
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: 14 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 5 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:  
cron
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO