使用TM1637和C# [英] Using TM1637 with C#

查看:75
本文介绍了使用TM1637和C#的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

嘿,



我对TM1637控制器的4位LED显示屏存在一些问题。  ;

https://www.amazon.de/gp/product/B06X952QXS/



数据表:  http://olimex.cl/website_MCI/static/documents/Datasheet_TM1637.pdf



在我的研究过程中,我发现了一些Python和C ++类来控制TM1637,但是我想使用C#,因为它也应该是带有C#的
。 


https://raspberrytips.nl/files/tm1637.py

http://www.instructables.com/id/Capacitance-Meter-With-TM1637-Using-Arduino/



tm1637在5V和GND上运行。对于DIO,我使用GPIO 24和CLK GPIO 23.

Hey,

I have some issues with the TM1637 controller for a 4 Digit LED Display. 
https://www.amazon.de/gp/product/B06X952QXS/

Datasheet: http://olimex.cl/website_MCI/static/documents/Datasheet_TM1637.pdf

During my research I found some Python and C++ classes to control the TM1637, but I want to use C#, since it should be possible with C# as well. 
https://raspberrytips.nl/files/tm1637.py
http://www.instructables.com/id/Capacitance-Meter-With-TM1637-Using-Arduino/

The tm1637 is running on 5V and GND. For DIO I am using GPIO 24 and for CLK GPIO 23.

我正在使用Raspberry Pi 3和Windows IoT Extension for UWP Version 10.0.14393.0。



该类创建时使用:

tm1637 tm = new tm1637(23,24,5);

显示数字:

tm.startDisplay(1000);

但显示器没有任何反应。它不会显示任何内容。我现在已经没有想法如何让这个控制器运行
。另外一双眼睛找到了代码中的错误? 




我使用Task.Delay手动降低数据速率,因为TM1637只能处理150kHz。



这是我的代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Windows.Devices.Gpio;

namespace display
{
    class tm1637
    {
        int brightnes;

        private GpioPin clkPin;
        private GpioPin dataPin;

        byte[] LEDDIGITS =
        {
            // 0    1    2    3    4   5    6     7      8    9
           0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90
        };

        private byte[] LEDCHARS =
        {
            // A     b     C     d     E     F     -
            0x8C, 0xBF, 0xC6, 0xA1, 0x86, 0xFF, 0xbf
        };


        public tm1637(int pinClock, int pinData, int brightnes)
        {
            this.brightnes = brightnes;

            var gpio = GpioController.GetDefault();

            clkPin = gpio.OpenPin(pinClock);
            clkPin.SetDriveMode(GpioPinDriveMode.Output);

            dataPin = gpio.OpenPin(pinData);
            dataPin.SetDriveMode(GpioPinDriveMode.Output);

            clkPin.Write(GpioPinValue.Low);
            dataPin.Write(GpioPinValue.Low);

        }

        public async void startDisplay(int number)
        {
            await startDisp();
            await writeByte(0x40);
            await stopDisp();
            await startDisp();
            await writeByte(0xc0);
            var numStr = number.ToString();
            for(int i = 0; i < numStr.Length; i++)
            {
                var pos = numStr[numStr.Length - i - 1] - '0';
                await writeByte(LEDDIGITS[pos]);
            }
            await stopDisp();
            await startDisp();
            await writeByte((byte)(0x88 + this.brightnes));
            await stopDisp();
        }
        public async Task startDisp()
        {
            clkPin.Write(GpioPinValue.High);
            dataPin.Write(GpioPinValue.High);
            await Task.Delay(5);
            clkPin.Write(GpioPinValue.Low);
            dataPin.Write(GpioPinValue.Low);
            await Task.Delay(5);
        }
        public async Task stopDisp()
        {
            clkPin.Write(GpioPinValue.Low);
            dataPin.Write(GpioPinValue.Low);
            await Task.Delay(5);
            clkPin.Write(GpioPinValue.High);
            dataPin.Write(GpioPinValue.High);
            await Task.Delay(5);
        }
        public async Task writeByte(byte input)
        {
            for (int i = 0; i < 8; i++)
            {
                clkPin.Write(GpioPinValue.Low);
                await Task.Delay(5);

                if((input & (1 << i)) >> i == 1)
                    dataPin.Write(GpioPinValue.High);
                else
                    dataPin.Write(GpioPinValue.Low);

                await Task.Delay(5);
                clkPin.Write(GpioPinValue.High);
                await Task.Delay(5);
            }
            clkPin.Write(GpioPinValue.Low);
            
            dataPin.Write(GpioPinValue.High);
            await Task.Delay(5);

            clkPin.Write(GpioPinValue.High);
            //Ignore ACK 
            dataPin.SetDriveMode(GpioPinDriveMode.Input);
            await Task.Delay(5);
            dataPin.SetDriveMode(GpioPinDriveMode.Output);
            dataPin.Write(GpioPinValue.Low);
        }
    }
}

推荐答案

很抱歉延迟回复此事,被埋没在一些旅游工作中。您是否确认自己获得了正确的数据速率? 

Sorry for the delay in replying to this, been buried in some tour work. Have you verified that you're getting the correct data rate out on the lines? 

如果您有逻辑分析仪或示波器,那么确保您确实获得预期的速度&波形。

If you have a logic analyzer, or a scope, it's be worth ensuring that you're actually getting the expected speeds & waveforms.

Windows物联网项目经理Tony Goodhew

Tony Goodhew, Program Manager, Windows IoT


这篇关于使用TM1637和C#的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆