MC9RS08LA8 8位MCU时钟系统与低功耗模式深度解析

MC9RS08LA8 LCD驱动与低功耗时钟配置实战指南 在嵌入式系统开发中,低功耗设计和人机交互是两大核心挑战,尤其对于电池供电的便携设备。MCU的时钟系统与LCD驱动模块的协同工作,是实现超低功耗稳定显示的关键技术基础。时钟源的选择与配置直接决定了系统功耗和显示稳定性,例如内部时钟源(ICS)模块在FLL旁路低功耗模式下,能为LCD提供稳定的外部参考时钟,使显示模块在CPU深度休眠时仍能正常工作。这种时钟联动机制,结合LCD模块的电荷泵偏置电压配置和波形寄存器控制,构成了低功耗段码LCD驱动的完整解决方案。该技术广泛应用于便携仪表、医疗设备、智能家居控制面板等 阅读详情

1. 项目概述与核心价值

在嵌入式开发领域,尤其是对成本、功耗和体积都极为敏感的消费电子、便携式设备和简单工业控制场景中,8位微控制器(MCU)依然是无可替代的主力军。今天要深入剖析的MC9RS08LA8,正是飞思卡尔(现恩智浦)RS08家族中一款极具代表性的低成本、高集成度8位MCU。它不是性能怪兽,但却是“精打细算”的典范,其设计哲学完美诠释了如何在有限的资源内,通过精巧的架构和灵活的时钟系统,实现功能、功耗与成本的绝佳平衡。

很多刚接触嵌入式的新手可能会觉得,8位MCU已经过时,或者其内部结构过于简单,没什么好研究的。这其实是一个巨大的误区。恰恰相反,理解一款像MC9RS08LA8这样经典的8位MCU,是打好嵌入式硬件和底层驱动开发根基的绝佳途径。它的内存映射、外设管理、时钟树和低功耗模式,涵盖了嵌入式系统最核心的概念。吃透了它,你再去看更复杂的32位ARM Cortex-M系列,会发现很多设计思想是一脉相承的,只是资源和性能的扩展。

MC9RS08LA8的核心魅力在于其“麻雀虽小,五脏俱全”。它集成了一个高效的RS08 CPU内核、8KB Flash、256字节RAM、10位ADC、模拟比较器、SPI、SCI、定时器,甚至还有一个LCD驱动器。而将这些模块高效、协同甚至按需“唤醒”工作的关键,就在于其 系统时钟设计 和 多种低功耗模式 。时钟是MCU的心跳,功耗模式则是其呼吸节律。如何根据任务需求,动态调整心跳频率甚至暂时停止呼吸(进入休眠),是延长电池寿命、提升系统稳定性的核心课题。本文将带你深入MC9RS08LA8的内部,不仅看懂手册上的框图,更要理解其时钟网络如何分配、各低功耗模式如何进入与退出、以及在实际项目中如何配置和避坑。

2. MC9RS08LA8 整体架构与模块解析

在拆解时钟和功耗之前,我们必须先对MC9RS08LA8有一个整体的认识。它采用48引脚封装(QFN/LQFP),提供了多达33个可配置的GPIO引脚,这些引脚与片上外设功能复用,通过优先级机制进行管理。

2.1 核心模块一览

从芯片的顶层框图可以看出,其核心组成部分包括:

  • RS08 CPU核心 :一个高度精简、高效的8位处理器内核,指令集针对小型控制任务优化。
  • 存储器 :8KB的Flash用于存储程序和非易失性数据,256字节的RAM用于运行时变量。
  • 时钟系统 :包含内部时钟源(ICS)和外部振荡器(XOSC)模块,是本文的重点。
  • 定时器 :一个16位定时器/PWM模块(TPM)和一个8位模定时器(MTIM),用于产生精确延时、捕获输入和PWM输出。
  • 通信接口 :两个串行通信接口(SCI,即UART)和一个串行外设接口(SPI),用于与外部芯片通信。
  • 模拟外设 :一个6通道10位模数转换器(ADC)和一个模拟比较器(ACMP),用于处理模拟信号。
  • 人机交互 :一个液晶显示驱动器(LCD),可直接驱动段码式LCD,以及一个8通道键盘中断模块(KBI)。
  • 系统控制 :包含复位与中断控制、操作模式管理和电源管理(含电压调节器)。

2.2 引脚复用与优先级管理

这是实际硬件设计时最容易出错的地方。MC9RS08LA8的许多引脚都有多达4到5种功能。例如,引脚 PTA2 可以配置为:

  1. 通用输入/输出(GPIO)
  2. SPI的MISO主入从出数据线
  3. 键盘中断输入KBIP2
  4. ADC输入通道ADP2
  5. SCI的接收数据线RxD
  6. LCD驱动信号LCD25

芯片通过一个固定的优先级顺序来决定某个时刻引脚实际执行哪个功能。 优先级从低到高通常为:GPIO -> 特定外设功能 。手册中的表格清晰地列出了每个引脚所有复用功能及其优先级。

实操心得: 在初始化代码中, 必须遵循“先关闭,后开启”的原则 。假设你需要使用PTA2作为SPI的MISO功能,而之前它可能被配置为ADC输入。正确的做法是:首先,确保ADC模块中关于该通道的配置被禁用;然后,再去配置SPI模块并启用其功能。如果顺序反过来,在切换的瞬间,两个模块可能会同时尝试驱动或读取该引脚,导致不可预测的行为,甚至损坏硬件。最好的实践是在系统初始化时,将所有暂时不用的外设功能全部禁用,将引脚设为高阻输入或已知状态的输出。

2.3 内存映射与寻址模式

MC9RS08LA8的地址空间是理解其编程模型的基础。其内存映射非常有特点:

  • 零页($0000-$00FF) :这是访问速度最快的区域。包含了14字节的快速访问RAM、间接寻址寄存器D[X]和X、最常用的外设控制寄存器,以及一个重要的 分页窗口($00C0-$00FF) 。
  • 高页RAM($0100-$017F) :128字节的RAM被分为两页,无法通过直接寻址模式访问。
  • 高页寄存器($0200-$027F) :一些不常用的控制寄存器位于此区域。
  • Flash存储区($2000-$3FFF) :8KB的用户程序空间。

这里的关键是 分

MC9RS08LA8中断与GPIO配置实战:从寄存器解析到低功耗设计 在嵌入式系统开发中,中断和GPIO是微控制器最基础且核心的功能模块。中断机制允许处理器及时响应外部事件,跳出顺序执行的循环,实现实时处理;而GPIO则负责与外部电路进行数字信号交互,其配置灵活性直接影响系统的稳定性和功耗。理解中断向量、优先级管理以及GPIO的输入输出模式、上拉下拉电阻、驱动强度等底层原理,是进行可靠嵌入式设计的基石。这些技术对于实现电池供电设备的低功耗运行、实时事件响应以及稳定的信号接口至关重要,广泛应用于物联网传感器节点、便携式仪表和消费电子等领域。本文以恩智浦经典的MC9RS08LA8 阅读详情

相关推荐

MC9RS08LA8 ADC模块深度解析:从架构设计到高精度低功耗实战

模数转换器(ADC)是嵌入式系统感知外部模拟世界的关键接口,其核心原理是将连续模拟信号转换为微控制器可处理的数字量。逐次逼近寄存器(SAR)型ADC因其在速度、精度和功耗间的良好平衡,成为广泛应用的主流架构。在工程实践中,ADC的性能不仅取决于其本身的分辨率,更与时钟配置、参考电压稳定性、采样保持电路以及系统级的噪声管理息息相关。深入理解ADC的时钟系统(如同步与异步时钟选择)、输入通道配置、转换时序以及特有的数据阻塞机制,对于实现高精度测量和低功耗运行具有决定性意义。这些技术尤其适用于工业控制、传感器节点

weixin_42561143的博客 239

嵌入式MCU底层开发:RS08指令集与时钟系统实战解析

在嵌入式系统开发中,微控制器(MCU)的指令集和时钟系统是决定其性能与功耗的核心基础。指令集定义了CPU执行运算和控制的基本操作集合,是软件与硬件交互的桥梁。其工作原理涉及寻址模式、寄存器操作和指令周期,直接影响代码的执行效率和尺寸。时钟系统则为整个芯片提供同步节拍,其频率和稳定性决定了指令执行速度、外设通信时序以及系统功耗。通过合理配置内部时钟源(如RC振荡器、锁相环)和总线分频,开发者可以在满足实时性要求的同时,实现动态功耗管理。本文以恩智浦MC9RS08LA8这款经典8位MCU为例,深入剖析其精简高效

justJavaC的专栏 480

MCU定时器PWM模式详解:边沿对齐与中心对齐在电机控制中的应用

定时器是微控制器中用于精确时序控制的核心外设,其核心原理是通过可编程计数器生成时间基准。PWM(脉冲宽度调制)技术通过调节脉冲信号的占空比,实现对平均电压或功率的精确控制,是嵌入式系统中的关键技术。在电机驱动、电源管理等对电磁兼容性要求高的应用场景中,PWM的生成模式直接影响系统性能。边沿对齐PWM模式逻辑简单,配置灵活,适用于LED调光等通用场景;而中心对齐PWM模式通过对称的波形设计,能有效分散开关噪声,显著降低谐波和电磁干扰,是电机控制领域的优选方案。本文以经典MCU的TPM模块为例,深入解析这两种P

anmishi2025的博客 387

MC9S08GW64时钟系统配置详解:从原理到避坑实践

在嵌入式系统开发中,时钟配置是确保微控制器稳定运行的核心基础。时钟系统如同芯片的“心脏”,其工作原理涉及频率合成、锁相环(PLL)和振荡器电路,通过生成精准的时序信号驱动CPU内核及外设。理解时钟树架构、工作模式与配置寄存器,对于优化系统性能、功耗和可靠性至关重要。其技术价值在于,合理的时钟配置能显著提升能效比,保障通信接口的时序精度,并避免因时钟漂移引发的系统故障。典型应用场景包括电池供电的物联网设备、工业控制以及需要高精度定时的计量仪器。本文聚焦于MC9S08GW64微控制器的内部时钟源(ICS)模块,

justJavaC的专栏 908

LCD驱动原理与S08MG64配置实战:从占空比偏置到波形生成

段码液晶屏(LCD)驱动是嵌入式人机界面开发中的关键技术,其核心在于通过多路复用和交变电压驱动来管理大量显示段码。多路复用技术通过占空比实现时间上的分时复用,而偏置电压则在电压域上精细划分等级,以1/3偏置最为常见,它能有效降低非选中时段的干扰电压,从而在对比度、功耗和电路复杂性之间取得平衡。这些原理共同构成了驱动波形生成的基础,确保了显示的稳定与清晰。在工程实践中,如恩智浦S08系列MCU的LCD驱动模块,开发者需深入理解占空比、偏置电压及波形相位分配的逻辑,并正确配置电源模块(如电荷泵与分压网络)和寄存

justJavaC的专栏 502

应急灯拆下来的老电池还能用吗?实测2015/2017年镍镉电池容量衰减,附Python放电曲线分析

本文通过实测2015年和2017年镍镉电池的容量衰减,结合Python放电曲线分析,探讨了废旧应急灯电池的再利用价值。结果显示,标称400mAh的2017年电池容量保持率为78.8%,而2015年300mAh电池仅剩53.3%。文章详细介绍了测试方法、数据分析及旧电池的实用评估标准,为电子爱好者提供了实用的参考指南。

justJavaC的专栏 487

S32K14x项目实战:手把手教你配置MCAL的Port模块,搞定GPIO、SPI、CAN复用

本文详细解析了S32K14x系列MCU的MCAL Port模块配置,从寄存器映射到多功能引脚配置,提供了以PTB17引脚为例的实战步骤。内容涵盖AutoSar项目中的GPIO、SPI、CAN复用配置,帮助工程师快速掌握S32K14x的引脚功能架构和优化技巧。

justJavaC的专栏 478

深入解析S08LCDV1:从原理到实战的低功耗LCD驱动配置指南

在嵌入式系统开发中,液晶显示(LCD)驱动是连接微控制器与用户界面的关键技术。其核心原理在于通过多路复用技术和交流电压波形控制液晶分子偏转,以实现稳定、低功耗的显示效果。这项技术的价值在于能够显著节省系统成本与空间,同时实现精细的功耗管理,尤其适用于便携式、电池供电的设备。在实际应用中,开发者常需面对显示闪烁、对比度不佳及低功耗模式下显示异常等工程挑战。本文以飞思卡尔S08系列微控制器内置的S08LCDV1模块为例,深入剖析其寄存器配置、低功耗协同机制及常见问题排查方法,为高效解决LCD驱动中的“玄学”问题

justJavaC的专栏 467

【信息科学与工程学】【通信工程】 第九十二 OTN网络的各类函数03

通过测量反射脉冲的幅度和极性,可以推断故障类型和位置:开路(Γ=+1, 正反射),短路(Γ=-1, 负反射),容性/感性不连续。算法:在设备背板上运行一个共享的或分段的低速管理总线(如I2C, SMBus, SPI, Ethernet),用于主控板与所有线卡、风扇盘、电源盘之间的管理通信。算法:在一段正常运行的“学习期”内,持续收集网络性能数据(如接口流量、丢包、延迟、CPU利用率),计算其统计特征(如均值、标准差、周期性),建立“性能基线”。采用高度并行的乘法累加(MAC)阵列和精密的时钟控制。

weixin_49199313的博客 638

SpringCloud2025+SpringBoot3.5.0动态路由503问题排查与负载均衡依赖解析

本文详细排查了SpringCloud 2025与SpringBoot 3.5.0环境下,Spring Cloud Gateway动态路由返回503错误的根本原因。核心问题在于新版网关未默认集成负载均衡器,导致无法解析lb://服务名。通过对比静态路由与动态路由,定位到需显式引入spring-cloud-starter-loadbalancer依赖,并提供了完整的解决方案与最佳实践配置。

s3t4u的博客 503

RPA 财务共享中心与RPA赋能

在和集团财务官交流的时候,客户经常会提到FSSC,其中有准备建立FSSC,正在建立FSSC,以及已建成FSSC正使用的,当中会有些对FSSC的疑虑和问题,所以花费些时间对FSSC进行了深入调研,从而也有幸拜读了王兴山、陈剑、梅震、钱自严等专业人士写的几本关于FSSC的书,对FSSC的前因后果有了更深入的认识,同时结合自己在FSSC的一些项目经验,故做了本次分享。 本文章主要分享财务共享中心以及R...

weixin_40244959的博客 2756

虚幻引擎5 AR开发教程02:构建和测试AR Android App

在本教程中,我们将学习如何在虚幻引擎 5 上构建和测试 AR 安卓应用。

mopanchun的博客 2650

FreeRTOS:卡在configASSERT( ( pxQueue ) )问题的解决

FreeRTOS卡在configASSERT( ( pxQueue ) )问题的解决

qq_42007164的博客 9564

QT触摸屏开发:如何通过重写事件处理实现精准按键长按检测

本文针对QT触摸屏开发中按键长按检测不精准的常见问题,深入剖析了传统信号机制失效的原因,并提供了通过重写事件处理函数(event)的解决方案。文章详细介绍了创建自定义TouchButton类、直接处理QTouchEvent以实现可靠长按检测的完整步骤与代码示例,并分享了进阶优化与避坑指南,帮助开发者实现跨平台一致的精准交互。

weixin_29207149的博客 94

gradle报错:A problem occurred configuring root project ‘My Application‘.

即使翻译了,我开始也看不懂,到处找网上教程,但都是改环境变量。马虎的我即使看了很多遍,改了很多遍也没反应过来,今天第一次搞gradle,突然就报错了,打印出。好了我就继续看项目了。

m0_59878789的博客 4090

基于Python的军事装备数据爬取与分析:从网页抓取到数据可视化实战

本文将详细介绍如何使用Python最新技术栈构建一个完整的军事装备数据爬虫系统。我们将从爬虫基础讲起,逐步深入到异步爬取、反反爬策略、数据存储与分析等高级主题,最终实现一个能够自动抓取、清洗、存储和分析军事装备数据的完整解决方案。文章包含大量实战代码示例,涉及requests-html、aiohttp、Playwright等现代爬虫库,以及MongoDB存储、Pandas分析和Pyecharts可视化等技术。关键词:Python爬虫、军事数据、异步爬取、反反爬、数据可视化。

2201_76125261的博客 1188

BlockUI专栏目录

BlockUI是一个设计NX对话框的工具,是官方推荐使用的对话框制作方法,能够与NX自身风格相统一,并且在实际开发中经常被使用。BlockUI可以帮助用户快速创建NX对话框,支持多种控件类型,如按钮、文本框、标签等。通过使用BlockUI,用户可以轻松地自定义对话框的布局、样式和交互行为。此外,BlockUI还提供了一些高级功能,如动态更新、条件显示和事件处理等,以帮助用户创建更加复杂和灵活的对话框。本专栏讲述了使用BlockUI制作NX对话框的方法,介绍了每个控件的功能,并且分享一些常用操作的源码。

王牌飞行员_里海的博客 1630

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain&#39;s apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath(&#39;DeepLearnToolbox&#39;));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand(&#39;state&#39;,0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W&#39;); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand(&#39;state&#39;,0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = &#39;sigm&#39;;%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, &#39;Too big error&#39;);```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand(&#39;state&#39;,0)sae = saesetup([784 100]);sae.ae{1}.activation_function = &#39;sigm&#39;;sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)&#39;)% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = &#39;sigm&#39;;nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, &#39;Too big error&#39;);```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x&#39;,28,28,60000))/255;test_x = double(reshape(test_x&#39;,28,28,10000))/255;train_y = double(train_y&#39;);test_y = double(test_y&#39;);%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you&#39;ll get around 1.2% errorrand(&#39;state&#39;,0)cnn.layers = { struct(&#39;type&#39;, &#39;i&#39;) %input layer struct(&#39;type&#39;, &#39;c&#39;, &#39;outputmaps&#39;, 6, &#39;kernelsize&#39;, 5) %convolution layer struct(&#39;type&#39;, &#39;s&#39;, &#39;scale&#39;, 2) %sub sampling layer struct(&#39;type&#39;, &#39;c&#39;, &#39;outputmaps&#39;, 12, &#39;kernelsize&#39;, 5) %convolution layer struct(&#39;type&#39;, &#39;s&#39;, &#39;scale&#39;, 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, &#39;Too big error&#39;);```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand(&#39;state&#39;,0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, &#39;Too big error&#39;);%% ex2 neural net with L2 weight decayrand(&#39;state&#39;,0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);%% ex3 neural net with dropoutrand(&#39;state&#39;,0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);%% ex4 neural net with sigmoid activation functionrand(&#39;state&#39;,0)nn = nnsetup([784 100 10]);nn.activation_function = &#39;sigm&#39;; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);%% ex5 plotting functionalityrand(&#39;state&#39;,0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = &#39;softmax&#39;; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand(&#39;state&#39;,0)nn = nnsetup([784 20 10]); nn.output = &#39;softmax&#39;; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

上一篇: MC9RS08LA8内存架构与寄存器编程实战:从直接页到分页窗口
下一篇: 别再乱用Select了!CAD VBA选择集过滤技巧全解析:从DXF组码到复杂条件组合
SleepInDelphi
博客等级 码龄19年 32粉丝 388原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值