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 5 kwi 2025, o 01:53


    Strefa czasowa: UTC + 1





    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 61 ]  Przejdź na stronę Poprzednia strona  1, 2, 3  Następna strona
    Autor Wiadomość
    PostNapisane: 1 maja 2013, o 10:32 
    Offline
    Moderator
    Avatar użytkownika

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

    step_m napisał(a):
    Wiem, że moje kolejne pytanie nie jest ściśle związane z callbackami.

    Ależ spokojnie możesz pytać o WSZYSTKO ;) .... o wszystko - i o to chodzi.

    step_m napisał(a):
    W konfiguracji TIMERA0 rejestr OCR0 określony został następująco:

    OCR0=(uint8_t)(F_CPU / 64.0 * 1000 - 0.5); //1ms

    Po obliczeniu tego wyrażenia, podstawiając częstotliwość taktowania mikrokontrolera np. 8MHz otrzymamy dużą wartość - 125000000, znacznie przekraczającą 255. Domyślam się, że wkradł się błąd w zapisie z nawiasami. Ale pominąwszy to, dlaczego kompilator nie zgłasza błędu lub ostrzeżenia, że wartość OCR0 jest daleko poza dopuszczalną? Ponadto o dziwo enkoder pracuje z tak skonfigurowanym TIMEREM0:-)


    Szczególnie to warto zrozumieć i stosować w swoich programach takie podejście ;) to nie żaden błąd a dla ciebie krótka podpowiedź:

    - jak będziesz kolejny raz obliczał to zastanów się dlaczego najpierw wykona się mnożenie ?

    64.0 * 1000

    i dlaczego dopiero później dzielenie

    8000000 / 64000

    a na końcu odejmowanie

    125 - 0.5

    ;)

    a wtedy wszystko ci się rozjaśni i nie będziesz się dziwił dlaczego - pomimo iż dopatrujesz się błędu - to wszystko działa ... bo ma działać.

    _________________
    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: 1 maja 2013, o 11:35 
    Offline
    Użytkownik

    Dołączył(a): 31 paź 2012
    Posty: 99
    Pomógł: 4

    Witam .
    Przepraszam za durne pytanie ale dlaczego w :

    OCR0=(uint8_t)(F_CPU / 64.0 * 1000 - 0.5); //1ms

    mnożenie wykona się przed dzieleniem ?
    Według wszelkich znanych mi zasad matematyki mnożenie i dzielenie ma ten sam priorytet i wykonuje się w kolejności od lewej , więc dlaczego tutaj miało by być inaczej ? ( pewnie dlatego , że czegoś nie wiem i dlatego pytam )



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 1 maja 2013, o 11:39 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 23 kwi 2012
    Posty: 108
    Lokalizacja: Giżycko
    Pomógł: 6

    Obrazek
    Tutaj kalkulator



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 1 maja 2013, o 11:44 
    Offline
    Użytkownik

    Dołączył(a): 31 paź 2012
    Posty: 99
    Pomógł: 4

    Artur napisał(a):


    Tyle tylko , że 64.0 * 1000 ująłeś w nawiasy i to ja rozumiem

    tutaj

    OCR0=(uint8_t)(F_CPU / 64.0 * 1000 - 0.5);

    tych nawiasów nie ma więc dzielenie wykonać się powinno niestety przed mnożeniem .



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 1 maja 2013, o 19:44 
    Offline
    Moderator
    Avatar użytkownika

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

    pagosa747 --> no i masz RACJĘ ;) .... Należy ci się DUŻE PIWO albo i dwa.

    To fakt, że pomimo złych obliczeń TO COŚ działa, no bo w efekcie wychodzi wartość dla OCR0 = 255; !!! Masakra ;)

    to znaczy może nie to że jakaś mega masakra ale wcale nie uzyskujemy częstotliwości ok 1 kHz !!! tylko dużo mniejszą - dla przykładu jeśli F_CPU = 8 MHz to

    OCR0 = 8000000 / 64 * 1000 - 0.5 = 255 !!! czyli częstotliwość będziemy mieć:

    8000000 / 64 / 255 = ok 490 Hz !!!! zamiast 1 kHz ... no ale działa - no działa

    -------------------------------------------------------------------------------------

    Ja nawet nie przeanalizowałem tego kodu i jakoś tak z uwagi że autor tu rzucił w oczy kodem graya itp to wręcz nie pomyślałem że mógł zrobić taki błąd ;) wręcz ślepo wierzyłem że jest ok a tu kicha ;) co wyszło dzięki tobie

    zatem trzeba POPRAWIĆ TO TAK

    Cytuj:
    OCR0 = (uint8_t)(F_CPU / 64 / 1000 );


    i będzie WSZYSTKO OK

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

    na blogu już kod jest poprawiono no i informacja o błędzie dostrzeżonym przez kolegę pagosa747 ;)

    http://mirekk36.blogspot.com/2013/04/en ... y-cz2.html

    _________________
    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: 2 maja 2013, o 00:19 
    Offline
    Użytkownik

    Dołączył(a): 31 paź 2012
    Posty: 99
    Pomógł: 4

    Dziękuję za uznanie ale nie mnie się ono należy tylko koledze step_m , to on bowiem zwrócił na to uwagę

    step_m napisał(a):
    Wiem, że moje kolejne pytanie nie jest ściśle związane z callbackami. W konfiguracji TIMERA0 rejestr OCR0 określony został następująco:

    OCR0=(uint8_t)(F_CPU / 64.0 * 1000 - 0.5); //1ms

    Po obliczeniu tego wyrażenia, podstawiając częstotliwość taktowania mikrokontrolera np. 8MHz otrzymamy dużą wartość - 125000000, znacznie przekraczającą 255. Domyślam się, że wkradł się błąd w zapisie z nawiasami. Ale pominąwszy to, dlaczego kompilator nie zgłasza błędu lub ostrzeżenia, że wartość OCR0 jest daleko poza dopuszczalną? Ponadto o dziwo enkoder pracuje z tak skonfigurowanym TIMEREM0:-)


    ja jedynie miałem wątpliwości co do Twojego Mirek wyjaśnienia

    mirekk36 napisał(a):
    - jak będziesz kolejny raz obliczał to zastanów się dlaczego najpierw wykona się mnożenie ?

    64.0 * 1000

    i dlaczego dopiero później dzielenie

    8000000 / 64000

    a na końcu odejmowanie

    125 - 0.5


    więc aby było sprawiedliwie popraw na blogu , że to dzięki koledze step_m



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 2 maja 2013, o 05:32 
    Offline
    Moderator
    Avatar użytkownika

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

    ach już mi się pokićkało - ale dzięki za uwagę - już koryguję wpis na blogu ;)

    _________________
    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: 2 maja 2013, o 11:31 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 24 lut 2013
    Posty: 94
    Lokalizacja: Turek
    Pomógł: 5

    Cytuj:
    OCR0 = 8000000 / 64 * 1000 - 0.5 = 255 !!! czyli częstotliwość będziemy mieć:



    Panie Mirku dlaczego tutaj wyszło 255?



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 2 maja 2013, o 12:21 
    Offline
    Moderator
    Avatar użytkownika

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

    Alltronik napisał(a):
    Cytuj:
    OCR0 = 8000000 / 64 * 1000 - 0.5 = 255 !!! czyli częstotliwość będziemy mieć:



    Panie Mirku dlaczego tutaj wyszło 255?


    eeeeh bo zrobiłem proste sprawdzenie typu:

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


    no i w a wylądowało 255. Rzeczywiście powinno wylądować teoretycznie zero - ale proszę ;)

    zresztą całe szczęście, że nie ląduje zero - a skąd się bierze 255 ? bo cała ta linijka kodu oryginalnego jest do ..... [piiik- cenzura].....

    nie dość że brak nawiasów to jeszcze to nieszczęsne rzutowanie do (uint8_t) - to to rzutowanie jest powodem tego kłopotu i szczęścia w nieszczęściu że wpada tam 255 ;) Bo coś autorowi się warning pokazywał to pierdyknął sobie rzutowanko - tyle że próbował rzutować liczbę kosmicznie wielką uint32_t na uint8_t i skoro pojawiają się same jedynki w bajcie to oznacza, że coś poszło nie tak - tzn tak jakby liczba zamieniła się na ujemną i rzutowanie najmłodszego bajtu będzie wtedy z jedynkami ... nie wiem na razie tak na szybko coś myślę

    ale na pewno trafiało tam przy złym zapisie 255 - nie wierzysz to sprawdź jak opisałem wyżej ;)

    _________________
    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: 29 maja 2013, o 19:16 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 22 kwi 2013
    Posty: 257
    Lokalizacja: 3miasto
    Pomógł: 5

    Użyłem biblioteki enkodera w swoim kodzie i się zastanawiam czy potrzebny jest enkoder
    o jakimś ściśle określonym kroku? pytam ponieważ z moje zliczany jest co drugi krok.

    _________________
    https://www.facebook.com/jacekplichtaphotography/



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 1 cze 2013, o 21:40 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 22 kwi 2013
    Posty: 257
    Lokalizacja: 3miasto
    Pomógł: 5

    Czy wsze enkodery działają co krok?

    _________________
    https://www.facebook.com/jacekplichtaphotography/



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 1 cze 2013, o 22:16 
    Offline
    Moderator
    Avatar użytkownika

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

    ja mam taki jak na filmiku widać w czołówce - działa co krok

    ale już tu gdzieś na forum komuś podpowiadałem jak można nieco zmodyfikować sobie kod żeby próbować działać z nieco inną rozdzielczością

    pokombinuj sobie zamieniając te dwie linijki jedna z drugą czyli albo tak:

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


    albo tak

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


    to chodzi o kod w EVENCIE enkodera ok ?

    _________________
    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: 3 cze 2013, o 16:46 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 22 kwi 2013
    Posty: 257
    Lokalizacja: 3miasto
    Pomógł: 5

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

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

    Dzięki wielkie, enkoderek chodzi jak marzenie :-)
    Mam jeszcze pytanko, odnośnie rfm12 otóż przesyłam temperaturę np "25.6" stringiem, jak mogę go zamienić na int dla wyświetlaczy 7led?

    _________________
    https://www.facebook.com/jacekplichtaphotography/



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 3 cze 2013, o 18:39 
    Offline
    Moderator
    Avatar użytkownika

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

    Cytuj:
    Mam jeszcze pytanko, odnośnie rfm12 otóż przesyłam temperaturę np "25.6" stringiem, jak mogę go zamienić na int dla wyświetlaczy 7led?


    A mam kolegę zastrzelić za to pytanie ? ;)

    załóżmy że masz ten string w tablicy buf[] - pokażę ci tylko ideę, jedną z wielu a ty pokombinuj troszkę - a później ew dopytaj dalej ok ?

    cy1 = buf[0] - '0';
    cy2 = buf[1] - '0';
    // ...... pomijamy np kropkię ;)
    cy3 = buf[3] - '0';

    oczywiście nie jest to idealna idea bo co gdy w buforze pojawi się np temperatura: 4,7 albo -8,2 ? ;)

    i oczywiście nie robimy tego tak wprost jak tu wyżej napisałem no ale jak widzisz zamiana stringa na int ma wiele twarzy w C. Inną idea to wyłuskanie funkcją strtok() tego co przed kropką i po kropce a potem jakaś obróbka ....

    jeśli pytasz o RFM12 to tak się domyślam że przynajmniej Bluebooka masz a może i GreenBooka ;)

    a przecież w Bluebooku chociażby w rozdziale ADC ale też w rozdziale o multipleksowaniu masz wiele przykładów które powinny cię natchnąć do działania ....

    niestety bez opanowania działania na tablicach i takich podstawach będzie ci ciężko

    fajne przykłady też masz gdybyś chciał przeanalizować tworzenie biblioteki dla LCD ... bo zawsze powtarzam - opis tworzenia biblioteki do LCD nie jest po to żeby kogoś TYLKO nauczyć jak pisać taką bibliotekę ale po to żeby na ciekawym przykładzie przekazać sposoby stosowania języka C w czystej praktyce ....

    _________________
    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: 3 cze 2013, o 23:12 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 22 kwi 2013
    Posty: 257
    Lokalizacja: 3miasto
    Pomógł: 5

    Strzelaj Waść, strzelaj ;-) Mam obie knigi ale nie znalazlem
    Rozwiązania.

    _________________
    https://www.facebook.com/jacekplichtaphotography/



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 4 cze 2013, o 09:42 
    Offline
    Moderator
    Avatar użytkownika

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

    W pierwszej książce masz wystarczające informacje na ten temat i to wystarczające w 100%

    a ty jak piszesz nie znalazłeś rozwiązania - bo szukasz być może rozdziału jak zamienić temperaturę w stringu na wyświetlacz LED

    ni byłbym w stanie i co więcej nikt nie jest w stanie opisać miliardów konkretnych przypadków pomysłów na jakie ktoś wpadnie. To o czym piszesz wymaga kilku działań na tablicach i podałem ci drogę jedną z wielu dróg do osiągnięcia celu - a nawet się nie odniosłeś ani nie dopytałeś no co to oznacza itp ?

    jeszcze raz powiem - żeby to robić w C trzeba poćwiczyć elementarne i podstawowe działania na tablicach i C-Stringach, ba! jeszcze raz powiem wyżej podałem ci nawet rozdziały gdzie można podpatrywać te rzeczy

    co więcej podałem ci nawet taki NAJPROSTSZY sposób metodą powiedziałbym "brute-force"

    cy1 = buf[0] - '0';
    cy2 = buf[1] - '0';
    // ...... pomijamy np kropkię
    cy3 = buf[3] - '0';

    a ty nadal nic ? pewnie nawet nie wypróbowałeś - nie kombinowałeś - to jak ja mam pomóc ?

    mam ci napisać jakąś gotową funkcję do twojego programu ? Nawet gdybym się tym zajmował i pisał każdemu funkcje do jego programu (pewnie nie miałbym czasu na nic innego wtedy) .... to skąd miałbym na podstawie tak zadanego pytania wiedzieć jak ją mam napisać ? jakie argumenty chcesz do niej przekazać , na jakich zmiennych globalnych pracujesz itp itd itp ....

    nie no sorki - ale chociaż troszkę wkładu własnego trzeba w takim przypadku ...

    _________________
    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: 4 cze 2013, o 10:07 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 22 kwi 2013
    Posty: 257
    Lokalizacja: 3miasto
    Pomógł: 5

    Nie irytuj się tak Mirku. Złość piękności szkodzi :lol: Ja w ostatnim wpisie nie prosiłem o gotowca tylko odniosłem się do
    strzelaniny i poszedłem grzecznie robić pompki przez co nie miałem czasu aby zająć sie dogłębnie moim zawiłym (jak dla mnie)
    zadaniem. Tak jak napisałeś wcześniej będę próbował samodzielnie to rozwikłać i ewentualnie poproszę o pomoc w szczegółach ;-)
    pozdr. ;-)

    _________________
    https://www.facebook.com/jacekplichtaphotography/



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 4 cze 2013, o 12:05 
    Offline
    Moderator
    Avatar użytkownika

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

    BIGjack napisał(a):
    Nie irytuj się tak Mirku


    Na prawdę nie denerwuję się to było raczej zdziwienie ...

    BIGjack napisał(a):
    Ja w ostatnim wpisie nie prosiłem o gotowca tylko odniosłem się do
    strzelaniny


    Więc być może źle zrozumiałem twoje intencje - przepraszam

    BIGjack napisał(a):
    Tak jak napisałeś wcześniej będę próbował samodzielnie to rozwikłać i ewentualnie poproszę o pomoc w szczegółach
    pozdr.


    Tak jak pisałem - spróbuj w jakikolwiek sposób to zacząć pisać / zaprogramować i od razu śmiało pytaj gdy tylko nasuną ci się pytania - bo wtedy łatwiej będzie doprecyzować pewne być może niezrozumiałe z książki rzeczy ...

    _________________
    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: 7 cze 2013, o 11:09 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 22 kwi 2013
    Posty: 257
    Lokalizacja: 3miasto
    Pomógł: 5

    Niestety nie poradzę sobie sam z tym wyświetlaniem na TWI 4*7LED
    Wiec od początku, RFM12 ładuje ramkę do bufora
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

    wyświetlam 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.

    następnie chcę wyświetlić na wyświetlaczy led, robię więc tak
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


    przekazuje zmienne do CY1-CY4 i no wysyłam przez TWI
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

    i wyświetlają sie zera, cy1 jest pusty.
    Prosze o naprowadzenie mnie na właściwą drogę bo wymiękam po któryms juz wieczorze z kolei.

    _________________
    https://www.facebook.com/jacekplichtaphotography/



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 7 cze 2013, o 11:31 
    Offline
    Moderator
    Avatar użytkownika

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

    O! teraz to można się odnieść do takiego konkretnego pytania, więc już się staram ;)

    zobacz masz tablicę:

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


    czyli 5 elementów tak ? dobrze rozumiem ? ... i w niej masz te cyfry na LCD ... ale skoro na LCD to znaczy że mamy tam kody ASCII znaków od 0 do 9 ... i super ale ....

    ale za chwilę odwołujesz się do przedziwnych dla mnie indeksów tej tablicy :(

    Cytuj:
    temp_dzies = atoi(test[4]);
    temp_jed = atoi( test[6] );
    temp_dziesietne = atoi( test[8] );


    z jakiej racji ? przecież przekraczasz dopuszczalny indeks i trafiasz gdzieś w kosmos :( ... tylko ten pierwszy index 4 jest prawidłowy i wskazuje na OSTATNI element tej tablicy test[5]

    _________________
    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: 7 cze 2013, o 11:46 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 22 kwi 2013
    Posty: 257
    Lokalizacja: 3miasto
    Pomógł: 5

    te indeksy 6 i 8 to wypadek przy pracy. Wczesniej miałem większa ramkę i bufor no i mam już ogromny smietnik
    po przeróżnych próbach podejścia do tematu.
    Teraz 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.

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

    i wyswietla zera.

    _________________
    https://www.facebook.com/jacekplichtaphotography/



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 7 cze 2013, o 11:59 
    Offline
    Moderator
    Avatar użytkownika

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

    ach a zaglądałeś do PDF'a ? jak się przekazuje argumenty do atoi() ???

    C:\WinAVR-20100110\doc\avr-libc\avr-libc-user-manual.pdf

    wystarczy zajrzeć na własny dysk, i szukajką znaleźć atoi()

    zobaczysz wtedy :

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


    widzisz ? przekazujesz WSKAŹNIK a nie kod znaku ..... a zajrzyj do książki na przykłady chociażby w rozdziale o multipleksowaniu jak się to robi ? ... jeśli chodzi o poszczególne elementy tablicy albo jej fragment.

    Gdybyś chciał przekazać całą tablicę to ok napisałbyś test bez nawiasów kwadratowych i już ... no ale to pobrałoby ci cały string z tej tablicy .... i tak samo KICHA jak byś nawet prawidłowo odwoływał się do poszczególnych elementów a trzeba byłoby tak:

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


    znaczek & wyciąga adres czyli wskaźnik na ten element.... ale nadal będzie panie KICHA - bo poleci cały string - a co to jest string ? to jest ciąg znaków zakończonych zerem więc jeśli np twoja ramka wyglądałaby tak

    Cytuj:
    "-23.55"


    to atoi dostałoby kota gdyż analizę zaczęłoby od DRUGIEGO elementu i wzięłoby cały string pod uwagę do końca czyli

    Cytuj:
    "3.55"


    na prawdę - zanim będziesz pisał takie programy no to chcesz czy nie chcesz musisz porobić sobie o wiele prostsze ćwiczenia na to jak się działa na tablicach w C bo widać - że na razie w ogóle się w tym nie orientujesz ... a bez tego NIE MA PROGRAMOWANIA w C :(

    ale dobra .... to co możesz zrobić ?

    no zakładając że masz sztywną ramkę i wiesz w którym elemencie jest jaka liczba i chcesz ją dać na LED - tak z tej próby kodu wynika to ja znowu ci podpowiem - skorzystaj że z tego co ci napisałem wyżej, czyli:

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


    dlaczego uparłeś się na atoi() skoro nawet nie przeanalizowałeś jak ono działa ? tzn rozumiem - to nawyk z Bascoma pewnie, ale jak widzisz tu idą wskaźniki w ruch - coś czego w Bascomie nie uświadczysz :(

    _________________
    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: 7 cze 2013, o 12:13 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 22 kwi 2013
    Posty: 257
    Lokalizacja: 3miasto
    Pomógł: 5

    Dzięki Mirku oczywiście jak Ty podałeś rozwiązanie to zadziałało. Ja wcześniej to testowałem ale tylko z jednym indeksem
    no i zapomniałem że zmieniłem treść ramki i trafiłem na jakis tam znak zamiast cyfrę i nie dziwota że głupoty mi wyświetliła kostka led.
    W tym momencie szukałem innego rozwiązania bo jak pisałeś wcześniej jest ich prawie tyle co programujących.
    Jak się siedzi kilkanaście godzin nad jednym tematem to się zaczyna robić niezły bałagan i w kodzie i w głowie od różnych prób.
    Teraz dziękuję za rozwiązanie i idę robić czystki i uporządkować kod i uzupełnić wiadomości.
    pozdrawiam i jeszcze raz dzięki, jesteś wielki ;-)

    _________________
    https://www.facebook.com/jacekplichtaphotography/



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 10 cze 2013, o 17:14 
    Offline
    Moderator
    Avatar użytkownika

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

    robiw --> takie proste rozwiązania są bardzo popularne i niejednokrotnie jak już to je stosowałem, inni też ...

    tyle że może nie zauważyłeś że tutaj obsługa enkodera pojawiła się niejako dodatkowo (wypadek przy pracy) ;) chodziło o to aby przy okazji callbacków pokazać coś jeszcze i może też ciut bardziej zaawansowanego ....a czemu nie ? .

    Poza tym proste sposoby obsługi enkoderów nie są pozbawione wad, które eliminuje ten sposób. I jeśli komuś nie potrzeba większych możliwości to skorzysta z tych prostych procedur - za to - ten sposób - daje równie fajne możliwości i wcale nie jest jakiś zaraz pamięciożerny czy coś tam ;) ... bez przesadyzmu - mnie co najwyżej szkoda timera tracić że tak powiem w takim sposobie. Więc to byłoby dla mnie priorytetem wyboru metody. Gdy mam pod ręką wolny timer to zawsze skorzystam z tej metody bo jest wg mnie prosta ;) ... a jeśli nie mam timera to korzystam z prostej metody

    _________________
    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: 16 sty 2014, o 12:20 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 07 gru 2012
    Posty: 56
    Lokalizacja: Praszka
    Pomógł: 1

    mirekk36 napisał(a):
    Cytuj:
    OCR0 = (uint8_t)(F_CPU / 64 / 1000 );


    Witam, mam takie pytanie odnośnie powyższej linii.

    Przeliczyłem sobie ją dla różnych wartości częstotliwości taktowania procesora i doszedłem do wniosku, że skoro jest stosowane F_CPU to program będzie dla każdej podanej częstotliwości w ustawieniach projektu wyliczał ~(mniej więcej) odpowiednią wartość.
    Mniej więcej napisałem dlatego, że:
    o ile w przypadku podania częstotliwości 8 MHz wartość OCR0 wychodzi całkowita to już w przypadku gdy podamy 11,059200 MHz to wartość OCR0 będzie równa 172,8. Czy dobrze myślę? W związku z tym, że rejestr OCR0 może przyjmować wartości z zakresu 0-255 wpadnie do niego wartość równa części całkowitej z liczby 172,8 czyli 172. A to będzie skutkować tym, że przerwanie będzie generowane nie co 1 ms, tylko co 1,0046 ms ?
    Wspomagałem się troszkę excelem:
    Obrazek

    Czyli nie do końca prawidłowo, może działać program z enkoderem, gdy mirkoprocesor będzie taktowany częstotliwością 11,059200 Hz ??
    Przekłamania mogą pojawić się gdy będziemy szybciej pokręcali enkoderem?
    Jeśli gadam głupoty to proszę naprostujcie mnie ;)


    --------------------------------------
    PS.
    Jeszcze mam wątpliwość co do tego:
    OCR0 = (uint8_t)(F_CPU / 64 / 1000 );
    czy nie powinno być tam jeszcze - 1 ? tzn.:
    OCR0 = (uint8_t)( ( F_CPU / 64 / 1000 ) - 1 );
    ponieważ impulsy w rejestrze TCNTx zliczane są od zera?



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 16 sty 2014, o 14:07 
    Offline
    Moderator
    Avatar użytkownika

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

    ursmar napisał(a):
    Mniej więcej napisałem dlatego, że:
    o ile w przypadku podania częstotliwości 8 MHz wartość OCR0 wychodzi całkowita to już w przypadku gdy podamy 11,059200 MHz to wartość OCR0 będzie równa 172,8. Czy dobrze myślę? W związku z tym, że rejestr OCR0 może przyjmować wartości z zakresu 0-255 wpadnie do niego wartość równa części całkowitej z liczby 172,8 czyli 172. A to będzie skutkować tym, że przerwanie będzie generowane nie co 1 ms, tylko co 1,0046 ms ?
    Wspomagałem się troszkę excelem:


    Czyli nie do końca prawidłowo, może działać program z enkoderem, gdy mirkoprocesor będzie taktowany częstotliwością 11,059200 Hz ??
    Przekłamania mogą pojawić się gdy będziemy szybciej pokręcali enkoderem?
    Jeśli gadam głupoty to proszę naprostujcie mnie


    Głupot nie gadasz - pytać zawsze można, Ba! nawet trzeba hmm warto ;)

    tyle że teraz usiądź i chwilę pomyśl sam czy m z punktu widzenia serwa różni się czas

    1 ms

    od

    1,0046 ms ???

    Spójrz na ilość miejsc po przecinku - przelicz sobie ile wyniosą odchyłki nawet przy 100 krokach albo nawet przy 1000 !!! krokach ;) ... czy nie widzisz - że to nie będzie miało żadnego znaczenia ? ;) .... nadal mogą to być różnice jednej setnej! milisekundy jeśli już

    ursmar napisał(a):
    PS.
    Jeszcze mam wątpliwość co do tego:
    OCR0 = (uint8_t)(F_CPU / 64 / 1000 );
    czy nie powinno być tam jeszcze - 1 ? tzn.:
    OCR0 = (uint8_t)( ( F_CPU / 64 / 1000 ) - 1 );
    ponieważ impulsy w rejestrze TCNTx zliczane są od zera?


    Tak masz rację - tylko też spójrz co wyżej napisałem

    _________________
    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: 16 sty 2014, o 14:30 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 07 gru 2012
    Posty: 56
    Lokalizacja: Praszka
    Pomógł: 1

    Dziękuję za odpowiedź ;)
    rzeczywiście z tej strony na to nie spojrzałem... jakoś tak pomyślałem, że to przerwanie musi być generowane ściśle co 1 ms i to mnie zbiło z tropu, ale przynajmniej poprzeliczałem sobie te wartości kilkanaście razy :)

    Mam jednak takie pytanie jeszcze:
    stosuję taki enkoder inkrementalny optoelektroniczny
    MOZ 30 500 5 BZ K
    Nota 1. PL
    Nota 2. ENG
    i niestety, na wyświetlaczu LCD na pełen obrót przypada około ~560 impulsów, gdy kręcę powoli, tzn. 1 obrót/kilka sekund.
    A gdy zakręcę trochę szybciej to już w cały świat skaczą te wartości.

    Testy robię na płytce ATB, a sygnały A i B enkodera są podłączone przez stykówkę, ponieważ jest to enkoder typu otwarty kolektor i dodaję do linii sygnałowej A oraz B rezystory 2K podciągnięte do VCC.

    W czy może być problem, ten program nie jest w stanie obsłużyć takiego enkodera?
    czy coś z Enkoderem może być nie tak? Trochę się zatrzymałem i nie wiem w jaką stronę dalej ruszyć w obecnej sytuacji...



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 16 sty 2014, o 14:39 
    Offline
    Moderator
    Avatar użytkownika

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

    Po pierwsze pokazywałem troszkę jak można tam kombinować ze zmianą rozdzielczości tego kodu nie tylko dla różnych enkoderów ale nawet dla tego samego enkodera ... ale nie podpowiem ci teraz szczegółów - lecz nie dlatego że nie chcę czy po złości ...

    przypomnę tylko, że:

    1. po pierwsze poradnik ten nie dotyczył enkodera - kod do niego to był wypadek przy pracy no i próba przemycenia przeze mnie nauki C w tym przypadku CALLBACKÓW na jakimś bardzo ciekawym przykładzie - i zauważ że zwykle mi się taki cel udaje osiągnąć bo większość czytelników, widzów o wiele lepiej po tym poradniku rozumie callbacki i zdarzenia. A że przy okazji w tle był inny ciekawy temat ;) ... to to jest właśnie sztuka przyciągnięcia uwagi na cel główny ale też z kolei zwrócenia uwagi na jeszcze inne pasjonujące zagadnienia ;) ... tyle że aby coś więcej mówić o tym to jak mnie znasz musiałbym się przygotować i zrobić o tym oddzielny poradnik czyli o enkoderach tak w ogóle ;) ... no ale myślę z drugiej strony, że to co zostało JUŻ powiedziane oraz - zobacz że na końcu poradnika na blogu masz link do alternatywnego kodu obsługi enkodera napisanego przez naszego super kolegę Antystatycznego - to myślę że sobie poradzisz - albo może ktoś jeszcze coś podpowie - bo ja ... niestety na razie nie będę miał jak zająć się tym tematem i mam nadzieję że mi wybaczysz.

    2. zajrzyj właśnie do tego linku na końcu artykułu z bloga

    _________________
    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: 16 sty 2014, o 14:54 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 07 gru 2012
    Posty: 56
    Lokalizacja: Praszka
    Pomógł: 1

    mirekk36 napisał(a):
    ...niestety na razie nie będę miał jak zająć się tym tematem i mam nadzieję że mi wybaczysz.

    Oczywiście to rozumiem, każdy ma swoje zajęcia :) Sam bym chciał takie poradniki robić i wymieniać się wiedzą, bo to SUPER sprawa jest ;)
    Na razie jednak muszę się jeszcze trochę poduczyć. Dzięki za wskazanie miejsca dalszych poszukiwań rozwiązania. Już się tam przenoszę :)



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

    Dołączył(a): 14 lut 2015
    Posty: 44
    Pomógł: 2

    Dzień dobry,

    Mam problem ze zmianą typu zmiennej "wynik".
    Jest ona typu int8_t a chciałbym zrobić ją np. int16_t .
    Próbowałem różnych wariantów zmian, jednak na nic, jedyne co uzyskiwałem to poprawna kompilacja a na wyświetlaczu i tak "-1" .

    Próbuję dostosować bibliotekę do swojego enkodera, wiąże się to też ze zmianą częstotliwości przerwania. Czy ta konkretna biblioteka będzie sprawnie działać z przerwaniami nie 1kHz tylko np. 5kHz ?



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

    Strefa czasowa: UTC + 1


    Kto przegląda forum

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