Zbernica i2c: PCF8591: Rozdiel medzi revíziami
Zo stránky SensorWiki
| (26 medziľahlých úprav od rovnakého používateľa nie je zobrazených.) | |||
| Riadok 1: | Riadok 1: | ||
| =='''Modul YL-40'''== | =='''Modul YL-40'''== | ||
| [[File:MIPS_Modul_YL-40.jpg]] <BR> | [[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.   | 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.   | ||
| Riadok 35: | Riadok 26: | ||
| |} | |} | ||
| <div style='text-align: center;'> | |||
| [[File:MIPS_8591_SchemaZapojenia.png]]<br> | [[File:MIPS_8591_SchemaZapojenia.png]]<br> | ||
| Schéma zapojenia modulu YL-40 | ''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> | |||
| <!--   | <!--   | ||
| Riadok 51: | Riadok 50: | ||
| ===Block Diagram===   | ===Block Diagram===   | ||
| [[File:MIPS_PCF8591_internals.png]]   | <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> | |||
| [[File: | 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'''== | =='''Resource'''== | ||
| * [https://www.nxp.com/docs/en/data-sheet/PCF8591.pdf PCF8591 datasheet]. Rev.7, NXP, 2013.- | * [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] | * 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




