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



Teraz jest 14 wrz 2026, o 14:49


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 102 ]  Przejdź na stronę Poprzednia strona  1, 2, 3, 4  Następna strona
Autor Wiadomość
PostNapisane: 28 mar 2013, o 23:48 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 lip 2012
Posty: 306
Pomógł: 0

Jednym i drugim. Na razie szukam jakiś informacji jak to ma wyglądać



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 mar 2013, o 00:43 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 19 lut 2013
Posty: 223
Zbananowany użytkownik

Pomógł: 21

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


Tak na szybko to według mnie tak to powinno wyglądać. Działa Ci tak samo jak poprzednia wersja ?

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

Swoją drogą co ma robić if w liniach 148-151? Jest to pozostałość po jakiejś starszej wersji? Przecież coś takiego to równie dobrze możesz po prostu zapisać jako:
flaga_klaw = 0;
i ten warunek jest tu niepotrzebny.

_________________
Nie pisz komentarzy - dobry kod komentuje się sam.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 mar 2013, o 11:25 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 lip 2012
Posty: 306
Pomógł: 0

Tak działa tak samo jak moją :)
Ładnie to wygląda teraz :)
Tylko co z tym zrobić by to działało ładnie tak, jak ma :(
Dziś zauważyłem że i na mojej wersji i na twojej nic nie wciskając menu samo przeskakuje se co jakiś czas :(



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

Dołączył(a): 19 lut 2013
Posty: 223
Zbananowany użytkownik

Pomógł: 21

Widzisz więc czemu ważne jest wyodrębnienie bloków funkcyjnych (partii kodu, które odpowiadają za jedną rzecz) i powyrzucanie ich do funkcji? Teraz według mnie znacznie lepiej widać co robi cały program (funkcja main).

No to teraz skoro widać, co ten program ma robić, zajmijmy się jego ożywieniem + kosmetyką:
1. Obsługa zegarka - nie ma sensu tworzyć flagi od zmiany czasu, taki prosty warunek można sobie sprawdzać za każdym razem. Wyrzucamy więc zmienną Timer2_flag i przerabiamy linie 155-175 do takiej postaci:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Mamy 8 linii, możemy to sobie wyrzucić do procedurki.

2. Problemy z czasami losowo pojawiającymi się przyciskami - ADCka masz w trybie ciągłym, a każdy jego pomiar (trwający kilka us) bierzesz za pewnik. To są już elementy analogowe - przycisk będzie miał gorszą chwilę, na ścieżkach coś Ci się zaindukuje, przetwornik w uP też idealny nie jest. Rozdzielczość masz 10 bitową, tworzysz więc zmienną 16bitową, która Ci uśredni 64 pomiary (2^(16-10)) . I w ten sposób przerwanie ADCka zmieniamy do postaci:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Przesuniecie bitowe o 6 w prawo jest równoważne z częścią całkowitą z dzielenia przez 64. Niestety przerwanie ADCka wydłużyło się - jeżeli program będzie działał losowo to zwiększ mu prescaler - pomiary będą dokonywać się wolniej, na przerwanie będzie więcej czasu, ale i tak będą się wykonywać i tak za szybko jak na nasze potrzeby.
Zauważ że nie posługuję się "uint16_t", a "u16" - są to moje sztandarowe typy, wpisuje je zawsze za includami bibiliotek, zaraz po zaczęciu nowego projektu.

3. Skoro mamy już w miarę prawdziwe pomiary napięcia, teraz możemy zająć się ich interpretacją.
Poprzednie linie 148 - 151 miały działać w oparciu o flagę końca pomiaru ADCka - szkoda, że były w złym miejscu :( . Użyjemy ich jednak w procedurze "rozpisz_klawisze".
Mamy 6 zmiennych odpowiadających za czekanie na puszczenie klawisza - to aż się prosi o macierz.
Czyszczenie ekranu jest zbędne - i tak za każdym przebiegiem funkcji main od nowa wszystko podajesz.
Kilka zmiennych, które odpowiadają za podanie do funkcji main, które przyciski są wciśnięte mogą być przydatne, ale chwilowo załóżmy, że tylko jeden przycisk może być wciśnięty. Dzięki typowi wyliczeniowemu będzie można sobie potem czytelnie sprawdzać, który przycisk jest wciśnięty i na jego podstawie coś robić.
Funkcja rozpisz_klawisze przybiera więc postać:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Jak widać funkcja zaczęła nam w sposób jawny zwracać wynik - dlatego musimy do niej przypisać wartość.

4. Linie 17-18 w starym kodzie zawierają deklaracje do jakichś nieistniejących funkcji - wyrzucamy.

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


Program przy kompilacji naturalnie "pluje" błędami - jest to spowodowane tym, że wyrzuciłem ileś niepotrzebnych zmiennych. Obecnie masz jeszcze bardziej odchudzony main oraz procedurę, która ładnie zwraca który klawisz jest wciśnięty. Logikę od obsługi działań względem tego klawisza zrobisz już sobie sam. Oczywiście nie wykluczam jakichś błędów - ja nie mam twojego boardu i piszę na "sucho".

_________________
Nie pisz komentarzy - dobry kod komentuje się sam.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 mar 2013, o 14:24 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 lip 2012
Posty: 306
Pomógł: 0

I tak jestem pełen podziwu twojej wiedzy jak ty ten kod piszesz. :)
czy funkcja inline void ustawienia(void) nie powina mieć przedrostka static ponieważ zwraca informację :
'key_lock' is static but declared in inline function 'rozpisz_klawisze' which is not static
po dodaniu ststic przed inline informacja znika.
Static dodałem jeszcze do key ponieważ tez był żółty trójkącik.
Próbowałem zrobić podobnie menu tak jak poprzednio ale nie reaguje na wciskany klawisz.
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: 29 mar 2013, o 14:56 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 19 lut 2013
Posty: 223
Zbananowany użytkownik

Pomógł: 21

Jeżeli nie reaguje to trzeba sprawdzić co wychodzi z funkcji.
Za linią 3 dopisz coś takiego:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
naturalnie wyświetlanie czasu trochę zgłupieje, ale teraz skupiamy się na sprawdzeniu czy procedura działa tak jak należy.

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

Przy czym przyciski będziesz musiał te ~3s przytrzymać, aby otrzymać prawidłowe wyniki

_________________
Nie pisz komentarzy - dobry kod komentuje się sam.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 mar 2013, o 15:01 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 lip 2012
Posty: 306
Pomógł: 0

Nie ważne jaki klawisz wcisnę jest wartość 0 :(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 mar 2013, o 15:05 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 19 lut 2013
Posty: 223
Zbananowany użytkownik

Pomógł: 21

Ok, czyli procedura nie działa. To teraz sprawdzamy czy otrzymuje poprawne dane. W moim poprzednim kodzie za linią 27 dopisz:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

_________________
Nie pisz komentarzy - dobry kod komentuje się sam.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 mar 2013, o 15:12 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 lip 2012
Posty: 306
Pomógł: 0

To działa:
1 klawisz 247
2 klawisz 438
3 klawisz 593
4 klawisz 717
5 klawisz 824
6 klawisz 914
null - 987



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 mar 2013, o 15:15 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 19 lut 2013
Posty: 223
Zbananowany użytkownik

Pomógł: 21

null - 987 hmm... linia 186 powinna więc chyba brzmieć "if (++licznik>=64)". Jakie teraz masz wartości ?

_________________
Nie pisz komentarzy - dobry kod komentuje się sam.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 mar 2013, o 15:21 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 lip 2012
Posty: 306
Pomógł: 0

1 key == 250
2 key == 446
3 key == 602
4 key == 729
5 key == 836
6 key == 925
null == 1002



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 mar 2013, o 15:30 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 19 lut 2013
Posty: 223
Zbananowany użytkownik

Pomógł: 21

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

A taka procedura działa ?

_________________
Nie pisz komentarzy - dobry kod komentuje się sam.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 mar 2013, o 15:39 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 lip 2012
Posty: 306
Pomógł: 0

Też nie działa. cały czas zero i na dodatek świeci się trójkąt przy return wartosci_klawiszy[key-1]; :
'key' is used uninitialized in this function



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 mar 2013, o 15:47 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 19 lut 2013
Posty: 223
Zbananowany użytkownik

Pomógł: 21

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

_________________
Nie pisz komentarzy - dobry kod komentuje się sam.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 mar 2013, o 16:22 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 lip 2012
Posty: 306
Pomógł: 0

Teraz działa. zabieram się za menu nastawy czasu. Tylko rano szukałem jak zrobić podkreślenie albo coś by było widoczne że zmieniam wartość np godzin. Widziałem tu funkcję lcd_cursor_on ale nie działa mi to.
W lcd.c jest warunek #if USE_LCD_CURSOR_ON == 1. To znaczy że muszę na początku mojego kodu coś wpisać ?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 mar 2013, o 16:48 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 19 lut 2013
Posty: 223
Zbananowany użytkownik

Pomógł: 21

Jeżeli działa to super, ale pamiętaj, że jest to wersja okrojona, a przecież chcesz mieć pełną, tzn. z oczekiwaniem na puszczenie klawisza ;)
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Zobacz, czy Ci działa i po ~2s z powrotem zwraca "klawisz" o kodzie 0 mimo tego, że nadal trzymasz go przyciśnietego.
Ustawienia do kursora masz w pliku lcd.h
Ustawianie godziny może na zasadzie migania co sekundę tych wartości, których obecnie nie zmieniasz? To byłoby coś takiego:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

_________________
Nie pisz komentarzy - dobry kod komentuje się sam.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 mar 2013, o 17:30 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 lip 2012
Posty: 306
Pomógł: 0

Usunięte zostały wszystkie ukośniki z funkcji rozpisz_klawisze() tak że powinno dobrze działać.
Z tym na za chwilę na razie nie mogę se poradzić z ustawianiem zegara. :(
I nic mi nie wychodzi :(

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

Czy na swichu będzie można zrobić takie menu ?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 mar 2013, o 17:45 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 19 lut 2013
Posty: 223
Zbananowany użytkownik

Pomógł: 21

No nie całkiem - u mnie się jeszcze linie 5 i 18 zmieniły. I upewnij się że ta procedura zwraca tylko raz kod klawisza jeżeli jest wciśnięty - bez tego w życiu tego nie oprogramujesz.

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

I wstawiaj za każdym razem kompletny kod.

_________________
Nie pisz komentarzy - dobry kod komentuje się sam.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 mar 2013, o 17:52 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 lip 2012
Posty: 306
Pomógł: 0

No to już podmieniam te linie

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: 29 mar 2013, o 18:01 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 19 lut 2013
Posty: 223
Zbananowany użytkownik

Pomógł: 21

Dodaj sobie kodzik z 14:56 i dokładnie sprawdź czy procedura zwraca tylko raz kod klawisza, mimo tego, że jest ciągle przytrzymany, bo bez tego nie zrobisz menu.

_________________
Nie pisz komentarzy - dobry kod komentuje się sam.



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

Dołączył(a): 28 lip 2012
Posty: 306
Pomógł: 0

Jest pozycja 0 (zegar)
wciskam klawisz
5s nic się nie dzieje po czym pojawia się wciśnięty klawisz (RIGHT)
w 10s przełącza się na menu 1 (ustaw zegar) i gaśnie przycisk (RIGHT)
I cały czas trzymałem do 1min.



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

Dołączył(a): 19 lut 2013
Posty: 223
Zbananowany użytkownik

Pomógł: 21

No to wygląda ok, ale brakuje jeszcze według mnie oczekiwania na ustabilizowanie się napięcia, tzn. jeżeli wciśniesz przycisk podczas np. 30 pomiaru ADCka to dostaniesz błędny kod klawisza. Zobacz coś takiego:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Powinno wyświetlać klawisz po ~8s od naciśnięcia przez ~2s. Sprawdź też czy się nie blokuje, tzn. poklikaj bez resetu uP kilkoma klawiszami.

I tą procedurę magluje nie bez powodu - bez pewności, że masz właściwe kody będą dziać się cuda przy sterowaniu.

_________________
Nie pisz komentarzy - dobry kod komentuje się sam.



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

Dołączył(a): 28 lip 2012
Posty: 306
Pomógł: 0

2-3s pojawia się wciśnięty przycisk a po 7-8 s zmienia się menu.
Tylko że pierwsze przyciśnięcie nic nie daje dopiero drugie.
potem znów nic nie daje i czwarte tak samo jak drugie.
Może jak to tyle problemu to lepiej będzie jak zastosuje tradycyjną klawiaturę a jak będzie czas to zająć się ADC. Coraz mniej dni mi zostało a tu prawie nić nie zrobione mam :(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 mar 2013, o 21:30 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 19 lut 2013
Posty: 223
Zbananowany użytkownik

Pomógł: 21

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
No dobra, to trochę inne podejście do klawiszy. I nie sprawdzaj działania tej procedury po reakcji twojego menu, a wyświetlaj sobie jakie napięcie do procedury wchodzi i jaki klawisz zwraca.

_________________
Nie pisz komentarzy - dobry kod komentuje się sam.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 mar 2013, o 21:48 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 lip 2012
Posty: 306
Pomógł: 0

Taki odczyt mam:

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


1 key == 2515
2 key == 4468
3 key == 6020
4 key == 7315
5 key == 8370
6 key == 9270
null == 1000



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 mar 2013, o 21:49 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 19 lut 2013
Posty: 223
Zbananowany użytkownik

Pomógł: 21

a ostatnie cyfry zerujesz z lcd_str(" "); ?

_________________
Nie pisz komentarzy - dobry kod komentuje się sam.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 mar 2013, o 21:56 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 lip 2012
Posty: 306
Pomógł: 0

Aj przepraszam :(

1 key == 250
2 key == 446
3 key == 600
4 key == 730
5 key == 830
6 key == 925
null == 1000

------------------------ [ Dodano po: kilkunastu sekundach ]

Ale lcd_int(przycisk_wcisniety); nie daje nic cały czas 0 :(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 mar 2013, o 22:10 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 19 lut 2013
Posty: 223
Zbananowany użytkownik

Pomógł: 21

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

_________________
Nie pisz komentarzy - dobry kod komentuje się sam.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 mar 2013, o 22:15 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 lip 2012
Posty: 306
Pomógł: 0

Nadal to samo :(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 mar 2013, o 22:25 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 19 lut 2013
Posty: 223
Zbananowany użytkownik

Pomógł: 21

Dobra, błąd był, ale teraz to debugowanie jest problemem. Musiałbyś przytrzymać klawisz przez 20 sek aby coś zobaczyć.
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Teraz powinieneś mieć normalnie wyświetlane napięcie oraz kod klawisza. Poprzednie debugowanie koniecznie wyłącz. Kod klawisza będzie się zmieniał przy naciśnięciu od 1-6 (nie będzie zerowany). Jak to będzie dobrze działać to napisz to podam Ci jeszcze jeden kod z debugiem i jak wtedy przejdzie to procedurka będzie w końcu zrobiona.

_________________
Nie pisz komentarzy - dobry kod komentuje się sam.



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: 102 ]  Przejdź na stronę Poprzednia strona  1, 2, 3, 4  Następna strona

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