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? 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 29 maja 2025, o 21:27


    Strefa czasowa: UTC + 1





    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 18 ] 
    Autor Wiadomość
    PostNapisane: 4 kwi 2018, o 19:13 
    Offline
    Użytkownik

    Dołączył(a): 04 kwi 2015
    Posty: 26
    Pomógł: 0

    Witam, mam taki problem że mój avr-ek nie chce wyświetlać na LCD liczb pokolei. Liczby wyświetla w takiej kolejnośći: 1,2,3,4,5,10,11,12,13,14,15,20,itd. lub wyświetla litery .


    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.


    próbowałem też przez pętle for ale pokazuje 0

    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 kwi 2018, o 19:52 
    Offline
    Użytkownik

    Dołączył(a): 04 kwi 2015
    Posty: 26
    Pomógł: 0

    nie pomogło teraz wyświetla: 1,2,3,4,5,6,7,8,9,a,b,c,d,e,f,g,h,i,j,k i wraca do początku.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 4 kwi 2018, o 19:56 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 04 cze 2014
    Posty: 855
    Lokalizacja: pod Warszawą
    Pomógł: 58

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

    _________________
    Pomóżcie mi stanąć na nogi



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 4 kwi 2018, o 19:59 
    Offline
    Użytkownik

    Dołączył(a): 07 cze 2016
    Posty: 563
    Pomógł: 143

    zubik napisał(a):
    A i na koniec łańcucha wstaw zero czyli: przed wyświetleniem
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

    Znak końca ciągu jest dołączany przez funkcję itoa(), nie trzeba tego robić ręcznie. Poza tym, zmienna wa_da jest inkrementowana w każdym obiegu pętli. Kiedy przekroczy 4 będziesz modyfikował pamięć poza tablicą lik.

    bmenot napisał(a):
    nie pomogło teraz wyświetla: 1,2,3,4,5,6,7,8,9,a,b,c,d,e,f,g,h,i,j,k i wraca do początku.

    Założę się, że nie zmieniłeś wywołania funkcji itoa() na:
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

    tak jak proponował kolega zubik



    Ostatnio edytowano 4 kwi 2018, o 20:07 przez andrews, łącznie edytowano 1 raz

    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 4 kwi 2018, o 20:06 
    Offline
    Użytkownik

    Dołączył(a): 04 kwi 2015
    Posty: 26
    Pomógł: 0

    zmieniłem i nic nie dało...

    funkcja LCD_WriteText() pochodzi ze strony: http://radzio.dxp.pl/

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


    Pętla for nie działa pokazuje dalej 0



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 4 kwi 2018, o 20:14 
    Offline
    Użytkownik

    Dołączył(a): 07 cze 2016
    Posty: 563
    Pomógł: 143

    Sprawdź jeszcze raz. Początkowo się pomyliłem. Powinno być oczywiście:
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


    Autor postu otrzymał pochwałę


    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 4 kwi 2018, o 20:24 
    Offline
    Użytkownik

    Dołączył(a): 04 kwi 2015
    Posty: 26
    Pomógł: 0

    co oznacza to 10 ?? w itoa
    teraz pomogło ale jest jeden mały problem nie działa warunek:

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


    pętla por nie chce dalej działać



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 4 kwi 2018, o 21:34 
    Offline
    Użytkownik

    Dołączył(a): 04 kwi 2015
    Posty: 26
    Pomógł: 0

    korzystając z okazji mam jeszcze jedno pytanie:
    chce przekształcić wypełnienie pwm 16bit na procęty korzystając z itoa
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

    gdzie wy_pwm zmienna wypełnienia OCR1A.
    przy liczbach poniżej 500 pokazuje dobrze a przy wyźszych się gubi



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 5 kwi 2018, o 17:23 
    Offline
    Użytkownik

    Dołączył(a): 04 kwi 2015
    Posty: 26
    Pomógł: 0

    zmienna wy_pwm jest typu uint16_t.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 5 kwi 2018, o 17:59 
    Offline
    Użytkownik

    Dołączył(a): 07 cze 2016
    Posty: 563
    Pomógł: 143

    Wprawdzie tutaj akurat pewnie funkcja itoa() zadziała prawidłowo, ze względu na to, że wynik obliczania procentów będzie stosunkowo małą liczbą, jednak prawidłowo do konwersji zmiennych typu unsigned int (uint16_t) należy używać funkcji utoa().

    Druga sprawa, w trakcie obliczeń procentów wynik mnożenia wy_pwm*100 będzie znacznie wykraczał poza zakres liczby 16-bitowej bez znaku, więc obliczeń należy dokonywać na liczbach 32-bitowych. Taki zapis powinien zadziałać prawidłowo:
    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 kwi 2018, o 18:22 
    Offline
    Użytkownik

    Dołączył(a): 04 kwi 2015
    Posty: 26
    Pomógł: 0

    nic nie pomogło zmiana zmiennej na uint32_t tak i ta funkcja utoa. Teraz pokazuje na lcd
    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 kwi 2018, o 18:38 
    Offline
    Użytkownik

    Dołączył(a): 07 cze 2016
    Posty: 563
    Pomógł: 143

    bmenot napisał(a):
    nie pomogło zmiana zmiennej na uint32_t

    Ja napisałem, że obliczenia mają być wykonane na liczbach 32-bitowych, a nie żeby zmienić typ zmiennej wy_pwm na uint32_t. Zostaw typ zmiennej tak jak był, tylko linijkę:
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

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

    To musi zadziałać.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 5 kwi 2018, o 18:45 
    Offline
    Użytkownik

    Dołączył(a): 04 kwi 2015
    Posty: 26
    Pomógł: 0

    nie działa...
    utoa i itoa działają tak samo. Jak jest dopisane UL to wyświetla wH% a jak nie ma UL to pokazuje ok 3 mniej %niż powino być przy liczbach większych...
    Działa przy sprinft tylko wtedy gdy jest UL, chociaż bym wolał żeby było ito a gdzyż kiedyś przeczytałem że jest pamięciożerna.

    Co oznacza to UL przy 100 ??
    mirekk36 coś wspominał w swoich poradnikach ale jakoś nie ogarniam tego. Jak by ktoś mógł wyjaśnić to jaśniej to by było fajnie.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 5 kwi 2018, o 19:10 
    Offline
    Użytkownik

    Dołączył(a): 07 cze 2016
    Posty: 563
    Pomógł: 143

    Cytuj:
    utoa i itoa działają tak samo

    Nie działają tak samo. Napisałem Ci, że w tym konkretnym przypadku akurat mogą działać tak samo, ale do konwersji liczb całkowitych bez znaku używa się utoa().

    bmenot napisał(a):
    Jak jest dopisane UL to wyświetla wH% a jak nie ma UL to pokazuje ok 3 mniej %niż powino być przy liczbach większych

    No to musisz mieć namieszane gdzie indziej w kodzie, bo u mnie to działa prawidłowo. Na podstawie pojedynczych linijek kodu nie da się wywróżyć, gdzie jest błąd.

    bmenot napisał(a):
    Co oznacza to UL przy 100 ??

    UL wymusza na kompilatorze potraktowanie wartości jako unsigned long, czyli w przypadku AVR jest to liczba 32-bitowa bez znaku. Dzięki temu obliczenia są wykonywane na liczbach o większym zakresie, niż by to wynikało z typu zmiennej użytej w obliczeniach.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 5 kwi 2018, o 19:19 
    Offline
    Użytkownik

    Dołączył(a): 04 kwi 2015
    Posty: 26
    Pomógł: 0

    Cytuj:
    No to musisz mieć namieszane gdzie indziej w kodzie, bo u mnie to działa prawidłowo. Na podstawie pojedynczych linijek kodu nie da się wywróżyć, gdzie jest błąd.


    A to mój kod:

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


    do zmienej
      uint16_t zm_pwm
    przekazywane jest ze zmienej volatile uint16_t wy_pwm gdyż bespośrednio ze zmiennej wy_pwm nic nie wyświetlało przy itoa.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 5 kwi 2018, o 19:29 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 30 cze 2016
    Posty: 247
    Lokalizacja: Rybnik
    Pomógł: 13

    ja mam taki niezbyt ładny kod, używałem go na XMEGA, chodził lepiej jak itoa ale na atmega, attiny tez powinien chodzić
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

    _________________
    Situs != Situs



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 5 kwi 2018, o 19:49 
    Offline
    Użytkownik

    Dołączył(a): 07 cze 2016
    Posty: 563
    Pomógł: 143

    bmenot napisał(a):
    A to mój kod:
    Napisz jeszcze, czy dołączyłeś dyrektywą #include plik nagłówkowy <stdlib.h> na początku pliku *.c.
    Można oczywiście użyć sprintf(), ale utoa() też musi działać.

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

    i napisz, jaki będzie efekt.


    Autor postu otrzymał pochwałę


    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 6 kwi 2018, o 20:38 
    Offline
    Użytkownik

    Dołączył(a): 04 kwi 2015
    Posty: 26
    Pomógł: 0

    Cytuj:
    Napisz jeszcze, czy dołączyłeś dyrektywą #include plik nagłówkowy <stdlib.h> na początku pliku *.c


    Pomogło, teraz działa, nie miałem tego.

    Dzięki Wielkie za pomoc

    itoa() też działa...



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

    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