Operácie

Zbernica i2c: PCF8591: Rozdiel medzi revíziami

Zo stránky SensorWiki

Balogh (diskusia | príspevky)
Bez shrnutí editace
Balogh (diskusia | príspevky)
 
(35 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/
=='''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
 


* https://navody.dratek.cz/navody-k-produktum/ad-da-prevodnik-pcf8591.html (cestina)
* 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