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 12 lip 2025, o 02:55


    Strefa czasowa: UTC + 1





    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 9 ] 
    Autor Wiadomość
    PostNapisane: 19 kwi 2016, o 13:35 
    Offline
    Nowy

    Dołączył(a): 10 mar 2016
    Posty: 7
    Pomógł: 0

    Witam,
    Mam taki problem, że po włączeniu zasilania do układu termistor osiąga nie wiadomo jaką wartość. Zrobiłem tradycyjnie przez dzielnik napięcia. Program jest bardzo prosty że po przekroczeniu wartości zadanej ma się zapalić dioda. Procek który używam to aTtiny85.

    Kod:
    #include <avr/io.h>
    #include <util/delay.h>

    uint16_t pomiar(uint8_t kanal);


    int main(){
       DDRB |=(1<<PB3); // podlaczona dioda
       uint16_t a = 0;

       ADCSRA |= (1<<ADEN); // do pomiaru ADC mam podlaczone PB4
       ADCSRA |= (1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0); // preskaler 128
       ADMUX |= (1<<REFS2)|(1<<REFS1); //wewnętrzne źródło 2,56V
       for(;;){
          a = pomiar(PB4);
          if (a >= 200 ) PORTB |= (1<<PB3);
          else PORTB &= ~(1<<PB3);
       }
    }

    uint16_t pomiar(uint8_t kanal){
       ADMUX = (ADMUX & 0b11111100)|kanal; //maskowanie
       ADCSRA |= (1<<ADSC);
       while(ADCSRA & (1<<ADSC));
       return ADCW;
    }

    Całe podłączenie:
    Obrazek

    Tak wpięty termistor NTC bez zasilania pokazuje około 5K. gdy podłącze zasilanie na mierniku wyskakuje 1 jako znak przekroczenia zakresu. Gdy jest niepodłączony termistor to ma wartość 47K.

    Proszę o pomoc gdzie zrobiłem błąd.

    Proszę o poprawienie kodów w poście stosując się do zaleceń:
    topic14999.html --- > SunRIver



    Ostatnio edytowano 21 kwi 2016, o 06:41 przez toffik353, łącznie edytowano 1 raz

    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 19 kwi 2016, o 13:51 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 26 sty 2016
    Posty: 1174
    Lokalizacja: Kraków
    Pomógł: 94

    Hmm, nie wiem, czy dobrze myślę... spróbuj podłączyć NTC do GND, a do Vcc daj rezystor o rezystancji podobnej do czujnika (47k albo 51k). Myślę, że w ten sposób łatwiej będzie Ci zapanować nad wynikiem.
    Aha, i jeszcze pomiędzy dzielnikiem a wejściem procka daj rezystor ograniczający prąd, na wszelki wypadek. I może jakiś kondensator filtrujący



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 19 kwi 2016, o 17:13 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 11 sty 2013
    Posty: 1760
    Pomógł: 196

    Witam
    Może najpierw zrób prawidłowe pomiary
    toffik353 napisał(a):
    Tak wpięty termistor NTC bez zasilania pokazuje około 5K. gdy podłącze zasilanie na mierniku wyskakuje 1 jako znak przekroczenia zakresu. Gdy jest niepodłączony termistor to ma wartość 47K.

    ...czy chcesz przez to powiedzieć, że mierzysz rezystancję przy włączonym zasilaniu?
    Zmierz napięcie jakie panuje na PINB4.

    Pozdr.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 19 kwi 2016, o 21:47 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 01 lis 2015
    Posty: 1448
    Lokalizacja: okolice Warszawa
    Pomógł: 149

    Witam
    Ja tak myślę że zaczął bym oczywiście od pomiarów napięć na wejściu PB4,dobraniu odpowiedniego dzielnika - idąc tropem kolegów "Marhef" i "kicajek", oraz zmienił bym " wartość zadaną" na większą,
    ponieważ 200 to niecałe 20% wartości max.1023 czyli z ref=2,56 około 0,5 V i może tę wartość przekraczasz .

    Pozdrawiam Darek



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 21 kwi 2016, o 09:11 
    Offline
    Nowy

    Dołączył(a): 10 mar 2016
    Posty: 7
    Pomógł: 0

    Wszystko co zrobiłem działa na atmega32 bo przed chwilą sprawdzałem i na LCD wyświetlało mi wartość z przetwornika ADC a na attiny85 nic nie chce działać. Sądzę, że problem leży w kodzie programu i coś w nim brakuje żeby uruchomić przetwornik ADC w tym attiny. Problem jest taki, że nie wiem co w nim brakuje bo z noty katalogowej wszystkie rejestry ustawiłem.

    Proszę o dokładne sprawdzenie mojego kodu.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 21 kwi 2016, o 13:08 
    Offline
    Nowy

    Dołączył(a): 10 mar 2016
    Posty: 7
    Pomógł: 0

    Dalej próbuję coś wykombinować ale na marne. Zauważyłem że mogę całkowicie odpiąć dzielnik napięcia od przetwornika ADC i gdy podnoszę płytkę testową to zaświeci się dioda. gdy jej nie ruszam to jest ok. Ruszałem wszystkie kabelki bo myślałem że coś nie łączy i nic. Gdy przesuwam po stole też nic się nie dzieje, jedynie jak podniosę o milimetr to zaświeci się dioda :) (akcelerometr jakiś).
    Sprawdzałem na dwóch attiny85 i jest to samo.
    Zmieniałem wartość od jakiej ma się zaświecić dioda i nic to nie daje.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 21 kwi 2016, o 13:48 
    Offline
    Użytkownik

    Dołączył(a): 10 lip 2015
    Posty: 334
    Pomógł: 32

    Zamiast "a = pomiar(PB4)" powinno być "a = pomiar(2)", jeżeli chcesz przeprowadzić pomiar z ADC2 (PB4). Tak jest w nocie katalogowej.

    Aktualnie przeprowadzasz pomiar błędu offsetu wyjścia ADC2 (PB4) przy wzmocnieniu 1.


    Autor postu otrzymał pochwałę


    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 22 kwi 2016, o 08:30 
    Offline
    Nowy

    Dołączył(a): 10 mar 2016
    Posty: 7
    Pomógł: 0

    Dziękuję, teraz wszystko działa tak jak powinno. To była główna przyczyna problemu.

    Mam jednak pytanie dlaczego tak się działo skoro zrobiłem maskowanie tych bitów, których nie chciałem używać? Nie maskowałem 2 najmłodszych bitów bo tylko te się zmieniają w zależności który wybiorę kanał (PB2, PB3, PB4, PB5) "ADMUX = (ADMUX & 0b11111100) | kanal ", kanał wybieram podając w nawiasach z którego portu korzystam "a = pomiar(PBx)".



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 22 kwi 2016, o 11:05 
    Offline
    Użytkownik

    Dołączył(a): 10 lip 2015
    Posty: 334
    Pomógł: 32

    Zapis PB4 odpowiada liczbie 4, a to jest równe 0b00000100. Zobacz na tabele trybów ADC. Aby wykonać pomiar z PB4 trzeba wpisać 0b00000010, co odpowiada liczbie 2.



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

    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