Zbernica i2c: PCF8591: Rozdiel medzi revíziami
Zo stránky SensorWiki
Bez shrnutí editace |
|||
Riadok 71: | Riadok 71: | ||
Pri tvorbe programu pre modul budeme využívať už hotovú knižnicu <code>i2cmaster</code> dostupnú odtiaľto http://senzor.robotika.sk/mmp/src/i2c/ | |||
Najprv je potrebné zbernicu inicializovať: | |||
<source lang="c"> | <source lang="c"> | ||
Riadok 77: | Riadok 80: | ||
</source> | </source> | ||
Potom môžeme prečítať hodnotu na analógovom vstupe č. 3, na ktorom je pripojený trimer: | |||
<source lang="c"> | <source lang="c"> | ||
/* value = AnlogRead-From-PCF8591(channel); */ | |||
i2c_start( PCF8591_ADDR << 1 | I2C_WRITE); // set device address and write mode | |||
i2c_write(channel); // which channel want to read | |||
i2c_stop(); | |||
i2c_rep_start(PCF8591_ADDR << 1 | I2C_READ); // repeated start for reading | |||
i2c_readAck(); // read dummy byte | |||
value = i2c_readNak(); // read Analog value | |||
i2c_stop(); | |||
</source> | |||
A napokon prečítanú hodnotu zapíšeme na analógový výstup, takže zmenu priamo uvidíme na pripojenej zelenej LED dióde. | |||
<source lang="c"> | <source lang="c"> | ||
/* AnalogWrite-To-PCF8591(value); */ | |||
i2c_start((PCF8591_ADDR << 1 | I2C_WRITE)); // set device address and write mode | |||
i2c_write(CONTROL WORD); // set analog output active | |||
i2c_write(value); // write the required Analog Output value (0-255) | |||
i2c_stop(); // set stop conditon = release bus | |||
</source> | </source> | ||
Program je samozrejme vhodné doplniť o zobrazovanie veličín buď na LCD displeji, alebo v termináli cez sériové rozhranie. | |||
Pri vytváraní riadiaceho slova by vám mal napomôcť tento obrázok z datasheetu: | Pri vytváraní riadiaceho slova by vám mal napomôcť tento obrázok z datasheetu: | ||
Riadok 109: | Riadok 115: | ||
''Obsadenie riadiaceho registra obvodu 8591.'' | ''Obsadenie riadiaceho registra obvodu 8591.'' | ||
</div> | </div> | ||
=='''Resource'''== | =='''Resource'''== |
Verzia z 19:58, 15. marec 2021
Modul YL-40
Modul YL-40 obsahuje kombinovaný A/D a D/A prevodník PCF8591 a niekoľko ďalších komponentov. K mikroprocesoru ho pripájame cez konektor J3, ktorý okrem napájania obsahuje aj dva komunikačné signály rozhrania i2c - SCL (Serial Clock) a SDA (Serial Data). Na druhej strane modulu sa nacháda konektor J2, na ktorom sú štyri analógové vstupy a jeden analógový výstup. Adresa modulu je nastavená na pevno signálmi A0, A1 a A2 a nedá sa zmeniť. Na module sa nachádza aj trimer (premenlivý rezistor nastaviteľný nástrojom), ktorým si ľahko možno overiť správnu funkciu A/D prevodníka. Okrem toho je na module aj termistor a fotoodpor, ktoré umožňujú realizovať orientačné merania teploty a osvetlenia. Ak potrebujete využiť všetky štyri analógové vstupy, dajú sa tieto prvky odpojiť prepojkami J4, J5 a J6.
Analógový výstup je pripojený na signalizačnú LED diódu (zelená), takže sa dá tento výstup kontrolovať vizuálne. Žiaľ, LED dióda predstavuje pomerne veľkú záťaž, takže výstupné napätie nie je veľmi presné a nedosiahne ani max. možnú úroveň. Pre kvalitnejšiu aplikáciu by sme museli LED diódu alebo rezistor odpájkovať. Okrem toho je na module červená LED dióda, ktorá signalizuje prítomnosť napájacieho napätia.
Ain 0 | J5 | fotorezistor (s rastúcou hodnotou osvetlenia hodnota klesá) |
---|---|---|
Ain 1 | J4 | NTC termistor (s rastúcou teplotou hodnota klesá) |
Ain 2 | -- | nezapojený (náhodné čísla) |
Ain 3 | J6 | potenciometer ( 0 - 255 ) |
PCF8591
Integrovaný obvod PCF8591 je jednočipový kombinovaný obvod 8-bitového A/D a D/A prevodníka vyrobený technológiou CMOS. Je určený na pripojenie k zbernici I2C, pričom na vstupoch A0, A1 a A2 vieme nastaviť adresu zariadenia a pripojiť tak na jednu zbernicu až 8 takýchto obvodov. Obvod má štyri analógové vstupy a jeden analógový výstup. Vstupy aj výstup využívajú jediný a spoločný prevodník, takže prevod je multiplexovaný a pri využití všetkých 5 I/O musíme počítať s poklesom rýchlosti.
Maximálna rýchlosť prevodov je limitovaná rýchlosťou zbernice I2C.
Block Diagram
Vlastnosti
- Štyri nezávislé analógové napäťové vstupy (rozsah 0-5 V)
- Možnosť využiť vždy dva vstupy ako jeden diferenciálny
- Jeden analógový napäťový výstup (rozsah 0-5 V)
- Interný 8-bitový A/D prevodník pracujúci metódou postupnej aproximácie
- Pripojenie cez zbernicu I2C bus
- Rozsah napájania: 2,5 - 6 V DC; režim so zníženou spotrebou
- Adresa nastaviteľná v rozsahu 0x90-9F
Software
Pri tvorbe programu pre modul budeme využívať už hotovú knižnicu i2cmaster
dostupnú odtiaľto http://senzor.robotika.sk/mmp/src/i2c/
Najprv je potrebné zbernicu inicializovať:
i2c_init(); // initialize I2C library
Potom môžeme prečítať hodnotu na analógovom vstupe č. 3, na ktorom je pripojený trimer:
/* value = AnlogRead-From-PCF8591(channel); */
i2c_start( PCF8591_ADDR << 1 | I2C_WRITE); // set device address and write mode
i2c_write(channel); // which channel want to read
i2c_stop();
i2c_rep_start(PCF8591_ADDR << 1 | I2C_READ); // repeated start for reading
i2c_readAck(); // read dummy byte
value = i2c_readNak(); // read Analog value
i2c_stop();
A napokon prečítanú hodnotu zapíšeme na analógový výstup, takže zmenu priamo uvidíme na pripojenej zelenej LED dióde.
/* AnalogWrite-To-PCF8591(value); */
i2c_start((PCF8591_ADDR << 1 | I2C_WRITE)); // set device address and write mode
i2c_write(CONTROL WORD); // set analog output active
i2c_write(value); // write the required Analog Output value (0-255)
i2c_stop(); // set stop conditon = release bus
Program je samozrejme vhodné doplniť o zobrazovanie veličín buď na LCD displeji, alebo v termináli cez sériové rozhranie.
Pri vytváraní riadiaceho slova by vám mal napomôcť tento obrázok z datasheetu:
Resource
- PCF8591 datasheet. Rev.7, NXP, 2013.-sensor-kit-v2-0-for-b-plus.html Test Experiment for Raspberry Pi]
- Rob Tillaart: Arduino PCF8591 Library
- Produktová stránka u dodávateľa: https://techfun.sk/produkt/adda-prevodnik-pcf8591-kabliky/