诺基亚 5110 LCD 上的 DIY 简单 20 kHz Arduino 示波器
组件和用品
| × | 1 | ||||
| × | 1 | ||||
| × | 4 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 4 |
必要的工具和机器
| ||||
|
应用和在线服务
|
关于这个项目
这次我将向您展示如何制作一个简单的 Arduino 示波器。示波器可显示的最大信号频率为20 kHz,不带分压器时最大输入电压为5 V。
示波器由四个按钮控制:
- “HOLD”按钮 - 用于冻结屏幕的当前状态
- 同步按钮,允许您设置同步级别。
- 以及在 HOLD 模式下控制扫描、同步电平和移动信号图像的“+”和“-”按钮。
在诺基亚 5110 屏幕上,垂直每个单元格为 1 V,水平一个单元格等于扫描分辨率,其(以下)值来自:0.1、0.2、0.5、1.0、2.0、5.0、10.0、20.0 和 50.0 ms .扫描值用“+”和“-”按钮改变,显示在左上角。触发电平显示为屏幕左侧的小条,屏幕右上角显示触发电压。该项目发布在 arduino.ru 页面上,您可以在其中阅读更多详细信息。
该设备的构建极其简单,仅包含几个组件 - Arduino Nano 微控制器
- 诺基亚 N5110 液晶显示屏
- 四个按钮
- 四个下拉电阻
- 输入插孔
- 和电源开关和 LED
我用正弦和矩形信号发生器测试了示波器。即使它不是专业或非常实用的仪器,它仍然可以用于教育目的或在您的实验室中用于测试低频信号,尤其是知道该设备非常容易制造且非常便宜。
最后,将设备放入合适的 PVC 盒子中,并涂上自粘墙纸。
代码
- Arduino 代码
Arduino 代码C/C++
#include#include #include Adafruit_PCD8544 display =Adafruit_PCD8544(7, 6, 5, 4, 3);//CLK,DIN,DC,CE, RST |||| VCC +3.3 V , BL ++ 200 OM ++ 3.3 V int izm,x,y,u,i2,zz,hold,h0,h1,h2,raz=0,menu,sss=512,u_dig,data[168 ]{};无符号长时间,次;每浮点数;字节 i; void setup() {Serial.begin(9600); display.begin();display.clearDisplay();display.display(); display.setContrast(40); // 对比度设置 display.setTextSize(1); // 设置字体大小 display.setTextColor(BLACK); // 设置文本颜色 pinMode(10,INPUT); // + pinMode(11,INPUT); // - pinMode(12,INPUT); // 保持 pinMode(13,INPUT); // синх ADMUX =0b01000000; // 0B0100000 10 位 A0 // 0B01100000 8 位 A0 ADCSRA =0b11110010;// CLK/4;模拟写入 (9, 127); // PWM 9 输出} void loop() {/////////////////////////按钮控制////////// //////////////////// if(menu==0){ if(digitalRead(10)==HIGH){if(hold==0){raz++;} if(hold==1){i2=i2+1;}delay(100);} if(digitalRead(11)==HIGH){if(hold==0){raz--;}if(hold==1&&hold>0){i2=i2-1;}delay(100);} } if(digitalRead(12)==HIGH){hold++;i2=0;delay(100);} if(digitalRead(13)==HIGH){menu++;delay(100);} if(hold>1){hold=0;}if(menu>1||menu<0){menu=0;} if(raz<=0){raz=0;}if(raz>8){raz=8;} if(menu==1){hold=0; if(digitalRead(10)==HIGH){sss+=24;delay(100);} if(digitalRead(11)==HIGH){sss-=24;delay(100);} if(sss>1023){ sss=1023;}if(sss<0){sss=0;} } display.setCursor(0,0); // 设置光标位置//////////////////////// 扫描时间由发生器校准////////////// ///////////// if(raz==0){zz=1;h2=2;per=0.1;} if(raz==1){zz=1;h2=1; per=0.2;} if(raz==2){zz=12;h2=1;per=0.5;} if(raz==3){zz=32;h2=1;per=1;} if(raz ==4){zz=75;h2=1;per=2;} if(raz==5){zz=200;h2=1;per=5;} if(raz==6){zz=380;h2=1;per=10;} if(raz==7){zz=750;h2=1;per=20;} if(raz==8){zz=1900;h2=1;per=50;}////////////////////////////////////////////// /////////////////// if(hold==0&&millis()-time>0){ ads();while(izm 5000){break;}}h0=0;//同步时间=micros(); while(i<167){i++;delayMicroseconds(zz);广告();数据[i]=izm; // 测量 10 位 }i=0;times=micros()-times; Serial.println(次); }////////////////////显示输出//////////////////////// ///// if(millis()-time>100){ display.clearDisplay(); if(sss<204&&sss>100){u_dig=10;display.setCursor(0,40);display.print("0.4V");} else if(sss<100){u_dig=5; display.setCursor(0,40);display.print("0.2V");} else{u_dig=25;} display.setCursor(0,0); while(i<167){i++;setka(); display.drawLine(i*h2-i2, 47-data[i]/u_dig,i*h2-i2+h2-1, 47-data[i+1]/u_dig, BLACK);}i=0; display.print(per,1);display.print("ms"); if(menu==0){if(hold==1){display.print("HOLD ");}else{display.print("AUTO ");}} if(menu==1){display.print (sss/200.0,1);display.print("V");} if(menu==1){display.drawLine(0, 48-sss/u_dig,4, 48-sss/u_dig, BLACK);} time=millis();} display.display(); }// loop void ads(){ //////// 10 位 /////////// do{ADCSRA |=(1 <
示意图
制造工艺