当前位置:网站首页>Mindmotion mm32f3277 softi2c Function Test

Mindmotion mm32f3277 softi2c Function Test

2021-11-25 17:26:08 Zhuo Qing

Jane. Suke: Pour lesMindMotion SuYongEnvoyé avecSoftI2C Pour tester la version portable de.Il a été prouvé à titre préliminaire queSoftI2CFonction de migration. UtilisationOLEDAfficher les tests,Vous pouvez voir cette version deSoftI2CLes commandes du bus externe sont très lentes.Testé,Vous pouvez voir cette version deSoftI2CLe contrôle de l'horloge de sortie n'est pas prêt.

Mots clés I2C,MM32,MicroPython

MM32F3277 MicroPython
Catalogue des articles
Tests MicroPython
Oui.MicroPythonTélécharger àMCU
Essais préliminaires
Test de programmation
Port d'essai
TestsI2C OLED
ConnexionOLED
Essais préliminaires
InitialisationOLED
Résumé du test

 

§01 MM32F3277 MicroPython


  Aujourd'huiOh, mon Dieu.(2021-11-25)Bien reçu.MindMotion SuYongEnvoyé pourMM32F3277DeMicroPythonAjouterI2CVersion portable de la fonction bus.

Bleu clair[SY]:
M. Zhuo.,Ces deux derniers jours, c'était juste un truc comme ça

Bleu clair[SY]:
Matérieli2cDrive, J'ai besoin de mon couteau. 

Bleu clair[SY]:
Sisoft i2cÇa marche, Je vais commencer par le matériel. spi Optimisation et pwm Extension du canal 

Bleu clair[SY]:
 Ça pourrait nous aider. i2c Un peu de temps pour les collègues entraînés par le matériel , Qu'elle change de code. , Ou s'il vous plaît, aidez - moi. 

   Cette version est testée ci - dessous .

Un.、Tests MicroPython

1、Oui.MicroPythonTélécharger àMCU

▲ Fig.1.1.1  TéléchargerMicroPythonÀMM32F3277

▲ Fig.1.1.1 TéléchargerMicroPythonÀMM32F3277

2、Essais préliminaires

(1)REPL TestsmachineModule

>>> import machine
>>> dir(machine)
['__name__', 'ADC', 'DAC', 'PWM', 'Pin', 'SDCard', 'SPI', 'SoftI2C', 'SoftSPI', 'UART', 'freq', 'mem16', 'mem32', 'mem8']
>>> 

3、Test de programmation

  PourMicroPythonÀ propos deI2C Pour la documentation programmée, voir : MicroPython class I2C

▲ Fig.1.1.2 I2C Cas d'utilisation

▲ Fig.1.1.2 I2C Cas d'utilisation

(1)Essais préliminaires

Ⅰ.Procédure d'essai
from machine                import I2C
import utime

i2c = I2C(freq400000)
i2c.scan()
i2c.writeto(42, b'123')
Ⅱ.Résultats obtenus
>> Download MicroPython : 22 lines/515 characters.
>> -------------------------------------------------------------------------

Traceback (most recent call last):
  File "<stdin>", line 9, in <module>
ImportError: can't import name I2C
>>> 

(2)import SoftI2C

Ⅰ.Code d'essai
from machine                import Pin,SoftI2C
i2c = SoftI2C(freq400000)
i2c.scan()
i2c.writeto(42, b'123')
Ⅱ.Résultats obtenus
>> Download MicroPython : 22 lines/524 characters.
>> -------------------------------------------------------------------------

Traceback (most recent call last):
  File "<stdin>", line 10, in <module>
ImportError: module not found
>>> 

4、Port d'essai

2.、TestsI2C OLED

  In Lexinesp8266ModuleMicroPythonConseil de développementMQTTInternet des objets système minimal d'intelligence artificielle Testé I2C OLEDModule, Connectez - le ci - dessous à MM32F3277Allez..

1、ConnexionOLED

▲ Fig.1.2.1  Sur la planche à pain, Amiral. OLED Fixé au tableau d'essai

▲ Fig.1.2.1 Sur la planche à pain, Amiral. OLED Fixé au tableau d'essai

2、Essais préliminaires

(1) Scan bus

Ⅰ.Code d'essai
from machine                import Pin,SoftI2C
import utime

print("Test I2C")

scl = Pin('PA0')
sda = Pin('PA1')

i2c = SoftI2C(scl, sda, freq=100000)

ret = i2c.scan()
print(ret)
Ⅱ.Résultats obtenus
>> Download MicroPython : 26 lines/584 characters.
>> -------------------------------------------------------------------------

Test I2C
[60]
>>> 

D'en hautscanJe l'ai.I2CDeSlaveL'adresse de60(0x3C),Ceci est lié à Lexinesp8266ModuleMicroPythonConseil de développementMQTTInternet des objets système minimal d'intelligence artificielle Les adresses données sont cohérentes .

(2)Test Write

Ⅰ.Code d'essai
from machine                import Pin,SoftI2C
import utime
from micropython import const

scl = Pin('PA0')
sda = Pin('PA1')

i2c = SoftI2C(scl, sda, freq=100000)

ret = i2c.scan()
print(ret)

temp = bytearray(2)
i2c.start()
temp[0] = 120
temp[1] = 1
i2c.write(temp)
i2c.stop()

print('Test end.')
Ⅱ.Résultats obtenus
>> Download MicroPython : 34 lines/760 characters.
>> -------------------------------------------------------------------------

[60]
2
Test end.
>>> 

   Vous pouvez voir écrire deux octets .

3、InitialisationOLED

#!/usr/local/bin/python
# -*- coding: gbk -*-
#============================================================
# TESTI2C.PY -- by Dr. ZhuoQing 2021-11-25
#
# Note:
#============================================================
from machine                import Pin,SoftI2C
import utime
from micropython import const
#------------------------------------------------------------
scl = Pin('PA0')
sda = Pin('PA1')
i2c = SoftI2C(scl, sda, freq=100000)
#------------------------------------------------------------
SET_CONTRAST        = const(0x81)
SET_ENTIRE_ON       = const(0xa4)
SET_NORM_INV        = const(0xa6)
SET_DISP            = const(0xae)
SET_MEM_ADDR        = const(0x20)
SET_COL_ADDR        = const(0x21)
SET_PAGE_ADDR       = const(0x22)
SET_DISP_START_LINE = const(0x40)
SET_SEG_REMAP       = const(0xa0)
SET_MUX_RATIO       = const(0xa8)
SET_COM_OUT_DIR     = const(0xc0)
SET_DISP_OFFSET     = const(0xd3)
SET_COM_PIN_CFG     = const(0xda)
SET_DISP_CLK_DIV    = const(0xd5)
SET_PRECHARGE       = const(0xd9)
SET_VCOM_DESEL      = const(0xdb)
SET_CHARGE_PUMP     = const(0x8d)
#------------------------------------------------------------
class SSD1306():
    def __init__(self, width, height, external_vcc):
        self.width = width
        self.height = height
        self.external_vcc = external_vcc
        self.pages = self.height // 8
        self.buffer = bytearray(self.pages * self.width)
        self.init_display()
    def init_display(self):
        for cmd in (
            SET_DISP | 0x00,            # off
            SET_MEM_ADDR, 0x00,         # horizontal
            SET_DISP_START_LINE | 0x00,
            SET_SEG_REMAP | 0x01,       # column addr 127 mapped to SEG0
            SET_MUX_RATIO, self.height - 1,
            SET_COM_OUT_DIR | 0x08,     # scan from COM[N] to COM0
            SET_DISP_OFFSET, 0x00,
            SET_COM_PIN_CFG, 0x02 if self.height == 32 else 0x12,
            SET_DISP_CLK_DIV, 0x80,
            SET_PRECHARGE, 0x22 if self.external_vcc else 0xf1,
            SET_VCOM_DESEL, 0x30,       # 0.83*Vcc
            SET_CONTRAST, 0xff,         # maximum
            SET_ENTIRE_ON,              # output follows RAM contents
            SET_NORM_INV,               # not inverted
            SET_CHARGE_PUMP, 0x10 if self.external_vcc else 0x14,
            SET_DISP | 0x01):           # on
            self.write_cmd(cmd)
        self.fill(0xff)
        self.show()
    def fill(self, c):
        for i in range(len(self.buffer)):
            self.buffer[i] = c
    def poweroff(self):
        self.write_cmd(SET_DISP | 0x00)
    def poweron(self):
        self.write_cmd(SET_DISP | 0x01)
    def contrast(self, contrast):
        self.write_cmd(SET_CONTRAST)
        self.write_cmd(contrast)
    def invert(self, invert):
        self.write_cmd(SET_NORM_INV | (invert & 1))
    def show(self):
        x0 = 0
        x1 = self.width - 1
        if self.width == 64:
            x0 += 32
            x1 += 32
        self.write_cmd(SET_COL_ADDR)
        self.write_cmd(x0)
        self.write_cmd(x1)
        self.write_cmd(SET_PAGE_ADDR)
        self.write_cmd(0)
        self.write_cmd(self.pages - 1)
        self.write_data(self.buffer)
class SSD1306_I2C(SSD1306):
    def __init__(self, width, height, i2c, addr=0x3c, external_vcc=False):
        self.i2c = i2c
        self.addr = addr
        self.temp = bytearray(2)
        super().__init__(width, height, external_vcc)
    def write_cmd(self, cmd):
        self.temp[0] = 0x80 # Co=1, D/C#=0
        self.temp[1] = cmd
        self.i2c.writeto(self.addr, self.temp)
    def write_data(self, buf):
        self.temp[0] = self.addr << 1
        self.temp[1] = 0x40         # Co=0, D/C#=1
        self.i2c.start()
        self.i2c.write(self.temp)
        self.i2c.write(buf)
        self.i2c.stop()
#------------------------------------------------------------
oled = SSD1306_I2C(128, 64, i2c, addr=0x3c)
#oled.text('Hello world!', 0, 0)
#oled.text('OLED test', 0, 50)
#oled. show()
#------------------------------------------------------------
# END OF FILE : TESTI2C.PY
#============================================================

  En basOLED Écrire pendant l'initialisation 1024 Procédure en octets , Processus anormalement lent .

▲ Fig.1.2.2  RafraîchirOLEDProcessus

▲ Fig.1.2.2 RafraîchirOLEDProcessus

   C'est si lent. ,Réussir l'essai oscilloscopeSCL,SDALa forme d'onde de, Vous pouvez voir que le taux de Baud à ce stade n'est que 400Hz, Très différent du taux de Baud initialisé .

▲ Fig.1.2.3 I2C Processus d'écriture du bus

▲ Fig.1.2.3 I2C Processus d'écriture du bus

 

MesureRésumé des essais ※


  C'est exact. Yu - cong MindMotion SuYongEnvoyé avecSoftI2C Pour tester la version portable de.Il a été prouvé à titre préliminaire queSoftI2CFonction de migration. UtilisationOLEDAfficher les tests,Vous pouvez voir cette version deSoftI2CLes commandes du bus externe sont très lentes.

  Testé,Vous pouvez voir cette version deSoftI2CLe contrôle de l'horloge de sortie n'est pas prêt.


■ Liens vers des documents connexes:

● Liens graphiques connexes:

版权声明
本文为[Zhuo Qing]所创,转载请带上原文链接,感谢
https://chowdera.com/2021/11/20211125172128774p.html

随机推荐