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.

atmega8 i 1wire - pin wejści+wyjście

prokopcio 05 May 2008 15:33 1323 2
  • #1
    prokopcio
    Level 29  
    Witam
    Mam takie pytanko o konfigurację pinu do obsługi magistrali 1wire. Czy w obsłudze protokołu 1wire trzeba ciągle zmieniać konfigurację pinu jako wejściowy/wyjściowy w rejestrze DDR czy istnieje inny sposób, żeby uprościć sprawę i nie przekonfigurowywać co chwilę pinu ? O tyle to dla mnie istotne, że wszystkie procedury piszę samodzielnie w asm bo np. w bascom'ie takie problemy nie istnieją bo on robi wszystko za Was ;). w '51 nie było tego problemu ponieważ tam niema konfiguracji we/wy i można jednocześnie ustawiać i sprawdzać stan końcówki.
  • Helpful post
    #2
    zumek
    Level 39  
    prokopcio wrote:
    ... Czy w obsłudze protokołu 1wire trzeba ciągle zmieniać konfigurację pinu jako wejściowy/wyjściowy w rejestrze DDR czy istnieje inny sposób, żeby uprościć sprawę i nie przekonfigurowywać co chwilę pinu ?
    ...

    Cały pic polega na tym , że obsługa magistrali 1wire, powinna odbywać się wyłącznie przez "zmianę kierunku" pinu.

    Piotrek
  • #3
    prokopcio
    Level 29  
    dzięki Piotrek ;-) nie pomyślałem a to bardzo ułatwia sprawę :) ustawiasz w portX.pX na 0 (na stałę) a kierunkiem operujesz zamiast ustawiać stan na wyjściu (na jedno wychodzi "programowo")

    Dodano po 3 [godziny] 24 [minuty]:

    no to uruchomiłem transmisję i podprogramiki - w symulatorze AVRStudio wszystko działa poprawnie, czasy są dobre (wg noty aplikacyjnej układu DS18B20) ale w układzie fizycznym odbieram zawsze takie same wartości (niezmienne).

    wykorzystałem algorytm "sprawdzony" tu na forum.

    1.Podczas resetu magistrali daję stan niski na 490us i "puszczam" linię na "1"
    2.DS18b20 zgłasza się (podaje 0) i zwalnia linię na "1"
    3.Wysyłam do układu wartość 0xCC dla pominięcia ROM
    4.Wysyłam 0x44 na rozpoczęcie przetwarzania
    5.odczekuję chwilkę ;)
    6.RESET magistrali
    7.Wysyłam do układu wartość 0xCC dla pominięcia ROM
    8.Wysyłam 0xBE (żądanie wysyłania danych)
    9.Odbieram dane, wyświetlam 3 pierwsze bajty
    10. czekam 1s i powtarzam od punktu 1

    pierwsze 3 odebrane bajty to zawsze są (dziesiętnie) 80;5;75 i się nie zmieniają wcale (przy zmianach temperatury).

    niezależnie jak podepnę zasilenie (pasożytniczo czy nie) nie zmeinia to wyniku. po odpięciu DS'a odrazu program to wykrywa ( testuję nie tylko czy jest stan niski podczas resetu a również, czy dallas "zwalnia" linię).

    nie doczytałem w nocie czy pierwszym odbieranym/nadawany bitem jest MSB czy LSB ale o ile się nie mylę to pierwszy jest bit najmłodszy. jak zmieniłem to mam dalej stałe tylko inne wartości bo z CC robi się 33 (co również jest komendą)...