Постійний збір на дрони FPV для ЗСУ
Закидуй дві гривні!
FPV-дрони змінюють хід війни
Змінюй хід війни!

MCP23S17 + micropython

🟡 14:35 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • Автор теми _pasha
  • Дата створення

_pasha

P
  • 🟡 14:35 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #1
Привет
Пытаюсь применить сабж. Наступил на ТАКИЕ ГРАБЛИ :браво::браво::браво:
эпические. Суть кратко.
По даташиту простейший протокол
допустим у меня nss есть пин, я им дергаю вручную
spi это настроенный spi, за что я лублу питон, что там все очень быстро и удобно

Код:
#let's write to reg
nss.value(0)
spi.write(data)
nss.value(1)
где data = 0x40 <register_address> <register_value>

тоесть 3 байта.
spi.write() принимает на вход либо string либо byte array иначе
Код:
spi.write([65,0])                                                                                                                                                 
Traceback (most recent call last):                                                                                                                                    
  File "<stdin>", line 1, in <module>                                                                                                                                 
TypeError: object with buffer protocol required

не вопрос. но тут я делаю херню, т.е. я пишу
Код:
def wr(reg,dat): # reg_address , 1byte data
  nss.value(0)
  spi.write('\x41'+chr(reg)+chr(dat))
  nss.value(1)
и получаю интереснейший глюк: при попытке записать куда-нить число со старшим битом=1 у меня портится несколько регистров

а вот интересно, если кто в теме - расскажете, почему так происходит? :) я уже исправил
честно, сидел с понедельника :збентежений: только сейчас догадался :as is:

причем, начал думать что микросхемы битые!
 
  • 🟡 14:35 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #2
Перше, що спадає на думку: старший біт сприймається як знак?
Друге, після читання про функцію chr(): повертає 2 байта.
 
  • 🟡 14:35 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #3
Друге, після читання про функцію chr(): повертає 2 байта.
раз никто больше не заинтересовался, не буду тянуть хвоста за кот
chr() же у нас юникодный :D:D:D т.е. когда символ больше 0x80 - будет 2 байта
т.е. не нужно вообще связываться со строками. передавать по SPI нужно bytearray
Код:
    def wrrg(self, rg, data):
		'''
		  write data to specific register
		'''
		bb = bytes([0x40, rg&255, data&255])
		self.nss.value(0)
		self.spi.write(bb)
		self.nss.value(1)
всего-то изучать или помнить тонкости питона :D:D:D
 
  • 🟡 14:35 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #4
раз никто больше не заинтересовался, не буду тянуть хвоста за кот
chr() же у нас юникодный :D:D:D т.е. когда символ больше 0x80 - будет 2 байта
т.е. не нужно вообще связываться со строками. передавать по SPI нужно bytearray
Код:
    def wrrg(self, rg, data):
		'''
		  write data to specific register
		'''
		bb = bytes([0x40, rg&255, data&255])
		self.nss.value(0)
		self.spi.write(bb)
		self.nss.value(1)
всего-то изучать или помнить тонкости питона :D:D:D

А причём тут питон?
Тут надо помнить про особенности кодировок, а не про питон. Питон передаст то, что ты ему подсунул. Он разрешает выстрелить себе в ногу.
 
Назад
Зверху Знизу