karlman 发表于 2023-8-14 21:44:52

STC8G1K17A的困惑

本人新手,学单片机玩。先买了一片STC15W204S,SOP8的,感觉挺好玩,这么小的一个芯片,不需要任何外围元件,可以做很多事情。

最近试了一下I2C总线的128*32的OLED屏显示,用I2C的SHT30做了个温湿度计。运行挺正常,就是OLED的字体数据太占空间了,4K的程序空间捉襟见肘。
后来看STC8G1K17A和15W204S的引脚完全一样,程序存贮空间有17K,就买了几片更换。
结果换上去后,发现程序根本不能正常运行,连最基本的IO输出点LED灯都点不亮
后来发现要在程序一开始加了几条语句,先把IO口设置成准双向IO口才行。

    P1M0 = 0x00;
    P1M1 = 0x00;
    P2M0 = 0x00;
    P2M1 = 0x00;
    P3M0 = 0x00;
    P3M1 = 0x00;
    P4M0 = 0x00;
    P4M1 = 0x00;
    P5M0 = 0x00;
    P5M1 = 0x00;

困惑一:STC8G1K17A芯片上电初始化时IO口不是准双向口吗?
然而,OLED可以正常工作了,SHT30却无法正常工作,在I2C write command函数时会NOACK。我这两个I2C设备分别使用P3^2和P3^3, P5^4和P5^5作为SCLK1,SDA1,SCLK2,SDA2,在15W204S和HE-6800(STC90CRD+芯片)试验板上都工作正常。(时钟频度都选的11.0592MHz)
我在程序里和接线上交换了OLED和SHT30使用的IO口,仍然是OLED可以工作,SHT30无法工作。
问题出在哪呢?是不是两个芯片的指令有什么区别吗?

神农鼎 发表于 2023-8-14 22:14:43


gentleman 发表于 2023-8-15 07:17:29

I2C的所有设备都可以挂在同一条总线上,通过不同地址访问不同设备。他和串口不一样。没必要弄两套scl sda

8G系列和15系列速度不一样,有时候要调整代码




karlman 发表于 2023-8-15 07:37:43

神农鼎 发表于 2023-8-14 22:14


这个规则,是STC8G1K系列才有的吧?是不是15W204S不需要这样?

karlman 发表于 2023-8-15 07:43:57

gentleman 发表于 2023-8-15 07:17
I2C的所有设备都可以挂在同一条总线上,通过不同地址访问不同设备。他和串口不一样。没必要弄两套scl sda

...

对I2C还不是太熟悉,代码都是复制再修改的,下一步我试试设备接在同一个总线上。
我猜是SHT30代码里的延时函数在不同的芯片上运行结果不同。试着调不同晶振频率,用24M,连OLED都不能正常工作了。但是调到最低,SHT30也不能工作。
在STC90CRD+上,运行速度明显比15W204慢好多倍,但是能工作。
页: [1]
查看完整版本: STC8G1K17A的困惑