logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

tiny2313 - termometr led ds1820 raz działa raz nie działa

slwk1986 06 Mar 2013 11:40 1800 12
REKLAMA
  • #1 12023841
    slwk1986
    Poziom 9  
    Witam,

    Mam problem z prostym termometrem na attiny2313
    Program jest napisany w Bascomie.

    Sprzętowo wszystko jest ok, ale układ raz mierzy temperaturę a raz wyświetla --- co oznacza brak czujnika.
    Nie wiem gdzie jest problem bo nie znam się dobrze na programowaniu.

    Zamieszczam program w pliku.

    Fusebity mam dobrze ustawione, wielokrotnie sprawdzałem wszystkie połączenia.
  • REKLAMA
  • #2 12024221
    FastProject
    Poziom 28  
    Pobieżne oględziny programu wskazują na to, że przerwanie "Set_clk:" trwa byt długo, co przeszkadza w odczycie danych z czujnika po 1Wire, bo wydłużają się czasy odczytu poszczególnych bitów. Albo jednak nie masz fusebitó dobrze ustawionych albo używasz niewłaściwego kwarcu.

    Wyświetlacz nie miga (za wolne taktowanie)albo świeci za słabo(zbyt szybkie taktowanie)?
  • #3 12027744
    slwk1986
    Poziom 9  
    układ chodzi na wewnętrznym taktowaniu 8 MHz, dzielenie przez 8 jest wyłączone.
    Wyświetlacz wyświetla poprawnie, jak już pokaże wskazanie to cyfry są wyraźne.
  • REKLAMA
  • #4 12027855
    FastProject
    Poziom 28  
    Mimo, że taktowanie jest dobre to przerwanie Set_clk, czyi multipleks wyświetlacza przerywa odczyty z czujnika i prawdopodobnie to może być powodem.

    A sam czujnik sprawdzałeś, wymieniałeś?
  • #5 12031343
    slwk1986
    Poziom 9  
    czujnika nie sprawdzałem inaczej niż w termometrze. kupiłem nowy więc mam nadzieję że jest sprawny.

    jak przerobić program żeby naprawić problem z przerwaniem?
  • REKLAMA
  • #6 12031432
    FastProject
    Poziom 28  
    Na końcu przerwania, zerujesz flagę (Reset Flag), nazwijmy ją "flaga końca przerwania", a przed każdym odczytem czy zapisem (przed każdym 1Wire...) czekasz aż ta flaga zostanie wyzerowana. Gdy to się stanie odrazu odczytujesz/zapisujesz dane z szyny 1wire i wtedy przerwanie nie powinno przerywać tych odczytów. Do oczekiwania na wyzerowanie flagi wykorzystaj np instrukcję Bitwait.

    Czyli:
    Na końcu przerwania:
    Kod: text
    Zaloguj się, aby zobaczyć kod

    Przed każdym odczytem (można w postaci podprogramu)
    Kod: text
    Zaloguj się, aby zobaczyć kod

    Nie zapomnij o zdefiniowaniu zmiennej na początku programu:
    Kod: text
    Zaloguj się, aby zobaczyć kod
  • #7 12031433
    Konto nie istnieje
    Poziom 1  
  • #8 12031598
    FastProject
    Poziom 28  
    atom1477 napisał:
    Na początek każdą instrukcję od 1Wire obuduj takim czymś:
    Kod: text
    Zaloguj się, aby zobaczyć kod


    A nie uważasz, że po takim czymś może mu czasami mrugać wyświetlacz?
  • REKLAMA
  • #9 12031654
    Konto nie istnieje
    Poziom 1  
  • #10 12032151
    slwk1986
    Poziom 9  
    Opcja z Enable/Disable Interrupts działa :)

    Termometr wskazuje poprawnie temperaturę.

    Bardzo dziękuję za pomoc :)
  • #11 12042312
    Konto nie istnieje
    Poziom 1  
  • #12 12042351
    BlueDraco
    Specjalista - Mikrokontrolery
    Dlaczego "czasami"? Cały czas pewnie miga... ;)
  • #13 12042365
    slwk1986
    Poziom 9  
    Wyświetlacz nie miga wcale, albo miga kiedy nie patrzę ;)
REKLAMA