分类目录归档:电子技术

超声波雷达-创客开源 Arduino项目

//淘宝『创元素店』https://shop423015102.taobao.com/ //更新日期 2021/03/06 //MiniRadar 超声波雷达 程序 //本程序对应商品 https://item.taobao.com/item.htm?spm=a1z10.1-c.w4004-23815833841.8.4f231fe7qvLFZi&id=649834806872

//Github版链接: https://github.com/johnsonwust/MiniRadar

include

include

include "Ucglib.h"

//显示屏的lib 如果没有该lib请按Ctrl+Shift+I 从 库管理器中搜索 ucglib,并安装

define trigPin 6 //超声波模块的Trig口 6

define echoPin 5 //超声波模块的echo口 5

define ServoPin 3 //底座舵机端口 3

int Ymax = 128; //屏幕的竖向像素数 int Xmax = 160; //屏幕的横向像素数 int Xcent = Xmax / 2; //x中位 int base = 118; //基线高度 int scanline = 105; //雷达扫描线长度

Servo baseServo; Ucglib_ST7735_18x128x160_HWSPI ucg(/cd=/ 9, /cs=/ 10, /reset=/ 8);

void setup(void) {

  ucg.begin(UCG_FONT_MODE_SOLID); //初始化屏幕
  ucg.setRotate90();              //设置成横屏  如果屏幕显示方向是反的,可以修改函数 setRotate90 或 setRotate270

  pinMode(trigPin, OUTPUT);       //设置trigPin端口模式
  pinMode(echoPin, INPUT);        //设置echoPin端口模式
  Serial.begin(115200);             //设置串口传输率
  baseServo.attach(ServoPin);     //初始化舵机

  //欢迎屏幕
  ucg.setFontMode(UCG_FONT_MODE_TRANSPARENT);
  ucg.setColor(0, 0, 100, 0);
  ucg.setColor(1, 0, 100, 0);
  ucg.setColor(2, 20, 20,20);
  ucg.setColor(3, 20, 20, 20);
  ucg.drawGradientBox(0, 0, 160, 128);
  ucg.setPrintDir(0);
  ucg.setColor(0, 5, 0);
  ucg.setPrintPos(27,42);
  ucg.setFont(ucg_font_logisoso18_tf);  
  ucg.print("Mini Radar");
  ucg.setColor(0, 255, 0);
  ucg.setPrintPos(25,40);
  ucg.print("Mini Radar");
  ucg.setFont(ucg_font_helvB08_tf);
  ucg.setColor(20, 255, 20);
  ucg.setPrintPos(40,100);
  ucg.print("Testing...");
  baseServo.write(90);

  //测试底座的运行情况,注意检测底座位置和转动姿态,是否有卡住(或者导线缠绕)的情况。
  for(int x=0;x<180;x+=5)
      { baseServo.write(x);
        delay(50);
       }
  ucg.print("OK!");
  delay(500);

  //清屏
  //ucg.clearScreen();
  cls();
  ucg.setFontMode(UCG_FONT_MODE_SOLID);
  ucg.setFont(ucg_font_orgv01_hr);

}

void cls() { //清屏 ucg.setColor(0, 0, 0, 0);

for(int s=0;s<128;s+=8) for(int t=0;t<160;t+=16) { ucg.drawBox(t,s,16,8); // delay(1); }

}

int calculateDistance() { long duration; //trigPin断电 并 等待2微妙 digitalWrite(trigPin, LOW); delayMicroseconds(2); //trigPin加电 延时 10微妙 再断电 digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); //读取echoPin返回声波的传播时间(微妙) duration = pulseIn(echoPin, HIGH); //将回声时间转换成距离数值 return duration*0.034/2; }

void fix_font() { ucg.setColor(0, 180, 0); ucg.setPrintPos(70,14); ucg.print("1.00"); ucg.setPrintPos(70,52); ucg.print("0.50"); ucg.setPrintPos(70,90); ucg.print("0.25"); }

void fix() {

  ucg.setColor(0, 40, 0);
  //画基线圆盘
  ucg.drawDisc(Xcent, base+1, 3, UCG_DRAW_ALL); 
  ucg.drawCircle(Xcent, base+1, 115, UCG_DRAW_UPPER_LEFT);
  ucg.drawCircle(Xcent, base+1, 115, UCG_DRAW_UPPER_RIGHT);
  ucg.drawCircle(Xcent, base+1, 78, UCG_DRAW_UPPER_LEFT);
  ucg.drawCircle(Xcent, base+1, 78, UCG_DRAW_UPPER_RIGHT);
  ucg.drawCircle(Xcent, base+1, 40, UCG_DRAW_UPPER_LEFT);
  ucg.drawCircle(Xcent, base+1, 40, UCG_DRAW_UPPER_RIGHT);
  ucg.drawLine(0, base+1, Xmax,base+1);

  ucg.setColor(0, 120, 0);
  //画刻度表
   for(int i= 40;i < 140; i+=2)
   {

    if (i % 10 == 0) 
      ucg.drawLine(105*cos(radians(i))+Xcent,base - 105*sin(radians(i)) , 113*cos(radians(i))+Xcent,base - 113*sin(radians(i)));
    else

     ucg.drawLine(110*cos(radians(i))+Xcent,base - 110*sin(radians(i)) , 113*cos(radians(i))+Xcent,base - 113*sin(radians(i)));
   }

   //画一些装饰性图案 
   ucg.setColor(0,200,0);
   ucg.drawLine(0,0,0,18);
   for(int i= 0;i < 5; i++)
   {
      ucg.setColor(0,random(200)+50,0);
      ucg.drawBox(2,i*4,random(14)+2,3);
   }

   ucg.setColor(0,180,0);
   ucg.drawFrame(146,0,14,14);
   ucg.setColor(0,60,0);
   ucg.drawHLine(148,0,10);
   ucg.drawVLine(146,2,10);
   ucg.drawHLine(148,13,10);
   ucg.drawVLine(159,2,10);

   ucg.setColor(0,220,0);
   ucg.drawBox(148,2,4,4);
   ucg.drawBox(148,8,4,4);
   ucg.drawBox(154,8,4,4);
   ucg.setColor(0,100,0);
   ucg.drawBox(154,2,4,4);

   ucg.setColor(0,90,0);
   ucg.drawTetragon(62,123,58,127,98,127,102,123);
   ucg.setColor(0,160,0);
   ucg.drawTetragon(67,123,63,127,93,127,97,123);
   ucg.setColor(0,210,0);
   ucg.drawTetragon(72,123,68,127,88,127,92,123);

}

void loop(void) {

int distance;

fix(); fix_font(); //重绘屏幕背景元素

for (int x=180; x > 4; x-=2){ //底座舵机从180~0度循环

  baseServo.write(x);             //调整舵机角度

  //绘制雷达扫描线
  int f = x - 4; 
  ucg.setColor(0, 255, 0);
  ucg.drawLine(Xcent, base, scanline*cos(radians(f))+Xcent,base - scanline*sin(radians(f)));
  f+=2;
  ucg.setColor(0, 128, 0);
  ucg.drawLine(Xcent, base, scanline*cos(radians(f))+Xcent,base - scanline*sin(radians(f)));
  f+=2;
  ucg.setColor(0, 0, 0);
  ucg.drawLine(Xcent, base, scanline*cos(radians(f))+Xcent,base - scanline*sin(radians(f)));
  ucg.setColor(0,200, 0);
  //测距
  distance = calculateDistance();

  //根据测得距离在对应位置画点
  if (distance < 100)
  {
    ucg.setColor(255,0,0);
    ucg.drawDisc(distance*cos(radians(x))+Xcent,-distance*sin(radians(x))+base, 1, UCG_DRAW_ALL);
  }
  else
  { //超过1米以上的,用黄色画在边缘区域示意
    ucg.setColor(255,255,0);
    ucg.drawDisc(116*cos(radians(x))+Xcent,-116*sin(radians(x))+base, 1, UCG_DRAW_ALL);
  }

  //调试代码,输出角度和测距值  
  Serial.print(x); 
  Serial.print("    ,   ");
  Serial.println(distance); 

  if (x > 70 and x < 110)  fix_font();  //扫描线和数字重合时,重绘数字

  ucg.setColor(0,155,  0);
  ucg.setPrintPos(0,126);
  ucg.print("DEG: "); 
  ucg.setPrintPos(24,126);
  ucg.print(x);
  ucg.print("  ");
  ucg.setPrintPos(125,126);
  ucg.print("  ");
  ucg.print(distance);
  ucg.print("cm  "); 

} //ucg.clearScreen(); //清屏 如果arduino供电不足,可能会引起白屏(显示信号中断)可以用 cls();函数代替 ucg.clearScreen(); delay(50); cls(); //如有频繁白屏情况,可以使用该函数 。或者增加外部供电

fix(); fix_font(); //重绘屏幕背景元素

for (int x=1; x < 176; x+=2){
baseServo.write(x); //调整舵机角度

  //绘制雷达扫描线
  int f = x + 4;
  ucg.setColor(0, 255, 0);
  ucg.drawLine(Xcent, base, scanline*cos(radians(f))+Xcent,base - scanline*sin(radians(f)));
  f-=2;
  ucg.setColor(0, 128, 0);
  ucg.drawLine(Xcent, base, scanline*cos(radians(f))+Xcent,base - scanline*sin(radians(f)));
  f-=2;
  ucg.setColor(0, 0, 0);
  ucg.drawLine(Xcent, base, scanline*cos(radians(f))+Xcent,base - scanline*sin(radians(f)));
  ucg.setColor(0, 200, 0);
  //测距
  distance = calculateDistance();

  //根据测得距离在对应位置画点
  if (distance < 100)
  {
    ucg.setColor(255,0,0);
    ucg.drawDisc(distance*cos(radians(x))+Xcent,-distance*sin(radians(x))+base, 1, UCG_DRAW_ALL);
  }
  else
  { //超过1米以上的,用黄色画在边缘区域示意
    ucg.setColor(255,255,0);
    ucg.drawDisc(116*cos(radians(x))+Xcent,-116*sin(radians(x))+base, 1, UCG_DRAW_ALL);
  }

  //调试代码,输出角度和测距值  
  Serial.print(x); 
  Serial.print("    ,   ");
  Serial.println(distance); 

  if (x > 70 and x < 110)  fix_font();  //扫描线和数字重合时,重绘数字

  ucg.setColor(0,155,  0);
  ucg.setPrintPos(0,126);
  ucg.print("DEG: "); 
  ucg.setPrintPos(24,126);
  ucg.print(x);
  ucg.print("   ");
  ucg.setPrintPos(125,126);
  ucg.print("   ");
  ucg.print(distance);
  ucg.print("cm   "); 

} //ucg.clearScreen(); // delay(50); cls();

}

树莓派Raspberry Pi Pico入门教程

Raspberry Pi Pico是一款具备灵活脚位,且低成本、高性能的开发板 是一款具备灵活脚位,且低成本、高性能的开发板 是一款具备灵活脚位,且低成本、高性能的开发板 是一款具备灵活脚位,且低成本、高性能的开发板 是一款具备灵活脚位,且低成本、高性能的开发板 ,价格仅 ,价格仅 4元美金, 元美金, 商品特色 商品特色 如下: 如下:

  1. 采用 Raspberry Pi英国设计的 RP2040微控制器 微控制器 ,双核 Arm Cortex M0 +处理器,运行频率 处理器,运行频率 处理器,运行频率 133 MHz
  2. 264KB的 SRAM和 2MB的片上 Flash
  3. 支持低功耗睡眠和休模式
  4. 能通过 USB使用大容量储存进行拖放式 下载程使用大容量储存进行拖放式
    下载程5. 多达 26个多功能 GPIO引脚
  5. 2个 SPI,2个 I2C,2个 UART,3个 12位元的 ADC,16个可 程式控制的 PWM
  6. 精准的时钟和计器 与内建 温度感测器
  7. 8个可透过程式撰写 I / O(PIO)状态机,支持自定义外设备 )状态机,支持自定义外设备
  8. 支援 C / C ++ 和 MicroPython 开发
  9. 可执行 TensorFlow Lite 框架

外观与 脚位 定义如下: (※若元件需使用 ※若元件需使用 5V电压,则使用 电压,则使用 Pin40的 VBUS)

VBUS - 这是来自 这是来自 microUSB 汇流排的电源, 5 V。如果 Pico不是由 microUSB联结器供电,那么这 联结器供电,那么这 里将没有输出。
⚫ VSYS - 这是输入电压,范围为 2 至 5 V。板载电压转换器将为 Pico 将其改为 3.3 V。
⚫ 3V3 - Pico 内部调节 器的 3.3 伏输出。只要将负载保持在 伏输出。只要将负载保持在 伏输出。只要将负载保持在 300mA 以下,它就可用于为其他元件供电。以下,它就可用于为其他元件供电。以下,它就可用于为其他元件供电。以下,它就可用于为其他元件供电。以下,它就可用于为其他元件供电。
⚫ 3V3_EN - 你可以使用 此输入禁你可以使用 此输入禁Pico 的内部电压调节器,从而关闭 的内部电压调节器,从而关闭 的内部电压调节器,从而关闭 的内部电压调节器,从而关闭 Pico 和由其供电的任何元件。和由其供电的任何元件。
⚫ RUN - 可以启用 或禁RP2040 微控制器,也可以将其复位。

Pico 的 BOOTSEL 模式位于 RP2040 晶片内部的唯读存储槽中,不会被意外覆盖。任何情况下按住BOOTSEL 按钮并插入 Pico 时,都会以驱动器的模式出现,可以在其中拖动新的 UF2 韧体文件,但无法藉由软体编写程式。不过在某些情况下可能需要确保净空闪存,您可以藉由大容量存储模式将特殊的UF2 二进制文件拖放到您的 Pico 上格式化闪存。

※硬体基本测试,不可以撰写程式控制,步骤如下:
1.下载 blink.uf2 韧体档案文件。
2.按住 BOOTSEL 按钮,将 Pico 插入电脑的 USB 埠,连接 Pico 后,松开 BOOTSEL 按钮。
3.连接后会出现名为 RPI-RP2 的大容量存储设备。
4.将 blink.uf2 档案文件拖曳进 RPI-RP2 内,Pico 会重新启动,内建 GPIO25 开始闪烁。现在, MicroPython 会开始运作。
※建立 MicroPython 程式控制环境,步骤如下:
1.下载 rp2-pico-20210324-unstable-v1.14-121-g4fc2866f4.uf2 韧体档案文件。
2.按住 BOOTSEL 按钮,将 Pico 插入电脑的 USB 埠,连接 Pico 后,松开 BOOTSEL 按钮。
3.连接后会出现名为 RPI-RP2 的大容量存储设备。
4.将 rp2-pico-20210324-unstable-v1.14-121-g4fc2866f4.uf2 档案文件拖曳进 RPI-RP2 内,Pico 会重新启动,MicroPython 才能开始运作。
5.本机右键→内容→装置管理员,查看 COM?位置,若还看到应是驱动程式有误,请下载Pico_devices_cdc.inf,更新驱动程式后即可看到。
6.到 https://thonny.org/ 下载编辑软体,至少要为 3.3.3 版本以上才有支援。

  1. 进入 Thonny 主程式,『执行→选择直译器』,选择”MicroPython(Raspberry Pi Pico)”直译器与 COM?,最后按确定。

數位輸出測試
A01_內建 LED 閃爍.py 程式碼如下:

註 1:import machine 是用來設定 Pi Pico 所有相關硬體參數,若板子沒有正確連線或者直譯器沒有選對,則執行程式後會出現 ”import machine module named not found” 的錯誤。
註 2:import utime 目的是導入時間相關類別,因為後面 utime.sleep(0.5) 才能正常使用。

A02_RGB_LED.py 程式碼如下:(註:數位輸出僅能隨機顯示 8-1 種顏色,因為黑色代表不亮)

from machine import Pin,PWM,ADC
from time import sleep
adc = ADC(0) #ADC input (knob potentiometer) connected to A0
pwm = PWM(Pin(27))#DAC output (buzzer) connected to A1
pwm.freq(10000)
while True:

    '''Analog port test'''
    val = adc.read_u16()#Read A2 port adc value (65535~0)
    #Drive the buzzer, turn off the buzzer when the adc value is less than 300
    if val > 300:
        pwm.freq(int(val/10))
        pwm.duty_u16(10000)
    else:
        pwm.duty_u16(0)
    print(val)
    sleep(0.05)
from ssd1306 import SSD1306_I2C
from dht11 import *
from machine import Pin, I2C
from time import sleep

i2c = I2C(1, scl=Pin(7), sda=Pin(6), freq=200000)#oled connect to I2C1
oled = SSD1306_I2C(128, 64, i2c)
dht2 = DHT(18) #temperature and humidity sensor connect to D18 port

while True:  

    temp,humid = dht2.readTempHumid()#temp:  humid:
    '''I2C port test'''    
    ''' oled display test'''
    oled.fill(0)#Clear screen
    oled.text("Temp:  " + str(temp),0,0)#display tempearture on line 1
    oled.text("Humid: " + str(humid),0,8)
    oled.show()
    sleep(0.5)

from machine import Pin

button = Pin(18, Pin.IN, Pin.PULL_UP)# button connect to D18
button.irq(lambda pin: InterruptsButton(),Pin.IRQ_FALLING)#Set key interrupt
led = Pin(16, Pin.OUT)#led connect to D16
relay = Pin(20, Pin.OUT)
tmp = 0
'''Key interrupt function, change the state of the light when the key is pressed'''
def InterruptsButton(): #button input
    global tmp
    tmp = ~tmp
    led.value(tmp)
    relay.value(tmp)
while True:  
    pass

#from lcd1602 import LCD1602_RGB  #LCD1602 RGB grove
from lcd1602 import LCD1602
from machine import I2C,Pin,ADC
from time import sleep
i2c = I2C(1,scl=Pin(7), sda=Pin(6), freq=400000)
d = LCD1602(i2c, 2, 16)
#d = LCD1602_RGB.display(i2c, 2, 16)
#d.set_rgb(255, 0, 0)
sleep(1)
light = ADC(0)
sound = ADC(1)

while True:

    lightVal = light.read_u16()
    soundVal = sound.read_u16()
    d.home()
    d.print('lightvalue=')
    d.print(str(lightVal))
    #d.set_rgb(0, 255, 0)
    sleep(1)
    d.setCursor(0, 1)
    d.print('soundvalue=')
    d.print(str(soundVal))
    #d.set_rgb(0, 0, 255)
    sleep(1)

from machine import Pin,ADC,PWM
from time import sleep
import utime

miniFun = Pin(16, Pin.OUT)  
miniPir = Pin(18, Pin.IN)  

pwm_Servo=PWM(Pin(27))
pwm_Servo.freq(500)
Servo_Val =0  

while True:

    if  miniPir.value() == 1 :
        miniFun.value(1)

        while  Servo_Val<65535:
            Servo_Val=Servo_Val+50
            utime.sleep_ms(1)
            pwm_Servo.duty_u16(Servo_Val)
        while Servo_Val>0: 
            Servo_Val=Servo_Val-50
            utime.sleep_ms(1)
            pwm_Servo.duty_u16(Servo_Val)

    else :
        miniFun.value(0)

        pwm_Servo.duty_u16(0)    

第3课 第一个项目 点亮LED

    在上一课中,你已经了解了一些关于如何使用Pico和编写你的第一个程序的情况。

    然而,到目前为止,我们在Pico上运行程序时没有使用任何其他外部电子硬件。在本课中,我们将尝试把其他电子硬件连接到Pico上。更具体地说,我们将使用一个LED,并编写一个程序来点亮该LED。但在开始编程之前,首先让我们了解一下程序的结构。

知识库

基本程序结构

    我们用MicroPython编写的程序一般由三种基本程序结构组成。复杂的程序都是由这些基本结构组合而成的,所以先学习它们是很有必要的。分别是:顺序结构、循环结构和选择结构。

顺序结构

    顺序结构是最基本的程序结构。在顺序结构中,程序从上到下,逐行依次运行。例如,当下面的程序运行时,它首先打印 "Hello",然后是 "World"。
image004
    执行结果。
image005
    如果你仔细观察就会发现,与其他语言需要用特定的终止符来结束每一行的语句不同,在MicroPython中你只需要按ENTER键就可以结束一行。

实践与操作

    现在,让我们回归项目中去,实践一下我们刚刚学到的东西。为了开始本课,我们将使用Grove Shield for Pi Pico来连接Pico和其他Grove电子产品,以实现更有趣的项目。经过观察,你可能会注意到,Pico并没有附带用于连接Pi Pico的Grove Shield的金属针脚。要做到这一点,你需要焊接Pico的针头。

项目1:焊接焊头

    首先,准备好你所需要的焊接头的一切:一个电烙铁,一些焊料,一块清洁海绵,一个支架,两个20针头,一块面包板,当然还有你的Pico。为了方便焊接,我们可以先用面包板来固定两个20针的头线。以针座上的黑色塑料块为界,将针座的长端慢慢插入面包板。插入时,要确保两个针座上下对齐,并与Pico间隔相同的宽度。
image007
    然后,将你的Pico右转,并确保PCB板上的预留针孔与固定在面包板上的排针对准。对准后,慢慢地将两个针脚插入Pico的预留孔中,一直推到针脚上的黑色塑料块夹在你的Pico和面包板之间。这时,你会看到每个针脚都有一小段从PCB板上的预留针孔里伸出来。
image008
    将电烙铁放在支架上,打开开关加热。烙铁的尖端需要3-5分钟才能变热。确保加热时金属尖端不靠任何东西。在加热过程中,先把清洁海绵弄湿,放在一个方便的地方,以便以后清洁烙铁。
加热后,拿起你的烙铁手柄,在你准备的海绵上反复刷洗金属尖端,直到尖端看起来有光泽和干净。

注意!电烙铁的金属部分非常、非常热。在任何情况下,你都不应该触摸电烙铁的金属部分。

    清洁后,用电烙铁的尖端加热针脚和它下面离你最近的金色焊盘。用另一只手拿起一些焊料,从烙铁的相反方向慢慢推入针脚和焊盘的连接处。加热的引脚和焊盘会融化焊料,使其在焊盘周围流动。在完成一个方向的焊接后,继续向其他方向推焊料,直到焊盘完全被焊料覆盖。
image009

注意!焊接时不要使用过多的焊料。如果焊料溢出到相邻的焊盘上,使用Pico时会发生短路。

    好了,祝贺你焊好了第一个引脚!现在,你只需要用同样的方法来焊接其余的39个引脚。焊接时,记得不时地用干净的海绵擦拭你的烙铁,以保持烙铁头的清洁和光泽。
image010
    焊接完毕后,慢慢将Pico从面包板上拉出来。如果引脚和面包板插得太紧,强行将Pico拉出来很容易导致焊盘脱落。如果发生这种情况,你可以左右摇晃Pico,并尝试将Pico一点一点地移出来。
    好了,我们完成了!让我们开始执行我们的第一个任务!

项目2:发光的LED模块

    现在你已经完成了Pico引脚的焊接,我们终于可以使用Grove Shield for Pi Pico连接Grove模块了。让我们先试着点亮一个LED。

硬件连接

在这个项目中,我们将使用以下电子硬件。

  • 树莓派Pico
  • 用于Pi Pico的Grove Shield
  • 格罗夫--LED封装

    在Grove Shield for Pi Pico的帮助下,连接电子硬件的工作变得非常容易。首先,我们只需要将Pico的焊接引脚插入Shield中。
20210804024421
    在插入时,你可以观察Pico背面的针脚屏幕打印和Shield上的屏幕打印,以检查你的插入方向是否正确。然后,用Grove电缆将Grove - LED连接到Shield的D16端口。
image013
写一个程序
image014
    首先,用USB线连接Pico和电脑,然后打开Thonny,点击工具栏上的 "new "按钮,创建一个新程序。点击进入脚本区,用以下一行开始你的程序。

    这一行代码导入了一个名为 "machine "的MicroPython函数库。为了理解这行代码的具体作用,我们需要理解 "库 "的概念。
20210804180041
    在这行代码中,我们导入了一个名为 "machine "的MicroPython库,它包含了与特定硬件相关的各种功能。它可以不受限制地直接访问系统的硬件功能(如CPU、定时器、总线等),这样我们就可以用MicroPython更有效地控制连接到Pico的其他电子硬件。这包括为连接到Pico的各种电子硬件设置引脚。

    在硬件项目的开发中,仅仅将硬件连接到Pico上是不够的。例如,我们将LED连接到Shield的D16上,但除非我们特别告知,否则Pico不会意识到这一点--你必须写一个程序来定义控制电子硬件的引脚。在机器库中,有一类名为 "引脚 "的函数。
20210804180244
    在机器库的帮助下,你可以在程序的下一行轻松定义LED的引脚。
image015
    在这行代码中,我们创建了一个名为 "LED "的对象来帮助我们控制LED,并使用机器库中的Pin函数来定义LED的引脚编号和模式。Pin函数总共有两个参数。第一个参数16代表你定义的引脚编号。因为我们在构建项目硬件时将LED灯连接到了D16,所以我们在这里将其设置为16。第二个参数,machine.Pin.OUT,告诉Pico这个引脚应该被用作输出而不是输入。

    好,现在输入最后一行。
image016
    在这行代码中,我们使用value函数为我们刚刚定义的引脚写入值,以打开灯。当控制Pin类的引脚时,我们通常使用1的值来分配一个高的级别(开)和一个0的值来指定一个低级别(关)。我们的第一个硬件程序已经完成。完整的程序代码如下。
image017
image018
    在我们完成程序后,用USB线将Pico与电脑连接起来,如下图所示。在接下来的课程中,当我们要运行一个程序时,我们总是需要用USB线连接Pico和电脑。
image019
    点击工具栏上的 "运行 "按钮,将程序保存到任何位置,你可以看到插入D16的LED灯被点亮了。

    如果你想关闭LED灯,只需将该值从1改为0。
image021

思维扩展

    尝试用程序关闭LED。
image023
image024

第4课 电子硬件编程中的 "你好世界"。眨眼

    当我们尝试用某种语言进行软件编程时,"Hello World "往往是我们写的第一个程序。眨眼,也就是闪烁LED的任务,是电子硬件世界中的 "你好世界"。在本课中,我们将尝试编写一个Blink程序。要做到这一点,我们将需要使用三个基本编程结构中的另一个--循环结构!

知识库

循环结构

    与顺序结构不同,具有循环结构的程序会重复执行一条或多条指令。根据重复执行的次数,循环结构可以细分为确定的循环结构和不确定的循环结构。当一个具有确定循环结构的程序被执行时,它只重复有限的次数;当它满足某个条件时,循环将自动终止。然而,一个具有不确定循环结构的程序将继续重复循环而不停止。在Python中,我们经常使用for-loop和while-loop。

循环

让我们先来看看一个用while-loop语句编写的程序。
image025
    该程序首先在序列结构中执行。在程序的开始,我们首先声明一个变量 "a",并用print()打印一行字符 "loop start"。
image026
20210804181158
    接下来,我们使用while语句来创建一个明确的循环结构。这指定了当变量 "a "小于5时,程序应重复执行while语句中的指令。也就是说,它应该打印出 "a "的值,并给 "a "加1,直到 "a "大于或等于5。
image027
    程序的输出结果如下。
image028
    观察样本程序的执行结果,我们可以发现,该程序在执行了while语句中的几个循环后,才开始执行最后一个print()语句。
    但是,计算机如何知道哪些语句需要在while循环语句中重复,哪些语句在while循环语句之外?MicroPython使用缩进和冒号": "来区分代码块之间的层次,不像其他编程语言(如Java和C)使用大括号"{}"来分隔代码块。这一变化使得用MicroPython编写的代码清晰易懂。
20210804181308

循环

    一个for-loop一般用于遍历一个序列中的所有元素,例如:
image029
程序的输出结果如下。
image030
    其中,range()是MicroPython的一个内置函数,它可以生成一个整数的列表。一般来说,我们在for-loop中使用这个函数。例如,range(10)创建了一个从0到9的九个整数的列表。

    在这个程序中,我们将使用for-loop进行遍历,并使用print()将所有整数输出到Shell。

实践与操作

项目1:用For-loop控制LED的开和关

    在这个项目中,我们将用一个for-loop来控制LED的开和关,以实现闪烁。

硬件连接

在这个项目中,我们将使用以下电子硬件。

  • 树莓派Pico
  • 用于Pi Pico的Grove Shield
  • 格罗夫--LED封装

与之前类似,我们将LED连接到D16。
image013
在上一课中,我们已经学会了如何控制LED的开启和关闭。为了实现最终的Blink程序,我们只需要做一些轻微的修改。

写一个程序
    首先,让我们试着这样修改程序。
image031
    点击 "运行 "按钮,看一下LED灯。你会发现,LED灯只是非常快地闪了一次。这是因为:

  1. 程序的执行速度非常快,以至于闪光效果并不明显。
  2. 我们没有为程序设置循环结构,程序的闪光部分只执行了一次。

    让我们来解决第一个问题。既然问题是程序运行速度太快,我们可以在每个LED的开启和关闭之间设置一个延迟。
在程序的开始,我们引入了一个新的函数库:utime。
20210804181640
image032
    接下来,我们使用utime中的sleep函数,在每个操作LED的程序之后增加一个延迟。
image033
    除非另有说明,睡眠功能的默认单位是秒。通过修改程序,我们将每盏灯的开和关的时间设置为1秒。

    让我们首先尝试使用for-loop来简单地打开和关闭LED。该程序如下。
image034
image035
    当我们执行这个程序时,我们可以发现LED在循环10次后就不再闪烁了。这是因为使用range()函数只产生了10个整数,所以for-loop只循环了10次。当我们把range(10)改为range(20)时,LED循环了20次。

    当然,不管我们把这个值设置得多大,循环总是一个定点循环。如果我们想保持程序的运行,我们需要使用不确定的循环结构来编写程序。

项目2:用While-loop实现眨眼功能

    在这个项目中,我们将使用while-loop来实现连续闪烁的LED的效果。

写一个程序

    使用while循环,我们可以很容易地使程序无限期地重复。我们只需要将程序中的 "for i in range(10) "改为 "while True"。
image036
    "while True "是while-loop语句的一种用法。与一般的while-loop只在满足某个条件时执行循环不同,这个 "while True "是一个不确定的循环语句,这意味着程序将被反复连续地执行,直到被人为地终止。
完整的代码如下。
image037
image038
    再次点击 "运行 "按钮,连接到Shield的LED开始闪烁。除非人为地停止该进程,否则LED将继续闪烁。
image039
image040

思维扩展

尝试使用两个循环结构和sleep()函数来实现不同的照明效果。

    例如,你可以减少延迟时间以产生更快速的闪烁。
image041
image042

TD4自制CPU 13个74系列芯片绝佳的数字电子技术实践

绝佳的数字电子技术实践
TD4 CPU原理详细教程
简介
如何使用9种14个74系列芯片,自己构造一个4位CPU(中央处理)的可编程计算机系统
 
 
CPU的核心原理其实非常简单,其实任何人都只需要非常基础的一点数字电子技术知识,就可以用14个74系列芯片,完成一个4位简单计算机的设计。这本大概在十几年前就已经在日本出版并风靡电子爱好者圈子的一本好书,既可以给对计算机工作原理好奇的青年爱好者作为制作范例,又可以成为让大学本科学完数字电子技术等相关课程后用于学生大作业或课程设计改进的雏形和范例(实话说,比交通的什么之类的例子实在是好太多,因为今天是计算机的时代,大家显然会对这样的例子兴趣更加浓厚)。我花了大概一天半的时间,就基本搞懂了这个例子的原理,写下这篇文档分享给大家,希望大家也能向我一样动手坐一坐,对数字计算机的工作原理感悟体会更深刻,共勉!
 
总电路图(点击可放大)
 
 
 
为什么要这么做?
虽然功能简单,但是个完整的CPU,麻雀虽小五脏俱全
采用9种小规模集成电路芯片(74系列),完成数字电路设计的基础学习,可以彻底直观理解到电路工作层的原理。
 
立即购买套件:
 
-现在可以轻松获得3GHz-5GHz的高速处理器,就连不到一美元的处理器,其工作频率也在10M左右,计算位数也在16甚至是32位,我们自己搭建一个一个意义是什么?
 
 
并非没有意义,原因如下
- 从电路层面直观了解运算过程
- 直观理解各个部分的组成原理(到数字电路层面)
- 简化的4位数,不至于眼花缭乱
- 只有12个指令,也足以完成一些编程任务
 
其次要制定CPU的规格
- 只操作4位数
- 仅10简单的中小规模集成电路芯片(74系列)
- 可编程指令只有16条
- 演示和改造的实用性都很强
 
这是一个典型的解剖模型(麻雀虽小 五脏俱全)
采用机器语言编程,可以完全直观理解并看到其运行过程,可手动也可自动操作
 
这个项目适合哪些人?
有初步或者想初步学习数字电路的人
想了解CPU工作和设计思路的非专业人员、正在学习电子及计算机专业的学生
 
经过这个项目,你会收获些什么?
中规模集成电路,如74系列芯片,该怎么应用到实际需求中去
彻底理解一个简化版本的CPU的每个运作细节
 
教程开始啦!
74系列芯片
什么是74系列芯片,相信学过数字电子技术的同学都不会陌生,课本里都有频繁的举例,但为了完整补充相关产业背景的知识,这里还是引用一下维基百科的说法:
7400系列是典型的中小规模数字逻辑集成电路。 在 1960 年代中期,最初的 7400 系列集成电路由德州仪器 (TI) 引入,前缀为“SN”,以创建名称 SN74xx。 由于这些零件的普及,其他制造商发布了引脚对引脚兼容的逻辑器件,并保留了 7400 序列号作为识别兼容部件的辅助工具。 但是,其他制造商在其部件号上使用不同的前缀和后缀。
二值逻辑和逻辑电平、正负逻辑电平
二进制数正好是利用二值数字逻辑中的0和1来表示的。二值数字逻辑是Binary Digital Logic的译称。本系统中,由于采用USB接口供电,用5V表示1,0V表示0。在本系统中,一般采用正逻辑(即高电平有效),如所表示的数据线上有一横杠线或者器件输入输出口处有一小圆圈,则表示负逻辑(即低电平有效)。更多专业详尽的信息和说明,请查阅数字电子技术基础课本中的相关章节
 
如何查看74系列芯片的Datasheet
规格表(Data sheet)数据表,数据表或规格表是对产品,机器,组件,材料,子系统或软件的性能和其他特性进行了足够详细的总结的文档,使买家能够了解产品的含义以及设计工程师要了解组件在整个系统中的作用。通常,数据表由制造商创建,以介绍文档其余部分的介绍性页面开头,然后列出特定特征,并提供有关设备连接的更多信息。
本项目使用了8种74系列芯片,我们都采用74HC型号,相关的规格书可以在https://www.alldatasheet.com/网站查询到,个人倾向于阅读德州仪器TI公司较新的Datasheet文档,因为其资料丰富且格式规范。德州仪器公司的SN54系列和SN74系列在功能上完全一致,规格书也是共用的,所以查找规格书时,如书上所示74LS10,网上也可以搜索SN54HC10,只是54系列芯片用于军用。
我刚上大学那会,一开始阅读英文规格书材料也非常不适应,因为从小到大的数理化教育都是非英语环境进行的,但作为电子、信息、自动化和计算机相关专业的学生和从业者,这一点将来无法避免,只好捧起英文资料一遍查资料一遍看,再借助一些中文参考书,慢慢的大家受到的困难的阻力越来越小,阅读越来越顺畅,希望读者也要尝试坚持下去,一定会受益匪浅的。
 
74HC/LS/HCT/F系列芯片的区别
74系列集成电路大致可分为6大类: .74××(标准型); .74LS××(低功耗肖特基); .74S××(肖特基); .74ALS××(先进低功耗肖特基); .74AS××(先进肖特基); .74F××(高速)。
同型号的74系列、74HC系列、74LS系列芯片,逻辑功能上是一样的。74LSxx的使用说明如果找不到的话,可参阅74xx或74HCxx的使用说明。74HC的速度比4000系列快,引脚与标准74系列兼容 4000系列的好处是有的型号可工作在+15V 。新产品最好不用LS。
 
74系列芯片和逻辑门电路的关系
像74这一类的所有芯片都需要电源正负供电,其余部分则往往作为信号输入输出的功能引脚,在电路设计布局时,对于简单功能的芯片,门电路符号和芯片引脚标识方式常常混用,这时需要我们查阅芯片Datasheet来确认其对应关系,以74HC10为例,我们查到规格书的地址是:https://pdf1.alldatasheet.com/datasheet-pdf/view/203930/TI/SN54HC10.html
通过在规格书中,下面两张示意图,即可理解在实际电路中如何使用该芯片:
 
 
 
 
什么是CPU-逐项理解冯诺依曼原理
- 程序计数器从内存中获取指令(取指令)
- 根据解码结果执行操作(执行指令)
- 存储计算结果(存储结果)
(上述三个过程可以比拟成逐页翻书,理解书中内容,并尝试拿笔记本记录下来的过程)
机器的每个 时钟脉冲周期,都会重复上述的几个过程
 
仿真器
接下来,我们先来看一个仿真器,此时此刻你并不需要理解这个仿真器中的所有细节,等后续讲述中,每个部分理解后,再回来重看此动态仿真程序,即可全面理解。
 
 
 
 
 
现在,你看此仿真程序运行图,所需要知道的事情有以下几点:
  1. 红色线代表此时该线上电平为高(5V),蓝色代表电平为低(即0V)
  2. 整个系统由CLOCK脉冲驱动进行,RESET低电平有效,即RESET被拉低后,系统里所有数据清零重启
如果你已经学过数字电路基础,那么你应该还可以尝试记住并理解以下几点,如果不能或全部理解也没关系,可以全部学完,回来再看看
  1. 四个74HC161分别为寄存器A、B、C、D,分别可用于存储4个比特的数据
  2. 第三个寄存器C的输出,用于输出4位电平,驱动LED
  3. 第四个寄存器D的输出,用作指令的译码,即作为地址总线的A0-A3(Address0-Address3)
  4. 两个74HC153组成了一个4位四路数据选择器,用于选择哪一路的4位数据给后续的四位全加器做加数A。其中,第三路的4位数据来源于4位拨码开关(即输入),第四路不连接被弃用。
  5. 74HC283是一个四路全加器,它的第一个加数来源于两个74HC153的数据选择通道,第二个加数来源于指令数据的低4位(即D3-D0),这种被包含在指令中参与运算的数据又叫立即数immediate。全加器的求和结果将输出给4位寄存器A、B、C、D均可,选择其中哪一个寄存器记忆结果,完全由每个寄存器输入端的LOAD(~LD)信号决定,请注意LOAD是低电平有效,这是后续指令译码结果中控制总线的最重要一部分。
  6. 全加器有溢出位输出Carry,但是无法记忆上一次的计算结果是否溢出,故需要一个D触发器作为溢出标记位记住上一次的求和结果是否溢出,并送给译码器指令。
  7. 图上所有用门电路表示的组合电路,是一个完整的指令解码器,它由取得指令的高4位(即D7-D4)和溢出标记位一起作为译码器的输入,由控制四个寄存器的加载(LD)和两个数据选择器的A、B作为输出,这是典型的控制总线。
 
TD-4 CPU规格对比-理解和现有CPU规格之间的数量级差异
 
 
 
复位电路
补充点基础知识
如何表达0和1
- 判断电压低还是高
- 设置0V=0,5V=1
 
- 低电平有效,还是高电平有效
- 注意,每个IC为每个信号引脚都设置了正逻辑和负逻辑
 
 
上拉电阻、下拉电阻的概念
我们现在开始设计,如何将开关的开关两种状态,转换成电平的高低两种状态。这个转换过程,需要理解上下拉的概念。
在数字电路中,上拉电阻(英语:Pull-up resistors)是当某输入端口未连接设备或处于高阻抗的情况下,一种用于保证输入信号为预期逻辑电平的电阻元件。他们通常在不同的逻辑器件之间工作,提供一定的电压信号。
同样的,一个下拉电阻(Pull-down resistor)以类似的方式工作,不过是与地(GND)连接。它可以使逻辑信号保持在接近0伏特的状态,即使没有活动的设备连接在其所在的引脚上。
 
 
 
逻辑代数、组合逻辑电路
理解下面这些门电路的关键在于理解最关键的三个逻辑门(与、或、非)下面给出另外与非门、或非门、异或门的符号图和真值表,其是由三种基本门串接形成如果你对此毫无基础,请务必了解更多专业详尽的信息和说明,可查阅数字电子技术基础课本中的相关章节(逻辑代数、逻辑门电路、组合逻辑电路)
 
按键的抖动与消除
我们上面所表示的上下拉电阻方式用于将开关状态转换为电位高低电平状态的设计是理想化的,在实际电路中仍需要改善,为什么呢?让我们来观察一下实际的输出电压波形
 
 
根据电路原理基础知识,我们知道电容是电荷的蓄水池,这就像个缓存,令其两端的电压无法突变
 
 
 
 
施密特触发器、迟滞特性、消抖
在电子学中,施密特触发器(英语:Schmitt trigger)是包含正反馈的比较器电路。反相施密特触发器对于标准施密特触发器,当输入电压高于正向阈值电压,输出为高;当输入电压低于负向阈值电压,输出为低;当输入在正负向阈值电压之间,输出不改变,也就是说输出由高电准位翻转为低电准位,或是由低电准位翻转为高电准位对应的阈值电压是不同的。只有当输入电压发生足够的变化时,输出才会变化,因此将这种元件命名为触发器。这种双阈值动作被称为迟滞现象,表明施密特触发器有记忆性。从本质上来说,施密特触发器是一种双稳态多谐振荡器。反相施密特触发器的滞回曲线理解施密特触发器消除抖动在于两点:1.什么是脉冲抖动——通俗得讲,在脉冲的上升沿或者下降沿由于人手的细微抖动(人手在触碰物体时常会“哆嗦”,仅仅是幅度极小人没有觉察而已,除非受到惊吓很紧张的时候抖动的幅度大到会被人觉察)或者其它电路硬件产生的幅度较小的震荡,这些原因造成了脉冲边沿的一些或大或小的毛刺引起了脉冲波形的畸变,这些称之为脉冲抖动;2.施密特触发器的特点:输入的电平高于某一个值(比如说1.8V)触发器输出电平会向下翻转,产生一个下降沿,输入的电平低于某一个值(比如说0.8V)触发器输出电平会向上翻转,产生一个上升沿,那么当输入电平介于两个翻转阈值之间时施密特触发器的输出不会动作;从上面的描述你就应该能明白:之所以能消除抖动是因为抖动所产生的电平上下波动的范围尚在施密特触发器翻转的两个阈值之间,施密特触发器不会动作,因而能消除脉冲抖动造成的不良反应。
 
最终该模块电路图
由于重置(RESET)信号是低电平有效,所以默认情况下应该维持高电平,采用串联两个非门施密特触发器我们得到了最终的复位电路的设计
 
 
 
 
 
时钟脉冲产生电路
时钟脉冲是整套数字系统的指挥棒,就像交响乐队指挥手中的指挥棒,其时间基准完全由它决定
 
 
振荡电路(时钟发生器)
-如果你想手动操作,也可以快速按下它,模拟连续的脉冲束,原理几乎和复位电路一样,只是电平相反。
 
时钟脉冲Clock由于是高电平有效,手动产生时钟脉冲(Manual Clock)的按钮应该采用下拉电阻接法。但是由于采用了一个反向施密特触发器,所以改位选用上拉电阻接法。
 
-当然,它也可以由正反馈电路发生振荡来产生
 
 
门电路组成的多谐振荡器
振荡原理:  假设Q为低电平,则非门2的输入端为高电平,经过R对C充电,C的电压上升,直到非门1输入端的电压达到反转电压,此时非门1的输出变为低电平,Q变为高电平。  此时,Q点、C、R、非门2的输入端,极性反转,相对于之前变为放电回路,然后转为反向充电,C的电压下降,直到非门1输入的电压达到反转电压,此时非门1的输出变为高电平,Q变为低电平。  如此循环,形成振荡,在Q端输出方波。  如果非门的反转电压为电源电压的1/2。  则振荡周期:T≈2.2·R·C  Rs用于稳定振荡频率,驱使为6~10倍的R。
时钟电路电阻值在TD4教科书的电路图中,规定了1Hz为33KΩ,10Hz为3.3KΩ的电阻值,但这个值实际上慢了一点。因此,下表显示了以电阻值计算的 60 秒内的实际时钟数。
 
电阻值(Ω)
33K
30K
27K
28.7K (33K // 220K)
28.3K (33K // 200K)
时钟数
51
57
63
59
60
 
从此表中可以看出,在 33KΩ 时,它变为 51/60 = 0.85 Hz。因此,为了获得1Hz,从表中可以看出,当使用28.3KΩ(从E24系列的电阻值中选择,33K和200K并联)时,正好60/60=1赫兹。它变成了。
 
对于 10Hz,使用 2.83KΩ(3.3K 和 20K 并联),1Hz 的电阻值为 1/10。
 
RC充放电回路
 
上面的图来自维基百科(后面也有图片取自维基百科)。观察上面的图,当电源通过电阻 R 向电容 C 充电的时候,电容 C 两端的电压会如何变化呢(也就是会呈现出何种规律)?这可以应用基尔霍夫电路定律来建立一个微分方程,然后解出这个微分方程就会得到电容 C 在充电时的电压变化情况(也可以用拉普拉斯变换求解,关于如何求解这个方程则需要另一篇文章 :),它是时间 t 的函数:  有了公式我们就可以画出它的曲线,如图所示。如果你对此过程有疑惑或者需要了解更多,请参考电路或电路原理相关课本中的相关内容。
 
上面的图来自维基百科(后面也有图片取自维基百科)。观察上面的图,当电源通过电阻 R 向电容 C 充电的时候,电容 C 两端的电压会如何变化呢(也就是会呈现出何种规律)?这可以应用基尔霍夫电路定律来建立一个微分方程,然后解出这个微分方程就会得到电容 C 在充电时的电压变化情况(也可以用拉普拉斯变换求解,关于如何求解这个方程则需要另一篇文章 :),它是时间 t 的函数:  有了公式我们就可以画出它的曲线,如图所示。如果你对此过程有疑惑或者需要了解更多,请参考电路或电路原理相关课本中的相关内容。
 
上面的图来自维基百科(后面也有图片取自维基百科)。观察上面的图,当电源通过电阻 R 向电容 C 充电的时候,电容 C 两端的电压会如何变化呢(也就是会呈现出何种规律)?这可以应用基尔霍夫电路定律来建立一个微分方程,然后解出这个微分方程就会得到电容 C 在充电时的电压变化情况(也可以用拉普拉斯变换求解,关于如何求解这个方程则需要另一篇文章 :),它是时间 t 的函数:  有了公式我们就可以画出它的曲线,如图所示。如果你对此过程有疑惑或者需要了解更多,请参考电路或电路原理相关课本中的相关内容。
最终该模块电路图
 
 
 
 
 
用来存储程序的-只读存储器(ROM)
ROM(Read Only Memory)只读存储器,这种存储器(Memory)的内容任何情况下都不会改变,电脑与用户只能读取保存在这里的指令,和使用存储在ROM的资料,但不能变更或存入资料。ROM被存储在一个非易失性芯片上,也就是说,即使在关机之后记忆的内容仍可以被保存,所以这种存储器多用来存储特定功能的程序。
在本项目案例中,ROM的意思并非指程序不可改变,而是CPU在运行过程中,只能从该存储器阵列中读取,而不能写入或者改变其中的内容,但我们可以通过人手波动开关来写入或修改其中的内容。
 
 
-Memory (ROM) 电路使用 16 个 8 位 DIP 开关来指定 ROM 电路中的 0/1 位(DIP 开关的使用也可2 x 8 16接头和跳线针被用作替代品)。拨码开关相对昂贵,取决于类型,最大的问题是印刷电路板上比较占用空间。TD4教科书由拨码开关和二极管阵列组成,但二极管阵列比较特殊,很难获得。因此,不可避免地要使用普通的轴向引线型二极管。
 
组成开关阵列,并串联二极管
--CPU无法一次从ROM中读取所有程序,按照冯诺依曼原理,逐条指令读取逐条指令执行
这个例子是4位宽度的地址总线,就是2的四次方,共可以读取存储16个8位
--只需要一点一点的将其读取。就像看书,要一页一页翻着看
我想读取一位的电位,该怎么办?
 
 
1位ROM
 
 
3*4位ROM
 
 
通过选择哪一竖电位到地为低电位,横向导线分别读取每行电位的高低
 
 
组成交错的开关阵列很不错,但是读取第二竖列开关每行电位的时候,会受到第一竖列的开关选择影响,从而导致错误。
 
为什么要加二极管?二极管有什么作用?
 
 
每个开关连接到地参考电位前,都用二极管串联,即可避免干扰
 
指令地址译码
 
 
我们需要把每一竖列开关连接到地的选择过程自动化,和输入的地址编码对应唯一的选择,这个过程叫做译码。比方说,从CPU发出的地址总线请求(A3-A0)为0110,则读取第六个ROM中的8位数据作为程序的二进制指令通过(D7-D0)传给CPU加载该指令。
 
TD4教科书的电路图中,74HC154一次可以解码4位,用于指定ROM电路地址,但这里使用了两个74HC138 3-8解码器。得到等效电路。这仅仅是因为74HC138在更容易购买也更便宜,经销商的库存中也比较多。
 
译码器 3-8译码器 4-16译码器
译码器是电子技术中的一种多输入多输出的组合逻辑电路,负责将二进制代码翻译为特定的对象(如逻辑电平等),功能与编码器相反。 译码器一般分为通用译码器和数字显示译码器两大类。 ... 输入使能信号必须接在译码器上使其正常工作,否则输出将会是一个无效的码字。大多数随机存取存储器使用n线-2n线译码器来将地址总线上已选择的地址转换为行地址选择线中的一个。引脚布局图和功能逻辑图块两个3-8译码器组成一个4-16译码器,这是数字电子技术课程中组合逻辑电路译码编码部分的经典问题,绝大部分数字电子技术书籍和课本都会举例讲述,详情请参阅相关书籍。
 
75HC540的作用较为简单,作为练习,请大家自行阅读Datasheet。
最终该模块电路图
 
 
 
 
 
 
寄存器电路
4个四位寄存器,由4个74HC161芯片构成,接下来我们一步一步看看它们是怎么工作的
补充知识双稳态电路 D触发器原理
触发器(英语:Flip-flop, FF),中国大陆译作“触发器”、台湾及香港译作“正反器”,是一种具有两种稳态的用于储存的组件,可记录二进制数字信号“1”和“0”。触发器是一种双稳态多谐振荡器(bistable multivibrator)。该电路可以通过一个或多个施加在控制输入端的信号来改变自身的状态,并会有1个或2个输出。触发器是构成时序逻辑电路以及各种复杂数字系统的基本逻辑单元。D触发器有一个输入、一个输出和一个时脉输入,当时脉由0转为1时,输出的值会和输入的值相等。此类触发器可用于防止因为噪声所带来的错误,以及通过管线增加处理资料的数量。带直接复位置位端的上升沿边沿触发的D触发器真值表D触发器符号。> 是时脉输入,D是资料输入,Q是暂存资料输出,Q'则是Q的反相值,S为1时强迫Q值为1,R为1时强迫Q值为0关于从基本RS触发器出发,是怎样由两个带有反馈的与非门或者或非门逐步建立起来的,并通过各种组合添加进一步形成其它更高级的触发器和计数器等内容,内容较为冗长,但对于打好相关基础非常重要,这里只大概解释各模块的外部主要特性。如果完全不了解,请读者读者查阅《数字电子技术基础》课本进行学习。
 
 
当上升沿建立起来的时候,D的状态被记录在Q中,在下一个上升沿到来之前,Q值不受D值改变的影响。
 
 
四位同步二进制计数器
在有了D触发器基础后,我们可以通过串联D触发器,得到一种叫做计数器的器件
 
 
逻辑功能图
 
 
时序逻辑图
 
 
 
状态转换图
 
通过参考查看74HC161的Datasheet后,我们知道此芯片正是这一类器件
 
 
 
 
74HC161引脚布局图
 
 
74HC161的Datasheet中的时序逻辑图可以看出,~CLR是异步清零端,所谓异步,就是指其作用并不随时钟脉冲才发生作用,即与时钟脉冲不同步,随时有效随时即刻清零所存储的数据。~LOAD低电平时,A、B、C、D的值被装载到QA,QB,QC,QD中,当ENP和ENT置高电平时,QA,QB,QC,QD组成的4位二进制数开始对外部脉冲CLK上升沿进行计数(0-15),当计数达到15后再来一个脉冲上升沿,计数溢出归零,并在RCO端给出一个正脉冲。
 
用带脉冲计数功能的74HC161的D触发器阵列构成寄存器
 
 
输入/输出
 
A寄存器和B寄存器受同一个时钟脉冲控制
 
 
将D触发器的输出端Q的信号,重新引回给触发器的输入端D,通过选择开关,即可实现数据在不同的D触发器之间传送。
 
如何在A寄存器和B寄存器之间交换数据,切换选择输入给哪个寄存器并保持。
 
 
譬如指令MOV A, D,就是将D寄存器内存储的数据,转存到A
数据选择器
我们需要将上述选择数据移动过程,转换成用特定芯片处理,这个过程所需要类型的芯片叫数据选择器。同时我们需要使用4个4位D触发器存储数据,即数据总线宽度位4bit,下图用划线加4bit标识。
 
 
通过75HC153的Datasheet查真值表,我们可以确认其功能是通过B,A的值,从DATA中选择C0,C1,C2,C3其中一个传输给输出Y。
 
 
通过Datasheet里的引脚分布和介绍,我们知道74HC153是两路数据选择器。由于我们传输的数据带宽是4bit,故需要两个74HC153芯片,分别作为数据选择器1和数据选择器2,共用选择信号A、B。
 
 
局部功能完成的电路图
 
 
 
算术逻辑单元(ALU)
补充知识加法器、全加器
74HC283用于TD4教科书的电路图中作为ALU使用的全加器。
 
加法器、半加器、全加器
相信认真阅读过数字电子技术基础课本中有关加法器章节的读者对此类器件的实现过程应该都印象深刻。加法操作是几乎所有算数运算中最基本的操作,原则上其它类型的算数逻辑操作都可以由此推延产生,因此仔细研究清楚其内部原理非常有必要,请读者认真参阅课本中相关章节的讲述内容,这里不再赘叙,仅给出真值表和逻辑图仅供参考。 半加器逻辑图和真值表 一位全加器的逻辑图和真值表一位全加器示意图4个一位全加器串联组成的4位全加器
 
此类推如果增加更多的数字,位数增加即可
 
 
4位全加器
 
 
 
 
 
 
Datasheet中74HC283的引脚图
 
组合一个最小系统
现在是时候组合寄存器、数据选择器、加法器,组成一个完整的指令执行系统。
无论如何,尝试做一个完整的ALU
我们来动手吧譬如执行指令ADD, Im
 
 
 
 
 
这样以来,就多了很多额外的东西 所以,如何执行MOV A, B呢?
 
 
立即数Im作为ALU的第二个输入数B,加法器得以实现,当指令用于传送时,令立即数Im=0即刻。这样,通过数据选择器A、B的信号组合与立即数的配合,上图的指令执行框图基本上可以实现如下类似指令
MOV A, Im 将立即数数据传送到 A 寄存器。
MOV B, Im 将立即数传送到 B 寄存器。
MOV A, B 将 B 寄存器传送到 A 寄存器。
MOV B, A 将 A 寄存器转移到 B 寄存器。
ADD A, Im 将立即数添加到 A 寄存器。
ADD B, Im 将立即数添加到 B 寄存器。
 
程序计数器
- 这是一个计数器,每次遇到一个脉冲则加一
- 如果它复位,则返回到零
 
 
这样很棒,在没有遇到跳转指令的时候,每次脉冲来都自动加一,很适合做储存地址的程序存储器PC(Program Counter),我们放弃了D寄存器用于通用数据的存储,将其作为程序存储器,而在遇到指令直接跳转的指令时,其相当于将立即数或者加法结果存储到寄存器D中。
 
整合输入输出
此外,我们还需要一个寄存器,作为输出驱动4个LED显示的输出寄存器,那么我们也放弃第三个寄存器,即C寄存器,作为OUT寄存器,其结果直接作为输出寄存器。
 
 
此外,你很可能觉得,还需要输入寄存器IN,那么又将牺牲多一个通用寄存器或者需要再添加一个74HC161。其实细想之下,这是不必要的,因为当使用的C、D寄存器作为特殊功能的寄存器后,4路的4位数据选择器只剩下2路被通用寄存器占用,我们把其中一路作为输入,另一路全部默认置零即可。这样,立即数就通过与全为零的数相加而可以被直接传送至通用寄存器A和B了。
 
保持进位的触发器Flip-Flop
带有条件的跳转指令往往需要通过比较计算和查看加法器的计算结果是否溢出。但加法器的溢出位C4记录的是当下的加法结果是否溢出,而非上一条指令执行时的加法结果是否溢出,这就需要一个触发器记录上一次的溢出结果,等到下一个脉冲来到时决定条件跳转指令是否执行。
 
 
我们选用了74HC74作为正边沿触发的flip-flop触发器,可以满足这个要求,详情请自行阅读Datasheet。
 
 
最后的整合与调整
 
 
 
指令译码电路(取指令)
- 每个时钟周期的脉冲来临时,就进行一次取指令、译码、并执行
- 被译码后,相应的电路执行指令预设的动作进行操作
 
 
这个译码电路相当有5个输入,共2的5次方种输入可能性,6个输出,2的6次方种输出可能性。然而仔细分析之下,我们需要的有意义的操作指令和相应的输出无外乎以下这些情况。
 
 
 
所以,总的运行架构框图如图所示
 
 
 
这个指令译码电路,设计过程看起来稍显复杂,然而它只是一个与时序无关的纯组合逻辑电路。参照表格所列,将所有输出结果用采用数字电子技术课本中的最小与或表达式写下,并运用包括德摩根定律在内的逻辑代数定律适度整理后,权衡器件选择和数量,就可得出如下最终的译码电路。
 
 
 
 
 
 
 
 
 
 
 
最后是编程指令集
 
TD4 中定义了十二种类型的指令,这里汇总了所有指令的列表。下图右端所示的 SelB、SelA、Ld0、Ld1、Ld2、Ld3 表示根据操作码和标志创建的解码信号。
 
 
 
 
     将立即数数据传送到 A 寄存器。
     在运行时,它不受 C 标志的影响。执行后,C 标志变为 0。
 
 
     将立即数传送到 B 寄存器。
     在运行时,它不受 C 标志的影响。执行后,C 标志变为 0。
 
 
     将 B 寄存器传送到 A 寄存器。
     在运行时,它不受 C 标志的影响。执行后,C 标志变为 0。
 
 
     将 A 寄存器转移到 B 寄存器。
     在运行时,它不受 C 标志的影响。执行后,C 标志变为 0。
 
 
     将立即数添加到 A 寄存器。
     在运行时,它不受 C 标志的影响。执行后,当发生进位时,C 标志设置为 1。
 
 
     将立即数添加到 B 寄存器。
     在运行时,它不受 C 标志的影响。执行后,当发生进位时,C 标志设置为 1。
 
 
     将数据从输入端口传输到 A 寄存器。
     在运行时,它不受 C 标志的影响。执行后,C 标志变为 0。
 
 
     将数据从输入端口传输到 B 寄存器。
     在运行时,它不受 C 标志的影响。执行后,C 标志变为 0。
 
 
     将立即数据传输到输出端口。
     在运行时,它不受 C 标志的影响。执行后,C 标志变为 0。
 
 
     B 将寄存器转发到输出端口。
     在运行时,它不受 C 标志的影响。执行后,C 标志变为 0。
 
 
     跳转到立即数指示的地址。
     在运行时,它不受 C 标志的影响。执行后,C 标志变为 0。
 
 
     当 C 标志为 0 时,它跳转到立即数所指示的地址。当 C 标志为 1 时,什么都不做。
     在运行时,C 标志会更改行为。执行后,C 标志变为 0。
 
 
没错,设计方案源头的书是日文的,但是不要怕,我们会有很好的中文解析,大家完全能理解它!
哈哈哈,这句话我本来打算写在开头,但是怕读者畏惧,现在你已经读完了所有的解析,简单吧? 这句话成为了废话。
 
参考书籍:
 
 
图书出版社收到的读者书评
用10个IC轻松介绍CPU设计!
计算机的核心是一个名为CPU的黑盒子。 被称为CPU的黑匣子是计算机的核心,以4位CPU为例,从其运作的 "超级 "基本原理到设计进行解释。 你实际上可以只用秋叶原上的零件来制作你自己的CPU! 即使你没有真正做到这一点,它肯定是有趣的阅读。
-来自 "BOOK "数据库
一个叫做CPU的黑盒子是计算机的核心。 它解释了从其运作的 "超级 "基本原则到具体的设计实例的一切。 也可以只用秋叶原上的零件来实际建造。
-来自 "MARC "数据库
计算机的核心是一个名为CPU的黑盒子。 本书解释了从其运作的 "超级 "基本原则到具体的设计实例的一切。 你甚至可以只用秋叶原上的零件来建造你自己的东西!
 
作者简介
Iku Watanami
电路工程师。 从一家计算机制造商退休后,他成为一名独立的工程师。
 
基本信息
  • 出版社 ‏ : ‎ 毎日コミュニケーションズ (2003年10月1日)
  • 出版日期 ‏ : ‎ 2003年10月1日
  • 语言 ‏ : ‎ 日语
  • 单行本-平装 ‏ : ‎ 328页
  • ISBN-10 ‏ : ‎ 4839909865
  • ISBN-13 ‏ : ‎ 978-4839909864
 
立即购买套件:

《CPU自制入门》实践经验分享

《CPU自制入门》是人民有点出版社图灵系列自引进日本的一本非常好的书,该书在2014年出版,当年已经引起了不少IT业内认识和计算机技术爱好者们的关注(当然也包括我),后续数年不知因为什么原因,市场上缺货,二手渠道曾经一路被炒高至售价四五百元。后来出版社和责任编辑乐鑫发现,于去年重印,虽已过多年,至今仍可从各平台渠道上看到该书销售火热受追捧的程度。

正如译者赵谦博士在此书译者序中所言,对非常多接触IT行业从业人员、爱好者、有志从事或了解相关领域的学生而言,《CPU自制入门》正是他们一直寻找的那本书。相关领域的经典教材和各类好书不少,如MIT出版社出版的哈佛大学教材《计算机系统要素》,斯坦福大学前校长John LeRoy Hennessy等编写的《计算机组成与设计: 硬件/软件接口》,国内广泛采用的白中英教授编写的《计算机组成原理》。然而,迄今为止尚未发现一本像《CPU自制入门》这本书一样提供较低阅读门槛,并且从实践出发,介绍了计算机系统最物理、最底层开始的搭建过程,从电路板设计制造到CPU结构的设计和描述直到汇编语言编程,将如此广泛的技术内容以实践方式来学习,本书确实是首屈一指,也尚未见来着。本书在各层次原理理论讲解不尽详细,因为每一章摊开原理讲清楚明白可能都是大学里相关的一本专业课,不可能也没必要,但作为相关专业的实验手册或者课程设计指导书则再合适不过了(笔者有诸如配套白中英编写教材的清华大学科教仪器厂的TEC-4计算机组成原理实验箱,但其对普通师生的可获取性差且技术方案过于陈旧跟不上产业界的步伐),个人强烈建议国内有志的高校教师在教学改革过程中考虑将本书内容或者体系纳入专门的实验课或者相关课程设计中。

相信愿意购买和阅读此书的读者一定和我一样相信在可预见的未来,具备软硬结合设计和实践能力的工程师将会更加具有竞争力。书中几乎简要介绍了所有必要的基础知识(如数字电路设计、Verilog语言、电路板CAD软件使用、元器件购买等)。书中以最为精简的文字,将最核心的知识汇集到一本书中,使各种知识背景的读者都可以方便阅读以至于实践。

当然,这样的安排也容易导致了实践者在独自实践的过程之因为涉及领域之广泛而不熟悉,往往容易遇到意外的问题被卡住而最终被迫放弃。在本书编辑建议下,我把陆陆续续大概花了一个月实践过程中所遇到的各种问题和大家分享,写成这篇指南,希望能让大家实践顺利,少走弯路。

 

全书分为3章,

第1章 CPU得设计与实现

第2章 电路板的设计与制作

第3章 编程

 

实验实操过程中,不建议采用书中顺序,而应该从第2章开始,然后适度阅读第1章,并按照第3章逐步操作,原因如下:

1.书中采用的硬件架构并非现成产品,需要电路板和元器件实操,在硬件体系没有搭建起来以前,所有代码都无法在真实的平台上验证。

2.第一章是原理性讲解,设计本书最重要的精神和概念,多数阅读者未必有很好的Verilog语言基础和各种FPGA基础知识(如果有,本书可能对FPGA工程师略显粗浅),所以第一章如果遇到卡顿或者看不懂的地方,不应放弃,而应该先按照2、3章流程完成实操后,再慢慢理解第一章,第一章应该当成原理讲述大纲和字典,可以粗略看一遍不需要完全理解,开始实践代码的过程中,遇到不懂的地方再不时回来翻看。

3.本书重点在于有全套简单易用,资料详尽,案例完整的从芯片选型到电路设计,从硬件描述语言到汇编语言的全套解说,应该注重整个完整实践过程的主线,重在体验和为理论原理学习提供动力和感性认知,而不应过分纠结在一两个细节上。

 

跳坑:

初学者应完全遵照书中软件和版本进行环境搭建和操作,遇到有实际困难切换环境或者元件的情景,需要在有相关领域专业人员的指导下进行操作和元器件购买。

本书中文版在作者序前一页有一个声明

笔者写这段话的时候,已经是2021年了。这说明本书编写的环境并不能使用相关软件的任意版本,而应该尽量与书籍上内容呈现的版本一致或者寻找上述声明日期来进行操作。也就是说书中的代码和操作与软件之间的版本是有一定依存程度的。

 

这是为什么呢?以FPGA开发环境ISE为例,其不同版本开发环境所创建的工程往往与所依赖的代码文件和IP核相关。不同的版本,IP是可以升级的,但是如果IP在新版本新增一些接口,或者删掉一些接口,那么ISE是不能自动帮助连线或者修改代码的,这部分还是需要用户手动完成,这是特别需要注意的,也是导致很多莫名奇妙的错误让初学者无所适从而放弃。

 

以PCB设计软件Eagle CAD为例,其书中所展示的版本5.11.0为例,在2012年这是一款流行的PCB设计软件,属于一家叫做CADSOFT的德国公司,由于其有一个简单好用的免费版本,所以其在电子爱好者和创客社区非常活跃用于设计交流。但如今这款软件已经被AutoDesk公司所收购,其操作界面有较大的改变,也需要AutoDesk账号登录才能使用,笔者也遇到过官方自带元件库的命名对应和电路原理图文件打开后报错的情况。

 

跳坑:

书籍中相关资料下载问题

该书籍在图灵社区上相应的页面并没有提供直接的资料下载,https://www.ituring.com.cn/book/1142

而是给出了日本原版技术评论社的相关资料下载链接,刚开始没仔细查看该页面的图灵社区读者通常会在随书下载中查找资料,只有试读PDF

请至http://gihyo.jp/book/2012/978-4-7741-5338-4/support下载本书源代码。

请注意,该页面虽然全都是日文,但仍然不影响使用。如果强迫症,可以将整个页面直接扔进Google Translate或者DeepL翻译,查看译文。附网址(需要先获得访问完整互联网的能力)https://translate.google.com/translate?sl=ja&tl=zh-CN&u=https://gihyo.jp/book/2012/978-4-7741-5338-4/support

但是请注意,除了实践所需代码,原作者和出版社还提供了一些书籍的勘误和补充,其中P.403关于综合选项 的一项尤其重要,因为原书中没有提及,在代码综合的过程中,默认以speed而不是area进行综合,这回导致代码综合结果超过了该款芯片xc3s250e的容量而失败,一开始我在这里就卡住了两天。

 

跳坑:

电路板设计与绘图问题

可能是因为教育环境的缘故,国内大部分学生比较熟悉的EDA往往仅限于Altium Designer,笔者看到CSDN网站上有博客主https://blog.csdn.net/zysns/article/details/96426607(应该是比较主动好学的在校大学生)讲述自己完全按照书本内容附图在Altium Designer把整个原理图从零开始都画了一遍。我觉得精神可嘉但似乎不是很有必要,可能是这位同学并没有留意到上一条提到的随书相关资料,里面已经有直接可用的PCB文件,直接导出来使用生产即可。

 

作者在书中内容所展示的PCB板和封面的拥有基板少女的电路板并不是一个版本的电路板

 

根据作者在PCB丝印层提供的网址信息http://respon.org/(该网址已失效,但可以根据互联网档案馆https://archive.org/回溯查看该网页过去的历史)作者曾在该网站贩售书籍配套的裸PCB板,共有3个版本 1.0 、1.1、2.0。作者网站提供的文件和书中讲述内容,均为1.0版本,此版本背面并没有做出少女图案的覆铜层排版,并且电源模块另有一块电路板,用于将9V电源分别转换为3.3V、2.5V和1.2V三种电压。1.0版本电路板采用的电源转换方案较为传统,但非常适合没有焊接操作经验的初学者作为练习(全部都是插件元器件),后续版本可能采用了体积更为小巧的元器件方案来提供电压变换,具体方案(Eagle软件免费版限制了PCB尺寸在100*100以内)。此外,肯定有不少读者倾慕书籍封面的基板少女情有独钟,实际上此图案对于本书整理的技术和功能实现并没有丝毫影响,只是通过调整布线格局构造出这个有趣的图案。由于作者没有提供含有图案的源文件(即1.1和2.0版)但初学者操作修改电路板文件不出错具有一定风险,硬件排错比软件更为复杂,修改验证周期也更长。因此我建议初学者完全按照书中内容,即可1.0版实践,当一切顺利完成并且愿意在花费一定时间熟练操作Eagle PCB软件后,完全可以根据作者提供的如下视频进行图案的构造。

https://v.qq.com/x/page/a3220vz6bo3.html

 

<iframe frameborder="0" src="https://v.qq.com/txp/iframe/player.html?vid=a3220vz6bo3" allowFullScreen="true"></iframe>

 

在后续实践过程中,笔者发现电路板上的IC3(74AC25)和IC5(74HC14)封装并不正确,不是标准的SOP引脚间距,其将导致最后PCB上的IC无法正常焊接(需要较为麻烦的跳线操作技巧)。笔者已将Eagle PCB文件略作修改,新版本将在本文后附的GitHub资料中上传。

 

关于Eagle软件的操作,笔者作为国内最早一批接触该软件的创客群体,不自谦推荐笔者早年从Sparkfun社区翻译的相关中文教程两篇,相信易于上手并足以应付包括此项目在内的一般项目需求:

http://www.i-element.org/eagleschematic/

http://www.i-element.org/eaglepcblayout/

 

跳坑:

电路板制作问题

作者所处的时间(2012年)和地点(日本),作为个人,进行PCB样品的制作可能要选用感光的制作方式(PCB文件里过孔偏大也是为了将就这种制造工艺,以减少后续失败风险)或者昂贵的海外委托加工方式。

然而我们今天所处的中国电子产品供应链廉价且灵活,完全没有必要购买一大堆零件手工捣鼓制作。所以书中相关内容建议仅供参考了解,实际上只要把相应的Eagle PCB文件按照相应步骤导出成标准的生产文件Gerber(参考书中操作步骤或者上一条Eagle软件操作参考文章),然后将相关文件发给国内一些制造商(如捷多邦、嘉立创等制造商即可完成PCB制作)。

 

由于PCB上阻容元件较多且标识并不是特别明晰(日本人这风格真的搞不懂),自己焊接相当费时,手动操作也比较容易出错,想象一下你在考试时进行大量手动的复杂计算,能保证不出一点差错的几率有多大?可以考虑委托上述PCB或者专业的SMT供应商预先贴片,至少可以把非IC的阻容贴好,而且由于后续手动焊接插件和芯片等元器件难保不会出现意外,非常建议多准备几款贴好阻容的PCB(3-5块)。

 

也可以考虑寻求笔者(微信ID:zhangchengwust)直接购买半成品PCB(贴好阻容元件),因为批量会比较便宜。

 

跳坑:

芯片购买问题

不知道是不是因为这一年多收到疫情影响,该项目中电路板上所使用的两个核心的芯片的正规供货渠道在这个时间节点(2020年11月)不是非常顺畅,即便是强大的DigiKey有供货也非常昂贵。有比较熟悉FPGA原料市场的朋友告诉笔者,十年前的产品线产量本来就不大,遇到供货不稳定的比较正常。

通过淘宝和华强北等一些不是非常原厂经销商的渠道,花费了比较高昂的价格(约100元)作者买到了XC3S250E SMD_VQ100和XCF02S SMD_VO20C这两个芯片和其它一些比较特殊的零件。在零件购买这一步,作为有一定经验的电子工程师的笔者也栽了跟头,因为淘宝等一些特殊渠道上淘洗来的芯片不仅可能是拆机的二手货,而且甚至很可能是无法工作的坏芯片或者是假的。

第一次在一家淘宝店买的XCF02S上一号引脚附近的芯片上没有圆点,一开始我还以为是这个芯片规格特殊,省略了这个一般芯片上都有的标记,后来到了烧录程序过程中发现芯片完全无法识别。在查阅了该芯片的Datasheet后,我确认这很可能是个假芯片。

 

可以考虑寻求笔者(微信ID:zhangchengwust)创建的交流群批量购买元器件包。如果在这方面有廉价并且稳定供货渠道的朋友,欢迎告知。

 

跳坑:

数字电路和Verilog HDL语言基本知识问题

 

如果你在学校里认真学过数字电路相关课程并熟练掌握C语言,可能对这本号称入门的书不屑一顾,再粗粗一眼看上去,感觉Verilog的语法和C语言看起来没啥区别,但当认真开始实现功能并且尝试理解代码原理的时候,你会发现你错了。对,对于没有只有上述课程基础,并没有FPGA实践经验的笔者来说,就是这样。不信你可以试试光凭本书第一章的那点介绍,你完全没法读懂项目里的大部分代码。

后来为了调试Verilog代码综合过程中的一些错误过程中,我反反复复查阅了数电书籍和专门的Verilog语言的书籍,对于掌握这门语言,效果并不是非常好。后来通过老石谈芯视频上的推荐,我发现对于真心想掌握这门语言的人,与其它理工科的学习一样必不可少的修炼手段,就是刷题!对,就是刷题网址,刷了一周后,发现提升非常大,实在看不懂的,就看一下答案,再自己写一遍。网址和答案附上:

 

https://hdlbits.01xz.net/

 

https://github.com/johnsonwust/HDL-Bits-Solutions(笔者Github,欢迎加薪点赞)

 

跳坑:

Xilinx ISE 版本选择和兼容性问题

电路都做完了,来到搭建软件环境这一步了。首先要注意,ISE已经是近十年前的产物了,最后的更新也是2013年的事情。本书译者赵谦博士建议我们后续学习FPGA都迁移到替代它的新环境Xilinx vivado中来。即便如此,请注意,如果你是Win10系统,千万不要下载上图所示的Win10版本,因为这是基于虚拟机技术的,虽然小,但是很多芯片用不了。而且笔者的结果就是直接装不上(不知道和电脑上装了VMWare一类的虚拟机程序是否有关)。

一共有4个压缩文件,而且每个都接近2G。如果你在下载过程中出现卡顿或者什么别的幺蛾子,请考虑获取访问完整互联网的能力。

接下来就是申请赛灵思的账号,并且填写自己的地址和公司等信息,要符合U.S. Government Export Approval,什么?是的,你没听错,下载米国公司的软件也算出口,也要符合美国政府的技术出口管制。所以我毫不犹豫的添了个纽约的地址,嘿嘿嘿!

跳坑:

Xilinx ISE 闪退问题

这个问题也卡了笔者很久,我刚开始发现的时候,事情是这样的,每当在Win10下把输入法从英文切换成中文的时候,软件立马闪退,后来发现导入文件和打开项目的时候也会有这个毛病,我当时简直就想咒骂赛灵思的软件工程师。问了我一个有FPGA开发经验的朋友,他直接告诉我,他们只在Linux环境下允许ISE,没在Windos下运行过。我刚有点心动的时候,忽然发现书后面马上要介绍使用JTAGE Shell烧录程序到FPGA的软件似乎只能在Windows下运行,而且作者都是在Windows下运行的,于是我硬着头皮找到了下面这个解决方法。

 

解决Xilinx_ISE 14.7在Win10下选择“open project”崩溃闪退的问题

问题描述
ISE 14.7对win10无法完美支持,在使用64位ISE时点击OPEN之类的东西时程序都会崩溃,虽然使用32位不会有这个问题,但是工程的默认打开方式不能改为32位。

解决方法如下

寻找安装Xilinx_ISE的安装目录下的文件夹:

D:\Xilinx\14.7\ISE_DS\ISE\lib\nt64

对文件夹下的两个文件作如下操作:

将libPortability.dll重名为libPortability.dll.orig

将 libPortabilityNOSH.dll 复制一份,然后将这个复制重命名为libPortability.dll

至此,64位ISE在打开项目等方面已经不会闪退,但是 PlanAhead等高级功能面前还是会闪退,

 

参考来源:https://blog.csdn.net/idevede/article/details/56024153

 

跳坑:

BSDL文件

TPC-2003A+ 32位微机接口实验系统

欢迎了解创元素电子实验设备公开计划。回忆起往昔在学校学习电子电路等相关技术基础课的时候,相信很多同学或已经参加工作的朋友们应该都深有同感。除了课堂单纯的讲解,课本里反反复复看不懂的说明,为应付考试而不断刷题乏味,缺乏直观的实验演示(现在应该是草草在实验室走了个过场),最终导致了大家对专业的学习和应用缺乏信息。之所以心里没底气,原因其实很简单,书上讲解的基本电路没搭过没测试过,实验室里的各种仪器也做不了熟练上手的操作。

事实上,实验是学习电子技术的一个重要环节。对巩固和加深课堂教学内容,高学生实际工作技能,培养科学作风,为学习后续课程和从事实践技术工作奠定基础具有重要作用。当今我们的许多一流高校并不缺乏相应的经费,其实验室也有良好的实践条件。然而,提供给好学者的机会是不多的,种种管理制度上的原因,大家能随时随地使用这些硬件条件往往也不具备。很多同学和爱好者就和我们早期一样,在宿舍、在自己的家里自己进行补充学习和自行搭建各种实验条件,这也是催生爱好者们到处在网上交流和寻找各种实践机会和条件。

从各种单片机开发板、趣味电子实验书籍资料等等,虽然其优势和自身的特点,但绝大部分其实与学校里的科班培养计划课程及标准教科书脱节较远,并不太能帮助将来成为专业从业者的学生建立严谨的学科体系知识,进而登堂入室。另一方面,由许多校企及专业供应高校实验室建设的公司生产制造了大量相关的实验设备器材和配套资料,通过专门的业务途径或教育系统关系进入到高校的采购之列,然而这些产品价格高昂且一般人无法通过官网或互联网上等渠道自由获取相关资料学习和实践。

有一些朋友在知道我们通过各种途径收集了大量本科电类专业的课程的实验器材后,希望向我获取相关资料、租用设备,并建议我公开分享相关资讯。由于工作忙碌和器材陈旧等各种原因,我一直并未认真整理分享相关资讯。但近日又有高校师生叩门联络并痛陈其专业教材阅读及欲实践无门之苦,又相关实验器材行业并无技术门槛且罔顾版权互抄严重,如非特殊采购机制,此类教育器材硬件贩售实难为公司牟利之主源,发达国家诸多此类教育相关资讯均已CC协议公开,并借由创客运动得到广泛传播。该应用故我摒弃非原创资料价值之疑虑,趁疫情居家期间尽数整理相关资料并通过各类渠道分享。部分资料及硬件采购资讯不易通过网页等方式分享的,或欲进行相关教学合作的同仁,欢迎通过微信ID:zhangchengwust 与我接洽,交流相关资讯。祝专业教学研之路顺遂,取得建树。

实验室及实验仪器的综合和开放是当前实验室建设的方向,培养学生的研究和创新能力是实验室的重要任务。为适应实验室建设的需要清华大学科教仪器厂在《TPC-2003A通用微机接口实验仪》的基础上推出了<TPC-2003A+ 32位微机接口实验系统>。增加了系统的安全性能、开放能力和可扩充性。

▲ 实验系统构成及特点

该系统由一块PCI总线扩展卡、一个扩展实验台及软件集成实验环境组成,PCI总线卡插在机箱内任一PCI插槽上,提供PCI-ISA总线的转换与驱动。PCI卡与实验台之间由一条50芯扁平电缆连接。其主要特点如下:

1.    PCI总线全新结构设计,适应现代微机发展的技术要求。系统以PC为主机,通过PCI总线扩展卡将PCI总线信号转换成ISA总线信号引入接口实验台,供接口实验使用。

2.    满足《微机原理与接口技术》、《数字逻辑与数字系统》课程教学实验要求。实验台上设有I/O地址译码电路、常用接口实验电路、A/D、D/A转换电路、数码显示电路、双色发光二极管点阵电路、二进制开关输入及LED显示、电机电路、温度检测等。全面支持“微机原理”“微机接口”“微机控制”等各项实验内容。

3.    开放式结构,模块化设计支持开放实验,便于老师和学生设计开发新的实验。实验台上除固定电路外还设有用户扩展实验区,用户可以自己设计实验电路,在用户试验区插上所选芯片并连线即可以实验。另外系统还提供了32位数据扩展及32位存储器读写模块、字符,图形液晶显示实验模块、红外收发实验模块、无线通信实验模块、键盘显示实验模块等多种扩展实验模块供教学实验选择。

4.    功能强大的软件集成开发环境,支持Win98, Win2000, WinXP 等操作系统。随机附带有TPC-2003A+集成实验开发环境软件,可以方便的对程序进行编辑、编译、链接和调试,可以查看实验原理图,实验接线,实验程序并进行实验演示。

5.    实验程序可以使用宏汇编和C语言。集成实验开发软件可以自动识别汇编语言还是C语言源程序,可以对汇编程序和C语言程序进行调试。

6.    实验台上有五个通用集成电路插座,每个插座引脚都有对应的“自锁紧”插孔,利用这些插孔可以让学生搭试更多的实验。

7.    实验台自带+5V电源保护电路。一旦接线发生错误,造成+5V电源短路,立即报警并切断电源。

8.    实验输出信号都带有保护电阻,保护试验电路的安全。

▲ 实验内容

1.     I/O地址译码器实验

2.    简单并行接口实验

3.    可编程定时器/计数器实验

4.    可编程并行接口实验(一)(二)

5.    七段数码管实验

6.    继电器控制实验

7.    竞赛枪答器实验

8.    交通灯控制实验

9.    中断实验

10. 数/模转换器实验

11. 模/数转换器实验

12. 数字录音机实验

13. 串行通信实验

14. DMA传送实验

15. 集成电路测试实验

16. 电子琴实验

17. 8250串行通信实验

18. 步进电机控制实验

19. 直流电机转速控制实验

20. 8279键盘显示控制实验

21. 存储器读写实验

22. 双色发光二极管点阵显示实验

23. 数字测温实验

24. 直流电机,步进电机测速实验

▲ 选做实验(需单独购买相应实验模块)

25. 32位DMA传送实验

26. 32位存储器读写实验

27. 字符图形LCD显示实验

28. 无线收发实验

29. 红外收发实验

▲ WDM编程实验

提供WDM设备驱动程序例程,可进行WDM驱动编程的学习。

▲ 可选实验模块(选配)

1.    32位存储器和32位DMA实验模块

2.    字符图形液晶实验模块

3.    8255控制键盘实验模块

4.    红外收发实验模块

5.    无线收发实验模块

▲ 配套资料及推荐教材

1.           TPC-2003A+  32位微机接口实验系统教师用实验指导书

2.           TPC-2003A+  32位微机接口实验系统学生用实验指导书

3.           TPC-2003A+  32位微机接口实验系统用户光盘

 

 

TPC-H微机接口实验系统

欢迎了解创元素电子实验设备公开计划。回忆起往昔在学校学习电子电路等相关技术基础课的时候,相信很多同学或已经参加工作的朋友们应该都深有同感。除了课堂单纯的讲解,课本里反反复复看不懂的说明,为应付考试而不断刷题乏味,缺乏直观的实验演示(现在应该是草草在实验室走了个过场),最终导致了大家对专业的学习和应用缺乏信息。之所以心里没底气,原因其实很简单,书上讲解的基本电路没搭过没测试过,实验室里的各种仪器也做不了熟练上手的操作。

事实上,实验是学习电子技术的一个重要环节。对巩固和加深课堂教学内容,高学生实际工作技能,培养科学作风,为学习后续课程和从事实践技术工作奠定基础具有重要作用。当今我们的许多一流高校并不缺乏相应的经费,其实验室也有良好的实践条件。然而,提供给好学者的机会是不多的,种种管理制度上的原因,大家能随时随地使用这些硬件条件往往也不具备。很多同学和爱好者就和我们早期一样,在宿舍、在自己的家里自己进行补充学习和自行搭建各种实验条件,这也是催生爱好者们到处在网上交流和寻找各种实践机会和条件。

从各种单片机开发板、趣味电子实验书籍资料等等,虽然其优势和自身的特点,但绝大部分其实与学校里的科班培养计划课程及标准教科书脱节较远,并不太能帮助将来成为专业从业者的学生建立严谨的学科体系知识,进而登堂入室。另一方面,由许多校企及专业供应高校实验室建设的公司生产制造了大量相关的实验设备器材和配套资料,通过专门的业务途径或教育系统关系进入到高校的采购之列,然而这些产品价格高昂且一般人无法通过官网或互联网上等渠道自由获取相关资料学习和实践。

有一些朋友在知道我们通过各种途径收集了大量本科电类专业的课程的实验器材后,希望向我获取相关资料、租用设备,并建议我公开分享相关资讯。由于工作忙碌和器材陈旧等各种原因,我一直并未认真整理分享相关资讯。但近日又有高校师生叩门联络并痛陈其专业教材阅读及欲实践无门之苦,又相关实验器材行业并无技术门槛且罔顾版权互抄严重,如非特殊采购机制,此类教育器材硬件贩售实难为公司牟利之主源,发达国家诸多此类教育相关资讯均已CC协议公开,并借由创客运动得到广泛传播。该应用故我摒弃非原创资料价值之疑虑,趁疫情居家期间尽数整理相关资料并通过各类渠道分享。部分资料及硬件采购资讯不易通过网页等方式分享的,或欲进行相关教学合作的同仁,欢迎通过微信ID:zhangchengwust 与我接洽,交流相关资讯。祝专业教学研之路顺遂,取得建树。

八十年代以来,国内大中专院校很多专业都相继开设了“微机原理及应用”方面的课程,讲授内容主要是8位机(Z80),实验设备多采用TP801单板机。随着计算机技术的发展,讲授内容开始逐步转向16位或32位的PC系列微机,实验设备亦需更新,“TPC-H通用微机接口实验系统”是我公司继“TPC-1型十六位微机实验培训系统”的基础上,综合了各学校讲课及实验老师的意见之后推出的微机硬件实验教学设备的新产品。该仪器增加了实验系统的开放能力和灵活性。它不仅使一些典型的微机接口实验方便,而且对一些计算机硬件要求较高的专业提供了锻炼学生动手能力,发挥创造才能的平台。该系统主要有以下特点:

★  实验电路连接采用了国家专利、获奖产品“自锁紧”插座及导线,消除了连线接触不良的现象。

★  电路设计中增加了多项保护措施,可有效的避免由于学生实验时错接、错编程损坏主机或接口集成电路的现象。

★  接口实验增加了实用性、趣味性的项目,附加了使用C语言进行实验的参考程序。

★  实验台上增加了逻辑笔、通用IC插座等电路。可作为数字电路实验仪器使用,也可以用于学生

毕业设计、实验数据的采集及科研开发。

该仪器于95年11月23日通过国家教委鉴定,鉴定意见认为:

该仪器设计方案合理,通用性强,实验方案新颖,实用性强,采用了“自锁紧”插座,消除了连线接触不良现象,附加了电路保护措施,提供了C语言进行接口实验的参考程序。该仪器技术水平处于国内先进水平,是一套值得推广的实验装置。

仪器硬件包括接口卡、实验台(箱)两部分组成,两者之间通过50线扁平电缆相连。

接口卡可以插入PC系列微机中任意一个扩展插槽,它的主要功能是将与实验有关的总线信号加以驱动后引到实验台上,同时引出信号还有与“中断”和“DMA”实验操作有关的信号及+5V、+12V、-12V电源。另外,卡上设有一个跳线开关(JP)用于选择中断请求信号:IRQ2、IRQ3、IRQ4、IRQ7中的一个作为中断请求信号。

实验台上设有I/O地址译码电路、总线插孔、接口实验常用集成电路、外围电路及通用IC插座等部分组成。外围电路包括逻辑电平开关电路、LED显示电路、时钟电路、单脉冲电路、逻辑笔、复位电路、七段数码管显示电路、基本门电路、继电器及步进电机、小直流电机的驱动电路。

使用说明书中介绍了22个微机接口实验。覆盖了大中专院校微机接口实验教学大纲中的内容。教师可以根据课时计划安排选作,也可以在此基础上重新设计新的实验项目。随机软盘中附有每个实验的汇编语言及C语言的参考程序。

目     录

一、概述. 65

二、安装. 66

三、实验台结构:(见上页). 62

1、I/O地址译码电路. 62

2、总线插孔. 62

3、时钟电路. 62

4、逻辑电平开关电路. 62

5、LED显示电路. 63

6、七段数码管显示电路. 63

7、单脉冲电路. 64

8、逻辑笔. 64

9、继电器及驱动电路. 64

10、复位电路. 64

11、接口集成电路. 65

12、跳线开关(JP). 65

13、+5V电源插针. 65

14、通用集成电路插座. 65

15、数字电路实验区. 65

16、接线端子. 65

17、50线总线插座信号安排. 66

18、直流电源开关(K1)和存储器地址选择开关(K2). 66

19、使用外加直流电源注意事项:. 66

四、接口实验部分:. 67

实验一    I/O地址译码. 67

实验二    简单并行接口. 68

实验三    可编程定时器/计数器. 71

实验四、  可编程并行接口(一). 73

实验五    七段数码管. 75

实验六    继电器控制. 78

实验七    竞赛抢答器. 81

实验八    交通灯控制实验. 83

实验九    中断. 85

实验十    可编程并行接口(二). 88

实验十一    数/模转换器. 91

实验十二    模/数转换器. 94

实验十三    数字录音机. 97

实验十四    串行通讯. 101

实验十五    DMA传送. 104

实验十六    集成电路测试. 107

实验十七    电子琴. 110

实验十八    8250串行通讯实验. 113

实验十九    步进电机控制实验. 116

实验二十    小直流电机转速控制实验. 120

实验二十一    键盘显示控制器实验. 123

实验二十二    存储器读写实验. 137

计算机组成原理与系统结构实验系统TEC-4

欢迎了解创元素电子实验设备公开计划。回忆起往昔在学校学习电子电路等相关技术基础课的时候,相信很多同学或已经参加工作的朋友们应该都深有同感。除了课堂单纯的讲解,课本里反反复复看不懂的说明,为应付考试而不断刷题乏味,缺乏直观的实验演示(现在应该是草草在实验室走了个过场),最终导致了大家对专业的学习和应用缺乏信息。之所以心里没底气,原因其实很简单,书上讲解的基本电路没搭过没测试过,实验室里的各种仪器也做不了熟练上手的操作。

事实上,实验是学习电子技术的一个重要环节。对巩固和加深课堂教学内容,高学生实际工作技能,培养科学作风,为学习后续课程和从事实践技术工作奠定基础具有重要作用。当今我们的许多一流高校并不缺乏相应的经费,其实验室也有良好的实践条件。然而,提供给好学者的机会是不多的,种种管理制度上的原因,大家能随时随地使用这些硬件条件往往也不具备。很多同学和爱好者就和我们早期一样,在宿舍、在自己的家里自己进行补充学习和自行搭建各种实验条件,这也是催生爱好者们到处在网上交流和寻找各种实践机会和条件。

从各种单片机开发板、趣味电子实验书籍资料等等,虽然其优势和自身的特点,但绝大部分其实与学校里的科班培养计划课程及标准教科书脱节较远,并不太能帮助将来成为专业从业者的学生建立严谨的学科体系知识,进而登堂入室。另一方面,由许多校企及专业供应高校实验室建设的公司生产制造了大量相关的实验设备器材和配套资料,通过专门的业务途径或教育系统关系进入到高校的采购之列,然而这些产品价格高昂且一般人无法通过官网或互联网上等渠道自由获取相关资料学习和实践。

有一些朋友在知道我们通过各种途径收集了大量本科电类专业的课程的实验器材后,希望向我获取相关资料、租用设备,并建议我公开分享相关资讯。由于工作忙碌和器材陈旧等各种原因,我一直并未认真整理分享相关资讯。但近日又有高校师生叩门联络并痛陈其专业教材阅读及欲实践无门之苦,又相关实验器材行业并无技术门槛且罔顾版权互抄严重,如非特殊采购机制,此类教育器材硬件贩售实难为公司牟利之主源,发达国家诸多此类教育相关资讯均已CC协议公开,并借由创客运动得到广泛传播。该应用故我摒弃非原创资料价值之疑虑,趁疫情居家期间尽数整理相关资料并通过各类渠道分享。部分资料及硬件采购资讯不易通过网页等方式分享的,或欲进行相关教学合作的同仁,欢迎通过微信ID:zhangchengwust 与我接洽,交流相关资讯。祝专业教学研之路顺遂,取得建树。

这是一个8位计算机模型系统,可用于大专、本科、硕士研究生计算机组成原理课程、计算机系统结构课程的教学实验。对提高学生的动手能力、提高学生对计算机整体和各组成部分的理解、提高学生的计算机系统综合设计能力都会有很大帮助。有一个指导实验的计算机组成原理实验辅助教学软件。

▲ 技术性能及特点

1.      采用单板式结构、计算机模型简单、实用。计算机模型分为数据通路、控制器(包括时序电路)、控制台、用户自定义区四部分,划分清晰。各部分之间采用可插、拔的导线连接,接线采用自锁紧累接方式,接线可靠。

2.      指令系统采用4位操作码,容纳16条指令,已实现了加、减、与、乘、存数、取数、转移、条件转移、停机、开中断和中断返回12条指令,其他4条指令备用。

3.      数据通路采用双端口存储器作为主存,实现了数据总线和指令总线双总线体制,能实现指令流水性能。

4.      运算器采用一片ispLSI1024实现,寄存器堆采用一片ispLSI1016实现,设计新颖。运算器能完成加、减、乘、与、直通五种运算。实现硬件乘法是本机的一大特色;寄存器堆内含4个8位寄存器,实现两个端口读、一个端口写操作。

5.      控制器有微程序控制器和组合逻辑控制器两种类型,每种类型又有流水和非流水两种方案。出厂时提供的是微程序控制器。学生可用自己设计的控制器代替微程序控制器,设计的控制器可以是常规控制器,也可以是流水控制器。

6.      实验台上提供了一片在系统编程器件ispLSI1032,学生在PC机设计好组合逻辑控制器方案后下载到ispLSI1032中,ispLSI1032就构成了新的控制器。控制器的设计并实现对提高计算机综合设计能力会有很大帮助。

7.      时序电路由一个500KHz晶体振荡器和2片GAL22V10组成。一条微程序分为4拍。一条组合逻辑指令由4个周期组成,1个周期由4拍组成。

8.      控制台包含8个数据开关,用于置数功能;16个双位开关,用于置信号电平;28个LED指示灯,用于显示地址、数据、微指令、进位和中断允许。控制台有复位、启动、和中断三个单脉冲发生器,有单拍、单步、单指令三个开关。控制台有5种操作:写存储器,读存储器,读寄存器,写寄存器,启动程序运行。

9.      用户自选器件实验区,供做中、小规模器件实验使用。

10.   逻辑笔一支。

11.   采用模块电源,重量轻,具有抗电源对地短路能力。

12.   接线采用自锁紧累接方式,接线可靠。

13.   计算机组成原理实验辅助教学软件

▲ 实验内容

1.运算器组成实验

2.双端口存储器原理实验

3.数据通路组成实验

4.微程序控制器组成实验

5.CPU组成与机器指令执行实验

6.中断实验

7.常规硬布线控制器的设计和调试

8.流水硬布线控制器的设计和调试

9.流水微程序控制器的设计和调试

▲     配套资料

TEC-4A计算机组成原理实验系统教师用实验指导书

▲ 推荐教材              

《计算机组成原理》(含CAI光盘)                    白中英主编

(本书获2005年国家教育成果二等奖)

《计算机组成原理题解、题库与实验》(含试题库光盘)  白中英、杨春武主编

(本书获2005年国家教育成果二等奖)

《计算机硬件基础课实验教程》                  白中英、杨春武、冯一兵主编

目     录

 

前言LLLLLLLLLLLLLLLLLLLLLLLLLLL2

TEC—4计算机组成原理实验系统LLLLLLLLLLLLLL 3

 

基本实验

运算器组成实验LLLLLLLLLLLLLLLLLLLLLL13

双端口存储器原理实验LLLLLLLLLLLLLLLLLLL18

数据通路组成实验LLLLLLLLLLLLLLLLLLLLL22

微程序控制器组成实验LLLLLLLLLLLLLLLLLLL28

CPU组成和机器指令执行实验LLLLLLLLLLLLLLLL40

中断原理实验LLLLLLLLLLLLLLLLLLLLLLL45

 

课程设计

硬布线控制器的设计与调试LLLLLLLLLLLLLLLLL50

流水微程序控制器的设计与调试LLLLLLLLLLLLLLL61

流水硬布线控制器的设计与调试LLLLLLLLLLLLLLL70

 

 

附录LLLLLLLLLLLLLLLLLLLLLLLLLLL78

 

 

 

 

   

 

计算机组成原理是大学计算机专业的一门专业基础课程。清华同方股份有限公司和北京邮电大学白中英教授合作,开发出TEC—4计算机组成原理实验系统。在这个实验设备上,既能够做计算机组成原理课程的实验,又能够进行计算机系统结构课程的流水实验。该实验设备计算机模型简单、实用,运算器数据通路、控制器、控制台各部分划分清晰,为学生提供了很多的动手条件,有利于提高学生学习的主动性和创造性。

为了更好地使用TEC—4计算机组成原理实验系统,我们编写了这本《教师用实验指导书》。它是TEC—4计算机组成原理实验系统的配套资料。本书提供了9个实验,其中6个基本实验,3个课程设计。对每个实验提供了接线图、实验步骤及实验结果;对3个课程设计提供了参考方案。当然,每个实验的接线方法或者源程序绝不是唯一的,实验结果也会有所不同。本书提供的接线图和源程序只是许多接线方法、源程序中的一种,只能作为参考。这些接线图、源程序和实验结果都经过实际实验验证。本书的目的是希望减少教师设计、准备、调试实验的劳动,让教师把主要精力集中在提高教学质量上。各位老师在使用中如果发现错误和不妥之处,欢迎提出宝贵意见,以便将来改进。

除了本书外,TEC—4计算机组成原理实验系统还有另一本配套资料《计算机组成原理题解、题库和实验》,这是一本科学出版社出版的学生用书。该书由北京邮电大学的白中英教授和我们共同编写,可作为TEC—4计算机组成原理实验系统的使用说明书。两本资料配合使用,效果更好。

敬请读者提出宝贵意见。

 

清华同方股份有限公司

教学仪器设备公司

2001年1月

 

 

 

 

 

 

 

 

 

 

第一节 TEC—4计算机组成原理实验系统

 

   TEC—4计算机组成原理实验系统由北京邮电大学计算机学院、清华同方教学仪器设备公司、深圳拓普威电子技术有限公司联合研制。它是一个8位计算机模型实验系统,可用于大专、本科、硕士研究生计算机组成原理课程、计算机系统结构课程的教学实验,对提高学生的动手能力、提高学生对计算机整体和各组成部分的理解、提高学生的计算机系统综合设计能力都会有很大帮助。

 

一、TEC—4计算机组成原理实验系统特点

  • 计算机模型简单、实用,运算器数据通路、控制器、控制台各部分划分清晰。
  • 计算机模型采用了数据总线和指令总线双总线体制,能够实现流水控制。
  • 控制器有微程序控制器或者硬布线控制器两种类型,每种类型又有流水和非流水两种方案。
  • 寄存器堆由1片ispLSI1016组成,运算器由1片ispLSI1024组成,设计新颖。
  • 实验台上包括了1片在系统编程芯片ispLSI1032,学生可用它实现硬布线控制器。
  • 该系统能做运算器组成、双端口存储器、数据通路、微程序控制器、中断、CPU组成与机器指令执行、流水微程序控制器、硬布线控制器、流水硬布线控制器等多种实验。
  • 电源部分采用模块电源,重量轻,具有抗电源对地短路能力。
  • 采用自锁紧累接接线方式,接线可靠。

 

  • TEC—4计算机组成原理实验系统的组成

TEC—4计算机组成原理实验系统由下述六部分组成:

  • 控制台
  • 数据通路
  • 控制器
  • 用户自选器件试验区
  • 时序电路
  • 电源部分

下面分别对各组成部分予以介绍。

 

  • 电源

电源部分由一个模块电源、一个电源插座、一个电源开关和一个红色指示灯组成。电源模块通过四个螺栓安装在实验台下面。它输出+5V电压,最大负载电流3安培,内置自恢复保险功能,具有抗+5V对地短路能力。电源插座用于接交流220伏市电,插座内装有保险丝。电源开关用于接通或者断开交流220伏市电。当电源模块输出+5V时,点亮+5V红色指示灯。

 

  • 时序发生器

时序发生器产生计算机模型所需的时序。时序电路由一个1MHz晶体振荡器、2片GAL22V10(U6和U7)组成,位于控制存储器的右边。根据本机设计,执行一条微指令需要4个时钟周期T1、T2、T3、T4,执行一条指令通常需要取指、送操作数、运算、写结果四个节拍,因此本机的基本时序如下:

高频电子线路实验箱LTE-GP-02B

欢迎了解创元素电子实验设备公开计划。回忆起往昔在学校学习电子电路等相关技术基础课的时候,相信很多同学或已经参加工作的朋友们应该都深有同感。除了课堂单纯的讲解,课本里反反复复看不懂的说明,为应付考试而不断刷题乏味,缺乏直观的实验演示(现在应该是草草在实验室走了个过场),最终导致了大家对专业的学习和应用缺乏信息。之所以心里没底气,原因其实很简单,书上讲解的基本电路没搭过没测试过,实验室里的各种仪器也做不了熟练上手的操作。

事实上,实验是学习电子技术的一个重要环节。对巩固和加深课堂教学内容,高学生实际工作技能,培养科学作风,为学习后续课程和从事实践技术工作奠定基础具有重要作用。当今我们的许多一流高校并不缺乏相应的经费,其实验室也有良好的实践条件。然而,提供给好学者的机会是不多的,种种管理制度上的原因,大家能随时随地使用这些硬件条件往往也不具备。很多同学和爱好者就和我们早期一样,在宿舍、在自己的家里自己进行补充学习和自行搭建各种实验条件,这也是催生爱好者们到处在网上交流和寻找各种实践机会和条件。

从各种单片机开发板、趣味电子实验书籍资料等等,虽然其优势和自身的特点,但绝大部分其实与学校里的科班培养计划课程及标准教科书脱节较远,并不太能帮助将来成为专业从业者的学生建立严谨的学科体系知识,进而登堂入室。另一方面,由许多校企及专业供应高校实验室建设的公司生产制造了大量相关的实验设备器材和配套资料,通过专门的业务途径或教育系统关系进入到高校的采购之列,然而这些产品价格高昂且一般人无法通过官网或互联网上等渠道自由获取相关资料学习和实践。

有一些朋友在知道我们通过各种途径收集了大量本科电类专业的课程的实验器材后,希望向我获取相关资料、租用设备,并建议我公开分享相关资讯。由于工作忙碌和器材陈旧等各种原因,我一直并未认真整理分享相关资讯。但近日又有高校师生叩门联络并痛陈其专业教材阅读及欲实践无门之苦,又相关实验器材行业并无技术门槛且罔顾版权互抄严重,如非特殊采购机制,此类教育器材硬件贩售实难为公司牟利之主源,发达国家诸多此类教育相关资讯均已CC协议公开,并借由创客运动得到广泛传播。该应用故我摒弃非原创资料价值之疑虑,趁疫情居家期间尽数整理相关资料并通过各类渠道分享。部分资料及硬件采购资讯不易通过网页等方式分享的,或欲进行相关教学合作的同仁,欢迎通过微信ID:zhangchengwust 与我接洽,交流相关资讯。祝专业教学研之路顺遂,取得建树。

“高频电子线路实验箱 (LTE-GP-02B)”详细介绍

  LTE-GP-02B高频电子线路实验箱
一、产品简介:
高频电子线路实验箱是根据实验教学的
需要和工程应用的实际情况进行设计的,采
用了多种手段和方法,如:分立元件、贴片
元件与集成电路相结合、模拟与数字相结合
、合理使用CPLD可编程器件等形式,使学
生通过该系统的使用和操作,全面掌握高频
电子线路的基本理论、了解实际工作中所需
要的知识点;同时也提高了产品性能和功能。二、产品特点:
1、采用模块化设计,使用者可以根据需要选择模块,既可节约经费又方便今后升级。
2、产品集成了多种高频电路设计及调试所必备的仪器,既可使学生在做实验时观察实验现象、调整电路时更加全面、更加有效,同时又可为学生在进行高频电路设计及调试时提供工具。
3、实验箱各模块有良好的系统性,除单元选频电路模块及波形变换模块外,其余八个模块可组合成五种典型系统:
⑴ 中波调幅发射机(535KHz~1605KHz)。
⑵ 超外差中波调幅收音机(535KHz~1605KHz,中频465KHz)。
⑶ 半双工调频无线对讲机(10MHz~15MHz,中频4。5MHz,信道间隔200KHz)。
⑷ 锁相频率合成器(频率步进40KHz~4MHz可变)。
⑸ AGC控制电路(4。5MHz)
4、实验内容非常丰富,单元实验包含了高频电子线路课程的大部分知识点,并有丰富的有一定复杂性的综合实验。
5、电路板采用全自动贴片及回流工艺制造,高频特性良好,性能稳定可靠。
6、为了保证老师教学及学生实验的方便性,该实验教学系统的仪表区与实验区用不同的颜色区分开来;
7、高频信号源部分有两路并行输出,保证在实验的过程中能同时观察到输出信号的频率;
8、在鉴频实验中,该实验教学系统一共提供了四种鉴频电路实验,包括正交鉴频、锁相鉴频、斜率鉴频和脉冲计数鉴频等,充分体现了该产品的前瞻性;
9、为了高频信号的完整性并避免高频信号之间的串扰,所有的信号连接线均采用同轴线连接;

三、实验项目及内容:
1、LC串、并联谐振回路特性实验 (模块1)
2、常用低通、带通滤波器特性实验 (模块1)
3、小信号调谐(单、双调谐)放大器实验 (模块2)
4、集成选频放大器实验 (模块2)
5、二极管双平衡混频器实验 (模块7)
6、模拟乘法器混频实验 (模块7)
7、三极管变频实验 (模块7)
8、三点式正弦波振荡器(LC、晶体)实验 (模块3)
9、压控振荡器实验 (模块3)
10、非线性丙类功率放大器实验 (模块8)
11、线性宽带功率放大器实验 (模块8)
12、集电极调幅实验 (模块8)
13、模拟乘法器调幅(AM、DSB、SSB)实验 (模块4)
14、包络检波及同步检波实验 (模块4)
15、变容二极管调频实验 (模块3)
16、正交鉴频及锁相鉴频实验 (模块5)
17、斜率鉴频及脉冲计数式鉴频实验 (模块6)
18、波形变换实验 (模块9)
19、模拟锁相环实验 (模块5)
20、自动增益控制(AGC)实验 (模块2)
21、自动频率控制(AFC)实验 (模块3、6、7)
22、中波调幅发射机组装及调试实验 (模块4、8、10)
23、超外差中波调幅收音机组装及调试实验 (模块2、4、7、10)
24、锁相频率合成器组装及调试实验 (模块5、10)
25、半双工调频无线对讲机组装及调试实验 (模块2、3、5、7、8、10)
注:模块1、模块6、模块9为选购板

五、实验所需仪器仪表:
1、LTE-GP-02B 高频电子线路实验箱(内置电源、高低频信号源、高低频频率计和扫频仪)
2、20MHz模拟双踪示波器
3、万用表
4、频谱仪(选用)

六、产品基本参数:
1、工作电压:AC 220V±10%,50Hz±10%
2、外形尺寸L×W×H(mm):460×335×143
3、重量(kg):<5

高频电子线路实验箱简介.... 1

实验一 高频小信号调谐放大器实验... 10

实验二  集成选频放大器... 19

实验三  二极管双平衡混频器... 24

实验四  模拟乘法混频... 30

实验五  三点式正弦波振荡器... 36

实验六  晶体振荡器与压控振荡器... 39

实验七  非线性丙类功率放大器实验... 42

实验八  线性宽带功率放大器... 50

实验九  集电极调幅实验... 55

实验十  模拟乘法器调幅(AM、DSB、SSB)... 59

实验十一  包络检波及同步检波实验... 65

实验十二 变容二极管调频实验... 73

实验十三  正交鉴频及锁相鉴频实验... 80

实验十四  模拟锁相环实验... 87

实验十五  自动增益控制(AGC)... 95

实验十六  超外差中波调幅收音机... 101

实验十七  超外差式FM收音机... 104

实验十八  锁相频率合成器组装及调试... 108

实验十九  半双工调频无线对讲机... 111

实验二十  中波调幅发射机组装及调试... 114

选做实验一 常用低通带通滤波器特性实验... 116

选做实验二  LC串并联谐振回路特性实验... 120

选做实验三  斜率鉴频及脉冲计数式鉴频... 128

选做实验四  波形变换实验... 134

 

 

高频电子线路实验箱简介

  • 产品组成

该产品由2个实验仪器模块和11个实验模块及实验箱体(含电源)组成。

  • 实验仪器及主要指标如下:
  • 频率计(模块6):

频率测量范围:5Hz~2400MHz

输入电平范围:100mVrms~2Vrms

测量误差:≤±20ppm(频率低端≤±1Hz)

输入阻抗:1MΩ/10pF

  • 信号源(模块1):

输出频率范围:400KHz~45MHz(连续可调)

频率稳定度:10E-4

输出波形:正弦波,谐波≤-30dBc

输出幅度:1mVp-p~1Vp-p(连续可调)

输出阻抗:50Ω

  • 低频信号源(模块1):

输出频率范围:200Hz~10KHz(连续可调,方波频率可达250KHz)

频率稳定度:10E-4

输出波形:正弦波、方波、三角波

输出幅度:10mVp-p~5Vp-p(连续可调)

输出阻抗:100Ω

  • 实验模块及电路组成如下:

1)模块2:小信号选频放大模块

包含单调谐放大电路、电容耦合双调谐放大电路、集成选频放大电路、自动增益控制电路(AGC)等四种电路。

  • 模块3:正弦波振荡及VCO模块

包含LC振荡电路、石英晶体振荡电路、压控LC振荡电路、变容二极管调频电路等四种电路。

  • 模块4:AM调制及检波模块

包含模拟乘法器调幅(AM、DSB、SSB)电路、二极管峰值包络检波电路、三极管小信号包络检波电路、模拟乘法器同步检波电路等四种电路。

  • 模块5:FM鉴频模块一

包含正交鉴频(乘积型相位鉴频)电路、锁相鉴频电路、基本锁相环路等三种电路。

  • 模块7:混频及变频模块

包含二极管双平衡混频电路、模拟乘法器混频电路。

  • 模块8:高频功放模块

包含非线性丙类功放电路、线性宽带功放电路、集成线性宽带功放电路、集电极调幅电路等四种电路。

  • 模块9:收音机模块

包含三极管变频、AM收音机、FM收音机。

  • 模块10:综合实验模块

包含话筒及音乐片放大电路、音频功放电路、天线及半双工电路、分频器电路等四种电路。

  • 模块11:斜率鉴频及脉冲计数式鉴频模块

包含斜率鉴频和脉冲计数式鉴频等电路。

  • 模块12:常用滤波器和谐振回路模块

包含常用低通带通滤波器、LC串并联谐振回路等电路。

  • 模块13:波形变换模块

包含限幅、任意波变方波、方波变脉冲波以及方波变三角波、脉冲波变锯齿波等各种电路。

  • 产品主要特点
  • 采用模块化设计,使用者可以根据需要选择模块,既可节约经费又方便今后升级。
  • 产品集成了多种高频电路设计及调试所必备的仪器,既可使学生在做实验时观察实验现象、调整电路时更加全面、更加有效,同时又可为学生在进行高频电路设计及调试时提供工具。
  • 实验箱各模块有良好的系统性,八个模块可组合成五种典型系统:

⑴ 中波调幅发射机(525KHz~1605KHz)。

⑵ 超外差中波调幅接收机(525KHz~1605KHz,中频465KHz)。

⑶ 半双工调频无线对讲机(10MHz~15MHz,中频4.5MHz,信道间隔200KHz)。

⑷ 锁相频率合成器(频率步进40KHz~4MHz可变)。

⑸  超外差FM收音机(88MHz~108MHz,中频10.7MHz)。

  • 实验内容非常丰富,单元实验包含了高频电子线路课程的大部分知识点,并有丰富的、有一定复杂性的综合实验。
  • 电路板采用贴片工艺制造,高频特性良好,性能稳定可靠。

 

  • 实验内容
  • 小信号调谐(单、双调谐)放大器实验 (模块2)
  • 集成选频放大器实验 (模块2)
  • 二极管双平衡混频器实验 (模块7)
  • 模拟乘法器混频实验 (模块7)
  • 三点式正弦波振荡器(LC、晶体)实验 (模块3)
  • 晶体振荡器与压控振荡器实验 (模块3)
  • 非线性丙类功率放大器实验 (模块8)
  • 线性宽带功率放大器实验 (模块8)
  • 集电极调幅实验 (模块8)
  • 模拟乘法器调幅(AM、DSB、SSB)实验 (模块4)
  • 包络检波及同步检波实验 (模块4)
  • 变容二极管调频实验 (模块3)
  • 正交鉴频及锁相鉴频实验 (模块5)
  • 模拟锁相环实验 (模块5)
  • 自动增益控制(AGC)实验 (模块2)
  • 中波调幅发射机组装及调试实验 (模块4、8、10)
  • 超外差中波调幅接收机组装及调试实验 (模块2、4、9、10)
  • 锁相频率合成器组装及调试实验 (模块5、10)
  • 半双工调频无线对讲机组装及调试实验(模块2、3、5、7、8、10)
  • 超外差式FM收音机实验(模块2、5、9、10)
  • 常用低通带通滤波器特性实验(模块12)
  • LC串并联谐振回路特性实验(模块12)
  • 斜率鉴频及脉冲计数式鉴频(模块11)
  • 波形变换实验(模块13)

 

  • 需另配设备
  • 实验桌
  • 20M双踪示波器(数字或模拟)
  • 万用表(数字或模拟)

ZH5004信号与系统实验箱

欢迎了解创元素电子实验设备公开计划。回忆起往昔在学校学习电子电路等相关技术基础课的时候,相信很多同学或已经参加工作的朋友们应该都深有同感。除了课堂单纯的讲解,课本里反反复复看不懂的说明,为应付考试而不断刷题乏味,缺乏直观的实验演示(现在应该是草草在实验室走了个过场),最终导致了大家对专业的学习和应用缺乏信息。之所以心里没底气,原因其实很简单,书上讲解的基本电路没搭过没测试过,实验室里的各种仪器也做不了熟练上手的操作。

事实上,实验是学习电子技术的一个重要环节。对巩固和加深课堂教学内容,高学生实际工作技能,培养科学作风,为学习后续课程和从事实践技术工作奠定基础具有重要作用。当今我们的许多一流高校并不缺乏相应的经费,其实验室也有良好的实践条件。然而,提供给好学者的机会是不多的,种种管理制度上的原因,大家能随时随地使用这些硬件条件往往也不具备。很多同学和爱好者就和我们早期一样,在宿舍、在自己的家里自己进行补充学习和自行搭建各种实验条件,这也是催生爱好者们到处在网上交流和寻找各种实践机会和条件。

从各种单片机开发板、趣味电子实验书籍资料等等,虽然其优势和自身的特点,但绝大部分其实与学校里的科班培养计划课程及标准教科书脱节较远,并不太能帮助将来成为专业从业者的学生建立严谨的学科体系知识,进而登堂入室。另一方面,由许多校企及专业供应高校实验室建设的公司生产制造了大量相关的实验设备器材和配套资料,通过专门的业务途径或教育系统关系进入到高校的采购之列,然而这些产品价格高昂且一般人无法通过官网或互联网上等渠道自由获取相关资料学习和实践。

有一些朋友在知道我们通过各种途径收集了大量本科电类专业的课程的实验器材后,希望向我获取相关资料、租用设备,并建议我公开分享相关资讯。由于工作忙碌和器材陈旧等各种原因,我一直并未认真整理分享相关资讯。但近日又有高校师生叩门联络并痛陈其专业教材阅读及欲实践无门之苦,又相关实验器材行业并无技术门槛且罔顾版权互抄严重,如非特殊采购机制,此类教育器材硬件贩售实难为公司牟利之主源,发达国家诸多此类教育相关资讯均已CC协议公开,并借由创客运动得到广泛传播。该应用故我摒弃非原创资料价值之疑虑,趁疫情居家期间尽数整理相关资料并通过各类渠道分享。部分资料及硬件采购资讯不易通过网页等方式分享的,或欲进行相关教学合作的同仁,欢迎通过微信ID:zhangchengwust 与我接洽,交流相关资讯。祝专业教学研之路顺遂,取得建树。

前 言... - 1 -

第一部分 硬件实验... - 3 -

实验系统概述... - 3 -

实验一    常用信号的分类与观察... - 9 -

实验二    信号的基本运算单元... - 14 -

实验三    信号的合成... - 18 -

实验四    线性时不变系统... - 21 -

实验五    零输入响应与零状态响应分析... - 23 -

实验六    二阶串联、并联谐振系统... - 25 -

实验七    AM调制与解调... - 28 -

实验八    FDM频分复用实验... - 31 -

实验九    信号的抽样与恢复(PAM)... - 34 -

实验十    模拟滤波器实验... - 37 -

实验十一    一阶网络特性测量... - 44 -

实验十二    二阶网络特性测量... - 47 -

实验十三    反馈系统与系统频响特性... - 50 -

实验十四       RC振荡器特性测量... - 53 -

实验十五    二阶网络状态变量的测量... - 56 -

实验十六    微分方程求解的电路仿真... - 59 -

第二部分 MATLAB软件仿真实验... - 62 -

Matlab介绍... - 62 -

实验一  连续时间信号在MATLAB中的表示... - 72 -

实验二 连续时间信号在MATLAB中的运算... - 78 -

实验三 连续时间LTI系统的时域分析... - 85 -

实验四 连续时间信号的频谱特性分析... - 89 -

实验五 连续时间LTI系统的频域分析... - 93 -

实验六 抽样定理的MATLAB仿真实验... - 98 -

实验七 连续时间系统的复频域分析... - 105 -

实验八 离散时间信号及LTI系统的Z域分析... - 114 -

附录:二次开发模块的使用说明... - 123 -

 

前 言

   本书是在《信号与系统实验指导书》第一版的基础上,增加了MATLAB软件仿真实验环节。该实验指导书内容包含了两大部分。第一部分为硬件实验部分,共有16个验证性实验;第二部分为MATLAB软件仿真实验部分,在该部分里,介绍了MATLAB软件的编程环境、编程基础及常用函数,共有8个连续信号时域分析的仿真实验。这8个实验的设计主要是针对《信号与系统》教学大纲设计的,囊括了教学大纲上的主要知识点。

 

第一部分 硬件实验

实验系统概述

1.1电路组成概述

在信号与系统实验箱中,主要由以下功能模块组成:

  • 基本运算单元;
  • 信号的合成;
  • 线性时不变系统;
  • 零输入响应与零状态响应;
  • 二阶串联谐振、二阶并联谐振;
  • 有源与无源滤波器;
  • PAM传输系统
  • FDM传输系统;
  • PAM抽样定理;
  • 二阶网络状态矢量;
  • RC振荡器
  • 一阶网络
  • 二阶网络;
  • 反馈系统应用
  • 二次开发
  • 信号产生模块

在该硬件平台中模块化功能很强,其电路布局见图1.1.1所示。对于每一个模块,在PCB板上均有电路图与之对应。每个测试模块都能单独开设实验,便于教学与学习。

在“信号与系统”实验箱中,电源插座与电源开关在机箱的后面,电源模块在实验平台电路板的下面,它主要完成交流~220V到+5V、+12V、-12V的直流变换,给整个硬件平台供电。另外在实验箱的内部还专门设计了信号产生与测试电路,以配合信号与系统实验箱的使用。对于信号产生模块各种信号的选择,学生可以通过键盘选择相应的信号用于实验测试。

THDPJ-2单片机开发实验箱

欢迎了解创元素电子实验设备公开计划。回忆起往昔在学校学习电子电路等相关技术基础课的时候,相信很多同学或已经参加工作的朋友们应该都深有同感。除了课堂单纯的讲解,课本里反反复复看不懂的说明,为应付考试而不断刷题乏味,缺乏直观的实验演示(现在应该是草草在实验室走了个过场),最终导致了大家对专业的学习和应用缺乏信息。之所以心里没底气,原因其实很简单,书上讲解的基本电路没搭过没测试过,实验室里的各种仪器也做不了熟练上手的操作。

事实上,实验是学习电子技术的一个重要环节。对巩固和加深课堂教学内容,高学生实际工作技能,培养科学作风,为学习后续课程和从事实践技术工作奠定基础具有重要作用。当今我们的许多一流高校并不缺乏相应的经费,其实验室也有良好的实践条件。然而,提供给好学者的机会是不多的,种种管理制度上的原因,大家能随时随地使用这些硬件条件往往也不具备。很多同学和爱好者就和我们早期一样,在宿舍、在自己的家里自己进行补充学习和自行搭建各种实验条件,这也是催生爱好者们到处在网上交流和寻找各种实践机会和条件。

从各种单片机开发板、趣味电子实验书籍资料等等,虽然其优势和自身的特点,但绝大部分其实与学校里的科班培养计划课程及标准教科书脱节较远,并不太能帮助将来成为专业从业者的学生建立严谨的学科体系知识,进而登堂入室。另一方面,由许多校企及专业供应高校实验室建设的公司生产制造了大量相关的实验设备器材和配套资料,通过专门的业务途径或教育系统关系进入到高校的采购之列,然而这些产品价格高昂且一般人无法通过官网或互联网上等渠道自由获取相关资料学习和实践。

有一些朋友在知道我们通过各种途径收集了大量本科电类专业的课程的实验器材后,希望向我获取相关资料、租用设备,并建议我公开分享相关资讯。由于工作忙碌和器材陈旧等各种原因,我一直并未认真整理分享相关资讯。但近日又有高校师生叩门联络并痛陈其专业教材阅读及欲实践无门之苦,又相关实验器材行业并无技术门槛且罔顾版权互抄严重,如非特殊采购机制,此类教育器材硬件贩售实难为公司牟利之主源,发达国家诸多此类教育相关资讯均已CC协议公开,并借由创客运动得到广泛传播。该应用故我摒弃非原创资料价值之疑虑,趁疫情居家期间尽数整理相关资料并通过各类渠道分享。部分资料及硬件采购资讯不易通过网页等方式分享的,或欲进行相关教学合作的同仁,欢迎通过微信ID:zhangchengwust 与我接洽,交流相关资讯。祝专业教学研之路顺遂,取得建树。

本实验台包含的实验模块
  1、 单脉冲发生电路(复位电路)
2、 八位逻辑电平输出
3、 单个和多个(8个)发光二极管电路
4、 扬声器电路
5、 继电器驱动与温度采集电路
6、 查询式键盘
7、 阵列式键盘
8、 5LED静态显示(串行)电路
9、 6LED动态显示(扫描)电路
10、 8155与单片机接口电路
11、 8255与单片机接口电路
  12、 DAC0832与单片机接口电路
13、 ADC0809与单片机接口电路
14、 MC14433与单片机接口电路
15、 单片机的Centronics(最小应用系统)总线接口1
16、 单片机的Centronics(最小应用系统)总线接口2
17、 93C46串行EEPROM与单片机接口电路
18、 EEPROM的外部程序存储器扩展电路
19、 SRAM的外部数据存储器扩展电路
20、 两组±5V、±15V直流稳压电源
实验项目
软件实验
硬件基础实验
  1、 存储器块清零
2、 二进制到BCD码转换
3、 二进制到ASCII码转换
4、 程序跳转表
5、 内存块移动
6、 数据排序
  7、 P1口输入、输出实验
8、 继电器控制实验
9、 8255输入、输出实验
10、 8155输入、输出实验
11、 5LED静态串行显示实验
12、 6LED动态扫描显示实验
13、 查询式键盘实验
14、 阵列式键盘实验
15、 ADC0809模数转换实验
16、 DAC0832数模转换实验
17、 MC14433模数转换实验
18、 EEPROM外部程序存储器扩展实验
19、 SRAM外部数据存储器扩展实验
20、 93C46串行EEPROM数据读写
21、 温度过程控制模拟实验
22、 步进电机模拟实验

 

目录

 

实验一  P1口输入、输出实验............................................ 1

实验二  继电器控制实验................................................ 5

实验三 音频控制实验................................................... 7

实验四  8255输入、输出实验............................................ 9

实验五  8155输入、输出实验........................................... 14

实验六  5LED静态串行显示实验......................................... 18

实验七  6LED动态扫描显示实验......................................... 21

实验八  查询式键盘实验............................................... 24

实验九  阵列式键盘实验............................................... 28

实验十  计数器实验................................................... 33

实验十一  定时器实验................................................. 35

实验十二  外部中断实验............................................... 38

实验十三  ADC0809 模数转换实验....................................... 41

实验十四  DAC0832数模转换实验........................................ 45

实验十五   MC14433模数转换实验....................................... 50

实验十六  EEPROM外部数据程序存储器实验............................... 56

实验十七  SRAM外部数据存储器扩展实验................................. 58

实验十八  93C46串行EEPROM数据读写................................... 62

实验十九  串行通讯实验............................................... 71

实验二十   电子时钟实验.............................................. 77

实验二十一  电子琴模拟实验........................................... 82

实验二十二  温度传感器模拟实验....................................... 87

实验二十三  温度过程控制模拟实验..................................... 92

实验二十四  步进电机模拟实验......................................... 98

实验二十五  计算器实验.............................................. 104

实验二十六  PWM直流电机驱动实验..................................... 112

实验二十七  LED点阵显示实验......................................... 115

实验二十八  液晶显示实验............................................ 121

附录一 THKL-C51仿真器联机及软件的使用说明........................... 135

附录二  使用THDPJ-1实现Keil C的在线调试:.......................... 150

附录三 单片机最小应用系统1电路原理................................. 157