Zbernica i2c: PCF8591: Rozdiel medzi revíziami
Zo stránky SensorWiki
Bez shrnutí editace |
|||
(35 medziľahlých úprav od rovnakého používateľa nie je zobrazených.) | |||
Riadok 1: | Riadok 1: | ||
* | =='''Modul YL-40'''== | ||
[[File:MIPS_Modul_YL-40.jpg|250px|right]] <BR> | |||
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. | |||
{| class="wikitable" | |||
|- | |||
! style="font-weight:bold; font-family:Arial, Helvetica, sans-serif !important;;" | Ain 0 | |||
! J5 | |||
| fotorezistor (s rastúcou hodnotou osvetlenia hodnota klesá) | |||
|- | |||
| style="font-weight:bold; font-family:Arial, Helvetica, sans-serif !important;;" | Ain 1 | |||
! J4 | |||
| NTC termistor (s rastúcou teplotou hodnota klesá) | |||
|- | |||
| style="font-weight:bold; font-family:Arial, Helvetica, sans-serif !important;;" | Ain 2 | |||
! -- | |||
| nezapojený (náhodné čísla) | |||
|- | |||
| style="font-weight:bold; font-family:Arial, Helvetica, sans-serif !important;;" | Ain 3 | |||
! J6 | |||
| potenciometer ( 0 - 255 ) | |||
|} | |||
<div style='text-align: center;'> | |||
[[File:MIPS_8591_SchemaZapojenia.png]]<br> | |||
''Schéma zapojenia modulu YL-40.'' | |||
</div> | |||
<div style='text-align: center;'> | |||
[[File:MIPS_8591_PinOut.png|500px]]<br> | |||
''Vstupy a výstupy modulu YL-40 (ak neviete ako ho pripojiť k Arduinu, pozrite si [[Media:MIPS_i2c-Schema02.png|zapojovací diagram]]).'' | |||
</div> | |||
<!-- | |||
Note:<br> | |||
From the schematic diagram, a potentiometer is connected to AIN0. You can connect the P3 by the jumper cap, which is to wire the two pins next to the pot, so the pot can be used as the input of AIN0. | |||
--> | |||
=='''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=== | |||
<div style='text-align: center;'> | |||
[[File:MIPS_PCF8591_internals.png]] <br> | |||
''Blokový diagram obvodu 8591.'' | |||
</div> | |||
=='''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 <code>i2cmaster</code> dostupnú odtiaľto http://senzor.robotika.sk/mmp/src/i2c/ | |||
'''1. Inicializácia''' | |||
Najprv je potrebné zbernicu inicializovať: | |||
<source lang="c"> | |||
i2c_init(); // initialize I2C library | |||
</source> | |||
''' | |||
2. Čítanie z A/D prevodníka''' | |||
Potom môžeme prečítať hodnotu na analógovom vstupe č. 3, na ktorom je pripojený trimer: | |||
<div style='text-align: center;'> | |||
[[File:MIPS_8591_ReadValue.png]]<br> | |||
''Postupnosť pre čítanie hodnoty z obvodu 8591.'' | |||
</div> | |||
<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> | |||
'''3. Zápis na analógový výstup''' | |||
A napokon prečítanú hodnotu zapíšeme na analógový výstup, takže zmenu priamo uvidíme na pripojenej zelenej LED dióde. | |||
<div style='text-align: center;'> | |||
[[File:MIPS_8591_WriteValue.png]]<br> | |||
''Postupnosť pre zápis hodnoty do obvodu 8591.'' | |||
</div> | |||
<source lang="c"> | |||
/* AnalogWrite-To-PCF8591(value); */ | |||
i2c_start((PCF8591_ADDR << 1 | I2C_WRITE)); // set device address and write mode | |||
i2c_write(CONTROL BYTE); // set analog output active | |||
i2c_write(value); // write the required Analog Output value (0-255) | |||
... // multiple write possible | |||
i2c_stop(); // set stop conditon = release bus | |||
</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: | |||
<div style='text-align: center;'> | |||
[[File:MIPS_8591_Register.png|500px]]<br> | |||
''Obsadenie riadiaceho registra obvodu 8591.'' | |||
</div> | |||
== Úlohy == | |||
# Pripojte modul YL-40 k svojmu mikropočítaču. | |||
# Napíšte program, ktorý prečíta hodnotu z analógového vstupu 3, na ktorom je potenciometer a | |||
# tú istú hodnotu zapíšte na analógový výstup. | |||
# Zobrazte hodnotu aj na displeji/sériovej linke. | |||
# Otestujte aj termistor a fotorezistor. | |||
=='''Resource'''== | |||
* [https://www.nxp.com/docs/en/data-sheet/PCF8591.pdf PCF8591 datasheet]. Rev.7, NXP, 2013.-[[File:pdfIcon.png|25px]] | |||
* Rob Tillaart: Arduino [https://www.arduino.cc/reference/en/libraries/pcf8591/ PCF8591 Library] | |||
* Produktová stránka u dodávateľa: https://techfun.sk/produkt/adda-prevodnik-pcf8591-kabliky/ | |||
** Schéma zapojenia https://www.elecrow.com/download/PCF8591-sch.pdf | |||
** https://navody.dratek.cz/navody-k-produktum/ad-da-prevodnik-pcf8591.html (cestina) | |||
** https://www.best-microcontroller-projects.com/pcf8591.html | |||
* Asi najpodrobnejší opis funkcie modulu sa dá nájsť v knihe<BR> Warren Gay: [https://link.springer.com/book/10.1007/978-1-4842-2406-9 Custom Raspberry Pi Interfaces.] Design and build hardware interfaces for the Raspberry Pi. https://doi.org/10.1007/978-1-4842-2406-9 Apress, Berkeley, CA 2017. Volne stiahnutelna knizka. | |||
* A tu je dobrá analýza obvodu PCF8591 https://www.best-microcontroller-projects.com/pcf8591.html | |||
[[Category: MIPS]] | [[Category: MIPS]] |
Aktuálna revízia z 14:44, 19. apríl 2022
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 ) |
Vstupy a výstupy modulu YL-40 (ak neviete ako ho pripojiť k Arduinu, pozrite si zapojovací diagram).
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/
1. Inicializácia
Najprv je potrebné zbernicu inicializovať:
i2c_init(); // initialize I2C library
2. Čítanie z A/D prevodníka
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();
3. Zápis na analógový výstup
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 BYTE); // set analog output active
i2c_write(value); // write the required Analog Output value (0-255)
... // multiple write possible
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:
Úlohy
- Pripojte modul YL-40 k svojmu mikropočítaču.
- Napíšte program, ktorý prečíta hodnotu z analógového vstupu 3, na ktorom je potenciometer a
- tú istú hodnotu zapíšte na analógový výstup.
- Zobrazte hodnotu aj na displeji/sériovej linke.
- Otestujte aj termistor a fotorezistor.
Resource
- PCF8591 datasheet. Rev.7, NXP, 2013.-
- Rob Tillaart: Arduino PCF8591 Library
- Produktová stránka u dodávateľa: https://techfun.sk/produkt/adda-prevodnik-pcf8591-kabliky/
- Asi najpodrobnejší opis funkcie modulu sa dá nájsť v knihe
Warren Gay: Custom Raspberry Pi Interfaces. Design and build hardware interfaces for the Raspberry Pi. https://doi.org/10.1007/978-1-4842-2406-9 Apress, Berkeley, CA 2017. Volne stiahnutelna knizka. - A tu je dobrá analýza obvodu PCF8591 https://www.best-microcontroller-projects.com/pcf8591.html