eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.misc.elektronikaMCP3208 i mikropyton na RPi PicoMCP3208 i mikropyton na RPi Pico
  • Path: news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!2.eu.feeder.erj
    e.net!feeder.erje.net!feeder1-2.proxad.net!proxad.net!feeder1-1.proxad.net!193.
    141.40.65.MISMATCH!npeer.as286.net!npeer-ng0.as286.net!peer03.ams1!peer.ams1.xl
    ned.com!news.xlned.com!feeder.cambriumusenet.nl!feed.tweaknews.nl!posting.tweak
    news.nl!fx15.ams1.POSTED!not-for-mail
    Newsgroups: pl.misc.elektronika
    From: Marcin Debowski <a...@I...zoho.com>
    Subject: MCP3208 i mikropyton na RPi Pico
    User-Agent: slrn/1.0.3 (Linux)
    Mime-Version: 1.0
    Content-Type: text/plain; charset=UTF-8
    Content-Transfer-Encoding: 8bit
    Lines: 73
    Message-ID: <8I6pM.3178$GF_d.1926@fx15.ams1>
    X-Complaints-To: a...@t...nl
    NNTP-Posting-Date: Wed, 05 Jul 2023 04:54:28 UTC
    Organization: Tweaknews
    Date: Wed, 05 Jul 2023 04:54:28 GMT
    X-Received-Bytes: 3247
    Xref: news-archive.icm.edu.pl pl.misc.elektronika:781802
    [ ukryj nagłówki ]

    Jakiś czas temu pytałem tutaj o środowisko typu SBC, na którym mógłbym
    sobie coś zmajstrować konkretnego i pouczyć pytona. Wtedy wspominałem o
    kolorymetrii, ale wyszło cos pilniejszego i obecnie próbuję ogarnąć
    obsługę MCP3208 pod ww. RPi (potrzebuje 8-mio kanałowy odczyt
    tenperatury). Tzn. zasadniczo mam z lekka ją ogarnietą, ale dla MCP3008.
    To zasadniczo wygląda tak, że biblioteka do MCP3008 obsługuje bez
    żadnych modyfikacji MCP3208, no ale dostaję wynik 10bit. Czy jakaś dobra
    dusza mogłaby mi trochę powyjasniać, bo tu nie tylko że pyton ale
    jeszcze programowanie cipa dochodzi? Pytania w kodzie.

    Poniżej kod dla mcp3008.py stąd:
    https://blog.rareschool.com/2021/02/raspberry-pi-pic
    o-project-2-mcp3008.html

    import machine

    class MCP3008:

    def __init__(self, spi, cs, ref_voltage=3.3):
    """
    Create MCP3008 instance

    Args:
    spi: configured SPI bus
    cs: pin to use for chip select
    ref_voltage: r
    """
    self.cs = cs
    self.cs.value(1) # ncs on
    self._spi = spi
    self._out_buf = bytearray(3)
    self._out_buf[0] = 0x01
    self._in_buf = bytearray(3)
    self._ref_voltage = ref_voltage

    # co robią te bufory in and out? Rozumiem, że pierwszy bajt coś ustawia,
    # a dwa pozostałe są na dane?

    def reference_voltage(self) -> float:
    """Returns the MCP3xxx's reference voltage as a float."""
    return self._ref_voltage

    def read(self, pin, is_differential=False):
    """
    read a voltage or voltage difference using the MCP3008.

    Args:
    pin: the pin to use
    is_differential: if true, return the potential difference between two
    pins,


    Returns:
    voltage in range [0, 1023] where 1023 = VREF (3V3)

    """

    self.cs.value(0) # select
    self._out_buf[1] = ((not is_differential) << 7) | (pin << 4)
    self._spi.write_readinto(self._out_buf, self._in_buf)

    #kopiuje zawartość out do in?

    self.cs.value(1) # turn off
    return ((self._in_buf[1] & 0x03) << 8) | self._in_buf[2]

    #tu widzę jakieś przesuwania bitów, ale jak wielkość bufora jest bajt to
    #przesunięcie o 8 co daje? A co daje binarne "and" zawartości [1] z
    #00000011? Dostaję 2 młodsze bity, które w połączeniu z [2] dają 10
    #bitów? Jeśli tak to 0x0F powinno z tego zrobić 12bit a jakby nie rozbi
    #- jak podłącze na odpowiedni pin MC3208 3V3 to nadal dostaje 1023, więc
    #ta bitowość może jest gdzies definiowana w "machine"?

    --
    Marcin

Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj


Następne wpisy z tego wątku

Najnowsze wątki z tej grupy


Najnowsze wątki

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: