Cum se conectează o bibliotecă la un proiect

- configurarea fișierului OWIPolled.h

- selectați implementarea software-ului de interfață OneWire

- setați frecvența de ceas a microcontrolerului

#define CPU_FREQUENCY 16.000







- setați portul la care este conectată magistrală OneWire

#define OWI_PORT PORTD //! 60 μs și o pauză între intervalele de timp> 1 μs.

Pentru a transfera zero, microcontrolerul "nu reușește" magistrala 1-Wire timp de 60 până la 120 μs. Apoi "o eliberează" și o întrerupe> 1 μs înainte de a scrie următorul bit.

Pentru a transfera unitatea, microcontrolerul "eșuează" magistrala 1-Wire pentru o perioadă de timp de la 1 la 15 microsecunde, "o eliberează" și o întrerupe. Pauza trebuie să fie astfel încât durata intervalului de timp să fie> 60 + 1 μs.

Citirea datelor pe o magistrală cu fir

DS18B20 este un dispozitiv slave și poate transmite numai date când microcontrolerul generează sloturi de timp pe magistrala 1-Wire. Pentru timpul formării Slot cititor de microcontroler „nu“ bus 1-Wire pentru un timp de la 1 la 15 microsecunde, și apoi „versiuni“ aceasta, transferul de starea de control 1-Wire senzor bus DS18B20. Dacă DS18B20 trece de zero, păstrează autobuzul în starea „Failed“ (zero logic) până la sfârșitul intervalului de timp. Dacă transmite 1, acesta părăsește magistrala într-o stare "strânsă".

Microcontrolerul poate citi datele senzorului DS18B20 în 15 μs după începerea intervalului de citire.

Cum se conectează o bibliotecă la un proiect

Deci, aveți o înțelegere de bază a modului în care datele sunt schimbate pe un autobuz 1-Wire, și puteți trece la partea următoare - modul de abordare a DS18B20, modul de a începe procesul de conversie a temperaturii senzorului este citită de la o temperatură ca rezoluție temperatura setata, etc. .D.

Secvența de operații pentru accesarea DS18B20 este următoarea:

2. Prezentarea comenzii ROM

3. Prezentarea comenzii funcționale DS18B20

ROM comenzi

Cu inițializare, totul este clar. Microcontrolerul nu reușește magistrala, eliberează și așteaptă răspunsul sclavului. Dacă există cel puțin un senzor defect DS18B20 conectat la magistrala, acesta va răspunde cu un impuls de prezență.

După ce a primit un impuls de prezență, microcontrolerul trebuie să trimită o comandă de 1-Wire ROM. Există cinci astfel de echipe.

search rom (cod de comandă 0xF0)

Această comandă permite microcontrolerului să citească codul slave pe 64 de biți. Comanda poate fi utilizată dacă numai 1 dispozitiv Wire este conectat la magistrala.

Microcontrolerul emite comanda read rom

Microcontrolerul primește 8 octeți din codul slave

Pentru a accesa toate dispozitivele 1-Wire conectate la magistrala, utilizați comanda skip rom. De exemplu, această comandă poate fi utilizată pentru a porni simultan conversia de temperatură a tuturor senzorilor DS18B20.

Microcontroler emite comanda skip rom

Microcontrolerul emite comanda de conversie t

Microcontrolerul emite comanda rom

Microcontrolerul emite 8 octeți de cod slave

Microcontrolerul emite o comandă funcțională.

căutarea alarmei (0xEC)

Acțiunea acestei comenzi este identică cu acțiunea comenzii rom search, numai dispozitivele subordonate cu un set de pavilion de alarmă vor răspunde la aceasta. Flagul de alarmă este setat în DS18B20 în cazul depășirii pragurilor de temperatură specificate de regiștrii Tl și Th.

Comenzi funcționale

Memoria internă

Termometrul DS18B20 are 8 octeți de memorie RAM (scratchpad și alte memorii RAM) și 3 octeți de EEPROM.

Cum se conectează o bibliotecă la un proiect

Bytes 0 și 1 sunt temperatura măsurată. Valoarea inițială a temperaturii (la sursa de alimentare) este de + 85 de grade. Formatul registrelor este:

unde S - semn de temperatură (0 - temperatură pozitivă, 1 - temperatură negativă), BIT10-BIT4 - întreaga parte a valorii temperaturii, BIT3-BIT0 - partea fracționată.

Temperatura negativă este prezentată în codul suplimentar. Traducerea conținutului acestor registre într-o formă mai ușor de înțeles va fi descrisă în următoarea parte.

Byte 2 și 3 - praguri superioare și inferioare ale temperaturii. Valorile acestor octeți sunt specificate de utilizator. Valoarea inițială a acestor octeți depinde de conținutul memoriei EEPROM. Formatul celor două registre este:

unde S este semnul temperaturii (0 este o temperatură pozitivă, 1 este negativă), BIT6-BIT0 este întreaga parte a valorii pragului de temperatură.

Byte 4 - registrul de configurare. Setează rezoluția temperaturii DS18B20. Valoarea inițială a registrului depinde de conținutul memoriei EEPROM. Noul senzor DS18B20 are o rezoluție de temperatură implicită de 12 biți. Formatul registrului de configurare este:







unde R1, R0 sunt biții care specifică rezoluția temperaturii termometrului.

Cum se conectează o bibliotecă la un proiect

După cum se poate observa din tabel, timpul de conversie depinde de rezoluția dată de temperatură.

Batele 5 până la 7 sunt rezervate și nu sunt utilizate

Baza 8 este un cod CRC (cod de redundanță ciclică). Valoarea CRC este utilizată pentru a verifica datele primite.

Acum despre comenzile funcționale.

Această comandă inițiază procesul de conversie a temperaturii DS18B20. Valoarea temperaturii este stocată în 0 și 1 octeți ale senzorului RAM. Timpul de execuție al conversiei depinde de rezoluția stabilită în registrul de configurare.

Dacă DS18B20 funcționează în modul de alimentare cu paraziți, atunci după emiterea comenzii convert t, microcontrolerul trebuie să conecteze magistrala 1-Wire la sursa de alimentare pentru timpul de conversie (vezi diagrama).

Dacă dispozitivul DS18B20 este alimentat de o sursă externă de alimentare, după ce ați pornit conversia de temperatură, puteți să monitorizați când va fi efectuată. Pentru aceasta, microcontrolerul trebuie să genereze sloturi de citire pe magistrală și să aștepte ca senzorul să răspundă cu o unitate.

Secvența de funcționare în cazul unui senzor:

Microcontroler emite comanda skip rom

Microcontrolerul emite comanda de conversie t

Microcontrolerul formează intervale de timp care citesc și așteaptă o unitate

scrie scratchpad (0x4E)

Această comandă permite microcontrolerului să scrie trei biti - Th, Tl și registrul de configurare (2, 3, 4 octeți de memorie RAM, respectiv) în memoria RAM a senzorului DS18B20.

Secvența de funcționare în cazul unui senzor:

Microcontroler emite comanda skip rom

Microcontrolerul emite comanda de scriere a scratchpad-ului

Microcontrolerul trece la rândul său 3 octeți - Th, Tl și registrul de configurare

citiți scratchpad (0xBE)

Această comandă permite microcontrolerului să citească conținutul memorii RAM a senzorului DS18B20. Datele sunt transmise prin bitul de ordin mic de la zero la cel de-al optulea octet. Microcontrolerul poate trimite oricând un semnal de resetare la magistrala 1-wire și poate să nu mai primească date. De exemplu, dacă sunt necesare doar primii doi octeți de memorie RAM.

Secvența de funcționare în cazul unui senzor:

Microcontroler emite comanda skip rom

Microcontrolerul emite comanda citit scratchpad

Microcontrolerul acceptă 9 octeți de senzor RAM

Secvența de funcționare în cazul unui senzor:

Microcontroler emite comanda skip rom

Cu această comandă, DS18B20 suprascrie cele 2, 3 și 4 octeți de RAM (Tl, Th și respectiv registrul de configurare) cu valorile stocate în EEPROM.

Microcontrolerul poate monitoriza procesul de efectuare a acestei operațiuni prin formarea pe magistrala 1-Wire a intervalelor de timp pentru citire. În timpul executării operației, magistrala va fi zero la logic, când operația este finalizată - o unitate logică.

Operația de reapelare E 2 se efectuează automat atunci când alimentarea senzorului este pornită.

Secvența de funcționare în cazul unui senzor:

Microcontroler emite comanda skip rom

Microcontrolerul emite comanda rcall E 2

Microcontrolerul formează un slot de timp pentru citirea și citirea stării busului 1-Wire

citiți sursa de alimentare (0xB4)

După trimiterea acestei comenzi și după ce a format un slot de citire după aceasta, microcontrolerul poate determina modul în care senzorii DS18B20 sunt alimentați. În cazul în care acestea sunt alimentate de la linia de semnal (modul de putere parazit), în timpul intervalului de timp citește magistrala 1-Wire are loc la zero, atunci când se utilizează o sursă de alimentare externă, autobuzul va fi strânse la unitatea.

Secvența de funcționare în cazul unui senzor:

Microcontroler emite comanda skip rom

Microcontroler emite comanda citirea sursei de alimentare

Microcontrolerul formează un slot de timp pentru citirea și citirea stării busului 1-Wire

Aceasta conchide expunerea mea scurtă a teoriei plictisitoare. În următoarea parte, trecem la biblioteca C pentru 1-Wire și analizăm codul proiectului.

Trecem de la teorie la practică. Sarcina noastră este de a obține valoarea temperaturii curente de la senzorul DS18B20 și de a ieși la un afișaj simbolic lcd.

Cum se conectează o bibliotecă la un proiect

Descriere bibliotecă 1-wire

Pentru a lucra cu DS18B20, vom folosi o bibliotecă 1-Wire ușor reglată din aplicația AVR318. Această bibliotecă este interesantă prin faptul că nu este "ascuțită" pentru dispozitive specifice cu un singur fir și oferă utilizatorului două opțiuni pentru implementarea protocolului 1-Wire - software și hardware. Implementarea software-ului poate fi utilizată cu orice microcontroler, implementarea hardware-ului numai cu cea care are un modul UART / USART. Acest articol explorează lucrul cu implementarea software a protocolului 1-Wire.

Să aruncăm o privire rapidă asupra structurii acestei biblioteci cu 1 fir.

OWISWBitFunction.h, OWISWBitFunction.c, OWIUARTBitFunction.c - în aceste module sunt descrise funcții de nivel scăzut - funcția de inițializare, funcția de înregistrare de la 0 și 1, funcția de citire bus 1-Wire și funcția de detectare a dispozitivelor de răspuns 1-Wire.

Fișierul header este unul, iar fișierul sish este două - unul pentru software, celălalt pentru implementarea hardware a protocolului.

OWIHighLevelFunction.h, OWIHighLevelFunction.s - Acest modul descrie funcțiile de nivel înalt (este evident din numele) - Comenzi funcția de înregistrare, funcția de citire a datelor, o funcție de căutare a dispozitivelor 1-Wire pe autobuz.

OWIPolled.h este fișierul de configurare a bibliotecii cu 1 fir. Acesta stabilește implementarea protocolului, viteza de ceas a microcontrolerului, portul la care este conectată magistrala 1-Wire și setările modulului UART / USART.

compilers.h este un fișier care oferă compatibilitatea bibliotecii cu oricare dintre cei trei compilatori: IAR AVR, GNU GCC (WinAVR), CodeVision AVR.

OWIdefs.h - definiții comune utilizate în ambele implementări. Definițiile comenzilor ROM returnate prin funcții de cod și modele UART / USART.

OWIdevicespecific.h - definiții specifice pentru implementarea hardware. Numele biților și registrelor modulelor microcontrolere UART / USART AVR.

OWIcrc.h, OWIcrc.c este modulul care conține funcții pentru calcularea codului de redundanță ciclică.

Conectarea unei Biblioteci cu 1 Wire

Pentru a putea folosi biblioteca 1-Wire, trebuie să fie conectată la proiect și să fie configurată. Conectarea bibliotecii la proiectul IAR constă în următorii pași:

1. Rescrieți toate fișierele de bibliotecă în dosarul proiectului

2. Conectați fișierele sish la proiect

3. Includeți fișierele antet în main.c







Articole similare

Trimiteți-le prietenilor: