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

[ATTiny2313][Bascom]1-wire w timerze, problem

zzenonn 09 Sty 2010 21:04 2720 7
REKLAMA
  • #1 7511339
    zzenonn
    Poziom 10  
    Witam

    mamy taki przykładowy kod:
    $regfile = "attiny2313.dat"
    $crystal = 1000000
    
    Config Lcd = 16 * 1a
    Config Lcdpin = Pin , Db4 = Portd.0 , Db5 = Portd.1 , Db6 = Porta.1 , Db7 = Porta.0 , E = Portd.2 , Rs = Portd.3
    
    Config 1wire = Portd.0
    Config Timer0 = Timer , Prescale = 1
    
    Enable Timer0
    Enable Interrupts
    
    On Timer0 Pobierz_temp
    
    Dim wire_read As Integer
    Dim Temp As Integer
    
    Do
       Cls
       Lcd Temp
       Waitms 500
    Loop
    
    Pobierz_temp:
       1wreset
       1wwrite &HCC
       1wwrite &H44
       Waitms 750
       1wreset
       1wwrite &HCC
       1wwrite &HBE
    
       wire_read = 1wread(2)
       Temp = wire_read / 16
    Return
    
    End


    Jest to część sporo większego programu, chciałem tylko zoobrazować o co mnie chodzi.
    A więc, jak łatwo sie domyśleć chcę zaczytywać temperaturę z czujnika podłączonego do 1-wire (DS18B20), lecz chcę to robić timerem 'w tle', a następnie podstawiać sobie pod zmienną Temp wartość aby móc później wykonywać pewne akcje w pętli głównej, oczywiście akcje te bedą zależeć od temperatury.

    Jeśli chodzi o połączenie DSa z AVRem to jest ono OK, ponieważ jak przeniosę zawartość etykiety do pętli głównej to program działa bdb, ładnie czyta temperature nie ma problemów.

    Kod który wkleiłem nie działa, na wyświetlaczu się nic nie pokazuje (nie zostaje podstawiona temperatura do zmiennej Temp, bądz 1-wire sie jakoś zacina i tyle)
    Jeśli usunę wszystko z etykiety i np. wstawię tam 'Temp = 8' to działa, timer wykonuje to podstawienie i na wyświetlaczu ukazuje się liczba '8'. Lecz jeśli tylko dodam przez 'Temp = 8' np. 1wreset to już to podstawienie nie działa.

    Tak więc, czy ktoś mógłby mnie nieco naprowadzić?
    Nie chce czytać 1-wire z poziomu pętli głównej ponieważ nie może mi tam występować opóźnienie (to z 1-wire, 750ms). Tak jak piałem wyżej chce sobie czytać temperaturę w tle pętli głównej.

    Dzięki z góry
  • REKLAMA
  • #2 7511508
    Konto nie istnieje
    Poziom 1  
  • REKLAMA
  • #3 7511582
    zzenonn
    Poziom 10  
    zaaplikowałem twój kod ale jest 0 na wyświetlaczu
    piszesz że nie robiłbyś tego ne przerwaniu, proponujesz przenieść to do petli głównej, a reszte programu przerobić?
    bo nim jeszcze jest obsługa przycisków, RC5 etc. która własnie znajduje się w pętli głownej
  • REKLAMA
  • #4 7511647
    Konto nie istnieje
    Poziom 1  
  • #5 7511666
    zzenonn
    Poziom 10  
    tak, poprawilem to, ale pokazuje 0
  • #6 7511696
    Konto nie istnieje
    Poziom 1  
  • #7 7511738
    zzenonn
    Poziom 10  
    recznie to w kodzie poprawilem i z ropzedu zle wpisalem, to jest poprawnie :)
    moj blad

    gdyby to bylo zle to nic by nie dzialalo
  • REKLAMA
REKLAMA