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

[Mega16][Bascom] Timer do obsługi 1wire i lcd.

nobisz 30 Paź 2008 08:24 1914 6
REKLAMA
  • #1 5682418
    nobisz
    Poziom 14  
    Witam.
    Maiłem zbudowany zegar z pomiarem temperatury na atmega 16, lcd standard, temp na ds18b2, czas na wewnętrznym oscylatorze 1mhz. Ze względu na dużą niestabilnośc wewnętrznego generatora dołożyłem zewnętrzny kwarc zegarkowy oraz zmieniłem program, który używał timera1 na timer2. I tu pojawiły sie problemy z 1wire. Przypuszczam, że procedury Bascom do obsługi wykorzystują jeden z timerów i dla tego mam konflikty. Czy wie ktoś jakie timery wykorzystują procedury obsługi 1wire i lcd? Mozna gdzieś znaleźć źródła tych procedur.

    Poprawiłem tytuł:
    https://www.elektroda.pl/rtvforum/topic1015361.html
    [c_p]
  • REKLAMA
  • #2 5682484
    janek1815
    Poziom 38  
    Procedury odczytu wire w bascomie nie korzystaja z timerow masz blad w programie
  • REKLAMA
  • #3 5682494
    nobisz
    Poziom 14  
    to skąd wiedzą ile czasu minęło, przecież komunikacja osbywa się według określonego schematy czasowego. Kiedy mam procedurę odczytu w programie głównym to wszystko jest ok, kiedy tylko przeniosę rozkaz 1wread() do procedury obsługi przerwania timera2 program się sypie.
  • #4 5682520
    yokoon
    Poziom 29  
    Witam.

    Kolega w powyższym poście odpowiedział już, magistrala 1wire nie ma nic wspólnego z Timerami w Bascomie. Posiada własne procedury, nie wiem dlaczego przenosisz procedurę do Timera. Podczas pomiaru temperatury za pomocą DS18b20 w czasie pomiaru występuje Waitms 750 ale to opóźnienie nie pochodzi od Timerów.
  • REKLAMA
  • #5 5682536
    nobisz
    Poziom 14  
    to, że sama magistrala 1wire nie ma nic wspólnego z timerami to ok. Ale jeden rozkaz 1wread() w praktyce na poziomie kodu maszynowego to cały zestaw rozkazów typu wystaw na magistralę sygnał, poczekaj, odczytaj, poczekaj itd. Porcesor musi mieć informację o czasie, więc skąd ją bierze?
  • #6 5682978
    K_o_n_r_a_d
    Poziom 23  
    Opóźnienia wewnątrz 1wread itp. są robione czysto programowo, np. poprzez puste pętle, rozkaz nop itp. Dlatego zalecane jest wyłączanie przerwań (jeśli to możliwe) podczas działań na 1wire (aby precyzji opóźnień nie zakłócić) i sprawdzanie sumy CRC.
  • REKLAMA
  • #7 5683161
    nobisz
    Poziom 14  
    to rozwiązanie z czasami, rozumiem. U mnie raczej żadne przerwanie nie wcinało się podczas 1wread, ponieważ korzystam tylko z przerwania t2 generowanego raz na sekundę i na początku przerwania wykonuję 1wread potem zapuszczam kolejną konwersję i wracam w kolejnym przerwaniu po sekundzie.
REKLAMA