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

KURS HOME ASSISTANT

Chcesz zautomatyzować swój dom bez skomplikowanego kodowania?
Zastanawiasz się nad wyborem sprzętu, oprogramowania i aplikacji?
Od czego zacząć przygodę z HA w 2025? Co będzie najlepsze na start?

Nasz kurs Home Assistant nauczy Cię krok po kroku, jak łatwo zautomatyzować swój dom i oszczędzić na rachunkach za prąd i ogrzewanie. Bez chmur, bez zbędnych abonamentów. Twoja przygoda z Home Assistant zaczyna się tutaj!

↓↓↓

    Szanujemy Twoją prywatność. Możesz wypisać się w dowolnym momencie.




    Teraz jest 12 maja 2025, o 09:16


    Strefa czasowa: UTC + 1





    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 37 ]  Przejdź na stronę 1, 2  Następna strona
    Autor Wiadomość
    PostNapisane: 13 gru 2014, o 21:57 
    Offline
    Użytkownik

    Dołączył(a): 12 lis 2014
    Posty: 108
    Pomógł: 0

    Witam Wszystkich bardzo serdecznie.Jest to mój pierwszy post ,a więc bardzo proszę o zrozumienie.Jestem absolutnie początkującym w tej materii i zwracam się z prośbą o pomoc szanownych kolegów.Buduję sobie zasilacz i chciałem zamontować wyświetlacz lcd 2x16 znaków.Na tym wyświetlaczu mam już wyświetlony pomiar napięcia w woltach i pomiar temperatury radiatora.Docelowo będzie jeszcze pomiar prądu.Chcę jeszcze mieć dwie linijki cegiełek,które będą się wydłużać lub skracać w miarę regulacji napięcia i poboru pradu.Znaki utworzyłem w programie „generator programu lcg”,ale za nic nie mam pojęcia,jak napisać kawałek kodu,zadeklarować,czy też zdefiniować te znaki w programie(ponawiam prośbę o wyrozumiałość mojej niewiedzy na tym etapie).Wiem,że można utworzyć 8 znaków własnych,ale ja potrzebuję ich więcej(np.12),to kolejny kłopot.Następnie,jak je prawidłowo wyświetlić.Nie proszę o napisanie gotowego kodu,bo było by to bardzo nie na miejscu,ale chociaż o jakieś kawałeczki,nakierowanie mnie i wytłumaczenie,jak się do tego zabrać.Mam coś podobnego,ale w bascomie i nie wiem za bardzo,jak to użyć,przekonstruować,a żeby działało w C.Zamieszczam kawałek kodu w celu zrozumienia,o co mi mniej więcej chodzi.Przepraszam,jeśli używam niewłaściwego słownictwa(programisty),ale jak pisałem,stawiam dopiero pierwsze kroki.Będę bardzo wdzięczny za wszelką pomoc.Z góry dziękuję i pozdrawiam wszystkich.


    --------definicje znaków linijki-------------


    Deflcdchar 0,32,32,32,32,32,32,32,31
    Deflcdchar 1,32,32,32,32,32,32,31,31
    Deflcdchar 2,32,32,32,32,32,31,31,31
    ...
    ...
    ...

    if napiecie > 1 And napiecie <= 1,9 Then
    Call Dline(0)

    if napiecie > 1,9 And napiecie <=2 Then
    Call Dline(1)

    If napiecie > 2 and napiecie <=3 Then
    Call Dline(2)

    itd........



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 14 gru 2014, o 11:14 
    Offline
    Użytkownik

    Dołączył(a): 12 lis 2014
    Posty: 108
    Pomógł: 0

    Witam sznowne forum.Czy naprawdę nie ma nikogo,kto zechciałby mi pomóc ?.A może robię lub piszę coś nie tak ?.Proszę o jakieś sugestie.Dziękuję.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 14 gru 2014, o 13:02 
    Offline
    Użytkownik
    Avatar użytkownika

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

    Ile poziomów chcesz odwzorować, czy ma być uwzględnine skalowanie napięcia /prądu czy może chcesz odwzorować dokładnie jakiś fragment zakresu? I do czego Ci aż tyle definiowanych znaków przy linijce?! Sama animacja linii jest banalnie prosta, ale najpierw odpowiedz na pytania...

    _________________
    http://www.sylwekkuna.com



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 14 gru 2014, o 13:37 
    Offline
    Użytkownik

    Dołączył(a): 12 lis 2014
    Posty: 108
    Pomógł: 0

    Witam i dziękuję za zainteresowanie moim problemem.Chodzi mi głównie o odwzorowanie napięcia w postaci linijki.Pomyślałem sobie,że jeżeli nauczę się na przykładzie napięcia,to i w innych sytuacjach się odnajdę(np.prąd itp.).Potrzebuję więcej,niż osiem znaków,ponieważ będę chciał w przyszłości zrobić wskaźnik wysterowania na lcd i 8 cegiełek,to zamało.Potrafię utworzyć
    znaczki rosnących prostokącików,tak jak zrobiłem to w postaci znaku stopnia do pomiaru temp:

    uint8_t znak_stopnia[] PROGMEM = {8, 20, 8, 0, 0, 0, 0, 0};

    ale podobno można tylko 8 takich własnych znaków utworzyć.Według mnie z pewnością jest sposób na to,ale ja zacząłem około 3 tygodnie temu przygodę z programowaniem i mam mało czasu po pracy.Mam książkę Mirka i zestaw atb-najnowsza wersja.Uczę się kiedy czas na to pozwala,ale dla takiego laika,jak ja to początki są trudne,a i wiek już nie najmłodszy hi.Domyślam się,że każdy znak trzeba wysłać pojedyńczo w ściśle określonej sytuacji,to znaczy,że przy ściśle określonym poziomie napięcia,wskazać dokładnie,gdzie ma się wyświetlić itd.,ale jest to trochę po omacku.Wiadomo,że najmniejsza nieścisłość w kodzie powoduje nie działanie urządzenia,bądź działanie złe.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 14 gru 2014, o 15:56 
    Offline
    Użytkownik
    Avatar użytkownika

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

    A co by przeszkadzało, abyś zrobił wskaźnik wzdłuż? Wtedy wystarczy tylko 5 definicji (można by na w sumie nawet 4 zrobić, bo w zestawie jest zazwyczaj gotowy "negatyw" na końcu tabeli znaków).
    Samo odtwarzanie ścieżki to bajka. Licząc od zera: 0-pusty (drukujesz spację), 1-jeden rządek pikseli, 2-dwa rządki, ...itd do 5-pełne zaciemnienie, można sobie zrobić małą tablicę z tą animacją i kolejnością znaków - zwłaszcza jeśli wykorzystasz negatyw, który jest już zdefiniowany na stałe - bo upraszcza to sterowanie animacją. I teraz z prostego wzoru oraz manipulacją pozycji ekranu gdzie umieszczona jest ścieżka można sobie dowolny wskaźnik zrobić. Zakładając, że chcesz pokazać wartości od 0 do 80 (16 znaków x 5 pionowych linii w każdym) obliczasz najpierw pozycję, w której ma się wyświetlić aktualny znak czyli pozycja=wartość/5, a z kolei reszta z tego dzielenia to wskaźnik do tabeli animacji, gdzie wybierasz który ma być znak na aktualnej pozycji. Pozostaje tylko uzupełnić lcd małą pętlą od aktualnej (pozycji-1) w tył do 0 negatywem i masz odzwierciedlenie zadanej wartości. Wypadało by jeszcze wstawić spacje od wyliczonej wcześniej pozycji+1 do końca lcd aby skasować ewentualne wcześniejsze większe wskazania. Masz już praktycznie wszystko na tacy :) Teraz napisz program, a dopiero jak nie będzie działał to będziemy szukać błędów ;)

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

    Taką metodę płynnej animacji obiektów stosowano np. w grach na stare komputerki, nie posiadające sprzętowych sprite'ów - np. commodore c16,116,+4, zx spectrum... :)

    _________________
    http://www.sylwekkuna.com



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 14 gru 2014, o 23:27 
    Offline
    Użytkownik

    Dołączył(a): 12 lis 2014
    Posty: 108
    Pomógł: 0

    Witam ponownie.Nakreśliłem coś takiego.Słupki w poszczególnych segmentach.

    uint8_t slupek_1[] PROGMEM = {16, 16, 16, 16, 16, 16, 16, 16};
    uint8_t slupek_2[] PROGMEM = {24, 24, 24, 24 ,24, 24, 24, 24};
    uint8_t slupek_3[] PROGMEM = {28, 28, 28, 28, 28, 28 ,28, 28};
    uint8_t slupek_4[] PROGMEM = {30, 30, 30, 30, 30, 30, 30, 30};
    uint8_t slupek_5[] PROGMEM = {31, 31, 31, 31, 31, 31, 31 ,31};

    Zrozumiałem ideę Twojego pomysłu.Bardzo prosta i oczywista.Mamy tylko 5 znaków,a możemy wyświetlać całą linijkę płynnie i na dodatek z dość dużą rozdzielczością.Rozumiem to tak:dla określonych poziomów adc zapalamy poszczególne słupki jednego segmentu.Kiedy skończy nam się segment,kolejne narastanie adc powoduje zapalanie kolejnych słupków drugiego segmentu itd...
    Trzeba tylko to napisać,a ja za bardzo nie wiem jak zacząć.To znaczy na początek wykombinowałem coś takiego:

    while(1)

    {

    if (napiecie > 0,4 && napiecie <= 0,5)

    {

    lcd_locate(0,0);
    lcd_str("\xxx");

    }

    if (napiecie > 0,9 && napiecie <= 1)

    {

    lcd_locate(0,1);
    lcd_str("\xxx");

    }

    if (napiecie > 1,4 && napiecie <=1,5)

    {

    lcd_locate(0,2);
    lcd_str("\xxx");

    }

    }

    Oczywiście napiecie w nawiasach jest w wartościach ADC.Czy idę w dobrym kierunku ?Jeżeli czegoś tu brakuje,to czy nie mógłbyś podpowiedzieć ?Dziękuję SylwekK



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 15 gru 2014, o 10:23 
    Offline
    Użytkownik

    Dołączył(a): 12 lis 2014
    Posty: 108
    Pomógł: 0

    Witam.Dziękuję bardzo koledze Antystatyczny za przyłączenie się i za pomoc.Wieczorem po pracy przyjrzę się temu bliżej.Pozdrawiam wszystkich.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 15 gru 2014, o 14:16 
    Offline
    Moderator zasłużony dla forum.atnel.pl
    Avatar użytkownika

    Dołączył(a): 18 lip 2012
    Posty: 3228
    Lokalizacja: Kraków - obok FAB5 ATMEL'a
    Pomógł: 91

    Robson a Ciebie nie obowiązują zasady? topic7402.html

    _________________
    http://www.jaglarz.info



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 15 gru 2014, o 18:05 
    Offline
    Użytkownik

    Dołączył(a): 12 lis 2014
    Posty: 108
    Pomógł: 0

    Witam.Przepraszam za niewłaściwe prowadzenie posta.W przyszłości postaram się poprawić,ale i tego muszę się nauczyć..Pozdrawiam.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 15 gru 2014, o 20:41 
    Offline
    Użytkownik
    Avatar użytkownika

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

    Moja wersja jest nieco inna niż kolegi Antystatycznego. Przede wszystkim korzysta tylko z 4-ech definiowanych znaków i jest zrobiony na zasadzie jaką opisywałem wyżej. Przyznacie Panowie, że to chyba nieco lepsze niż ifowanie mało zrozumiałej litanii... ;)
    Napisałem całą funkcję, bo i tak, będę z niej korzystał w jednym z projektów, które mam na warsztacie.

    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.


    ...i efekt działania...


    _________________
    http://www.sylwekkuna.com



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 15 gru 2014, o 22:28 
    Offline
    Użytkownik

    Dołączył(a): 12 lis 2014
    Posty: 108
    Pomógł: 0

    Witam kolegów.Dziękuję SylwekK za materiały,które na pewno mi pomogą.Jak czytam Wasze wywody i oglądam pliki,to jedno jest pewne:znacie się na rzeczy.Ja stawiam dopiero pierwsze kroki
    i na początku bazuję na zasadzie copy and past.A co jest dla mnie najważniejsze,staram się nauczyć czytać linijki w celu zrozumienia,o co chodzi w tym wszystkim.Nigdy nie będę programistą w prawdziwym tego słowa znaczeniu,bo już trochę za późno hi,ale chciałbym opanować tą sztukę na tyle,ą żeby zrobić ładny wyświetlacz do urządzenia,jakiś mierniczek czy wskaźnik itp...Na tą chwilę uruchomiłem miernik napięcia(pokazuje adc i volty),termometr.Na razie działam bez jakichkolwiek timerów.Używam książki Pana Mirka i internetu.Nie znam nikogo w mojej okolicy,kto by mi pomógł w nauce,a więc działam sam.Dzisiaj udało mi się wysłać jeden segment,który zapala się w pewnym przedziale napięcia(0 > 512),a więc trochę pojąłem,jak to zrobić.Vrev mam Vcc,preskaler 64.Mam jeszcze błędnie wyświetlana wartość napięcia.Adc jest ok,tylko w niektórych sytuacjach(jest np.1,2 volta i potem np. 1,20 volta),a adc różne.W poradniku Pana Mirka o adc jest opis,jak to zrobić,tylko na tą chwilę jeszcze tego nie rozumiem.Ale starczy tych wywodów,bo zabraknie czasu na naukę.Projekty,które Panowie przedstawiliście,są super,tylko na moim etapie chodzi mi o coś trochę innego.Jak wcześniej pisałem,póki co jeszcze nie zacząłem z przerwaniami,a co za tym idzie Wasze programy są bardzo krótkie i przez to ciężkie do zrozumienia dla mnie.Wolę zastosować 100 x if i wysłać każdy pojedynczy słupek do wyświetlacza,ale za to rozumieć,co tworzę.Może za jakiś czas nauczę się więcej i wtedy spróbuje tak jak Wy.Także proszę się nie śmiać,ale taką mam metodę nauki(tak mi się łatwiej przyswaja).Kolejna rzecz,która sprawia trochę kłopotu,to jak najlepiej „scalić” dwa programy.Oczywiście metodą prób i błędów udało się,ale czy do końca właściwie,to nie wiem.Jakie są zasady,co przed,a co po,jak w pętli,co na końcu.Pytań jest wiele,ale myślę Panowie,że kiedyś też mieliście podobnie i chyba to rozumiecie.Oczywiście,jak zakończę to podzielę się.Błędów pewnie będzie wiele,ale zobaczymy.Z tego co wiem,to nie można zamieszczać kodów z książki,a ja oczywiście na tym bazuję.Bez niej nic bym nie wskurał.W związku z tym jest problem z zamieszczaniem kodu.Dalsze podpowiedzi byłyby mile widziane i bardzo cenne dla mnie.Dziękuję i pozdrawiam.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 15 gru 2014, o 23:08 
    Offline
    Użytkownik
    Avatar użytkownika

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

    Jeśli sumiennie będziesz czytał książkę Mirka to zapewniam Cię, że z analizą naszych kodów nie będziesz miał żadnych problemów :) Sam tak naprawdę w C programuję od niedawna i jeszcze mam naleciałości z bascoma (choćby stosowanie ulubionego WHILE zamiast FOR, bo to pierwsze mniej w bascomie zajmowało, a tu nawet nie wiem szczerze mówiąc jak jest z rozmiarem kodu...). W programie wykorzystane są tak TYLKO podstawowe instrukcje i ich kombinacje. Prześledź linia po linii te programy (w swoim starałem się komentować najważniejsze rzeczy) i zobaczysz, że wszystko jest naprawdę proste. Dodam tylko dla jasności, że przy drukowaniu czegoś na LCD - nawet jednej literki - to kursor automatycznie przestawia się na następną pozycję i jest gotowy umieścić kolejny znak za już istniejącym. Niby prosta rzecz, ale pomoże Ci przeanalizować funkcję, bo to jest tu bardzo istotne. Aha, przerwań w swoim kodzie nie wykorzystywałem. I ważne! - książkę przeczytaj za koleją od początku bez przeskakiwania działów! Jeśli raz będzie mało to... przeczytaj jeszcze raz :)


    Autor postu otrzymał pochwałę

    _________________
    http://www.sylwekkuna.com



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 14 cze 2017, o 09:09 
    Offline
    Użytkownik

    Dołączył(a): 12 lis 2014
    Posty: 108
    Pomógł: 0

    Ponieważ nie wiem,jak podejść do mojego problemu,postanowiłem zapytać kolegów na forum.
    Wykonałem wskaźnik wysterowania wzmacniacza na linijce i jednoczesne wyświetlanie napięcia. Jestem zadowolony z działania mojego
    wskaźnika, ale jest jeden szczegół,którego nie mogę rozwiązać.Linijka reaguje szybko na zmiany napięcia na wejściu adc i tak ma być.
    Natomiast wyświetlanie wartości napięcia zmienia się zbyt szybko i trudno jest odczytać wskazania.Zastosowałem uśrednianie,filtr cyfrowy
    z poradników Mirka, ale w moim konkretnym przypadku potrzeba czegoś więcej.Czy może ktoś zaproponuje jakiś pomysł.Chcę,a żeby wartość
    napięcia narastała również szybko,synchronicznie z wyświetlaniem linijki,ale po zaniku tegoż napięcia jeszcze przez moment była widoczna
    wartość w voltach(cyferki).Chodzi o to,a żeby odczyt wartości był stabilny,czytelny(jakby uśredniony,zamrożony).Tyczy się to wartości
    szczytowych,maksymalnych.
    Filtr cyfrowy,uśrednianie, powoduje również opóźnienie narastania wartości wyświetlanej,a tego nie chcę.Oczywiście nie czepiam się
    pomysłu Mirka,ponieważ w Jego założeniu działa bardzo dobrze i spełnia swoje zadanie,ale u mnie musi funkcjonować trochę inaczej i na tą
    dolegliwość nie mam pomysłu.
    Może ktoś zmierzył się kiedyś z podobnym tematem,albo ma rozwiązanie.Z góry dziękuję za wszelkie wskazówki.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 14 cze 2017, o 09:34 
    Offline
    Użytkownik
    Avatar użytkownika

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

    Użyj dodatkowego timerka programowego, który będzie odliczał czas wyświetlania wartości, a żeby ta jakoś bardziej logiczne działało to niech czas będzie odliczany (powiedzmy od 0,5-1s) dla aktualnie największej odczytanej wartości, tzn. jeśli odczytasz, np. wartość 30, a za kilkadziesiąt ms pojawi się 35 to niech czas odliczania 30 zostanie od razu przerwany i niech wyświetli i od początku odlicza dla wartości 35. Po odliczeniu tej 1s łapie to co aktualne i tak w koło. Dzięki temu wartości szczytowe będą miały priorytet.


    Autor postu otrzymał pochwałę

    _________________
    http://www.sylwekkuna.com



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 14 cze 2017, o 12:07 
    Offline
    Użytkownik

    Dołączył(a): 12 lis 2014
    Posty: 108
    Pomógł: 0

    Dziękuję Sylwku za odpisanie i za chęć pomocy.
    Będę próbował zastosować się do Twoich wskazówek, może coś się uda.
    Jeśli któryś z kolegów forumowiczów ma jeszcze jakieś pomysły,to bardzo proszę podzielić się.
    Dzięki na razie.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 16 cze 2017, o 06:26 
    Offline
    Użytkownik

    Dołączył(a): 12 lis 2014
    Posty: 108
    Pomógł: 0

    Sorki, że tak późno odpisuję, ale inne zajęcia były.

    Napisałem krótki program, a żeby było czytelniej i człon main wygląda następująco:


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



    W funkcji wyswietl_napiecie(); chcę wyświetlić wartość ADC , jako tą stabilną, wartość szczytowa.....Nie jestem pewny, czy idę w dobrą
    stronę używając timera w ten sposób.Co by tu dalej poczynić.
    W fynkcji wyswietl_napiecie(); między innymi kodami do wyświetlenia napięcia w woltach i po przecinku mam tak:


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



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


    Funkcjonuje to nawet ciekawie ale reakcja przy szybkim pokręceniu jest taka, że wyświetlenie zmienia się z opóźnieniem (reakcja po chwili
    kiedy nastąpi zmiana napięcia), no i na razie nie mam pomysłu jak wyłuskać tylko wartości szczytowe i je wyświetlać.
    Rozumiem zamysł Twojej podpowiedzi Sylwku i o co kaman, ale puki co nie wiem, jak zastosować to w kodzie.
    Pozdrowionka.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 17 cze 2017, o 07:10 
    Offline
    Użytkownik

    Dołączył(a): 12 lis 2014
    Posty: 108
    Pomógł: 0

    Nie mogę poradzić sobie, jak rozwiązać to programowo. Teoretycznie rozumiem, co SylwekK mi poradził, ale za Chiny ludowe nie mogę ruszyć z kodem.
    Może któryś z biegłych forumowiczów mi podpowie na zaczątek :( . ?



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

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

    Wartość szczytowa to prosta sprawa. Bierzesz dodatkową zmienną, która będzie też służyła do wyświetlania wyników i porównujesz ją z aktualnym wynikiem i teraz jeśli aktualny wynik jest większy niż stan zmiennej to przypisujesz ten wynik do tej zmiennej i jednocześnie ustawiasz timer na odliczenie 1s. Po odliczeniu czasu przez timer znowu przypisujesz aktualny stan. Pamiętaj, że samo porównanie musi być poza timerem aby ewentualnie wychwycić jakąś kolejną max wartość i ponownie ustawić timer na 1s.

    _________________
    http://www.sylwekkuna.com



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 17 cze 2017, o 13:38 
    Offline
    Użytkownik

    Dołączył(a): 12 lis 2014
    Posty: 108
    Pomógł: 0

    Dzięki Sylwku, że znalazłeś czas, a żeby odpisać.
    Coś zaczyna wychodzić, tylko występuje mały problem z wyświetlaniem. Wypociłem coś takiego w oparciu o Twoje podpowiedzi:


    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 powołałem dwie zmienne: uint16_t wynik1; i uint16_t wartosc_szczytowa; (zmienne globalne). Uint16_t wynik1; jest powiązany z pomiarem ADC i
    jako postać 0-1023. Wyświetlają się dwie wartości adc, ta "normalna" i ta szczytowa-spowolniona, uśredniona, szczytowa.
    Problem wygląda tak, że wyświetlają się dwie takie same wartości (oczywiste). Kiedy pokręcę potencjometrem, to szczytowa dogania (0,5s) tą normalna, ale
    kiedy zmniejszam wartość adc, to ta szczytowa zostaje na zapamiętanej ostatniej wartości i się nie zmienia.
    Pewnie chodzi o skasowanie, odświeżenie tego pomiaru, ale mam już taki mętlik w głowie, że nie myślę racjonalnie :evil: .

    Czy to, co namodziłem jest ok (pomiar wartości szczytowych) i co ewentualnie robię źle. Proszę o wsparcie forumowiczów.

    ------------------------ [ Dodano po: 25 minutach ]

    Popełniłem jeszcze mała korektę i wyglada to następująco:
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


    Wydaje mi się, że chyba jest to, o co mi chodziło, tylko byłoby fajnie, gdyby czas narastania był krótki (gonienie za napięciem), a czas wyświetlania nawet
    po zaniku na wejściu adc był nieco wydłużony. Co by nu wykombinować i czy teraz jest do przyjęcia taka oto wersja ?.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 19 cze 2017, o 14:44 
    Offline
    Użytkownik
    Avatar użytkownika

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

    Powinno działać. Niepokoi mnie tylko to cls przed każdym wyświetlaniem. Zajmuje ono sporo czasu i lepiej zastąpić go drukowaniem spacji w miejscu gdzie chcesz wykasować jakieś dane.

    _________________
    http://www.sylwekkuna.com



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 20 cze 2017, o 06:30 
    Offline
    Użytkownik

    Dołączył(a): 12 lis 2014
    Posty: 108
    Pomógł: 0

    Dzięki SylwekK

    Siadam do zagadnienia, kiedy tylko mam czas, ale z tym problem. Napisałem trochę inaczej , poprawiłem i samo wyświetlanie wartości jest ok.
    Nie wpadłbym na to, gdyby nie Twoje wskazówki. Punkty oczywiście przydzielę, jak siądę na dłużej i dokończę. Wartość napięcia narasta szybko
    , a zatrzymuję na np 1s. Jest ok, tylko chcę jeszcze bardziej przytrzymać wynik na lcd, a to z kolei wpływa na inne dane na wyświetlaczu.
    Walczę nad tym. Wieczorkiem zapodam kod do wglądu. Słusznie zauważyłeś. To lcd_cls(); trochę mi miesza w programie. Jak to rozwiązać
    "spacjami" (jakiś przykład). Tak sobie myślę, że jak pętla kręci się szybko, to czy zauważę efekt?.
    Na razie.


    Nie mam dostępu do mojego Eclipse, ale o ile pamiętam, to jakoś tak mam na tą chwilę:
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



    Jeszcze raz dzięki Sylwku. Pozostałem na razie z tą wersją, aczkolwiek sposób z drukowaniem spacji również przetestowałem i jest ok. Sorki, że tak późno
    odpisuję, ale mam ważniejsze sprawy i C jest na dalszym planie.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 22 lut 2018, o 14:17 
    Offline
    Użytkownik

    Dołączył(a): 12 lis 2014
    Posty: 108
    Pomógł: 0

    Ostatnio przeglądałem "wymęczone" w Eclipsie swoje programiki i pomyślałem sobie, co by tu jeszcze zmienić, ew. dodać.
    Otóż mam wskaźnik-bargraf, który pokazuje mi wartość napięcia na lcd (hd44780). W necie widywałem różne ciekawe
    pomysły na wizualizację i wpadło mi w oko takie rozwiązanie, jak na foto:


    Obrazek


    Dorobiłem sobie cienki pasek w postaci kropek;

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



    i napisałem małą pętlę:

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


    Linia z kropkami ładnie się wyświetla. Następnie na nią "nałożony" jest pasek obrazujący poziom napięcia, który przesuwa się
    od lewej do prawej. Wszystko było by fajnie, tylko działanie nie jest do końca takie, jak chciałem.
    Wiadomo, że te kilka kropek znajduje się w jednym segmencie kolumny i kiedy przesuwająca się linijka nachodzi na kolejny
    segment, to wygasza od razu wszystkie kropki tego segmentu i tworzy się mały obszar bez tych kropek. nie ma tej płynności....
    Rozumiem, że powinienem utworzyć kilka znaków (jedna kropka, dwie kropki, trzy kropki, itd..., razem 5 kropek) i odpowiednio je wyświetlić, tak, jak robię to z samym paskiem. Tylko, że kończy mi się możliwość tworzenia własnych znaków(wyczerpały się) i
    szczerze mówiąc, nie wiem co by tu w takiej sytuacji można było zrobić. Czy w ogóle w mojej sytuacji jest jakieś wyjście.

    Oczywiście można by z tego w ogóle zrezygnować, no ale zachciało mi się takiej zajawki, no i jestem w kropce.

    Wyświetlacz sterowany jest buforowo. Może ma ktoś z kolegów jakieś remedium na ten problem. Z góry dziękuję.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 22 lut 2018, o 14:39 
    Offline
    Moderator
    Avatar użytkownika

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

    https://youtu.be/x_Xbg259yaM?t=1201

    _________________
    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: 22 lut 2018, o 14:50 
    Offline
    Użytkownik

    Dołączył(a): 12 lis 2014
    Posty: 108
    Pomógł: 0

    Dziękuję Mirku
    Zagłębiam się za studiowanie poradnika...



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 22 lut 2018, o 15:01 
    Offline
    Moderator
    Avatar użytkownika

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

    tam jest kilka poradników z tej serii w jednym z nich omawiam jak można to realizwać w C

    _________________
    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: 22 lut 2018, o 20:58 
    Offline
    Użytkownik

    Dołączył(a): 12 lis 2014
    Posty: 108
    Pomógł: 0

    Dziękuję Mirku.
    Pod linkiem, który mi podałeś akurat nie trafiłem na rozwiązanie, ale przejrzę wszystkie. Tak na marginesie, to jestem w posiadaniu Twego kodu w wersji
    "pro", ale akurat w tym konkretnym przypadku zastosowałem trochę inne rozwiązanie. Jak dojdę, co i jak, to się pochwalę. Pozdrawiam.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 23 lut 2018, o 10:33 
    Offline
    Użytkownik

    Dołączył(a): 12 lis 2014
    Posty: 108
    Pomógł: 0

    Witam po małej przerwie.
    Mirku, jeśli przypadkiem przeczytasz mój post, to powiem tylko, że przejrzałem 9 poradników o enkoderze i dwa epilogi dotyczące
    bargrafów, ale jakoś nie trafiłem. przyznaje, że poradniki o enkoderach przeleciałem pobieżnie, ale dwa pozostałe obejrzałem od
    dechy do dechy. Może po prostu przeoczyłem, ale nie znalazłem odpowiedzi na mój przypadek.
    Z kodu zawartego z poradnika wynika, ze zostały również wyczerpane wszystkie możliwe definicje własnych znaków od
    0x80 do 0x87. Ponad to w bargrafach z poradnika nie ma sytuacji, jak u mnie, że wyświetla się statycznie linijka kropek, a na
    niej wyświetlany jest ruchomy pasek.
    Swoją drogą, to myślałem, że jak w pętli będę wyświetlał te dwie nałożone na siebie rzeczy, to takiego negatywnego efektu nie będzie.
    Oko nie zauważy, ale się myliłem. Temat puki co jest otwarty. Może jest jakiś sposób na ominięcie tej niedogodności ? :(



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 23 lut 2018, o 11:05 
    Offline
    Użytkownik
    Avatar użytkownika

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

    A może po prostu niech każda definicja znaku zawiera te kropki w sobie i dodatkowo zdefiniuj sobie jeszcze zamiast spacji same kropki. Albo czegoś ja teraz nie rozumiem albo próbujesz koło na nowo odkryć, bo temat wydaje się być banalny.


    Autor postu otrzymał pochwałę

    _________________
    http://www.sylwekkuna.com



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 23 lut 2018, o 11:56 
    Offline
    Użytkownik

    Dołączył(a): 12 lis 2014
    Posty: 108
    Pomógł: 0

    Bardzo dziękuję Sylwekk.
    W 50% mi pomogłeś. Ja rozumiem, że dla Ciebie takie sprawy są banalnie proste. Musisz jednak mi wybaczyć słabą kreatywność.
    No nie pomyślałem, że przecież tak można. Pierwsza kreska i dwie kropki, jako jeden znak, dwie kreski i dwie kropki, jako drugi znak,
    trzy kreski i jedna kropka, jako 3 znak itd...No ale proste jest zazwyczaj trudne :lol: . Ja mam dodatkowy pasek z samymi kropkami,
    jako kolejny własny znak, który się wyświetla w pętli for. A jeden z parametrów tej pętli odpowiada za ostateczną długość paska.
    Na tą chwilę pozostał jeszcze jeden mały problem, że kolejny segment za końcem paska wędrującego jest pusty. To jest pewnie
    wyświetlenie pustego znaku. Występuje to tylko wówczas, kiedy poprzedni segment jest całkowicie zajęty przez swój znak. Kiedy
    natomiast jest wyświetlony częściowo (pierwsza kreska segmentu i kolejne kropki, druga kreska i kropki, trzecia kreska i kropki itd...),
    to wówczas ten następny w przodzie segment i kolejne po nim są normalnie z kropkami. Dopiero kiedy w danym segmencie nastąpi
    całkowite zaciemnienie, to znikają kropki w kolejnym. Sorry, że naklepałem tyle o tych kropkach i kreskach, ale chciałem dokładnie
    opisać przypadek. Kombinuję dalej... Jeszcze raz dzięki za wskazówkę.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 23 lut 2018, o 12:15 
    Offline
    Użytkownik
    Avatar użytkownika

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

    Kombinuj :) może wstaw jakiś warunek o drukowaniu czegoś lub nie kiedy osiągnięty jest pewien stan... ;-)

    _________________
    http://www.sylwekkuna.com



    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: 37 ]  Przejdź na stronę 1, 2  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