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



Teraz jest 28 lip 2026, o 20:41


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 16 ] 
Autor Wiadomość
PostNapisane: 7 cze 2015, o 12:13 
Offline
Użytkownik

Dołączył(a): 16 sty 2012
Posty: 78
Pomógł: 1

Kontynuując moją edukację w dziedzinie programowania 8 bitowców ... :lol: robię urządzenie które ma wyświetlać różniste parametry.
Potrzebuję wyświetlać np. wartości liczb od 1 do 50 000 000 . I teraz coś co mnie frustruje :D
Jak wyświetlę 50000000 mam je na pierwszej pozycji od lewej i jak wyświetlę 1 też zaczyna się od lewej strony .....
Siedzę i kombinuję jak tu zrobić żeby cyferki "trzymały się" prawej strony .... bo tam też będzie wyświetlana nazwa jednostki ....
Myślę że można to robić na wiele mniej lub bardziej zakręconych sposobów i sam nawet takie wymyśliłem ale wszystkie wydają mi się "toporne i prymitywne" .....
Mam obie książki Mirka ale tak jakoś chyba nie kojarzę żeby coś tam akurat w tym temacie wykorzystać ... ale może nie doszedłem czy nie znalazłem jeszcze ....
Czy ktoś ma pomysł jak to zrobić prosto i efektywnie ?



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

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

Zainteresuj się funkcją int_to_str() z Bluebooka, która opisana jest w rozdziale o ADC - Różnicowy pomiar napięcia.
Funkcja ma możliwość prostego formatowania wyświetlanych liczb.

Poczytaj, przeanalizuj i w razie jakiś wątpliwości dopytaj :-)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 cze 2015, o 14:31 
Offline
Użytkownik

Dołączył(a): 16 sty 2012
Posty: 78
Pomógł: 1

ok ..... spróbuję przewertować tylko nie wiem czy zdążę bo zaraz kumple przyjdą ..... na mecz ciągniemy :D



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

Dołączył(a): 01 sie 2012
Posty: 245
Lokalizacja: Kielce
Pomógł: 6

Najprościej będzie chyba przerobić ciało funkcji której używasz do wyświetlania. Jak byś ją tutaj pokazał to bym przerobił.

_________________
1, 1, 2, 5, 14, 42, 132, 429, 1430, 4862, 16796



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 cze 2015, o 07:02 
Offline
Użytkownik

Dołączył(a): 16 sty 2012
Posty: 78
Pomógł: 1

Sposób sterowania wyświetlaczem opanowuję na podstawie opisu Mirka z Jego pierwszej książki ... Fajnie to opisał i łatwo zrozumieć.
Zastosowane warunki którymi można modyfikować kompilację też są ok więc na razie na bazie tego właśnie kodu robię swoje doświadczenia.
Miałem jednak problemy ze skompilowaniem tego kodu bo w międzyczasie (książka ma już chyba ze 2 lata) powstał nowy toolchain u Atmela który w inny ( zresztą bardziej logiczny) sposób traktuje "zmienne" zapisane w pamięci programu i na tym się początkowo naciąłem.
Zresztą z komunikatu kompilatora nie wynikało aż tyle żeby samemu rozwiązać problem więc żeby nie pomoc kolegów i artykuł Mirka Jego strony pewnie bym się zniechęcił.
Ale z tym sobie poradziłem dzięki pomocy ...
Ponieważ jednak potrzebuję wyświetlać duże wartości liczb dziesiętnych zamiast itoa() wstawiłem funkcję działającą nie na liczbach dwubajtowych a 4 bajtowych i tylko to na razie prowizorycznie zmieniłem.
Kolega Jacek z forum zasugerował mi żebym poczytał rozdział (znowu z książki Mirka :) ) o pomiarze prądu ale szczerze mówiąc jeszcze nie zdążyłem .... wczoraj byłem na meczu a potem była mała imprezka z okazji zdobycia przez Lecha Poznań tytułu Mistrza Polski :lol:
Ta część kodu która dotyczy wyświetlania dużych liczb jest tutaj : http://forum.atnel.pl/topic11931.html tylko wstaw ultoa() bo inaczej wyświetlać będzie tylko 16 bitowe liczby.
Potrzebuję wyświetlać cyfry od 1 do 50 000 000 więc to "przesuwanie" o nawet 7 pozycji ....
Mam pomysły jak to zrobić i jak nie wymyślę nic ciekawszego albo ktoś mi nie pokarze lepszego pomysłu to tak zrobię ....



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

Dołączył(a): 17 sie 2013
Posty: 3797
Lokalizacja: Grudziądz
Pomógł: 143

Mój pomysł na to aby cyfry trzymały się prawej strony:

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



Miałem delikatne babolki ale dzięki pomocy kolegi RafPe i przypomnieniu o tablicach :) za co dziękuję ... powstał taki oto kod ... nie mniej zainspirowałeś mnie tomek do napisania funkcji wyrównującej tekst / cyfry do prawej strony na wyświetlaczy LCD w funkcji trzeba będzie podać maksymalną ilość znaków, oraz odstęp od prawego brzegu wyświetlacza ....
już cosik tam napisałem lecz jutro postaram się dokończyć takową funkcję by było wygodniej i przyjemniej.

Nie mniej to co ci podałem wyrównuje do prawej strony gdzie możesz sobie zmienić z max 16 znaków na np 12 by coś z prawej strony dopisać :)
Nie mniej postaram się stworzyć w/w funkcję która przyda się i tobie i mnie i na pewno w późniejszym czasie innym osobom z forum.

pozdrawiam

_________________
Usługi druku przestrzennego - www.drumik.pl



Ostatnio edytowano 11 cze 2015, o 21:08 przez majster, łącznie edytowano 1 raz

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

Dołączył(a): 17 sie 2013
Posty: 3797
Lokalizacja: Grudziądz
Pomógł: 143

Do Mirkowcyh bibliotek (i nie tylko) lecz na bibliotekach z BB była dopisywana funkcja....
Dodajemy do pliku .h

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



do pliku .c dodajemy:

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



Natomiast w kodzie programu funkcję wywołujemy w ten sposób:

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


gdzie:

0 to pierwsza linia wyświetlacza - można zamienić na 1 czyli drugą linię wyświetlacza
3 to jest offset czyli ile miejsc pustych zostawiamy po prawej stronie
8 to jest maksymalna ilość znaków
"50000000" wpisujemy maksymalnie 8 cyfrową liczbę to taki maks podaliśmy powyżej ....

a funkcja działa w taki sposób:



Funkcją zajmę się również na dniach by można do niej przekazywać zmienną ...

pozdrawiam

_______________________________________________________
http://www.avrtech.pl/wyrownywanie-liczb-do-prawej/

_________________
Usługi druku przestrzennego - www.drumik.pl



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

Dołączył(a): 12 maja 2014
Posty: 1089
Pomógł: 34

Majster ale na moje oko to juz Teraz mozesz przekazac do niej zmienna. Przeciez przyjmujesz tam jako parametr char *

To co to za problem wstawic tam swoja zmienna :) no chyba Ze gdzies znowu mi sie pomieszalo ale bylbym mocno zaskoczony :)


Sent from my iPhone using Tapatalk

_________________
sig off ;(



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

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

Teraz do funkcji nie można przekazać zwykłej zmiennej liczbowej bo funkcja, jako argumentu, oczekuje wskaźnika na stringa.

A na szybkiego funkcję można by przerobić tak
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 do biblioteki należy dodać funkcję lcd_long
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


I wywołanie funkcji
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: 11 cze 2015, o 17:57 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 17 sie 2013
Posty: 3797
Lokalizacja: Grudziądz
Pomógł: 143

jacekk232 hehe no i mnie uprzedziłeś :)
w pracy troszkę myślałem nad funkcją no i wymyśliłem cosik podobnego :) nie mniej twoja funkcja działa znakomicie :)

szkoda tylko że autor tematu nie daje znać czy jeszcze potrzebuje te wyrównanie do prawej strony czy nie ale w ramach nauki ... sobie poradziliśmy :) bo ważny jest pomysł jak to rozwiązać a dopiero można pisać kod :)

_________________
Usługi druku przestrzennego - www.drumik.pl



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

Dołączył(a): 12 maja 2014
Posty: 1089
Pomógł: 34

jacekk232 napisał(a):
Teraz do funkcji nie można przekazać zwykłej zmiennej liczbowej bo funkcja, jako argumentu, oczekuje wskaźnika na stringa.


Calkowicie zle zrozumialem przekazywanie zmiennej. Pp prostu mnie sie uwidzialo ze chcemy przekazac 'zmiennia' a nam chodzilo o fakt przekazania zmiennej typu liczbowego :D

No calkiem calkiem rozwiazanie :D

_________________
sig off ;(



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

Dołączył(a): 17 sie 2013
Posty: 3797
Lokalizacja: Grudziądz
Pomógł: 143



A tak wygląda działanie funkcji :)

Życzymy miłego korzystania z niej :)

_________________
Usługi druku przestrzennego - www.drumik.pl



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

Dołączył(a): 09 gru 2014
Posty: 1540
Pomógł: 269

Bardzo fajną funkcję zmajstrowałeś kolego majster! :D
jacekk232 - Super pomysł, działa znakomicie! :D
Dziękuję



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

Dołączył(a): 17 sie 2013
Posty: 3797
Lokalizacja: Grudziądz
Pomógł: 143

Moim zdaniem najlepsze w tym jest automatyczne czyszczenie znaków :)

_________________
Usługi druku przestrzennego - www.drumik.pl



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

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

Znaczną część roboty odwalił kol. majster pisząc tą funkcję. Ja ją tylko nieznacznie zmodyfikowałem :-)
No i powstał kolejny, fajny "klocek" zwiększający funkcjonalność biblioteki do LCD.



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

Dołączył(a): 17 sie 2013
Posty: 3797
Lokalizacja: Grudziądz
Pomógł: 143

jacekk232 napisał(a):
Znaczną część roboty odwalił kol. majster pisząc tą funkcję. Ja ją tylko nieznacznie zmodyfikowałem :-)
No i powstał kolejny, fajny "klocek" zwiększający funkcjonalność biblioteki do LCD.



Dziękuję za te słowa nie mniej wspomniałem o tobie również na blogu: http://avrtech.pl/wyrownanie-zmiennej-l ... ej-strony/

_________________
Usługi druku przestrzennego - www.drumik.pl



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

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