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 23:42


    Strefa czasowa: UTC + 1





    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 8 ] 
    Autor Wiadomość
     Tytuł: Moduł ADC
    PostNapisane: 7 sie 2012, o 22:13 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 13 cze 2012
    Posty: 76
    Lokalizacja: Węgorzewo
    Pomógł: 1

    Pomóżcie mi ze zrozumieniem. Problem mam taki:

    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.


    [proszę używać znaczników [ syntax = c ] a nie [ code ] - dobrze ? tak jak teraz poprawiłem mirekk36]

    Jak widać, program mierzy napięcie na dwóch wejściach ADC. Kłopot w ty, że na wyświetlaczu cały czas mam odczyt z ADC5. Jak usunę linię "if (pomiar(5)<940) buzer_on;" to wtedy mam odczyt z ADC0. Założenie było takie, że na wyświetlaczu bedzie odczyt z ADC0 a alarm jest założony na ADC5. Niestety, nie mam pojęcia co jest grane :(



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
     Tytuł: Re: Moduł ADC
    PostNapisane: 7 sie 2012, o 22:24 
    Offline
    Moderator
    Avatar użytkownika

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

    Panie kolego po pierwsze masz błąd

    ADMUX |= (ADMUX & 0xF8) | kanal;

    powinno być

    ADMUX = (ADMUX & 0xF8) | kanal;

    widzisz różnicę - oczywiście zdaje się że ten błąd niestety też jest w książce ale pisałem już o tym na tym forum. Poza tym zaglądaj też do aktualizacji:

    http://atnel.pl/uaktualnienia-programow-do-dvd.html

    i poczytaj KONIECZNIE o tym ADC z tego linku który podał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  
     Tytuł: Re: Moduł ADC
    PostNapisane: 7 sie 2012, o 22:28 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 13 cze 2012
    Posty: 76
    Lokalizacja: Węgorzewo
    Pomógł: 1

    Ufff, no tak, to był ten szczegół.
    Tak to jest jak się bezmyślnie fragment kodu wrzuci przez ctr_c , ctr-v :oops:



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
     Tytuł: Re: Moduł ADC
    PostNapisane: 9 sie 2012, o 22:50 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 13 cze 2012
    Posty: 76
    Lokalizacja: Węgorzewo
    Pomógł: 1

    W dalszym ciągu walczę z ADC, teraz mam taki kwiatek:
    W kodzie poniżej, jest pętal warunkowa "if (pomiar(0)>620)..." . Program wchodzi do tej pętli, ale na wyświetlaczu wynik pomiaru oscyluje w granicach 540. Natomiast, jak usunę // z linii "//lcd_int(pomiar(0));" przed pętlą, to wyswietla mi wynik 650 ale nie chce wejść do pętli warunkowej, mimo że teoretycznie warunek jest spełniony :(

    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.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
     Tytuł: Re: Moduł ADC
    PostNapisane: 9 sie 2012, o 23:02 
    Offline
    Moderator
    Avatar użytkownika

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

    Wiesz co? teraz musisz - zrobić w tył zwrot ;) i wrócić do pierwszej części książki z teorią na temat C i to do podstaw - bo tak namieszałeś w pojęciach - że ja się nie dziwię że coś ci nie wychodzi .... do tego nie pokazałeś pełnego kodu swojego programu - co każe przypuszczać że w ogóle sam nie do końca wiesz co robisz :(

    co to na przykład znaczy

    "nie chce wejść do pętli warunkowej" ..... a gdzie ty w tym fragmencie widzisz jakąkolwiek pętlę - nie wspomnę już o hmmm "warunkowej" ????

    może łatwiej będzie ci pomóc jak wkleisz tu całą zawartość swojego main.c .... najpierw w jednej wersji o której piszesz a potem w drugiej wersji - bo niestety z twoich opisów nic a nic nie mogę zrozumieć - a kod może mi pozwoli zobaczyć gdzie robisz i jakiego babola ;) 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  
     Tytuł: Re: Moduł ADC
    PostNapisane: 9 sie 2012, o 23:22 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 13 cze 2012
    Posty: 76
    Lokalizacja: Węgorzewo
    Pomógł: 1

    Wymiękłem i program w końcu napisałem w BACOM ;)
    Oczywiście , rozumiem Twoją irytację , sam jak jeszcze raz przeczytałem , to się uśmiechnąłem :D Chodziło mi o to , że nie wykonuje warunku "if (pomiar(0)>620)" mimo , że na wyświetlaczu mam 640. Ale już chyba się domyślam dlaczego. Jak wynik działania funkcji wpisałem do zmiennej i w dalszej części programu posługiwałem się tą zmienną to zaczęło działać. Wprawdzie mam już działający program w bascomie, ale dla zasady sprobuję go napisać w C, coby się nie zniechęcić ;)
    Problemem było to , że w wyniku lcd_int(pomiar(0)) otrzymuję 640 a 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.

    otrzymuję 640640

    Teraz już właściwie skonstruowałem warunki.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
     Tytuł: Re: Moduł ADC
    PostNapisane: 10 sie 2012, o 05:38 
    Offline
    Moderator
    Avatar użytkownika

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

    Po pierwsze to ja się nie irytuję ;) więc źle mnie zrozumiałeś - a to, że poradzę czasem powrót do źródeł to chyba nie grzech i objaw zdenerwowania ?

    Pewnie, że się nie zniechęcaj - ja chętnie pomogę - tylko właśnie , zacznijmy mówić tym samym językiem czyli używajmy albo starajmy się używać określeń technicznych z zakresu języka C, wtedy będzie się łatwiej porozumieć.

    Ok wracając do tematu program a jednocześnie ten warunek if, MUSI ci działać w obydwu wersjach - język C to nie Bascom i tu dopuszczalne są tego typu konstrukcje, a zatem MUSI działać i taki zapis

    Kod:
    if( pomiar(0) > 640 ) .....


    jak również taki

    Kod:
    wpomiaru=pomiar(0);
    if( wpomiaru > 640 ) .....


    problem może leżeć gdzie indziej - ty nic nie mówisz ani nie pokazujesz większej ilości swojego kodu, bo pewnie nie spodziewasz się że w innej części możesz robić BABOLA, który tutaj ma skutek. A tym BABOLEM mogą być niewłaściwie dobrane typy zmiennych przez ciebie .... bo na przykład jakiego typu jest u ciebie zmienna wpomiaru ???

    Poza tym coś mi się wydaje że masz w ogóle jakiś POWAŻNY błąd w konstrukcji samej funkcji main() .... ale hmmm tylko mogę zgadywać (a nie irytować się) ..... bo przecież całego kodu main.c nadal nie pokazałeś .... więc jak ci pomóc ?

    a jeśli na wyświetlaczu LCD otrzymujesz 640640 zamiast 640 to na pewno robisz jakiegoś MEGA BABOLA w kodzie - tylko go pokaż to ja ci podpowiem gdzie ;)

    _________________
    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  
     Tytuł: Re: Moduł ADC
    PostNapisane: 10 sie 2012, o 07:46 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 14 lut 2012
    Posty: 598
    Lokalizacja: Warszawa
    Pomógł: 13

    I kolejna rzecz ..... zwróć uwagę na to że nie interpretujesz jednej wartości pomiaru. Tylko w warunku if interpretujesz jeden pomiar i dla wyświetlacza wykonujesz drugi pomiar. według mnie jest to błąd logiczny programu. Powinieneś pomiar(0) przepisać do zmiennej i dopiero ją sprawdzać w warunku if i ewentualnie wyświetlać na wyświetlaczu.



    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 4 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