本文來源電子發(fā)燒友社區(qū),作者:jf_00240724, 帖子地址:https://bbs.elecfans.com/jishu_2284706_1_1.html
今天我們接上一篇繼續(xù),需要做兩個事情。第一個是重寫驅(qū)動,第二個是開發(fā)霓虹燈應(yīng)用程序。
第一章 重寫驅(qū)動
一.1. 知識儲備
一.1.1. 卸載驅(qū)動
一.1.1.1. linux加載/卸載驅(qū)動有兩種方法
一.1.1.1.1. modprobe
這里我們主要用這個。
注:在使用這個命令加載模塊前先使用depmod -a命令生成modules.dep文件,該文件位于/lib/modules/$(uname -r)目錄下;modprobe命令智能地向內(nèi)核中加載模塊或者從內(nèi)核中移除模塊,可載入指定的個別模塊,或是載入一組相依的模塊。modprobe會根據(jù)depmod所產(chǎn)生的依賴關(guān)系,決定要載入哪些模塊。若在載入過程中出錯,modprobe會卸載整組的模塊。
載入模塊的命令:
(1) 載入指定的模塊:modprobe drv.ko
(2) 載入全部模塊:modprobe -a
卸載模塊的命令:modprobe -r drv.ko
modprobe命令用于智能地向內(nèi)核中加載模塊或者從內(nèi)核中移除模塊。
modprobe可載入指定的個別模塊,或是載入一組相依的模塊。modprobe會根據(jù)depmod所產(chǎn)生的相依關(guān)系,決定要載入哪些模塊。若在載入過程中發(fā)生錯誤,在modprobe會卸載整組的模塊。
選項
-a或--all:載入全部的模塊;
-c或--show-conf:顯示所有模塊的設(shè)置信息;
-d或--debug:使用排錯模式;
-l或--list:顯示可用的模塊;
-r或--remove:模塊閑置不用時,即自動卸載模塊;
-t或--type:指定模塊類型;
-v或--verbose:執(zhí)行時顯示詳細的信息;
-V或--version:顯示版本信息;
-help:顯示幫助。
參數(shù) 模塊名:要加載或移除的模塊名稱。
實例
查看modules的配置文件:modprobe -c
這里,可以查看modules的配置文件,比如模塊的alias別名是什么等。會打印許多行信息,例如其中的一行會類似如下:
alias symbol:ip_conntrack_unregister_notifier ip_conntrack
列出內(nèi)核中所有已經(jīng)或者未掛載的所有模塊:modprobe -l
這里,我們能查看到我們所需要的模塊,然后根據(jù)我們的需要來掛載;其實modprobe -l讀取的模塊列表就位于/lib/modules/`uname -r`目錄中;其中uname -r是內(nèi)核的版本,例如輸出結(jié)果的其中一行是:
/lib/modules/2.6.18-348.6.1.el5/kernel/net/netfilter/xt_statistic.ko
掛載vfat模塊:modprobe vfat
這里,使用格式modprobe 模塊名來掛載一個模塊。掛載之后,用lsmod可以查看已經(jīng)掛載的模塊。模塊名是不能帶有后綴的,我們通過modprobe -l所看到的模塊,都是帶有.ko或.o后綴。
移除已經(jīng)加載的模塊:modprobe -r 模塊名
這里,移除已加載的模塊,和rmmod功能相同。
一.1.1.1.2. rmmod
這個卸載命令不會把其依賴模塊一同卸掉,所以這里我們只作簡單介紹。
一.1.2. Linux驅(qū)動框架
接下來,我們開始重新寫驅(qū)動,linux系統(tǒng)下寫驅(qū)動,其實就是配置相應(yīng)的硬件寄存器,那本章的霓虹燈驅(qū)動,也就是對imX 8的GPIO進行配置,由于裸機實驗不同的是,并且驅(qū)動要符合linux驅(qū)動框架,下面我們來先理解了解一下linux的驅(qū)動框架。
一.1.2.0.1. 地址映射
linux的驅(qū)動,并不能夠直接操作寄存硬件寄存器,而是需要通過MMU即內(nèi)存管理單元,它的主要功能是
一、以完成虛擬空間的物理空間的映射
二、內(nèi)存保護設(shè)置存儲器的訪問權(quán)限,設(shè)置虛擬存儲空間的緩沖特性
這里我們會用到兩個函數(shù)ioremap,iounmap,它們分別是用來獲取物理地址空間對應(yīng)的虛擬地址,和卸載時釋放掉之前所做的映射
一.1.2.0.2. linux內(nèi)存訪問函數(shù)
對于arm來說,只有IO內(nèi)存,linux內(nèi)核建議使用一組操作函數(shù)來對映射后的內(nèi)存進行讀寫操作
一、讀操作函數(shù)
<
1 u8 readb(constvolatilevoid __iomem *addr)
2 u16 readw(constvolatilevoid __iomem *addr)
3 u32 readl(constvolatilevoid __iomem *addr)
>
readb、readw和readl這三個函數(shù)分別對應(yīng)8bit、16bit和32bit讀操作,參數(shù)addr就是要讀取寫內(nèi)存地址,返回值就是讀取到的數(shù)據(jù)。
二、寫操作函數(shù)
<
1void writeb(u8 value,volatilevoid __iomem *addr)
2void writew(u16 value,volatilevoid __iomem *addr)
3void writel(u32 value,volatilevoid __iomem *addr)
>
writeb、writew和writel這三個函數(shù)分別對應(yīng)8bit、16bit和32bit寫操作,參數(shù)value是要寫入的數(shù)值,addr是要寫入的地址。
接下來我們開始搭建一個linux驅(qū)動框架:
<
#include "linux/init.h"
#include "linux/module.h"
#include "linux/fs.h"
#include "linux/types.h"
// struct inode 聲明在 linux/fs.h 中
// struct file 聲明在 linux/fs.h 中
int led_open (struct inode *i, struct file *f)
{
// printk 聲明在 linux/printk.h 中
printk("led open!rn");
return 0;
}
int led_release (struct inode *i, struct file *f)
{
printk("led release!rn");
return 0;
}
// ssize_t 定義在 linux/types.h 中
// __user 定義在 linux/compiler.h 中
// size_t 定義在 linux/types.h 中
// loff_t 定義在 linux/types.h 中
ssize_t led_read (struct file *f, char __user *b, size_t c, loff_t * l)
{
printk("led read!rn");
return 0;
}
ssize_t led_write (struct file *f, const char __user *b, size_t c, loff_t *l)
{
printk("led write!rn");
return 0;
}
// 聲明在 linux/fs.h 頭文件中
static struct file_operations fops = {
.open = led_open,
.release = led_release,
.read = led_read,
.write = led_write,
};
/* 驅(qū)動入口函數(shù) */
static int __init led_init(void)
{
/* 入口函數(shù)具體內(nèi)容 */
int retvalue = 0;
// 聲明在 linux/fs.h 頭文件中
retvalue = register_chrdev(200,"chrdev",&fops);
if(retvalue < 0){
/* 字符設(shè)備注冊失敗 */
}
return 0;
}
/* 驅(qū)動出口函數(shù) */
static void __exit led_exit(void)
{
/* 出口函數(shù)具體內(nèi)容 */
// 聲明在 linux/fs.h 頭文件中
unregister_chrdev(200,"chrdev");
}
// 聲明在 linux/init.h 頭文件中
/* 將上面兩個函數(shù)指定為驅(qū)動的入口和出口函數(shù) */
module_init(led_init);
module_exit(led_exit);
// 聲明在 linux/module.h 頭文件中
MODULE_LICENSE("GPL");
>
這只是一個驅(qū)動框架沒有實際內(nèi)容。
一.2. 硬件準備
接下來我們要找到電路原理圖,和主芯片的操作手冊從而找到LED燈對應(yīng)的哪一個引腳以及其對應(yīng)的寄存器。
在如下鏈接中我們找到這樣一句話,好吧,原來他并不是GPIO控制的,而是一個iic芯片PCA9533中轉(zhuǎn)控制的,不得不說這個硬件設(shè)計讓人匪夷所思啊。
Multicolor (RGB) LED (D24)
The phyBOARD-Pollux provides one multicolor (RGB) LED (D24) (see phyBOARD-Pollux Components (Top)). The LEDs are connected to a LED driver (NXP PCA9533/01) controlled by I2C2 bus.
https://www.phytec.de/cdocuments ... wareManual-LEDsLEDs
一.3. 軟件-實操
一.3.1. 驅(qū)動卸載
基于以上的知識儲備,本來想嘗試一下卸載得掉leds這個驅(qū)動?但最終發(fā)現(xiàn)不是我們以上準備的驅(qū)動框架,而是sysfs的驅(qū)動框架,稍微研究一下,發(fā)現(xiàn)有點難度,值得針對性的再寫一篇。
在此我們就不去卸載了。
一.3.2. 驅(qū)動編寫
等研究好了sysfs驅(qū)動框架后,再實操一遍iic驅(qū)動編寫。
第二章 應(yīng)用程序
二.1. 代碼
這里直接上代碼:
二.1.1. Leds_app.h
<
typedef enum{
LED1_RED = 1,
LED2_GREEN,
LED3_BULE
}LED_ID;
int leds_control(LED_ID led_id,unsigned char brightness)
>
二.1.2. Leds_app.c
<
int leds_control(LED_ID led_id,unsigned char brightness)
{
int fd = 0;
int ret = 0,len;
/*this buffer size is sufficient to store file path */
char buf[128];
//printf("enter leds_controlrn");
snprintf(buf, sizeof(buf), "/sys/class/leds/user-led%d/brightness",led_id);
fd = open(buf, O_RDWR);
if(fd < 0){
printf("Can't open file %srn", buf);
return -1;
}
len = snprintf(buf, sizeof(buf),"%d", brightness);
ret =write(fd, buf, len);
if (ret < 0)
perror("sysfs_led_write:");
ret = close(fd);
if(ret < 0){
printf("Can't close file for led%drn", led_id);
return -1;
}
// printf("leaveleds_controlrn");
return 0;
}
>
二.1.3. Main.c
<
#include
#include
#include
#include "stdio.h"
#include "leds_app.h"
int main(int argc, char *argv[])
{
int led1_value,led2_value,led3_value;
while (1) {
led1_value = rand()%255;
led2_value = rand()%255;
led3_value = rand()%255;
printf("led1:%3d led2:%3d led3:%3dn",led1_value,led2_value,led3_value);
leds_control(LED3_BULE,0);
leds_control(LED1_RED,led1_value);
sleep(0.9);
//leds_control(LED1_RED,0);
leds_control(LED2_GREEN,led2_value);
sleep(0.8);
leds_control(LED2_GREEN,0);
leds_control(LED3_BULE,led3_value);
sleep(0.5);
}
}
>
二.2. Log
打印出如下log
<
10:48:51: Starting /opt/HelloQuick/bin/HelloQuick ...
Warning: Identity filenot accessible: No such file or directory.
QML debugging is enabled. Only use this in a safe environment.
led1:163 led2:151 led3:162
led1: 85 led2: 83 led3:190
led1:241 led2:252 led3:249
led1:121 led2:107 led3: 82
led1: 20 led2: 19 led3:233
led1:226 led2: 45 led3: 81
led1:142 led2: 31 led3: 86
led1:8 led2: 87 led3: 39
led1:167 led2:5 led3:212
...
>
二.3. 看效果:
請觀看底部視頻
今天我們接上一篇繼續(xù),需要做兩個事情。第一個是重寫驅(qū)動,第二個是開發(fā)霓虹燈應(yīng)用程序。
第一章 重寫驅(qū)動
一.1. 知識儲備
一.1.1. 卸載驅(qū)動
一.1.1.1. linux加載/卸載驅(qū)動有兩種方法
一.1.1.1.1. modprobe
這里我們主要用這個。
注:在使用這個命令加載模塊前先使用depmod -a命令生成modules.dep文件,該文件位于/lib/modules/$(uname -r)目錄下;modprobe命令智能地向內(nèi)核中加載模塊或者從內(nèi)核中移除模塊,可載入指定的個別模塊,或是載入一組相依的模塊。modprobe會根據(jù)depmod所產(chǎn)生的依賴關(guān)系,決定要載入哪些模塊。若在載入過程中出錯,modprobe會卸載整組的模塊。
載入模塊的命令:
(1) 載入指定的模塊:modprobe drv.ko
(2) 載入全部模塊:modprobe -a
卸載模塊的命令:modprobe -r drv.ko
modprobe命令用于智能地向內(nèi)核中加載模塊或者從內(nèi)核中移除模塊。
modprobe可載入指定的個別模塊,或是載入一組相依的模塊。modprobe會根據(jù)depmod所產(chǎn)生的相依關(guān)系,決定要載入哪些模塊。若在載入過程中發(fā)生錯誤,在modprobe會卸載整組的模塊。
選項
-a或--all:載入全部的模塊;
-c或--show-conf:顯示所有模塊的設(shè)置信息;
-d或--debug:使用排錯模式;
-l或--list:顯示可用的模塊;
-r或--remove:模塊閑置不用時,即自動卸載模塊;
-t或--type:指定模塊類型;
-v或--verbose:執(zhí)行時顯示詳細的信息;
-V或--version:顯示版本信息;
-help:顯示幫助。
參數(shù) 模塊名:要加載或移除的模塊名稱。
實例
查看modules的配置文件:modprobe -c
這里,可以查看modules的配置文件,比如模塊的alias別名是什么等。會打印許多行信息,例如其中的一行會類似如下:
alias symbol:ip_conntrack_unregister_notifier ip_conntrack
列出內(nèi)核中所有已經(jīng)或者未掛載的所有模塊:modprobe -l
這里,我們能查看到我們所需要的模塊,然后根據(jù)我們的需要來掛載;其實modprobe -l讀取的模塊列表就位于/lib/modules/`uname -r`目錄中;其中uname -r是內(nèi)核的版本,例如輸出結(jié)果的其中一行是:
/lib/modules/2.6.18-348.6.1.el5/kernel/net/netfilter/xt_statistic.ko
掛載vfat模塊:modprobe vfat
這里,使用格式modprobe 模塊名來掛載一個模塊。掛載之后,用lsmod可以查看已經(jīng)掛載的模塊。模塊名是不能帶有后綴的,我們通過modprobe -l所看到的模塊,都是帶有.ko或.o后綴。
移除已經(jīng)加載的模塊:modprobe -r 模塊名
這里,移除已加載的模塊,和rmmod功能相同。
一.1.1.1.2. rmmod
這個卸載命令不會把其依賴模塊一同卸掉,所以這里我們只作簡單介紹。
一.1.2. Linux驅(qū)動框架
接下來,我們開始重新寫驅(qū)動,linux系統(tǒng)下寫驅(qū)動,其實就是配置相應(yīng)的硬件寄存器,那本章的霓虹燈驅(qū)動,也就是對imX 8的GPIO進行配置,由于裸機實驗不同的是,并且驅(qū)動要符合linux驅(qū)動框架,下面我們來先理解了解一下linux的驅(qū)動框架。
一.1.2.0.1. 地址映射
linux的驅(qū)動,并不能夠直接操作寄存硬件寄存器,而是需要通過MMU即內(nèi)存管理單元,它的主要功能是
一、以完成虛擬空間的物理空間的映射
二、內(nèi)存保護設(shè)置存儲器的訪問權(quán)限,設(shè)置虛擬存儲空間的緩沖特性
這里我們會用到兩個函數(shù)ioremap,iounmap,它們分別是用來獲取物理地址空間對應(yīng)的虛擬地址,和卸載時釋放掉之前所做的映射
一.1.2.0.2. linux內(nèi)存訪問函數(shù)
對于arm來說,只有IO內(nèi)存,linux內(nèi)核建議使用一組操作函數(shù)來對映射后的內(nèi)存進行讀寫操作
一、讀操作函數(shù)
<
1 u8 readb(constvolatilevoid __iomem *addr)
2 u16 readw(constvolatilevoid __iomem *addr)
3 u32 readl(constvolatilevoid __iomem *addr)
>
readb、readw和readl這三個函數(shù)分別對應(yīng)8bit、16bit和32bit讀操作,參數(shù)addr就是要讀取寫內(nèi)存地址,返回值就是讀取到的數(shù)據(jù)。
二、寫操作函數(shù)
<
1void writeb(u8 value,volatilevoid __iomem *addr)
2void writew(u16 value,volatilevoid __iomem *addr)
3void writel(u32 value,volatilevoid __iomem *addr)
>
writeb、writew和writel這三個函數(shù)分別對應(yīng)8bit、16bit和32bit寫操作,參數(shù)value是要寫入的數(shù)值,addr是要寫入的地址。
接下來我們開始搭建一個linux驅(qū)動框架:
<
#include "linux/init.h"
#include "linux/module.h"
#include "linux/fs.h"
#include "linux/types.h"
// struct inode 聲明在 linux/fs.h 中
// struct file 聲明在 linux/fs.h 中
int led_open (struct inode *i, struct file *f)
{
// printk 聲明在 linux/printk.h 中
printk("led open!rn");
return 0;
}
int led_release (struct inode *i, struct file *f)
{
printk("led release!rn");
return 0;
}
// ssize_t 定義在 linux/types.h 中
// __user 定義在 linux/compiler.h 中
// size_t 定義在 linux/types.h 中
// loff_t 定義在 linux/types.h 中
ssize_t led_read (struct file *f, char __user *b, size_t c, loff_t * l)
{
printk("led read!rn");
return 0;
}
ssize_t led_write (struct file *f, const char __user *b, size_t c, loff_t *l)
{
printk("led write!rn");
return 0;
}
// 聲明在 linux/fs.h 頭文件中
static struct file_operations fops = {
.open = led_open,
.release = led_release,
.read = led_read,
.write = led_write,
};
/* 驅(qū)動入口函數(shù) */
static int __init led_init(void)
{
/* 入口函數(shù)具體內(nèi)容 */
int retvalue = 0;
// 聲明在 linux/fs.h 頭文件中
retvalue = register_chrdev(200,"chrdev",&fops);
if(retvalue < 0){
/* 字符設(shè)備注冊失敗 */
}
return 0;
}
/* 驅(qū)動出口函數(shù) */
static void __exit led_exit(void)
{
/* 出口函數(shù)具體內(nèi)容 */
// 聲明在 linux/fs.h 頭文件中
unregister_chrdev(200,"chrdev");
}
// 聲明在 linux/init.h 頭文件中
/* 將上面兩個函數(shù)指定為驅(qū)動的入口和出口函數(shù) */
module_init(led_init);
module_exit(led_exit);
// 聲明在 linux/module.h 頭文件中
MODULE_LICENSE("GPL");
>
這只是一個驅(qū)動框架沒有實際內(nèi)容。
一.2. 硬件準備
接下來我們要找到電路原理圖,和主芯片的操作手冊從而找到LED燈對應(yīng)的哪一個引腳以及其對應(yīng)的寄存器。
在如下鏈接中我們找到這樣一句話,好吧,原來他并不是GPIO控制的,而是一個iic芯片PCA9533中轉(zhuǎn)控制的,不得不說這個硬件設(shè)計讓人匪夷所思啊。
Multicolor (RGB) LED (D24)
The phyBOARD-Pollux provides one multicolor (RGB) LED (D24) (see phyBOARD-Pollux Components (Top)). The LEDs are connected to a LED driver (NXP PCA9533/01) controlled by I2C2 bus.
https://www.phytec.de/cdocuments ... wareManual-LEDsLEDs
一.3. 軟件-實操
一.3.1. 驅(qū)動卸載
基于以上的知識儲備,本來想嘗試一下卸載得掉leds這個驅(qū)動?但最終發(fā)現(xiàn)不是我們以上準備的驅(qū)動框架,而是sysfs的驅(qū)動框架,稍微研究一下,發(fā)現(xiàn)有點難度,值得針對性的再寫一篇。
在此我們就不去卸載了。
一.3.2. 驅(qū)動編寫
等研究好了sysfs驅(qū)動框架后,再實操一遍iic驅(qū)動編寫。
第二章 應(yīng)用程序
二.1. 代碼
這里直接上代碼:
二.1.1. Leds_app.h
<
typedef enum{
LED1_RED = 1,
LED2_GREEN,
LED3_BULE
}LED_ID;
int leds_control(LED_ID led_id,unsigned char brightness)
>
二.1.2. Leds_app.c
<
int leds_control(LED_ID led_id,unsigned char brightness)
{
int fd = 0;
int ret = 0,len;
/*this buffer size is sufficient to store file path */
char buf[128];
//printf("enter leds_controlrn");
snprintf(buf, sizeof(buf), "/sys/class/leds/user-led%d/brightness",led_id);
fd = open(buf, O_RDWR);
if(fd < 0){
printf("Can't open file %srn", buf);
return -1;
}
len = snprintf(buf, sizeof(buf),"%d", brightness);
ret =write(fd, buf, len);
if (ret < 0)
perror("sysfs_led_write:");
ret = close(fd);
if(ret < 0){
printf("Can't close file for led%drn", led_id);
return -1;
}
// printf("leaveleds_controlrn");
return 0;
}
>
二.1.3. Main.c
<
#include
#include
#include
#include "stdio.h"
#include "leds_app.h"
int main(int argc, char *argv[])
{
int led1_value,led2_value,led3_value;
while (1) {
led1_value = rand()%255;
led2_value = rand()%255;
led3_value = rand()%255;
printf("led1:%3d led2:%3d led3:%3dn",led1_value,led2_value,led3_value);
leds_control(LED3_BULE,0);
leds_control(LED1_RED,led1_value);
sleep(0.9);
//leds_control(LED1_RED,0);
leds_control(LED2_GREEN,led2_value);
sleep(0.8);
leds_control(LED2_GREEN,0);
leds_control(LED3_BULE,led3_value);
sleep(0.5);
}
}
>
二.2. Log
打印出如下log
<
10:48:51: Starting /opt/HelloQuick/bin/HelloQuick ...
Warning: Identity filenot accessible: No such file or directory.
QML debugging is enabled. Only use this in a safe environment.
led1:163 led2:151 led3:162
led1: 85 led2: 83 led3:190
led1:241 led2:252 led3:249
led1:121 led2:107 led3: 82
led1: 20 led2: 19 led3:233
led1:226 led2: 45 led3: 81
led1:142 led2: 31 led3: 86
led1:8 led2: 87 led3: 39
led1:167 led2:5 led3:212
...
>
二.3. 看效果:
請觀看底部視頻
霓虹燈效果
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。
舉報投訴
-
led
+關(guān)注
關(guān)注
242文章
23715瀏覽量
671118 -
霓虹燈
+關(guān)注
關(guān)注
0文章
48瀏覽量
17080 -
開發(fā)板
+關(guān)注
關(guān)注
25文章
5538瀏覽量
102480 -
PHYTEC
+關(guān)注
關(guān)注
0文章
19瀏覽量
3773 -
開發(fā)板試用
+關(guān)注
關(guān)注
3文章
301瀏覽量
2330
發(fā)布評論請先 登錄
相關(guān)推薦
熱點推薦
【PHYTEC開發(fā)板試用體驗】1 實現(xiàn)一個酷炫霓虹燈_Part A
上一節(jié)我們介紹的開箱環(huán)節(jié),這一節(jié)我們將會對板子進行上電,并做一個簡單的實驗,那就是實現(xiàn)一個
發(fā)表于 05-28 11:50
【PHYTEC開發(fā)板試用體驗】2 實現(xiàn)一個酷炫霓虹燈_Part-B
今天我們接上一篇繼續(xù),需要做兩個事情。第一個是重寫驅(qū)動,第二個是開發(fā)霓虹燈應(yīng)用程序。第
發(fā)表于 06-05 11:40
【PHYTEC開發(fā)板試用體驗】3 通過開發(fā)板拍一張照片
1. 硬件準備接下來,我們的目的是做一個圖像識別相關(guān)的事情,但由于我們這個Phytec開發(fā)板它并沒有帶一個攝像頭外設(shè),所以我們需要給他裝
發(fā)表于 06-12 14:43
霓虹燈程序員指南
如果您對ARM技術(shù)完全陌生,請閱讀Cortex-A系列程序員指南,了解有關(guān)ARM架構(gòu)配置文件和一般編程指南的信息。
·霓虹燈技術(shù)是ARM高級單指令多數(shù)據(jù)(SIMD)擴展的實現(xiàn)。
·霓虹燈
發(fā)表于 08-17 06:32
霓虹燈的工作原理
霓虹燈的工作原理
霓虹燈是一種低氣壓冷陽極輝光放電發(fā)光的光源。氣體放電發(fā)光是自然界的一種物理現(xiàn)象。通過氣體放電使
發(fā)表于 07-30 15:32
?2.1w次閱讀
熒光燈和霓虹燈的區(qū)別
熒光燈和霓虹燈的區(qū)別
霓虹燈是廣告標志中常用的一種燈。這些標志由長而窄的玻璃管制成,常常彎曲成各種形狀。例如,
發(fā)表于 08-21 14:50
?5151次閱讀
小型霓虹燈高頻變壓器設(shè)計及制作電路
小型霓虹燈電路配套的小型霓虹燈高頻變壓器的制作參考如下。
霓虹燈變壓器(2-5W適合0.6米以下的燈管)
發(fā)表于 06-01 08:30
?4053次閱讀

簡易霓虹燈驅(qū)動電路
簡易霓虹燈驅(qū)動電路中NE1是一個霓虹燈。這個簡單的逆變器電路點亮了它。T1是一個20:1的匝數(shù)比
發(fā)表于 12-17 00:02
?6043次閱讀

霓虹燈的制作教程
我通常討厭RGB LED,盡可能堅持使用暖白色。但是“俗氣”的顏色確實讓人覺得這是一個霓虹燈。 (當然霓虹燈的顏色不能改變顏色,因為每根燈管中的氣體只會因其固有的物理特性而發(fā)出

評論