Elektroda.pl
Elektroda.pl
X
AdexAdex
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

AVR + 1-wire

januszni 28 Mar 2007 16:50 8711 0
  • Interpreter 1-wire sterowany przez rs232

    Ponieważ posiadana płytka testowa z wyświetlaczem LCD 2x16 i 4 przyciskami nie zapewniała możliwości wygodnego testowania układów 1-wire powstał interpreter wykorzystujący standardowy komputer jako urządzenie wyj/wej i komunikujący się przez port RS232 przy pomocy kabla null modem.

    Hardware :
    Interpreter został przygotowany dla procesora ATtiny2313 z zegarem 8 MHz. Jako platforma uruchomieniową wykorzystałem płytkę zl1avr (http://www.btc.pl/pdf/zl1avr.pdf). Własną płytkę interpretera można przygotować kopiującąc schemat tak by zawierał układ MAX232 (interfejs RS232), do komunikacji 1-wire wykorzystano 3 PORTD, który na płytce jest podłączony przez rezystor do Vcc w celu zapewnienia zasilania 1-wire. W przypadku wykorzystania innego portu należy zmienić jego definicję w pliku 1-wire.asm.
    Pliki:
    • 1. 1-wire crc8.asm - Plik zawierający procedurę obliczania sumy kontrolnej crc-8
      2. 1-wire crc16.asm - Plik zawierający procedurę obliczania sumy kontrolnej crc-16
      3. 1-wire search.asm - Plik zawierający procedurę przeszukiwania magistrali 1-wire. Odczytane bajty urządzenia są umieszczane w tablicy RO_NO. Przed rozpoczęciem obliczania konieczne wyczyszczenie rejestrów flag używanych przez procedurę za pomocą search_ROM_init. Procedura szukania działa według algorytmu opisanego w nocie maxim-dallas http://pdfserv.maxim-ic.com/en/an/AN187.pdf
      4. 1-wire.asm - Zestaw standardowych poleceń magistarali 1-wire, takich jak zapisanie, odczytanie bajtu z 1-wire, reset. Dodatkowo procedura seach1 której zadaniem jest iteracja procedury search_ROM w celu znalezienia wszystkich urządzeń i wypisanie na terminal efektu jej działania lub komunikatu o błądach
      5. rs232a.asm - Główny program interpretera który pobiera dane polecenia z RS232 do bufora, szuka w słowniku odpowiadającego polecenia I wywołuje odpowiedni podprogram. Polecenie 1-wire interpretuje dalszą jego część wykonując wysyłanie, odbieranie bajtów z 1-wire, steruje również obliaczniem sum kontrolnych i poleceniem reset. W pliku tym znajdują sie również potrzebne podprogramy do komunikacji przez RS232, procedury konwertujące wartości na zapis szesnastkowy i odwrotnie, słownik łańcuchów znakowych do komunikacji z użytkownikiem i słownik poleceń. Łańcuchy znakowe zawiereją kody ESC umożliwiające wyświetlanie kolorów na terminalu.

      Polecenia interpretera:
      szukaj - skanuje magistrale 1-wire i wyświetla ROM’y znalezionych urządzeń.
      cls - czysci ekran
      ? - wyświetla listę poleceń
      1-wire - wysyła i odbiera bajty z urządzeń 1-wire, resetuje, liczy crc8 i crc16

      Polecenie ‘szukaj’:
      AVR + 1-wire
      a)
      Znaleziono dwa układy 1-wire:
      1 bajt -identyfikator 0x10 – układ ds 1820 –termometr
      6 bajtów ROM
      8 bajt-crc8 0x0c

      1 bajt -identyfikator 0x29 – układ ds 2408 –I/O 8 bit
      6 bajtów ROM
      8 bajt-crc8 0x1e

      AVR + 1-wire
      b)
      Obsługa sytuacji awaryjnej: Brak urządzeń

      AVR + 1-wire
      c)
      Obsługa sytuacji awaryjnej: Zwarcie na lini

      Polecenie ‘1-wire’
      Składnia argumentu polecenia:
      ! – reset 1-wire
      dwa znaki szesnastkowo - bajt wysyłany na linie 1-wire
      r - czyta bajt z 1-wire
      [ - poczatek obliczania crc
      ]crc8 - koniec obliczania crc8, czytany jest następny bajt i porównywany z obliczaną wartością
      ]crc16 - jw. crc16, czytane są dwa bajty i porównywane z obliczoną wartością
      UWAGA! crc8 lub crc16 jest liczone z wysyłanych i odczytywanych bajtów z 1-wire.
      Przykład 1.
      AVR + 1-wire
      Na rysunku powyżej realizowana jest komenda: 1-wire !5529ca69010000001e[f08800rrrrrrrr]crc16
      ! - reset
      55 - wysłanie komendy Match ROM
      29ca69010000001e - wysłanie adresu układu ds2408
      [ - rozpoczecie liczenia crc
      f08800 - wysłanie- komenda specyficzna dla ds2408 - rozpoczęcie czytania rejestrów układu od adresu 0x0088
      rrrrrrrr - odczytanie ośmiu bajtów
      ]crc16 - koniec obliczania crc16, odczytanie dodatkowych dwóch bajtów i sprawdzanie z obliczoną wartością.
      Przykład 2.
      UWAGA! Podłączony jest tylko jeden układ ds 1820 - termometr
      AVR + 1-wire
      Na rysunku powyżej realizowana jest komenda: 1-wire !33rrrrrrrr
      ! - reset
      33 - wysłanie Skip ROM
      rrrr rrrr - odczytanie ośmiu bajtów z 1-wire.

    Polecenie Skip ROM można zastosować tylko wtedy gdy jest podłączone jedno urządzenie do 1-wire, tylko wtedy można odczytać jego adres. Jeśli do 1-wire jest podłaczony jest więcej niż jeden układ, nie można odczytać ROM gdyż wszystkie układy zaczynają nadawać , powstają kolizje uniemożliwiające poprawne odczytanie adresu.
    UWAGA! Przeczytany adres i suma kontrolna crc8(ostatni bajt) jest taka sama jak w przypadku polecenia ‘szukaj’ gdy na magistrali jest obecnych więcej niż jedno urządzenie.
    Procedura ‘szukaj’ znajduje wszystkie urządzeni a na magistrali 1-wire.

    Przykład 3.
    AVR + 1-wire
    Jak w Przykładzie 2 polecenie Skip ROM (jeden układ), różnica od Przykładu 2. polega na tym że czytane bezpośrednio jest 7 bajtów i z nich liczona jest CRC8 i porównywana z odczytaną 8 wartością.
    W trakcie interpretowania polecenia ! (reset) są sprawdzane sytuacje awaryjne takie jak zwarcie lini i brak urządzeń. Jeśli interpreter stwierdzi że wystąpił któryś z tych błędów przerywa dalsze interpretowanie poleceń.

    Polecenie ‘?’
    AVR + 1-wire
    Lista poleceń.

    Polecenie ‘cls’
    Czyszczenie ekranu.

    Przy pomocy interpretera możliwe jest odnalezienie adresów urządzeń podłączonych do 1-wire. Posiadając adresy przy pomocy polecenia Match ROM i adresu można nawiązać połączenie z dowolnym (mimo obecności na magistrali innych układów tego samego typu) układem odwołując się do zaimplementowanych w nim funkcji, wysłać; odczytać informację do późniejszego przetwarzania.
    Po sprawdzeniu układu testowego, w układzie docelowym (bez interpretera) można wykorzystać procedury 1-wire.asm do komunikacji .
    UWAGA! Program w asemblerze został napisany na procesor ATtiny2313 z zegarem 8 MHz. W przypadku zastosowania innego zegara należy zmodyfikować procedury opóźniające by zachować konieczne opóźnienia czasowe do obsługi 1-wire i RS232.

    Port RS232 w programie HyperTerminal należy skonigurować:
    AVR + 1-wire

    Terminal:
    AVR + 1-wireAVR + 1-wire
    UWAGA! Gotowa koniguracja progamu HyperTerminal na COM1 w pliku : 1-wire.ht
    W katalogu commands zamieszczone zostały przykładowe pliki poleceń które można załadować do interpretera za pomocą programu terminal z plików tekstowych. Z uwagi na to że adresy każdego układu 1-wire są unikatowe należy zmienić adresy dla poleceń match ROM na wartości wcześniej odnalezione przez polecenie szukaj.

    AVR + 1-wire
    Kabel RS232 (null modem)

    Pliki z kodem dla ATtiny2313 8MHz

    Fajne! Ranking DIY
    Potrafisz napisać podobny artykuł? Wyślij do mnie a otrzymasz kartę SD 64GB.
    O autorze
    januszni
    Poziom 10  
    Offline 
    januszni napisał 12 postów o ocenie 1, pomógł 0 razy. Jest z nami od 2006 roku.
  • AdexAdex