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 10 lip 2025, o 00:12


    Strefa czasowa: UTC + 1





    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 8 ] 
    Autor Wiadomość
    PostNapisane: 18 lis 2015, o 20:22 
    Offline
    Nowy

    Dołączył(a): 18 lis 2015
    Posty: 21
    Pomógł: 0

    Witam,

    mam strasznie "dziwny" problem, którego od dłuższego czasu nie mogę rozwiązać sam. Mianowicie posiadam napisaną takową funkcję do wyświetlania tekstu na LCD (2 x 40 HD44780)

    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.


    wszystko działa ładnie jak w głównym programie wywołuję takie cudo:

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


    a gdy zamiast łańcucha znaków chce wyświetlić wartość zmiennej to wyświetlacz "milczy" a po jakimś czasie wyświetla "dziwy"

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


    mógłby ktoś mi powiedzieć dlaczego? i co trzeba by było zmienić aby to zaczęło działać?



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 18 lis 2015, o 20:55 
    Offline
    Użytkownik

    Dołączył(a): 26 lip 2015
    Posty: 269
    Pomógł: 34

    Nie wiem, ale int nie możesz przekazać. Możesz tylko jako argument przekazać adres litery łańcucha, a więc zamiast zmiennej int stwórz funkcję która przekonwertuje int na string i w tedy przekaż adres tego łańcucha. Dobra może trochę zbyt skomplikowanie zobacz:
    kiedy chcesz wyświetlić tekst przy pomocy tej funkcji z zmiennej char(tyko taki typ można przekazać) to robisz tak:
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


    Ale nie możesz wyświetlić zmiennej typu int rozumiesz, a więc podsumowanie musisz zmienną licznik zamienić na tablice char np: przy pomocy funkcji itoa() poczytaj o niej w internecie, i przekazać adres tablicy w której jest zapisana ta liczba w postaci tablicy char.
    Czekaj czekaj, dlaczego zmienna tekst jest tablicą? Albo ja jestem zbyt początkujący aby to zrozumieć, albo coś namieszałeś. Pewnie to pierwsze :lol:


    Autor postu otrzymał pochwałę


    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 18 lis 2015, o 21:10 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 11 mar 2014
    Posty: 1475
    Pomógł: 167

    Wywołując funkcję przekazujesz wskaźnik na ciąg znaków zakończony znakiem zero (tzw. string). Jak wpisałeś liczbę to kazałeś wyświetlić coś ze wskazanego przez ciebie miejsca. A tam była jakaś losowa informacja - czyli to co pojawiało Ci się na LCD i pewnie było tam dużo danych zanim znalazł się jakiś bajt o wartości 0.

    Musisz jak napisał Bartek123 przekonwertować liczbę na stringa.

    --
    Pozdrawiam,
    Robert



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 18 lis 2015, o 21:58 
    Offline
    Nowy

    Dołączył(a): 18 lis 2015
    Posty: 21
    Pomógł: 0

    Bartek123 napisał(a):
    Czekaj czekaj, dlaczego zmienna tekst jest tablicą? Albo ja jestem zbyt początkujący aby to zrozumieć, albo coś namieszałeś. Pewnie to pierwsze :lol:


    przykład obsługi wyświetlacza LCD napisałem przy pomocy jakiegoś przykładu z neta. Chciałem sobie napisać "prosty" stoper ale widzę że na Timer-ze tego nie zrobię bo przy 7 min różnica w czasie jest już na poziomie 4 sek. Co prawda procka taktuje wew oscylatorem i wyczytałem gdzieś że to nie jest dokładne ale że aż tak? najdziwniejsze że procek odlicza szybciej niż normalny stoper a wydawało by się że powinien wolniej bo zanim odświeży np. LCD to czas leci.

    Tak czy inaczej dziękuje za podpowiedź była przydatna;) LCD wyświetla już co chce:) resztę muszę inaczej rozwiązać - chyba zakupię jakiś zegar czasu rzeczywistego i będę z niego pobierał czas.

    Pozdrawiam



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 19 lis 2015, o 20:17 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 07 sty 2014
    Posty: 336
    Lokalizacja: Grodzisk Mazowiecki
    Pomógł: 13

    Może spróbuj na początek użyć kwarc zegarkowy 32.768 Hz

    _________________
    "Nie programuj w święta - bug się rodzi"



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 19 lis 2015, o 20:33 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 11 mar 2014
    Posty: 1475
    Pomógł: 167

    Kwarc 32KHz nie pomoże, bo z reguły one także są mało dokładne i bardzo czułe na warunki zewnętrzne.
    Można niedokładności kwarcu kompensować poprzez odpowiednie dodanie kondensatorów lub programowo modyfikować licznik w timerze. Ale i tak zmiany temperatury spowodują jego rozjazd.

    Co do układu zegarka, to obejrzyj sobie poradnik Mirka:
    http://forum.atnel.pl/topic4652.html

    --
    Pozdrawiam,
    Robert



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 20 lis 2015, o 10:17 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 07 sty 2014
    Posty: 336
    Lokalizacja: Grodzisk Mazowiecki
    Pomógł: 13

    Kolega wspomniał o prostym stoperze. Dla mnie w tym przypadku zew. RTC to jak wół do karety. Niech najpierw sam określi co ma na myśli mówiąc "prosty"

    _________________
    "Nie programuj w święta - bug się rodzi"



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 20 lis 2015, o 19:34 
    Offline
    Nowy

    Dołączył(a): 18 lis 2015
    Posty: 21
    Pomógł: 0

    "prosty" - nie wymagający miesięcznego tworzenia kodu oraz elektroniki - najlepiej taki który mogę na obecną chwilę stworzyć na płytce testowej w miarę możliwości "dokładny":)

    owy stoper jest mi potrzebny do "nauczenia się czegoś o avr i ich programowaniu":)

    a żeby nauka przynosiła jakieś rezultaty trzeba ćwiczyć czyż nie?:) i ja za ćwiczenie wymyśliłem sobie stoperek:)

    obecnie próbuję odpalić ds1307 aby z niego pobierać generowany sygnał 1Hz lub czas i obliczać różnice ale mam problem z i2c (TWI) więc chwilowo mam swój niedokładny stoperek:)



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

    Strefa czasowa: UTC + 1


    Kto przegląda forum

    Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 11 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