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:
Polecenia interpretera:
Polecenie ‘szukaj’:
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
b)
Obsługa sytuacji awaryjnej: Brak urządzeń
c)
Obsługa sytuacji awaryjnej: Zwarcie na lini
Polecenie ‘1-wire’
Składnia argumentu polecenia:
Przykład 1.
Na rysunku powyżej realizowana jest komenda: 1-wire !5529ca69010000001e[f08800rrrrrrrr]crc16
Przykład 2.
UWAGA! Podłączony jest tylko jeden układ ds 1820 - termometr
Na rysunku powyżej realizowana jest komenda: 1-wire !33rrrrrrrr
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.
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 ‘?’
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 skonfigurować:
Terminal:

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.
Kabel RS232 (null modem)
Pliki z kodem dla ATtiny2313 8MHz
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’:
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
b)
Obsługa sytuacji awaryjnej: Brak urządzeń
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.
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
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.
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 ‘?’
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 skonfigurować:
Terminal:

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.
Kabel RS232 (null modem)
Pliki z kodem dla ATtiny2313 8MHz
Fajne? Ranking DIY
