Operácie

Zbernica i2c: PCF8591: Rozdiel medzi revíziami

Z SensorWiki

(Resource)
(Modul YL-40)
(22 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žň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                       
  
===Pin Function===
+
</source>
  
[[File:MIPS_PCF8591_config.png]]
+
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.
  
[[File:20150805143308.png]]
 
  
=='''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
 
*Use an 8-bit successive approximation A/D converter
 
*Input/output by an I2C bus
 
*Working voltage: 2.5-6V DC; PCB size: 2.4 x 2.8 cm
 
*Single supply, low standby current
 
*Address by 3 hardware address pins
 
 
=='''Resource'''==
 
=='''Resource'''==
  
* [https://www.nxp.com/docs/en/data-sheet/PCF8591.pdf PCF8591 datasheet]. Rev.7, NXP, 2013 [[File:pdfIcon.png|20px]]
+
* [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.
  
 
 
[[Mikropo%C4%8D%C3%ADta%C4%8Dov%C3%A9_syst%C3%A9my_(MIPS)#Cvi.C4.8Denia|Návrat na zoznam cvičení...]]
 
  
  
 
[[Category: MIPS]]
 
[[Category: MIPS]]

Verzia zo dňa a času 09:45, 22. apríl 2021


Modul YL-40

MIPS Modul YL-40.jpg

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 )


MIPS 8591 SchemaZapojenia.png
Schéma zapojenia modulu YL-40.

MIPS 8591 PinOut.png
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

MIPS PCF8591 internals.png
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:

MIPS 8591 ReadValue.png
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.

MIPS 8591 WriteValue.png
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:

MIPS 8591 Register.png
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