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

ds1820 do znudzenia,w symulatorze działa, a w atmega32 nie.

szakamason 13 Mar 2007 10:42 2241 6
REKLAMA
  • #1 3673537
    szakamason
    Poziom 13  
    Posty: 123
    Pomógł: 3
    Ocena: 4
    Problem mam następujący, w proteusie ds1820 działa, wyświetla temperaturę w HEX i reauje na zmiany wartości temperatury a gdy podłącze do rzeczywistej atmegi32 zgłasza jedynie że jest, po resecie, a wartości temperatury wynoszą 0xFFFF. Atmega jest na zewnętrznym kwarcu 8Mhz. Czy robi wielką różnicę gdy zamiast rezystora podciągającego 4k7 mam rezystor 4k617 ??
  • REKLAMA
  • #2 3673812
    pmmisiek
    Poziom 15  
    Posty: 234
    Pomógł: 7
    Ocena: 4
    Jeśli ustawiłeś 1wire na lini portu C to wyłącz JTAG w fusebitach lub zmień 1wire na inny port.

    Pozdrawiam
  • REKLAMA
  • #3 3674499
    szakamason
    Poziom 13  
    Posty: 123
    Pomógł: 3
    Ocena: 4
    Sprawdzałem na portach D i B, i nic, czy jest możliwe że czujnik nie sprawny lub coś z procesorem, już nie mam pomysłów.
  • REKLAMA
  • #4 3675309
    redart
    Poziom 23  
    Posty: 529
    Pomógł: 51
    Ocena: 30
    Nawet jak dasz 3,3k to będzie chodzić, tak samo jak i przy 10k. To nie apteka, chodzi tylko o wymuszenie stanu wysokiego na linii. Jeśli korzystasz z zasilania pasożytniczego (Vcc nie podłączone) to 4,7k czy tam 4,6 jest OK.
    Co do odczytu, to proponuję sprawdzić, czy ATMega czeka na konwersję tyle czasu co potrzeba. Może nie zadeklarowałeś właściwego kwarcu w programie/ nie przestawiłeś fusów?
    Pzdr.
  • REKLAMA
  • #5 3675619
    Booby
    Poziom 14  
    Posty: 159
    Pomógł: 14
    Ocena: 4
    Spróbuj na czas zapisu/odczytu układu wyłączyć przerwania. Być może jakieś przerwanie wydłuża czas odczytu układu.
  • #6 3675769
    szakamason
    Poziom 13  
    Posty: 123
    Pomógł: 3
    Ocena: 4
    Korzystam z biblioteki AVRlib, kwarc ustawiłem na 8MHz w programie, fusy także za zewnętrzny, UART działa na 19200 więc jest to 8 MHz, oprócz tego w symulatorze działa pod 8MHz. Przerwania zablokowałem na całą sekwencję resetu, zapisu, konwersji i odczytu, nadal 0xFFFF. Procesor sprawny bo sprawdzałem drugą atmegę32 od znajomego, już myślałem że coś z RAM'em atmegi, ale O.K. Zostaje chyba zakup czujnika i wypróbowanie innego.
  • #7 3691419
    szakamason
    Poziom 13  
    Posty: 123
    Pomógł: 3
    Ocena: 4
    wreszcie odpaliłem mojego ds, w symulatorku działał zawsze ok, a w realu nie, przypomniałem sobie że w książce "uK AVR w praktyce" był kod źródłowy dla pastylki dallasa, i było to właśnie na 8MHz, tak więc skopiowałem bezczelnie funkcję opóźnienia w [us], wkleiłem do swojego programu i zaczęło działać, wyświetla cały zakres temperatur od -55 do 128oC. Wniosek, symulacja ds18"x"20 w proteusie przebiegała poprawnie dla teoretycznych-idealnych czasów ds'a, czasy te mierzone na wirtualnym analizatorze stanów logicznych były takie,jakie powinny wynikać z zastosowanej funkcji opóźnienia dla uK. W rzeczywistości jednak czasy odpowiedzi ds'a widocznie różniły się nieznacznie od katalogowych na tyle, by uniemożliwić poprawny odczyt z ds'a.

Podsumowanie tematu

✨ Problem dotyczył odczytu temperatury z czujnika DS1820 podłączonego do mikrokontrolera Atmega32. W symulatorze Proteus czujnik działał poprawnie, wyświetlając temperaturę w formacie HEX i reagując na zmiany, natomiast w rzeczywistym układzie Atmega32 zwracała wartość 0xFFFF po resecie. Mikrokontroler pracował na zewnętrznym kwarcu 8 MHz. Dyskusja wykluczyła wpływ rezystora podciągającego o wartości 4,7 kΩ lub 4,6 kΩ, a także portu 1-wire i ustawień fusebitów (np. wyłączenie JTAG). Sugerowano wyłączenie przerwań podczas komunikacji oraz sprawdzenie czasu oczekiwania na konwersję temperatury. Ostatecznie problemem okazały się niedokładne czasy opóźnień w kodzie, które w symulatorze były idealne, a w rzeczywistości różniły się od katalogowych. Po zastosowaniu funkcji opóźnienia z książki "uK AVR w praktyce" dla 8 MHz, odczyt temperatury z DS1820 zaczął działać poprawnie, obejmując pełny zakres od -55 do 128°C.
Wygenerowane przez model językowy.
REKLAMA