Operácie

Zbernica i2c: PCF8591: Rozdiel medzi revíziami

Zo stránky SensorWiki

Balogh (diskusia | príspevky)
Balogh (diskusia | príspevky)
 
(31 medziľahlých úprav od rovnakého používateľa nie je zobrazených.)
Riadok 1: Riadok 1:
Zatiaľ len odkazy na dokumentáciu k obvodu, ktorý použijeme aj ako A/D a D/A prevodník, ale aj ako obvod pripojiteľný na [[Zbernica I2C|zbernicu i2c]].
* Tento budeme používať: https://techfun.sk/produkt/adda-prevodnik-pcf8591-kabliky/
** Datasheet obvodu PCF8591 https://www.elecrow.com/download/PCF8591.pdf
** 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




=='''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žňuu 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.  


 
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 - J6 - fotorezistor (s rast[cou hodnotou osvetlenia hodnota klesá)
Ain 1 - NTC termistor (s rastúcou teplotou hodnota klesá)
Ain 2 - nezapojený (náhodné čísla)
Ain 3 - potenciometer ( 0 - 255 )


{| class="wikitable"  
{| class="wikitable"  
Riadok 39: 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>


<font color="red">
<!--
Note:<br>
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.
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.
</font>
-->


=='''PCF8591'''==
=='''PCF8591'''==
The PCF8591 is a single-chip, single-supply low power 8-bit CMOS data acquisition device with four analog inputs, one analog output and a serial I2C-bus interface. Three address pins A0, A1 and A2 are used for programming the hardware address, allowing the use of up to eight devices connected to the I2C-bus without additional hardware. Address, control and data to and from the device are transferred serially via the two-line bidirectional I2C-bus.
 
The functions of the device include analog input multiplexing, on-chip track and hold function, 8-bit analog-to-digital conversion and an 8-bit digital-to-analog conversion. The maximum conversion rate is given by the maximum speed of the I2C-bus.
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===  
===Block Diagram===  
[[File:20150805143217.png]]  
<div style='text-align: center;'>
===Pin Function===
[[File:MIPS_PCF8591_internals.png]] <br>
[[File:PCF8591T.png]]
''Blokový diagram obvodu 8591.''
[[File:20150805143308.png]]
</div>
=='''Features'''==
 
*Support acquisition of external 4-line voltage inputs (ranging 0-5v), with a single power supply
 
*Standard double-sided printed circuit board, 1.16mm thick, with an elegant layout, 3-mm holes at each corner for easy fixing
=='''Vlastnosti'''==
*Use an 8-bit successive approximation A/D converter
 
*Input/output by an I2C bus
* Štyri nezávislé analógové napäťové vstupy (rozsah 0-5 V)
*Working voltage: 2.5-6V DC; PCB size: 2.4 x 2.8 cm
* Možnosť využiť vždy dva vstupy ako jeden diferenciálny
*Single supply, low standby current
* Jeden analógový napäťový výstup (rozsah 0-5 V)
*Address by 3 hardware address pins
* 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'''==
=='''Resource'''==
[http://wiki.sunfounder.cc/images/2/2f/PCF8591.PDF PCF8591 datasheet][[File:PDF.jpg]]<br>
 
[https://www.sunfounder.com/learn/Sensor-Kit-v2-0-for-Arduino/lesson-33-analog-digital-converter-sensor-kit-v2-0-for-arduino.html Test Experiment for Arduino][[File:LINK.jpg]]<br>
* [https://www.nxp.com/docs/en/data-sheet/PCF8591.pdf PCF8591 datasheet]. Rev.7, NXP, 2013.-[[File:pdfIcon.png|25px]]
[https://www.sunfounder.com/learn/sensor-kit-v2-0-for-raspberry-pi-b-plus/lesson-13-pcf8591-sensor-kit-v2-0-for-b-plus.html Test Experiment for Raspberry Pi][[File:LINK.jpg]]
* 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 )



Schéma zapojenia modulu YL-40.


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


Blokový diagram obvodu 8591.


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:


Postupnosť pre čítanie hodnoty z obvodu 8591.

/*    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.


Postupnosť pre zápis hodnoty do obvodu 8591.

 /*    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:


Obsadenie riadiaceho registra obvodu 8591.


Úlohy

  1. Pripojte modul YL-40 k svojmu mikropočítaču.
  2. Napíšte program, ktorý prečíta hodnotu z analógového vstupu 3, na ktorom je potenciometer a
  3. tú istú hodnotu zapíšte na analógový výstup.
  4. Zobrazte hodnotu aj na displeji/sériovej linke.
  5. Otestujte aj termistor a fotorezistor.


Resource