eddy_em: (Костерок)
[personal profile] eddy_em
Я еще где-то в июне подготовил код софтового I2C, но только вчера вечером руки дошли протестировать на железе. С таймингами я, конечно, намучился, а еще хуже было с порядком изменения состояния ног SDA и SCL (т.к. между последовательными сменами состояния возникали интервалы до 0.5мкс — все-таки, у меня еще и прерывания разные работают, то иногда получалось так, что в конце переданного байта "самопроизвольно" возникал STOP).
Но вроде бы со всем разобрался, выложил код на примере работы с SI7005. Кстати, заметил неплохую "очепятку": почему-то я везде humidity называл pressure (то ли забыл, что датчик не давление, а влажность измеряет, то ли с другим его поначалу перепутал). В этом коде все исправлено: команда 'H' запускает измерение влажности (результат выводится в виде H*10), а команда 'T' измеряет температуру (результат выводится в виде T*100).

Теперь при желании можно на основе "вольтметра" на STM8S003 сделать термометр-гигрометр.

Date: 2015-10-01 11:09 am (UTC)
From: [identity profile] 32bit-me.livejournal.com
Круто! Я тоже софтовый i2c писал лет 10 назад.

Date: 2015-10-01 11:55 am (UTC)
From: [identity profile] eddy-em.livejournal.com
На самом деле, несмотря на рукожопность STM8 (errata довольно ощутимая), в простейшем режиме аппаратный I2C нормально работает, если не рассчитывать на прерывания.
Я на логанализаторе сравнивал формы: красивенькая такая аппаратная и кривущая программная. Чуть какое прерывание — и сбой тайминга. Благо, протокол не придирчив к таймингам, ему лишь бы фронты четкие были.

Но вообще, да — программные реализации протоколов, для которых в чипе уже есть аппаратные — это та еще содомия. Однако, если есть желание к дешевенькому "вольтметру" подключить какой-нибудь датчик по I2C, то либо перепаивать, либо этим заниматься.

Date: 2015-10-01 12:01 pm (UTC)
From: [identity profile] 32bit-me.livejournal.com
Ну да. Я делал это для древнего контроллера, у которого не было аппаратного i2c.

Date: 2015-10-01 01:55 pm (UTC)
From: [identity profile] mbr.livejournal.com
Я так и не понял суть проблемы, если есть аппаратный?

Date: 2015-10-01 02:55 pm (UTC)
From: [identity profile] eddy-em.livejournal.com
Это для извращений: если хочется, скажем, "вольтметр" на STM8 переделать в барометр-гигрометр-термометр.
Edited Date: 2015-10-01 02:56 pm (UTC)

October 2025

S M T W T F S
   1234
567 89 1011
121314 15161718
19202122232425
2627 28293031 

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Feb. 28th, 2026 05:06 am
Powered by Dreamwidth Studios