Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Elektroda.pl
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

[Amtega16][bascom] Nie wykrywa urządzeń na 1wire

MaRo88PL 23 Jul 2011 18:22 2045 10
IGE-XAO
  • #1
    MaRo88PL
    Level 11  
    Witam,

    Wiem, że podobne tematy były na forum wałkowane dziesiątki razy, ale przejrzałem tamte posty i nie znalazłem w nich odpowiedzi na moje problemy. Próbowałem wykorzystać zawarte w nich, proste programy, testowałem sposoby w nich podane i nic.
    Ale do rzeczy.
    Mam układ taki jak na schemacie:
    [Amtega16][bascom] Nie wykrywa urządzeń na 1wire

    - Atmega16 taktowana kwarcem wewnętrznym 8MHz
    - magistrala 1Wire podpięta do PA.0 (zasilana pasożytniczo, z podciągniętym rezystorem [próbowałem wartości od 3 do 5 kohm])
    - PA.1 ... PA.5 - przyciski
    - PC.0 ... PC.5 - wyświetlacz
    - PD.0 ... PD.7 - wyjścia sterujące urządzeniami zew.
    - PB.4 - Buzer
    - PC.6 i PC.7 - kwarc zegarowy (swoją drogą też nie chce ruszyć)

    Problem polega na tym, że nie wykrywa żadnych urządzeń (domyślnie czujników temperatury DS18B20) podłączonych do magistrali 1Wire.
    Próbowałem układ uruchomić zarówno na swoim programie (dość mocno rozbudowany, załączony niżej), jak również na innych programach z różnych tematów tego forum (oczywiście z odpowiednio zmienionymi portami) ale za każdym razem było to samo, czyli żaden czujnik nie wykryty. Próbowałem na 5 różnych czujnikach, więc wątpię, aby wszystkie były uszkodzone.

    Poniżej zamieszczam listing programu:
    Code: basic4gl
    Log in, to see the code


    Próbowałem już uruchomić to na wszystkie sposoby i ni cholery nie mogę. W którym miejscu mogłem zrobić błąd?
    Dodam, że FuseBity ustawione są odpowiednio do zadeklarowanego taktowania i z wyłączonym JTagiem.

    Proszę o pomoc.
  • IGE-XAO
  • #3
    MaRo88PL
    Level 11  
    Podłączając czujnik posiłkowałem się tym rysunkiem z zaznaczonymi oznaczeniami nóżek:

    [Amtega16][bascom] Nie wykrywa urządzeń na 1wire

    Ponieważ nie ufam tym schematom bottom/top view, gdyż już kilka razy nadziałem się, że były odwrotnie wykonane.
  • IGE-XAO
  • #4
    alien_audio
    Level 21  
    Witam.
    Przede wszystkim jak wysyłasz instrukcje do termometru aby zrobił pomiar
    to musisz odczekać 750ms, w przeciwnym wypadku będzie błąd odczytu.
    Po odczekaniu tego czasu resetujesz linie 1-wire i robisz odczyt wartości.
  • #5
    MaRo88PL
    Level 11  
    Ok.
    Czyli pierwszy błąd jaki zrobiłem udało się odnaleźć - Dzięki.

    Problem jednak w tym, że nawet na samym początku w podprogramie "Powitanie" (jeszcze przed samym dokonywaniem pomiarów) jest tylko wykrycie czujników, ich zliczenie i potem wyświetlenie ich liczby i niestety to już nie działa.

    Jeszcze co do błędu, który zauważyłeś - wgrywałem do uC programy zamieszczone na tym forum, min. z działu DIY, które według autorów i potwierdzających screenów działały w 100%, a u mnie nie było ani podania ilości/numerów czujników, ani pomiaru temperatury.

    Pod wieczór poprawie to o czym napisałeś i wstawię do sprawdzenia.
  • #6
    alien_audio
    Level 21  
    Na początku podłącz tylko jeden czujnik
    Odczytaj wartość temperatury, później numer seryjny.
    Jeszcze jedna uwaga, jak deklarujesz port jak wejście to
    nie tak
    Config Porta.1 = Input
    tylko tak
    Config Pina.1 = Input
  • #7
    MaRo88PL
    Level 11  
    Niestety nadal nic ...
    Napisałem (a dokładniej przerobiłem program z innej strony):

    Code: basic4gl
    Log in, to see the code


    I niestety nadal nic ...

    Na wyświetlaczu pojawia się:
    Górna linia: Temp 4095.94
    Dolna linia: 0

    Zauważyłem również, że w starej wersji programu (załączonej w pierwszym poście) bardzo dziwnie działa zegar na kwarcu zegarkowym. Raz w ciągu 30-40 min potrafi się przesunąć raptem o 20 sekund. Innym razem w tym samym okresie czasu nie ruszy wcale ...
  • #9
    MaRo88PL
    Level 11  
    rs07 wrote:
    Sam piszesz że kwarc nie chodzi a wpisujesz $crystal=8000000. Ustal najpierw jakie jest rzeczywiste taktowanie procka i takie wpisz.


    uC taktowane jest z wewnętrznego kwarcu 8MHz (tak ustawione w programie i FuseBitami) a to co nie chodzi, to zegar czasu rzeczywistego (kwarc od niego podpina się pod inne nóżki uC niż kwarc zewnętrzny), który obsługuje tylko programowy zegarek. W innym moim urządzeniu tak podłączony taki zegarek chodził w 100% poprawnie.
  • #10
    rs07
    Level 20  
    Moja wersja odczytu z ds18b20 jest na pewno poprawna bo pracuje, wprawdzie na atmedze8 ale to chyba nie ma znaczenia.

    Code: basic4gl
    Log in, to see the code

    1wreset '
    1wwrite &HCC 'komenda skip ROM
    1wwrite &H44 'komenda convert T
    Waitms 250
    Waitms 250

    1wreset '
    1wwrite &HCC 'komenda skip ROM
    1wwrite &HBE 'komenda read

    B1 = 1wread() 'odczyt z termometru
    B2 = 1wread() 'odzcyt z termometru

    1wreset
    Code: select_listing
    Log in, to see the code
  • #11
    MaRo88PL
    Level 11  
    Podejrzewam, że błąd będzie gdzieś w samym schemacie/płytce, ponieważ przed chwilą złożyłem na stykówce na szybko układ:
    - Atmega8
    - 1x DS18B20
    - dioda led

    i wrzuciłem w niego program:

    Code: basic4gl
    Log in, to see the code


    I działa jak należy.
    Ten sam program po zmianie jedynie deklaracji portów i uC z 8 na 16 już niestety nie rusza ...
    Także prosił bym o rzucenie okiem w schemat zamieszczony w pierwszym poście.

    Dodano po 3 [godziny] 17 [minuty]:

    Problem z wykrywaniem czujnika rozwiązany.

    Powodem całego kłopotu okazało się jedno ze złączy (przy magistrali 1Wire), które było uszkodzone i nie stykało.

    Niestety nadal pozostał problem z kwarcem zegarowym i samym działaniem zegarka, ale to już kłopot na inny wątek ;)

    Dzięki wszystkim za próbę pomocy.

    Pozdrawiam,
    MaRo