常规贴片电容按材质分为COG(NPO)、X7R、Y5V,常见封装有0201、0402、0603、0805、1206、1210、1812、2010。
通常大家所说的贴片电容是指片式多层陶瓷电容(Multilayer Ceramic Capacitors),简称MLCC。它是在若干片陶瓷薄膜坯上被覆以电极桨材料,叠合后一次烧结成一块不可分割的整体,外面再用树脂包封而成的。具有小体积、大容量、Q 值高、高可靠和耐高温等优点。同时也具有容量误差较大、温度系数很高的缺点。一般用在噪声旁路、滤波器、积分、振荡电路。
NPO、X7R、Z5U和Y5V的主要区别是它们的填充介质不同。在相同的体积下由于填充介质不同所组成的电容器的容量就不同,随之带来的电容器的介质损耗、容量稳定性等也就不同。所以在使用电容器时应根据电容器在电路中作用不同来选用不同的电容器。
上表可看出各个不同材料的温度特性
一 NPO电容器
NPO是一种最常用的具有温度补偿特性的单片陶瓷电容器。它的填充介质是由铷、钐和一些其它稀有氧化物组成的。
NPO电容器是电容量和介质损耗最稳定的电容器之一。在温度从-55℃到+125℃时容量变化为0±30ppm/℃,电容量随频率的变化小于±0.3ΔC。NPO电容的漂移或滞后小于±0.05%,相对大于±2%的薄膜电容来说是可以忽略不计的。其典型的容量相对使用寿命的变化小于±0.1%。NPO电容器随封装形式不同其电容量和介质损耗随频率变化的特性也不同,大封装尺寸的要比小封装尺寸的频率特性好。NPO电容器适合用于振荡器、谐振器的槽路电容,以及高频电路中的耦合电容。
二 X7R电容器
X7R电容器被称为温度稳定型的陶瓷电容器。当温度在-55℃到+125℃时其容量变化为15%,需要注意的是此时电容器容量变化是非线性的。
X7R电容器的容量在不同的电压和频率条件下是不同的,它也随时间的变化而变化,大约每10年变化1%ΔC,表现为10年变化了约5%。
X7R电容器主要应用于要求不高的工业应用,而且当电压变化时其容量变化是可以接受的条件下。它的主要特点是在相同的体积下电容量可以做的比较大。
三 Z5U电容器
Z5U电容器称为”通用”陶瓷单片电容器。这里首先需要考虑的是使用温度范围,对于Z5U电容器主要的是它的小尺寸和低成本。对于上述三种陶瓷单片电容起来说在相同的体积下Z5U电容器有最大的电容量。但它的电容量受环境和工作条件影响较大,它的老化率最大可达每10年下降5%。
尽管它的容量不稳定,由于它具有小体积、等效串联电感(ESL)和等效串联电阻(ESR)低、良好的频率响应,使其具有广泛的应用范围。尤其是在退耦电路的应用中。
Z5U电容器的其他技术指标如下:
工作温度范围 +10℃ --- +85℃
温度特性 +22% ---- -56%
介质损耗 最大 4%
四 Y5V电容器
Y5V电容器是一种有一定温度限制的通用电容器,在-30℃到85℃范围内其容量变化可达+22%到-82%。
Y5V的高介电常数允许在较小的物理尺寸下制造出高达4.7μF电容器。
Y5V电容器的其他技术指标如下:
工作温度范围 -30℃ --- +85℃
温度特性 +22% ---- -82%
介质损耗 最大 5%
电容的主要特性参数:
(1) 容量与误差:实际电容量和标称电容量允许的最大偏差范围。一般使用的容量误差有:J级±5%,K级±10%,M级±20%。
精密电容器的允许误差较小,而电解电容器的误差较大,它们采用不同的误差等级。
常用的电容器其精度等级和电阻器的表示方法相同。用字母表示:D级—±0.5%;F级—±1%;G级—±2%;J级—±5%;K级—±10%;M级—±20%。
(2) 额定工作电压:电容器在电路中能够长期稳定、可靠工作,所承受的最大直流电压,又称耐压。对于结构、介质、容量相同的器件,耐压越高,体积越大。
(3) 温度系数:在一定温度范围内,温度每变化1℃,电容量的相对变化值。温度系数越小越好。
(4) 绝缘电阻:用来表明漏电大小的。一般小容量的电容,绝缘电阻很大,在几百兆欧姆或几千兆欧姆。电解电容的绝缘电阻一般较小。相对而言,绝缘电阻越大越好,漏电也小。
(5) 损耗:在电场的作用下,电容器在单位时间内发热而消耗的能量。这些损耗主要来自介质损耗和金属损耗。通常用损耗角正切值来表示。
(6) 频率特性:电容器的电参数随电场频率而变化的性质。在高频条件下工作的电容器,由于介电常数在高频时比低频时小,电容量也相应减小。损耗也随频率的升高而增加。另外,在高频工作时,电容器的分布参数,如极片电阻、引线和极片间的电阻、极片的自身电感、引线电感等,都会影响电容器的性能。所有这些,使得电容器的使用频率受到限制。
不同品种的电容器,最高使用频率不同。小型云母电容器在250MHZ以内;圆片型瓷介电容器为300MHZ;圆管型瓷介电容器为200MHZ;圆盘型瓷介可达3000MHZ;小型纸介电容器为80MHZ;中型纸介电容器只有8MHZ。
测评贴片电容性能,从三个方面进行,首先是贴片电容的四个常规电性能,即容量Cap. 损耗DF,绝缘电阻IR和耐电压DBV,一般地,X7R产品的损耗值DF<=2.5%,越小越好,IR*Cap>500欧*法,BDV>2.5Ur.其次是贴片电容的加速寿命性能,在125deg.c环境温度和2.5Ur直流负载条件下,芯片应能耐100小时不击穿,质量好的可耐1000小时不击穿。再次就是产品的耐热冲击性能,将电容浸入300deg.c锡炉10秒,多做几粒,显微镜下观察是否有表面裂纹,然后可测试容量损耗并与热冲击前对比判别芯片是否内部裂纹。 贴片电容在电路上出现问题,有可能是贴片电容本身质量不良,亦有可能是设计时选取规格欠佳或是在表面贴装机械力热冲击等对贴片电容造成一定的损伤等因素造成。
应用经常出现闪屏,一直没有解决,正好jquery mobile更新了1.1.0版本,升级后这个问题被弱化了
===========================================
之前作的网站总是出现进程意外,强制关闭。后来经过检查是线程问题,最后关闭线程就解决了问题
===========================================
安卓版本检查,传统方式是用户点击软件“检查版本”时来手动检查,这种方式OUT了。因为这样会有大部分人不会来检查版本,导致产品不敢大进步。
现在爱就是幸福网移动版采用服务器统一检查版本,发现有版本时提示用户,这个提示时间,提示内容都可以在服务器上操作。
因为我们用提只是安卓的一个壳即WebView,这时我们只需要加载的URL后加一个参数即可如
http://m.ai9475.com/?version=1.0.101
==========================================
这个WebView,有一问题就是加载时有空白,这时最好的办法是给它加一个背景,同时设置一个为0的透明度,这样用户不会有等的感觉,同时也可以宣传产品品牌。增加用户对产品的认识度
JAVA CODE
wv=(WebView)findViewById(R.id.wv); wv .setBackgroundColor(0); wv .setBackgroundResource(R.drawable.logo);
=========================================
JAVA CODE
package com.tian.sinykk; import android.app.Activity; import android.app.AlertDialog; import android.app.ProgressDialog; import android.content.DialogInterface; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.view.KeyEvent; import android.webkit.WebChromeClient; import android.webkit.WebView; import android.webkit.WebViewClient; public class Androidtest3Activity extends Activity { /** Called when the activity is first created. */ WebView wv; ProgressDialog pd; Handler handler; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); init();//执行初始化函数 loadurl(wv,"http://m.ai9475.com"); handler=new Handler(){ public void handleMessage(Message msg) {//定义一个Handler,用于处理下载线程与UI间通讯 if (!Thread.currentThread().isInterrupted()) { switch (msg.what) { case 0: pd.show();//显示进度对话框 break; case 1: pd.hide();//隐藏进度对话框,不可使用dismiss()、cancel(),否则再次调用show()时,显示的对话框小圆圈不会动。 break; } } super.handleMessage(msg); } }; } public void init(){//初始化 wv=(WebView)findViewById(R.id.wv); wv.getSettings().setJavaScriptEnabled(true);//可用JS wv.setScrollBarStyle(0);//滚动条风格,为0就是不给滚动条留空间,滚动条覆盖在网页上 wv.setWebViewClient(new WebViewClient(){ public boolean shouldOverrideUrlLoading(final WebView view, final String url) { loadurl(/blog_article/view,url/index.html);//载入网页 return true; }//重写点击动作,用webview载入 }); wv.setWebChromeClient(new WebChromeClient(){ public void onProgressChanged(WebView view,int progress){//载入进度改变而触发 if(progress==100){ handler.sendEmptyMessage(1);//如果全部载入,隐藏进度对话框 } super.onProgressChanged(view, progress); } }); pd=new ProgressDialog(Androidtest3Activity.this); pd.setProgressStyle(ProgressDialog.STYLE_SPINNER); pd.setMessage("数据载入中,请稍候!"); } public boolean onKeyDown(int keyCode, KeyEvent event) {//捕捉返回键 if ((keyCode == KeyEvent.KEYCODE_BACK) && wv.canGoBack()) { wv.goBack(); return true; }else if(keyCode == KeyEvent.KEYCODE_BACK){ ConfirmExit();//按了返回键,但已经不能返回,则执行退出确认 return true; } return super.onKeyDown(keyCode, event); } public void ConfirmExit(){//退出确认 AlertDialog.Builder ad=new AlertDialog.Builder(Androidtest3Activity.this); ad.setTitle("退出"); ad.setMessage("是否退出软件?"); ad.setPositiveButton("是", new DialogInterface.OnClickListener() {//退出按钮 @Override public void onClick(DialogInterface dialog, int i) { // TODO Auto-generated method stub Androidtest3Activity.this.finish();//关闭activity } }); ad.setNegativeButton("否",new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int i) { //不退出不用执行任何操作 } }); ad.show();//显示对话框 } public void loadurl(/blog_article/final WebView view,final String url/index.html){ new Thread(){ public void run(){ handler.sendEmptyMessage(0); view.loadUrl(/blog_article/url/index.html);//载入网页 } }.start(); } }
main.xml
<?xml version="1.0" encoding="utf-8"?> <AbsoluteLayout android:orientation="vertical" android:id="@+id/tab1" android:layout_width="fill_parent" android:layout_height="fill_parent" xmlns:android="http://schemas.android.com/apk/res/android"> <WebView android:id="@+id/wv" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_x="0.0dip" android:layout_y="0.0dip" android:layout_weight="1.0" /> </AbsoluteLayout>
今天又做了些修改,增加了菜单,刷新,分享,退出。同时也增加了加载进度条
package com.tian.sinykk; import android.app.Activity; import android.app.AlertDialog; import android.app.ProgressDialog; import android.content.DialogInterface; import android.content.Intent; import android.os.Bundle; import android.os.Handler; import android.view.KeyEvent; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.webkit.WebChromeClient; import android.webkit.WebView; import android.webkit.WebViewClient; public class Androidtest3Activity extends Activity { /** Called when the activity is first created. */ WebView wv; ProgressDialog pd; Handler handler; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); init();//执行初始化函数 loadurl(wv,"http://m.ai9475.com"); } // 点击Menu时,系统调用当前Activity的onCreateOptionsMenu方法,并传一个实现了一个Menu接口的menu对象供你使用 @Override public boolean onCreateOptionsMenu(Menu menu) { /* * add()方法的四个参数,依次是: * 1、组别,如果不分组的话就写Menu.NONE, * 2、Id,这个很重要,Android根据这个Id来确定不同的菜单 * 3、顺序,那个菜单现在在前面由这个参数的大小决定 * 4、文本,菜单的显示文本 */ menu.add(Menu.NONE, Menu.FIRST + 1, 5, "分享").setIcon( android.R.drawable.ic_menu_share); // setIcon()方法为菜单设置图标,这里使用的是系统自带的图标,同学们留意一下,以 // android.R开头的资源是系统提供的,我们自己提供的资源是以R开头的 menu.add(Menu.NONE, Menu.FIRST + 2, 2, "刷新").setIcon( android.R.drawable.ic_menu_rotate); menu.add(Menu.NONE, Menu.FIRST + 3, 6, "退出").setIcon( android.R.drawable.ic_menu_close_clear_cancel); // return true才会起作用 return true; } //菜单项被选择事件 @Override public boolean onOptionsItemSelected(MenuItem item) { WebView wv1=(WebView)findViewById(R.id.wv); switch (item.getItemId()) { case Menu.FIRST + 1: //分享 Intent intent=new Intent(Intent.ACTION_SEND); intent.setType("text/plain"); intent.putExtra(Intent.EXTRA_SUBJECT,wv1.getTitle()); intent.putExtra(Intent.EXTRA_TEXT, wv1.getTitle()+" 可通过后面网址访问"+wv1.getUrl()); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(Intent.createChooser(intent, "分享")); break; case Menu.FIRST + 2: //刷新 wv1.reload(); break; case Menu.FIRST + 3: //退出应用 System.exit(0); break; } return false; } public void init(){//初始化 wv=(WebView)findViewById(R.id.wv); wv.getSettings().setJavaScriptEnabled(true);//可用JS wv.setScrollBarStyle(0);//滚动条风格,为0就是不给滚动条留空间,滚动条覆盖在网页上 wv.setWebViewClient(new WebViewClient(){ public boolean shouldOverrideUrlLoading(final WebView view, final String url) { loadurl(/blog_article/view,url/index.html);//载入网页 return true; } }); wv.setWebChromeClient(new WebChromeClient() { public void onProgressChanged(WebView view, int progress) { setTitle("页面加载中,请稍候..." + progress + "%"); setProgress(progress * 100); if (progress == 100) { setTitle(view.getTitle()); } } }); } public boolean onKeyDown(int keyCode, KeyEvent event) {//捕捉返回键 if ((keyCode == KeyEvent.KEYCODE_BACK) && wv.canGoBack()) { wv.goBack(); return true; }else if(keyCode == KeyEvent.KEYCODE_BACK){ ConfirmExit();//按了返回键,但已经不能返回,则执行退出确认 return true; } return super.onKeyDown(keyCode, event); } public void ConfirmExit(){//退出确认 AlertDialog.Builder ad=new AlertDialog.Builder(Androidtest3Activity.this); ad.setTitle("退出"); ad.setMessage("是否退出软件?"); ad.setPositiveButton("是", new DialogInterface.OnClickListener() {//退出按钮 @Override public void onClick(DialogInterface dialog, int i) { Androidtest3Activity.this.finish();//关闭activity } }); ad.setNegativeButton("否",new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int i) { //不退出不用执行任何操作 } }); ad.show();//显示对话框 } public void loadurl(/blog_article/final WebView view,final String url/index.html){ new Thread(){ public void run(){ view.loadUrl(/blog_article/url/index.html);//载入网页 } }.start(); } /* *//** * 分享应用 * @param view *//* public void onClickShare() { Intent sendIntent = new Intent(); sendIntent.setAction(Intent.ACTION_SEND); sendIntent.putExtra(Intent.EXTRA_TEXT, "This is my text to send."); sendIntent.setType("text/plain"); startActivity(sendIntent); }*/ }
==============================
应用中加了友盟统计,但在运行时报找不到友盟的类,原因是打包时错误,使用如下方式
右键工程,
Build path,
java build path,选择libraries
在右边的按钮中点击“Add Library”
选择“User library”,点击“下一步”
点击“User librarys”按钮
在出现的界面中点击“New..”按钮
在弹出的界面中随便起一个名字,点击“确定”
点击“Add jars”按钮选择第三方jar包,点击“确定”完成操作。
这样的话该jar包会被一起打包到apk中,问题也就解决了!
=========================================
好吧,我没有思路,就把用到的函数及其含义先罗列出来,等到有思路的时候,再来完成吧。
gluLookAt:设置视觉坐标系。在实际的编程应用中,用户在完成场景的建模后,往往需要选择一个合适的视角或者不停地变换视角,以对场景作为观察。
void gulLoaaAt(GLdouble eyex, GLdouble eyey,GLdouble eyez, GLdouble centerx, GLdouble centery, GLdouble centerz, GLdouble upx, GLdouble upy, GLdouble upz); 前三个参数是视点位置;中间三个参数是参考点位置;最后三个参数是视点的方向。 该函数定义一个额视图矩阵,并与当前矩阵相乘。 1.改变前三个参数的值可以模拟人在实际环境中的移动。 2.改变中间三个参数的值,可以模拟人眼的移动,即观察场景的变化。 3.后三个参数的值比较特殊,它所定制的不是一个点,而是一个方向,即决定将哪一个坐标轴作为向上的方向,如果向上的方向与观察点到中心的方向一致,结果将是不正确的
glMatrixMode:指定哪一个矩阵是当前矩阵。
void glMatrixMode(GLenum mode); 指定了需要修改的是模型视图举证、投影矩阵还是纹理矩阵。mode的值可以是: GL_MODELVIEW:对模型视景矩阵堆栈应用随后的矩阵操作。 GL_PROJECTION:对投影矩阵应用随后的矩阵操作。 GL_TEXTURE:对纹理矩阵堆栈应用随后的矩阵操作。 接下来调用的变换函数将影响它指定的矩阵。注意,一次只能修改一个矩阵。在默认情况下,变换函数修改的矩阵是模型视图矩阵。另外,在默认情况下这3个矩阵均为单位矩阵。
glLoanIdentity:该函数的功能是重置当前指定的矩阵为单位矩阵(4*4).
视口函数glViewport:
void glViewport(GLint x, GLint y, GLsizei width, GLsizei height); 在窗口中定义一个像素矩阵,最终的图像将映射到这个矩阵中。(x, y)参数指定了视口的左下角,width和height表示这个视口矩形的宽度和高度。在默认情况下,视口的初始值是(0,0,winWidth, winHeight),其中winWidth和winHeight指定了窗口的大小。