avr128硬件调试

avr128硬件调试
avr128硬件调试

ATMEGA128相关例程

自己学avr单片机已经有相当一段时间了,一开始用的是atmega128,觉得不是很好用。于是自己去买了一块16L的芯片,觉得还行。一开始用的是ICC AVR,应为它用起来比较简单,不像winavr那样,要写个Makefie ,比较的麻烦,但icc avr的缺点是太过于简陋,调试程序时,感觉不是很好。后来经同学介绍,用起了winavr,其实也是比较的简单,只不过要加一个makefile而已,其实makefile可以用软件自带的组建自动生成,只需修改几个参数就可以用。后来又用起了code vision avr,虽然不太习惯,也谈不上不好用.

需要注意的是,三个不同的软件所带的同文件不一样。icc avr 是iom128v.h(姑且以128为例),winavr是avr/io.h,不过makefile中要设置芯片为atmega128.而cvavr则是mega128.h。

记得一开始的时候,我对这些不同的同文件不是很理解,是从一个学长那里了解到,才弄明白的。其实前两个软件只需把头文件稍微改一下基本上可以通用。而最后一个软件的中断的写法似乎不太一样,因而和钱两个软件的兼容性是最差的。

总体说winavr给人的感觉是比较专业

/*

硬件环境:atmega128开发板

软件环境:CodeVisionAVR-C

*/

#include

#define uchar unsigned char

#define uint unsigned int

uchar cnt;

void timer1_init()

{

TCCR1B=0X00; //先停止定时器1

TCNT1H=0XF0; //设定定时器初值

TCNT1L=0XBE;

TCCR1A=0X00; //启动定时器1

TCCR1B=0X05; //使用1024分频

}

interrupt [TIM1_OVF] void timer1_ovf_isr(void)

{

TCNT1H=0XF0; //重载定时器初值

TCNT1L=0XBE;

DDRE|=1<<2;

PORTE|=1<<2;

DDRA=0xff;

PORTA=cnt; //输出led的值到端口B

cnt++;

if(cnt==255)

cnt=0;

}

void main()

{

//DDRB=0XFF;

SREG|=0X80;

TIMSK=0X04;

timer1_init();

while(1)

{;

}

}

/***************************************************************************/ /*ADC测试程序 */

/*目标器件:ATmega128 */

/*晶振:RC 8MHZ */

/*编译环境:ICCAVR 7.13A */

/*E-Mail:number007cool@https://www.360docs.net/doc/4c3170479.html, */

/*时间:2010年11月13日 */

//Aref接AVCC(+5V),采用Aref作参考电压

/*用数码管显示AD转换的结果*/

/***************************************************************************/ /*********************************包含头文件********************************/

#include

#include

/********************************数码管段码表*******************************/ extern const unsigned char tab[]={0x3f,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,

0x7F,0x6F};

/*********************************全局变量**********************************/ unsigned int adc_rel=0;

/**************************************************************************** 函数功能:ADC初始化函数

入口参数:

出口参数:

****************************************************************************/ void adc_init(void)

{

DDRF&=0XFE; //PORTF0设置为输入,即作为ADC0口输入模拟电压

PORTF&=0XFE; //PORTF0设置为输入低电平

ADCSRA=0x00; //关ADC

ADMUX = 0X00; //采用Aref作为参考电压,ADC0单端输入,右对齐

ACSR=(1<

ADCSRA = (1<

//ADEN,启动ADC;ADSC,ADC开始转换;ADIE,ADC中断使能;ADPSx,设置分频因子64

}

/**************************************************************************** 函数功能:ADC中断函数

入口参数:

出口参数:

****************************************************************************/ #pragma interrupt_handler adc_isr:iv_ADC

void adc_isr(void)

{

//int data_h,data_l;

//data_l=ADCL;

//data_h=ADCH;

ADCSRA = 0x00;

ADCSRA = (1<

adc_rel=ADC;

/*

if(adc_rel>0x1ff)

{

PORTA|=1<<2;

}

else

PORTA&=~(1<<2);

*/

}

/**************************************************************************** 函数功能:延时子程序

入口参数:

出口参数:

****************************************************************************/ void delay(void)

{

int i;

for(i=0;i<1800;i++);

}

/**************************************************************************** 函数功能:显示子程序

入口参数:k

出口参数:

****************************************************************************/ void display(unsigned int k)//发光二极管显示初始化

{

DDRE|=1<<2;

PORTE|=1<<2;

DDRA=0XFF;

PORTA=k;

}

#define SS 0

#define SCK 1

#define MOSI 2

#define MISO 3

#define SS_H() PORTB|=(1<

#define SS_L() PORTB&=~(1<

#define led0_en() {DDRB|=1<<4;PORTB|=(1<<4);} //开第一个数码管的位选

#define led0_dis() {DDRB|=1<<4;PORTB&=~(1<<4);} //关第一个数码管的位选

#define led1_en() {DDRB|=1<<5;PORTB|=(1<<5);}

#define led1_dis() {DDRB|=1<<5;PORTB&=~(1<<5);}

#define led2_en() {DDRB|=1<<6;PORTB|=(1<<6);}

#define led2_dis() {DDRB|=1<<6;PORTB&=~(1<<6);}

#define led3_en() {DDRB|=1<<7;PORTB|=(1<<7);}

#define led3_dis() {DDRB|=1<<7;PORTB&=~(1<<7);}

#define OE 7

#define point 3

#define dp 7

#include

#include

const unsigned char table[]={0x3F,0x06,0x5B,0x4F,0x66, //0,1,2,3,4

0x6D,0x7D,0x07,0x7F,0x6F, //5,6,7,8,9

0x77,0x7C,0x39,0x5E,0x79,0x71,0x00}; //a,b,c,d,e,f

volatile unsigned char led_buffer[4];

void delay_1us(void) //1us延时函数

{

asm("nop");

}

void delay_nus(unsigned int n) //N us延时函数

{

unsigned int i=0;

for (i=0;i

delay_1us();

}

void delay_1ms(void) //1ms延时函数

{

unsigned int i;

for (i=0;i<1140;i++);

}

void delay_nms(unsigned int n) //N ms延时函数

{

for (i=0;i

delay_1ms();

}

/*完成spi的初始化*/

void spi_init(void)

{

DDRB |= (1<

SPCR = (1<

/*spi主机传送数据*/

void SPI_MasterTransmit(char Data)

{

/* 启动数据传输 */

SPDR = Data;

/* 等待传输结束 */

while(!(SPSR & (1<

;

}

/*完成对HC595的初始化*/

void HC_595_init(void)

{

DDRC |= (1<

PORTC &= (1<

PORTB = 0x0F; //同时打开四个数码管的位选

spi_init();

led_buffer[0]=16; //初始化数码管段码

led_buffer[1]=16;

led_buffer[2]=16;

led_buffer[3]=16;

}

/*HC595完成传送数据*/

void HC_595_OUT(unsigned char data)

{

SS_L();

SPI_MasterTransmit(data);

SS_H();

}

void leddis_update(void)

{

/*最低位数码管,第四个数码管*/

if(point==0)

HC_595_OUT(table[led_buffer[3]]|(1<

else

HC_595_OUT(table[led_buffer[3]]);

led0_en();

delay_nus(60);

led0_dis();

if(point==1)

HC_595_OUT(table[led_buffer[2]]|(1<

else

HC_595_OUT(table[led_buffer[2]]);

led1_en();

delay_nus(60);

led1_dis();

if(point==2)

HC_595_OUT(table[led_buffer[1]]|(1<

else

HC_595_OUT(table[led_buffer[1]]);

led2_en();

delay_nus(60);

led2_dis();

/*最高位数码管,第一个数码管*/

if(point==3)

HC_595_OUT(table[led_buffer[0]]|(1<

else

HC_595_OUT(table[led_buffer[0]]);

led3_en();

delay_nus(60);

led3_dis();

}

void display_led(unsigned int data)

{

if(data>9999)

{

HC_595_OUT(0xFF);//当计数大于9999时,四个数码管同时输出8 PORTB|=((1<<4)|(1<<5)|(1<<6)|(1<<7));

}

else if(data>999)

{

led_buffer[0]=data/1000;

led_buffer[1]=(data%1000)/100;

led_buffer[2]=(data%100)/10;

led_buffer[3]=data%10;

leddis_update();

}

else if(data>99)

{

led_buffer[0]=data/1000; //关闭最高位的那个数码管

led_buffer[1]=(data%1000)/100;

led_buffer[2]=(data%100)/10;

led_buffer[3]=data%10;

leddis_update();

}

else if(data>9)

{

led_buffer[0]=data/1000;

led_buffer[1]=16;

led_buffer[2]=(data%100)/10;

led_buffer[3]=data%10;

leddis_update();

}

else

{

led_buffer[0]=data/1000;

led_buffer[1]=16;

led_buffer[2]=16;

led_buffer[3]=data%10;

leddis_update();

}

}

volatile unsigned int countnum=0;

void timer1_init(void)

{

TCCR1B = 0x00; //stop

TCNT1H = 0x8F; //setup

TCNT1L = 0x81;

OCR1AH = 0x70;

OCR1AL = 0x7F;

OCR1BH = 0x70;

OCR1BL = 0x7F;

OCR1CH = 0x70;

OCR1CL = 0x7F;

ICR1H = 0x70;

ICR1L = 0x7F;

TCCR1A = 0x00;

TCCR1B = 0x04; //start Timer

}

#pragma interrupt_handler timer1_ovf_isr:15

void timer1_ovf_isr(void)

{

TCNT1H = 0x8F; //reload counter high value

TCNT1L = 0x81; //reload counter low value

countnum++;

if(countnum>9999) countnum=0;

}

void init_devices(void)

{

CLI(); //disable all interrupts

timer1_init();

TIMSK = 0x04; //timer interrupt sources

SEI(); //re-enable interrupts

}

/**************************************************************************** 函数功能:主程序

入口参数:

出口参数:

****************************************************************************/ void main(void)

{

init_devices();

HC_595_init();

adc_init();

SEI();//开全局中断变量

display(0);

while(1)

{

delay();

display_led(adc_rel/1024.0*5*1000);

}

}

/************************************************

文件:main.c

用途:

注意:内部8M晶振

************************************************/

#include "config.h"

/*向EEPROM里面写入数据

输入量:地址,数据*/

void EEPROM_write(unsigned int uiAddress,unsigned char ucData) {

while(EECR&(1<

EEAR = uiAddress; //地址

EEDR = ucData; //数据

EECR |=(1<

EECR |=(1<

}

/*从EEPROM指定的地址里面读出相应的数据*/

unsigned char EEPROM_read(unsigned int uiAddress)

{

while(EECR&(1<

EEAR = uiAddress; //设置地址寄存器

EECR |=(1<

return EEDR; //返回读入EEDR里面的数据

}

void main(void)

{

unsigned char temp=123;

unsigned char data;

HC_595_init();

EEPROM_write(0x01,temp);

data=EEPROM_read(0x01);

while(1)

{

Seg7_Led_display(data); //调用显示函数将写入的数据又读出来 }

}

/*定时器0和2(均为八位的定时计数器)有四种工作模式,此例是工作在普通模式。

在此模式下,计数器不断的累加,当计数到最大值0xff后返回到0x00重新开始,在TCNT0 为0 的同时,T/C溢出标志TOV0置位*/

//使用轮循方式,当TIFR溢出时,uc_led加1,输出到led时期发光

//TIFR中断标志寄存器

#include

#define uchar unsigned char

uchar uc_led,k;

void main()

{

//设置数码管输出高电平

DDRE|=1<<2;

PORTE|=1<<2;

DDRA=0XFF;

PORTF=0XFF;

TCNT0=0X00;//设定定时计数器的初值为0

TCCR0=0X05;//使用1024分频(共有7种时钟)

uc_led=0;

k=0;

while(1)

{

while(!(TIFR&0X01));//循环检测TIFR中的溢出标志是否有效

//PORTA=uc_led;

uc_led++;

if(uc_led==255)

{uc_led=0;

k++;

if(k==255)

k=0;

PORTA=k;

}

TIFR|=0X01; //写1到TIFR的TOV0位清除溢出标志为TOV0

}

}

/***************************************************************************/ /*定时器T0测试程序 */

/*目标器件:ATmega128 */

/*晶振:RC 8MHZ */

/*编译环境:ICCAVR 7.13 */

/*E-Mail:number007cool@https://www.360docs.net/doc/4c3170479.html, */

/*时间:2010年3月14日 */

/*TCCRn定时计数器控制寄存器

TCNTn计数器,不断的计数

TIMSK定时计数器中断屏蔽寄存器

TIFR中断标志寄存器

*/

/***************************************************************************/ /*********************************包含头文件********************************/

#include

#include

/**********************************全局变量*********************************/ int k;

/**************************************************************************** 函数功能:端口初始化程序

入口参数:

出口参数:

****************************************************************************/ void port_init (void)

{

DDRE|=1<<2;

PORTE|=1<<2;

DDRA=0XFF;

PORTA=0XFF;

}

/**************************************************************************** 函数功能:定时器初始化程序

入口参数:

出口参数:

****************************************************************************/ void timer0_init(void)

{

TCCR0 = 0x00; //stop

ASSR = 0x00; //set async mode

TCNT0 = 0x3c;

OCR0 = 0x00;

TCCR0 = 0x05; //1024分频

}

/**************************************************************************** 函数功能:定时中断服务程序

入口参数:

出口参数:

****************************************************************************/ #pragma interrupt_handler timer0_ovf_isr:17

void timer0_ovf_isr(void)

{

TCNT0 = 0x3c;

k=k+1;

if(k>150)

{

k=0;

PORTA ^= 0x01;

}

}

/**************************************************************************** 函数功能:主程序

入口参数:

出口参数:

****************************************************************************/ void main (void)

{

CLI(); //disable all interrupts

port_init();

timer0_init();

MCUCR = 0x00;

TIMSK = 0x01; //T0溢出使能

SEI(); //enable interrupts

}

6、定时器1测试程序

/***************************************************************************/ /*定时器T1测试程序 */

/***************************************************************************/ /*********************************包含头文件********************************/

#include

#include

/**********************************全局变量*********************************/ int k;

/**************************************************************************** 函数功能:端口初始化程序

入口参数:

出口参数:

****************************************************************************/ void port_init (void)

{

DDRE|=1<<2;

PORTE|=1<<2;

DDRA=0XFF;

PORTA=0XFF;

}

/**************************************************************************** 函数功能:定时器初始化程序

入口参数:

出口参数:

****************************************************************************/ void timer1_init(void)

{

TCCR1B = 0x00; //stop,关掉

TCNT1H = 0xFF; //setup 0.2s设置高4位初值

TCNT1L = 0x3D; //设置低四位初值

OCR1AH = 0x00;

OCR1AL = 0xC3;

OCR1BH = 0x00;

OCR1BL = 0xC3;

OCR1CH = 0x00;

OCR1CL = 0xC3;

ICR1H = 0x00;

ICR1L = 0xC3;

TCCR1A = 0x00;

TCCR1B = 0x05; //start Timer 1024

}

/****************************************************************************

函数功能:定时中断服务程序

入口参数:

出口参数:

****************************************************************************/ #pragma interrupt_handler timer1_ovf_isr:15

void timer1_ovf_isr(void)

{

TCNT1H = 0xFF; //reload counter high value

TCNT1L = 0x3D; //reload counter low value

k=k+1;

if(k>40)

{

k=0;

PORTA ^= 0x01;

}

}

/**************************************************************************** 函数功能:主程序

入口参数:

出口参数:

****************************************************************************/ void main (void)

{

CLI(); //disable all interrupts

port_init();

timer1_init();

MCUCR = 0x00;

TIMSK = 0x04; //T0溢出使能

SEI(); //enable interrupts

}

/***************************************************************************/ /*定时器T1测试程序 */

/*定时时间为1秒 */

/***************************************************************************/ /*********************************包含头文件********************************/

#include

#include

/**********************************全局变量*********************************/ int countnum;

/**************************************************************************** 函数功能:端口初始化程序

入口参数:

出口参数:

****************************************************************************/ void port_init (void)

{

DDRE|=1<<2;

PORTE|=1<<2;

DDRA=0XFF;

PORTA=0XFF;

}

/**************************************************************************** 函数功能:定时器初始化程序

入口参数:

出口参数:

****************************************************************************/ void timer1_init(void)

{

TCCR1B = 0x00; //stop

TCNT1H = 0x8F; //setup

TCNT1L = 0x81;

OCR1AH = 0x70;

OCR1AL = 0x7F;

OCR1BH = 0x70;

OCR1BL = 0x7F;

OCR1CH = 0x70;

OCR1CL = 0x7F;

ICR1H = 0x70;

ICR1L = 0x7F;

TCCR1A = 0x00;

TCCR1B = 0x04; //start Timer

}

/**************************************************************************** 函数功能:定时中断服务程序

入口参数:

出口参数:

****************************************************************************/ #pragma interrupt_handler timer1_ovf_isr:15

void timer1_ovf_isr(void)

{

TCNT1H = 0x8F; //reload counter high value

TCNT1L = 0x81; //reload counter low value

countnum++;

if(countnum==256) countnum=0;

}

/**************************************************************************** 函数功能:主程序

入口参数:

出口参数:

****************************************************************************/ void main (void)

{

CLI(); //disable all interrupts

port_init();

timer1_init();

TIMSK = 0x04; //T0溢出使能

SEI(); //enable interrupts

while(1)

{

PORTA=countnum;

}

}

/***************************************************************************/ /*串口0测试程序 */

/*目标器件:ATmega128 */

/*晶振:RC 8MHZ */

/*编译环境:ICCAVR 7.13A */

/*时间:2010年3月14日*/

/*E-Mail:number007cool@https://www.360docs.net/doc/4c3170479.html, */

/***************************************************************************/

/*********************************包含头文件********************************/

#include

#include

/***********************************宏定义**********************************/

#define fosc 8000000 //晶振8MHZ

#define baud 2400 //波特率

/**************************************************************************** 函数功能:uart0初始化程序

入口参数:

出口参数:

****************************************************************************/ void uart0_init(void)

{

UCSR0B = 0x00; //关闭UART00

UCSR0A = 0x00; //不使用倍速发送(异步)

UCSR0C =(1<

UBRR0L=(fosc/16/(baud+1))%256; //异步正常情况下的计算公式

UBRR0H=(fosc/16/(baud+1))/256;

UCSR0B =(1<

}

/**************************************************************************** 函数功能:uart0发送单字节数据

入口参数:c

出口参数:

****************************************************************************/ void putchar0(unsigned char c)

{

while (!(UCSR0A&(1<

UDR0=c; //将要发送的数据装入UDR0寄存器

}

/**************************************************************************** 函数功能:uart0接收单字节数据

入口参数:

出口参数:

****************************************************************************/ unsigned char getchar0(void)

{

while(!(UCSR0A& (1<

return UDR0;

}

/**************************************************************************** 函数功能:uart0发送字符串数据

入口参数:*s

出口参数:

****************************************************************************/ void puts0(char *s)

{

while (*s)

{

putchar0(*s);

s++;

}

putchar0(0x0a);//回车换行

//putchar0(0x0d);

}

/**************************************************************************** 函数功能:主程序

入口参数:

出口参数:

****************************************************************************/ void main(void)

{

unsigned char i;

uart0_init();//UART0初始化

puts0("HELLO!");

while(1)

{

puts0("test ok!");

}

}

9、串口通信(USART1)

/***************************************************************************/ /*串口1测试程序 */

/*目标器件:ATmega128 */

/*晶振:RC 8MHZ */

/*选用的波特率:9600(也可以另外设定),改了波特率后需要将电源拔了再插上方可使用*/

/*编译环境:ICCAVR 7.13 */

/*E-Mail:number007cool@https://www.360docs.net/doc/4c3170479.html, */

/*时间:2010年1月14日 */

/***************************************************************************/ /*********************************包含头文件********************************/

#include

#include

/***********************************宏定义**********************************/ #define fosc 8000000 //晶振8MHZ

#define baud 9600 //波特率

/**************************************************************************** 函数功能:uart1初始化程序

入口参数:

出口参数:

****************************************************************************/ void uart1_init(void) //USART1初始化

{

UCSR1B = 0x00; //关闭USART1

UCSR1A = 0x00; //不适使用倍速发送

UCSR1C = (1<

UBRR1L=(fosc/16/(baud+1))%256;//异步正常模式下,UBRR的计算公式

UBRR1H=(fosc/16/(baud+1))/256;

UCSR1B =(1<

}

/**************************************************************************** 函数功能:uart1发送单字节数据

入口参数:c

出口参数:

****************************************************************************/

void putchar1(unsigned char c)//串口1发送字符

{

while (!(UCSR1A&(1<

UDR1=c;

}

/**************************************************************************** 函数功能:uart1接收单字节数据

入口参数:

出口参数:

****************************************************************************/ unsigned char getchar1(void) //串口1接回收数据

{

while(!(UCSR1A& (1<

return UDR1; //将接收到的字符返回

}

/**************************************************************************** 函数功能:uart1发送字符串数据

入口参数:*s

出口参数:

****************************************************************************/

void puts1(char *s)

{

while (*s)

{

putchar1(*s);

s++;

}

putchar1(0x0a);//回车换行

putchar1(0x0d);

}

/**************************************************************************** 函数功能:主程序

入口参数:

出口参数:

****************************************************************************/ void main(void)

{

unsigned char i;

uart1_init();

puts1("HELLO!");

while(1)

{

puts1("test ok!");

}

}

需要注意的是:

1、要保证串口通信的成功,PC机和单片机必须设置成一样的波特率,这样才能够保证串口通信的成功。

2、上面提到的串口指的是九针的串口,它的几个相应的管脚定义如下:

2 接受数据(RXD)

3 发出数据(TXD)

5 信号地线(SG)

下面是引脚图

ATMEGA128单片机SPI通信驱动程序

/************************************************

文件:spi.c

用途:SPI驱动

/************************************************************************* ** 函数名称: spi_init(void)

** 功能描述: SPI初始化

** 输入:

** 输出 :

** 全局变量: 无

** 调用模块:

** 说明:

** 注意:

**************************************************************************/ void spi_init(void)

{

DDRB |= (1<

SPCR = (1<

//SPE,使能SPI;MSTR,主机模式;SPR0和SPR1设置时钟频率

}

/************************************************************************* ** 函数名称: SPI_MasterTransmit(char Data)

** 功能描述: SPI主机发送数据

** 输入: Data 需要通过SPI传输的数据

** 输出 :

** 全局变量: 无

** 调用模块:

** 说明:

** 注意:

**************************************************************************/ void SPI_MasterTransmit(char Data)

{

/* 启动数据传输 */

SPDR = Data;

/* 等待传输结束 */

while(!(SPSR & (1<

;

}

#include

#include

#define uint unsigned int

#define uchar unsigned char

void delay_ms(uint n)

{uint i=0,j;

while(i

{for(j=0;j<1000;j++);

i++;

}

}

void pwm0_init(void)

{DDRB=0X10;

TCCR0=0X00;

OCR0=0X7F;//8位的定时计数器的初值设定为0x7f

TCNT0=0; //计数器

TCCR0=0X6A;//设置为快速pwm模式,采取8分频

}

void main(void)

{uchar wide;

char temp;

pwm0_init();

while(1)

{delay_ms(50);

if(++wide==255)

{wide=0;

}

OCR0=wide;

}

}

定时器1数码管显示(1s)

config.h文件

/*时间误差:0.00672秒每秒*/

#define SS 0

#define SCK 1

#define MOSI 2

#define MISO 3

#define SS_H() PORTB|=(1<

#define SS_L() PORTB&=~(1<

//注意,不要漏掉了()

#define led0_en() {DDRB|=1<<4;PORTB|=(1<<4);} //开第一个数码管的位选#define led0_dis() {DDRB|=1<<4;PORTB&=~(1<<4);} //关第一个数码管的位选#define led1_en() {DDRB|=1<<5;PORTB|=(1<<5);}

#define led1_dis() {DDRB|=1<<5;PORTB&=~(1<<5);}

#define led2_en() {DDRB|=1<<6;PORTB|=(1<<6);}

#define led2_dis() {DDRB|=1<<6;PORTB&=~(1<<6);}

#define led3_en() {DDRB|=1<<7;PORTB|=(1<<7);}

#define led3_dis() {DDRB|=1<<7;PORTB&=~(1<<7);}

#define OE 7

#define point 4

#define dp 7

#include

#include

void port_init (void)

{

DDRA=0XFF;

PORTA=0XFF;

}

const unsigned char table[]={0x3F,0x06,0x5B,0x4F,0x66, //0,1,2,3,4 0x6D,0x7D,0x07,0x7F,0x6F, //5,6,7,8,9

0x77,0x7C,0x39,0x5E,0x79,0x71,0x00}; //a,b,c,d,e,f volatile unsigned char led_buffer[4];

void delay_1us(void) //1us延时函数

{

asm("nop");

}

void delay_nus(unsigned int n) //N us延时函数

{

unsigned int i=0;

for (i=0;i

delay_1us();

}

void delay_1ms(void) //1ms延时函数

{

unsigned int i;

for (i=0;i<1140;i++);

}

void delay_nms(unsigned int n) //N ms延时函数

{

unsigned int i=0;

for (i=0;i

delay_1ms();

}

/*完成spi的初始化*/

void spi_init(void)

{

DDRB |= (1<

SPCR = (1<

/*spi主机传送数据*/

void SPI_MasterTransmit(char Data)

{

/* 启动数据传输 */

SPDR = Data;

/* 等待传输结束 */

while(!(SPSR & (1<

;

}

/*完成对HC595的初始化*/

void HC_595_init(void)

{

DDRC |= (1<

PORTC &= (1<

PORTB = 0x0F; //同时打开四个数码管的位选

spi_init();

led_buffer[0]=16; //初始化数码管段码

led_buffer[1]=16;

led_buffer[2]=16;

led_buffer[3]=16;

}

/*HC595完成传送数据*/

void HC_595_OUT(unsigned char data)

{

SS_L();

SPI_MasterTransmit(data);

SS_H();

}

void leddis_update(void)

{

/*最低位数码管,第四个数码管*/

if(point==0)

HC_595_OUT(table[led_buffer[3]]|(1<

else

HC_595_OUT(table[led_buffer[3]]);

led0_en();

delay_nus(60);

led0_dis();

if(point==1)

HC_595_OUT(table[led_buffer[2]]|(1<

else

HC_595_OUT(table[led_buffer[2]]);

led1_en();

delay_nus(60);

led1_dis();

if(point==2)

HC_595_OUT(table[led_buffer[1]]|(1<

else

HC_595_OUT(table[led_buffer[1]]);

led2_en();

delay_nus(60);

led2_dis();

/*最高位数码管,第一个数码管*/

if(point==3)

HC_595_OUT(table[led_buffer[0]]|(1<

else

HC_595_OUT(table[led_buffer[0]]);

led3_en();

delay_nus(60);

led3_dis();

}

void display_led(unsigned int data)

{

if(data>9999)

{

HC_595_OUT(0xFF); //当计数大于9999时,四个数码管同时输出8 PORTB|=((1<<4)|(1<<5)|(1<<6)|(1<<7));

}

else if(data>999)

{

led_buffer[0]=data/1000;

led_buffer[1]=(data%1000)/100;

led_buffer[2]=(data%100)/10;

led_buffer[3]=data%10;

leddis_update();

}

else if(data>99)

{

led_buffer[0]=16; //关闭最高位的那个数码管

led_buffer[1]=(data%1000)/100;

led_buffer[2]=(data%100)/10;

led_buffer[3]=data%10;

leddis_update();

}

else if(data>9)

{

led_buffer[0]=16;

led_buffer[1]=16;

(完整版)单板硬件调试报告.doc

xxx 有限公司产品版本密级文档中心 产品名称:共 18页 XX 单板硬件调试和单元测试报告 (仅供内部使用 ) 拟制 : 日期:yyyy-mm-dd 审核 : 日期:yyyy-mm-dd 审核 : 日期:yyyy-mm-dd 批准 : 日期:yyyy-mm-dd

日期版本描述作者 2001-06-08 1.00 初稿完成作者名yyyy-mm-dd 1.01 修改 XXX 作者名yyyy-mm-dd 1.02 修改 XXX 作者名????????yyyy-mm-dd 2.00 修改 XXX 作者名

1概述 6 1.1基本情况介绍 6 1.2单板模块划分 6 1.3调试测试组网图 6 1.4调试时间、地点及人员 6 2调试测试用例记录 6 2.1功能部分调试 6 2.1.1模块 1 6 2.1.1.1调试用例 1 6 2.1.1.2调试用例 2 6 模块 2 6 2.1.2 2.1.3问题列表7 2.2信号质量测试用例7 电源8 2.2.1 2.2.1.1测试数据8 2.2.1.2测试波形及分析8 2.2.1.3问题列表8 逻辑信号9 2.2.2 2.2.2.1测试结果9 2.2.2.2测试波形及分析9 2.2.2.3问题列表9 2.2.3时钟信号10 2.2. 3.1测试结果10 2.2. 3.2实测波形及分析10 2.2. 3.3问题列表10 2.3时序测试用例10 2.3.1CPU 接口部分时序11 2.3.1.1测试结果11 2.3.1.2测试时序及分析11 2.3.2业务接口部分时序11 2.3.2.1测试结果11 2.3.2.2测试时序及分析12 2.3.3问题列表12 2.4失效器件原因分析12 3调试测试总结12 3.1调试测试结果12 3.2遗留问题报告13 3.3调试测试经验总结14 4其他14 5评审报告14

硬件测试工程师岗位的实习报告

关于在浪潮(北京)电子信息产业有限公司从事硬件测试工程师岗位的实习报告 一、实习单位及岗位简介 (一)单位简介: 浪潮是中国领先的计算平台与IT应用解决方案供应商,同时,也是中国最大的服务器制造商和服务器解决方案提供商。 浪潮(北京)电子信息产业有限公司(简称浪潮北京公司)是浪潮集团的龙头企业,是上市公司——“浪潮信息”(0977)的主体,定位于中国高端商用计算与服务领域的领先厂商,是中国在高端商用计算与服务领域中唯一能够与国际品牌相抗衡的厂商。主营业务涵盖IA服务器、高性能服务器、存储系统和商用电脑。目前,浪潮拥有服务器生产、研发基地——浪潮北方基地,并拥有唯一的国家设在企业的服务器重点实验室以及国内领先的解决方案中心。 (二)岗位介绍: 随着IT在全球范围的不断推广和完善,IT产品涉及通信,电脑,家电,服务等领域,遍及全球每个角落,已经成为人类生存的必用品。IT产品的市场体现不在于技术本身,而是看产品是否经得住用户的考验,性价比好的产品始终是用户心目中的首选。因此在相同技术的前提下,如何把握好产品的质量就成为该产品在市场上是否有强劲体现最为重要的部分。硬件测试的目的就是站在用户的角度,对产品的功能,性能,可靠性,兼容性,稳定性等进行严格的检查,对于不兼容或者出问题的设备给出相应得解决方案。 提前体验用户感受的同时提高产品的市场竞争力。硬件测试是产品从研发走向生产的必经阶段,也是决定产品质量的重要环节,如何将测试工作开展的更全面、更仔细、更专业完善也是众多企业所追求的目标。 测试是以评价一个设备性能或者可靠性为目标的一种活动,测试是对设备质量的度量与评估,以验证设备的质量满足用户的需求,为用户选择与接受设备提供有力的依据。 这一工作是硬件测试的最终目标,在前两项工作的基础上,自然可以很好的完成此部分工作的内容。在对测试的目的有了更准确认识的基础上,我们才能够很好的完成测试工作,在和开发团队、管理者共同的努力下,更好的提升产品的质量,满足用户的需求。

单片机系统等的硬件调试方法_百度文库

单片机系统等的硬件调试方法 1、首先是焊接的顺序问题。当初板子做好以后,我一口气就把所有的元件焊上去了,这样对于没有调试过的板子,就很难找到原因。所以焊接的顺序很重要,应该是应该按功能划分的器件进行焊接,顺序是功能部件的焊接--调试(OK--另一功能部件的焊接,这样容易找到问题的所在。 2、如果在调试按功能划分的器件上出现问题,可以按以下步骤进行: 1)检查原理图连接是否正确 2)检查原理图与PCB图是否一致 3)检查原理图与器件的DATASHEET上引脚是否一致 4)用万用表检查是否有虚焊,引脚短路现象 5)查询器件的DATASHEET,分析一下时序是否一致,同时分析一下命令字是否正确(注意,命令字的顺序很重要,前些日子调试INTEL e28F640这款flash是的时候,在对其擦除和写操作的时候,就碰到了这样的问题) 6)有条件的可以用示波器。如我就是通过示波器对SRAM各个引脚进行检查,发现地址线都是有信号的,而数据线无信号出现,才找到问题所在。 7)飞线。用别的的口线进行控制,看看能不能对其进行正常操作,多试验,才能找到问题出现在什么地方。 3、多观察,多思考。如我前些日子在调试320×240点阵LCD的时候,发现怎么也不能出现图像,后来在偶然的机会下,发现LCD在MPU的CS2口线下,出现闪动

的情况,猜测这时候有数据写入到LCD中,仔细研究才发现,MPU的DATA0-7线与74LVC245的A0-7连接在一起,MPU的通过一个GAL16V8或是与非门等芯片进行逻辑组合后与74LVC245的OE引脚相连,这样MPU只有在某一地址范围内才可以进行数据读写操作。所以在调试过程中,对于出现的任何现象都不要放过,问题的解决就是从一些小的现象入手的。山重水复疑无路,柳暗花明又一村。 4、有可能的情况下,最好焊两块板子以上,这样才好有个比较,硬件上很小的问题有很多时候是很难发现的。 5、软件的调试要和硬件配合进行,往往问题可能不是硬件上的。 单片机应用系统硬件调试技巧 在单片机开发过程中,从硬件设计到软件设计几乎是开发者针对本系统特点亲自完成的。这样虽然可以降低系统成本,提高系统的适应性,但是每个系统的调试占去了总开发时间的2/3,可见调试的工作量比较大。单片机系统的硬件调试和软件调试是不能分开的,许多硬件错误是在软件调试中被发现和纠正的。但通常是先排除明显的硬件故障以后,再和软件结合起来调试以进一步排除故障。可见硬件的调试是基础,如果硬件调试不通过,软件设计则是无从做起。本文结合作者在单片机开发过程中体会,讨论硬件调试的技巧。 当硬件设计从布线到焊接安装完成之后,就开始进入硬件调试阶段,调试大体分为以下几步。 1 硬件静态的调试 1.1 排除逻辑故障 这类故障往往由于设计和加工制板过程中工艺性错误所造成的。主要包括错线、开路、短路。排除的方法是首先将加工的印制板认真对照原理图,看两者是否一致。

设备调试报告

设备调试报告 2016年8月15日—2016 年8月16 日 设备名称三效蒸发器调试地址武汉北湖云峰环保科技有限公司内 需方武汉北湖云峰环保科技有限 公司 需方代表 供方武汉晟驰机械有限公司供方代表 一、设备、原料、工艺概况 设备组成部分: 一、二、三效加热器、一、二、三效分离器、一、二、三效结晶器I、II、III效循环出料泵、真空泵、冷凝水泵、进料泵、工作平台、配电箱等组成。 设备工作原理: 通过热交换,将水溶液加热至沸点,将溶液中的部分水份汽化,并排出,以提高溶液的浓度,达到获得晶体的目的。 原料数据: 乳化液废水。 溶液呈碱性 物料蒸发量为3吨/小时。 二、调试方案 处理物料:乳化液废水 1)开机步骤: 1、开启冷却循环水,保证冷凝器以及各泵机封均有冷却水通过。 2、开启真空泵(运行过程中的真空度分别为:一效加热器的真空度为0,温度为100度左右,二 效加热器的真空度约为-0.04MPa,温度约为85度左右,三效加热器的真空度约为-0.06~ -0.07MPa左右,温度约为70度左右,冷凝器内的真空度不超过-0.093MPa,温度不高于50

度),如真空度过高,真空泵出现异响,请将破空阀逐渐打开,直到异响声消失为止。 3、打开进料泵,将物料送入III、II、I效蒸发器内,液位在各分离器的视镜中间。(重点) 4、各效蒸发器内的液位达到最低液位后,方可开启各效的循环泵(输送泵)。 5、循环泵打开后,缓慢开启蒸汽阀,开始不要进得太大,蒸汽由调节阀自动控制,控制温度不高 于100度。 6、当一效加热器内的压力为负压时,逐渐开启蒸汽阀门或是关小一效冷凝水阀门,特别注意,各 效冷凝水阀门绝对不能完全关闭。 7、蒸汽阀门打开后,各效加热器及冷凝器内会产生冷凝水,此时可打开冷凝水泵。 8、各效循环泵一直保持开启状态,防止溶液浓度变高后,睹塞管道。 9、勤测出料浓度,出料浓度最好控制在85-90%之间。(从最下面的视镜观察浓度是否增加,或 是取样测比重)浓度较高时(90%)需要将浓缩液排出,防止睹泵。循环出料泵需要一直开着,防止睹泵。出料阀启闭以分离器内的浓度而定。 10、在整个生产过程中不允许中断冷却水。 11、在整个生产过程中不允许中断物料。 2)关机顺序: 1\关闭蒸汽 2\约5分钟后关闭真空泵,同时破真空。 3\破真空后,关闭冷凝水泵。 4\打开出料阀,将浓缩液排出,同时手动打开进料阀,补稀料。 (连续排出浓缩液,也连续进稀料,将设备内的物料稀释,置换)。 5\待蒸发器内的浓缩液被稀料稀释后,排尽设备内物料。 6\最后停冷却水。 7\停机结束。

硬件工程的调试一般步骤

如果是自己焊板子自己调,适合小规模系统 1.拿到PCB裸板时,检查加工的怎么样,测量一下电源地有没有短路的。 2. 焊接上电源芯片,通上电源,把电源调通,看看电压是不是都正常,纹波系数是否超标。 3. 焊上主控制器芯片(微处理器),及其相关最小外围电路,jtag调试,串口,ram,rom,就是先让最小系统跑起来。 如果jtag都是好的,写个hello,world看看cpu内核能部不能工作,调试外部的ram,rom。 写外设测试驱动,测试驱动很考量人的,一般是要由硬件工程师来干,但是就看水平怎么样了,总会出现硬件的人厌软件错误,软件的人厌硬件错误。 找外面焊接回来的板子也一样这个步骤。 板子突然不work了怎么办? 1.测量电压 2.测量晶振(体)是否起振,注意晶体的输出幅值比较小,晶振则和其电压相差不大 3. 用无水酒精把板子擦洗一遍,应为在调试的过程中某些管脚总会搞进点污秽,引起短路,这个方法解决了我碰到过的大约40%左右的板子突然罢工。 4.尝试降低频率。 搞这个的人就是知识面越广越好,干过的系统越多越好,像v哥那样最nb "测量电压“这一个放第1充分说明了这位贤弟确实是实战中成长的。非常正确。加一条: 一定要把LED电路调通。从而,软件工程师可以通过LED发光颜色来调试板子

和硬件。。。 呵呵呵也算是比较务实的解决办法 想当年我也是这样调硬件的,就是没写帖子,哈哈, 我觉得不管是做硬件,还是软件,最重要的是思想,是分析问题的能力,逻辑思维一定要清晰, 没测一项就要能排除一些问题,不要做一些重复的测试,记不住就用本子写下来。 高手的经验几乎有些神似 虽说自己在硬件调试上远没有达到牛人级的水平,手上过的板子也没多少,但是硬件调试中遇到的记忆深刻或者让自己痛不欲生(呵呵,有点夸张,但有时就是如此)问题还是很有一些,自己也总结过一些东西,特别是每次看到学生在硬件调试时遇到问题难以克服而无助无辜无厘头的样子时,总是想写下点什么: 首先拿到打样的PCB板时,不急着焊元件,检查下PCB,有时候PCB本身就短路或开路,特别是电源部分,要是全部焊好后再找问题,会找死人的! 其次调试时最好是一步步来(不要一次把所有元件全焊上),焊一部份调一部份。这样可以减少不必要的工作量,达到事半功倍的效果。先调电源,电源没有问题了,再往下调。 然后再调CUP的硬件部份,复位电压,晶振,CUP电压,地,及周围IC的电源,地。确认没有问题后,基本可以确认硬件没有什么大问题,接着通电进行整机调式,看看工作的状态是否与你理解的一样。如果出现问题,那对照原理,按

测试方案 硬件类

XXXXXX XXXXXXXXXXXXXX 项目名称 测试方案 XXX公司 二〇XX年X月

文档修改记录

目录

第一章引言 1.1编写目的 提示:该文档对测试工作的指导作用及阅读该文档的主要对象 【编写实例参见如下:】 编写该文档的主要目的在于从总体上明确××××××学生工作管理系统Beta1版本的功能模块和实现方法,从而在后期测试活动中更好的把握测试范围,制定适当的测试策略和方法。并为测试过程中测试人员和后期实施人员提供工作指导。 本文档预期的读者包括:项目经理、系统设计人员、开发人员和测试人员。 1.2项目背景 1.说明待开发的软件系统的名称 2.列出本项目的任务委托单位、开发单位、协作单位、用户单位 3.说明项目背景,叙述该项软件开发的意图、应用目标、作用范围以及其他应向读者说明的有关该软件开发的背景材料。如果本次开发的软件系统是一个更大的系统的一个组成部分,则要说明该更大系统的组成和介绍本系统与其它相关系统的关系和接口部分 4.保密说明:本项为可选项,一般的软件公司都会要求对软件开发的概要设计文档进行保密,不允许被复制、使用和扩散到公司之外的范围,如果需要强调则允许做相关的保密说明 5.版权说明:本项为可选项,若有必要,才要作有关的描述。 1.3测试对象及范围 测试对象主要是针对XXX项目实施的设备,主要的测试设备清单如下:

1.4适用范围 提示:明确适用的项目单位 1.5参考资料 提示:列出所本文档所使用的参考资料,包括: 1 本软件开发所经核准的合同或标书或可行性报告等文档 2 软件开发计划书 3 需求分析报告 4 测试方案(若存在初稿的话) 5 与本项目有关的已发表的文件或资料 6 本文件中各处引用的文件、资料,所采用的软件开发标准和规范 注意:必须列出文件、资料的作者、标题、编号、发表日期和出版单位,以说明这些文件资料的来源。若某些文档有保密要求的,则要说明其保密级别。

收音机调试步骤及调试方法

收音机调试步骤及调试方法 一.AM、IF中频调试 1、仪器接线图 扫频仪频标点频率为:450KHZ、455KHZ 、460KHZ或460KHZ、465KHZ 、 470KHZ。 扫频仪 簑减器 1、检波输出 2、3正负电源4、RF信号输入5、检波输入(INPUT)6频标点信 号输入(PUISE INPUT)7、水平信号输入(HOR、INPUT) 2:测试点及信号的连接: A:正负电源测试点(如电路板中的CD4两端或AC输入端) 正负电源测试点从线路中的正负供电端的测试点输入。 B:RF射频信号输入(如CD2003的○4脚输入)。 RF射频信号由扫频仪输出后接到衰减器输入端,经衰减器衰减后输出端接到测试架上的RF输入端,在测试架上再串联一个10PF的瓷 片电容后,从电路中的变频输出端加入RF信号 将AM的振荡信号短路(即PVC的振荡联短路),或将AM天线RF输入端与高频地短路,(如CD2003○16与PVC地脚短路。) C:检波输出端(如CD2003○11脚为检波输出端) 从IC检波输出端串一个103或104的瓷片电容接到测试架上的OUT输出端。再连接到显示器前面的INPUT端口上以观察波形。

3.调试方法及调试标准 将收音机的电源开关打开并将波段开关切换到AM波段状态,调整中频中周磁帽使波形幅度达到最大(一般为原色或黄色的中周), 并且以水平线Y轴为基准点,看波形的左右两半边的弧度应基本对 称,以确保基增益达到最大、选择性达到最佳。如图 标准:波形左右两边的弧度基本等等幅相对称,455KHZ频率在波形顶端为最理想,偏差不超过±5KHZ。。如果中频无须调试的,则 经标准样机的波形幅度为参考,观察每台机的波形幅度不应小于标准 样机的幅度的3-5DB,一般在显示器上相差为一个方格。 二、FM IF中频调试 1、器接线图 ①扫频仪频率分别为,,至少三个频率点。 1、检波输出 2、3正负电源4、RF信号输入5、检波输入(INPUT)6频标点 信号输入(PUISE INPUT)7、水平信号输入(HOR、INPUT) ②测试点及信号连接;

通用硬件产品测试报告(样本)

C××××测试报告(功能测试) 1.测试设备 2.测试目的 3.测试用品: 1.1仪器

1.2上微机软件 1.3线路板烧写文件 4.电源测试 4.1 测试方法: 1)将×××电源连接到××××××电源连接到×××,以上步骤简称‘上电’;

2)用×××器在各电源对应测试点上测量其×××。 4.2 测试条件: 1)常温; 2)芯片正常运行。 4.3 测试结果: 5.采样电路测试 4.1 测试方法: 1)×××板上电; 2)在板载接口对应位置接入信号源; 3)用×××器测量板上对应测试点×××; 4.2 测试结果:

6.×××上电自举 6.1 测试方法: 1)×××板上电; 2)在×××环境下,选择×××,出现下载界面;

3)选择×××打开×××,选择×××,烧写完成后,重新给×××板上电; 以上步骤×××为‘烧写××× 4)观察指示灯×××是否闪烁 6.2 测试结果: 7.×××测试 7.1 测试方法: 1)×××板上电; 2)在程序中设定×××为输入,输入波形作为×××输出,输入为×××方波,烧写×××; 3)用×××器测量板上对应测试点波形; 4)比较测试波形是否与设定一致; 7.2 测试结果:

8.双口×××测试 8.1 测试方法: 1)×××板上电; 2)在×××中设定×××读写时序,向双口×××全地址空间写入数据,写入完成后读取双口×××中的数据,判断是否与写入数据一致; 3)在×××中设定×××读写时序,向双口×××全地址空间写入数据,写入完成后读取双口×××M中的数据,判断是否与写入数据一致; 8.2 测试结果: 9.C6××× 9.1 测试方法: 1)×××板上电; 2)烧写×××; 3)将F28×××烧写到F×××中;

AB调试步骤

AB项目出厂调试报告 一、调试前的准备工作 1.1、检查柜体器件 调试前先检查各个柜体内的控制元器件是否已经安装完毕,比如继电器,保险管等。 1.2、安装通讯连接线 1.2.1 安装同轴电缆连接器 首先用螺丝钉把同轴电缆连接器安装上底座,然后在同轴电缆连接器的两端贴上标有A/B的标签,而且标签上有颜色指示(红的为A,黄的为B),再后把同轴电缆连接器安装到控制柜内的指定导轨上,安装顺序一半是A在外面、B 在里面;最后线走线槽连接到CNBR的通讯端口,标记的A端接A口,标记的B端接B口。 1.2.2 制作通讯线 1) 制作通讯线所需工具:AB通讯线制作专用刀,斜口钳,压线钳,普通裁 纸刀。 2) 本次用的通讯线是同轴电缆。第一步,按照两个通讯连接头之间的距离剪 裁两根等长度同轴电缆(因为系统是A,B双网的,而且距离是一样的),通讯线一定要在线槽里面走线,并且同轴电缆在剪裁时留有20cm的余量,以备万一通讯线没有一次性做好而需要剪裁重做。 第二步,用AB通讯线制作专用刀(如果不习惯用AB通讯线制作专用刀,也可以用普通裁纸刀)来剥线,剥线的步骤是:首先把同轴电缆外面的绝缘胶皮剥掉,尽量不破坏到里面的屏蔽层;其次把屏蔽层剥起(只是剥起,不是剥掉),只留下最后一层锡箔层,然后用AB通讯线制作专用刀把锡箔内(包括锡箔层)剥出里面的铜线;打开装有通讯接头的袋子取出顶针状的东西,套在通讯线的铜丝上,并用压线钳固定在铜线上,再取出铁套套在通讯线上,

最后取出通讯接头,让铜丝上的顶针状的东西穿通讯接头的小孔,用力使接头的外壳和屏蔽层连接在一起,同时使顶针和通讯接头的平面齐平,再把铁套套在通讯头上,用压线钳压好,这样通讯线的一端就制作好了,其他如是。 1.2.3 安装通讯线 1) 通讯线做标志:因为系统组的是A,B双网的,为了避免接线错误,也为 了以后查线更加容易,所以在通讯线上最好做上标志,即连接同轴电缆连接器的A通讯端口的通讯线标上A的标志,连接同轴电缆连接器的B通讯端口的通讯线标上B的标志。 2) 连接通讯线,这个很简单,就是把标有A标志的连接线和标有A标志的 连接头相连,标有B标志的连接线和标有B标志的连接头相连。 1.3、设置网络站点 拔下CNBR,根据图纸上的要求为网络设置站点;若图纸上没有要求,则根据柜体的排放顺序从1开始设置站点,其中PLC的站点是留有余量的最高站点,比如最高站点是13,那么PLC的站点设成15。 1.4、连接电源线 1.4.1连接电源线所需工具 必备工具:螺丝刀,电线若干 1.4.2 连接进电源柜的电源线 这个电线是为电源柜供电的220V交流电,一般进电电源线是带有插头的,查看图纸,把另一端连接到供电电源的端子上。 1.4.3 连接各个柜体的电源线 这个电线是为每个柜体供电的交流220V和给每个柜体内继电器供电的直流24V。 查看电源柜图纸以及对应的柜体的图纸,先研究一下哪些供电是在调试的过程中必须接的,比如CPU的供电电源,控制架的供电电源,继电器的

调试硬件的步骤

调试硬件的步骤 如果是自己焊板子自己调,适合小规模系统 1.拿到PCB裸板时,检查加工的怎么样,测量一下电源地有没有短路的。 2. 焊接上电源芯片,通上电源,把电源调通,看看电压是不是都正常,纹波系数是否超标。 3. 焊上主控制器芯片(微处理器),及其相关最小外围电路,jtag调试,串口,ram,rom,就是先让最小系统跑起来。一定要把LED电路调通。从而,软件工程师可以通过LED发光颜色来调试板子和硬件。 如果jtag都是好的,写个hello,world看看cpu内核能部不能工作,调试外部的ram,rom。 写外设测试驱动,测试驱动很考量人的,一般是要由硬件工程师来干,但是就看水平怎么样了,总会出现硬件的人厌软件错误,软件的人厌硬件错误。 找外面焊接回来的板子也一样这个步骤。 板子突然不work了怎么办? 1.测量电压 2.测量晶振(体)是否起振,注意晶体的输出幅值比较小,晶振则和其电压相差不大 3. 用无水酒精把板子擦洗一遍,应为在调试的过程中某些管脚总会搞进点污秽,引起短路,这个方法解决了我碰到过的大约40%左右的板子突然罢工。 4.尝试降低频率。 谈谈自己的调式经历,希望能给刚入门的同行有点帮忙, 也希望有好资料的同仁,能拿出来与大家一起分享。 共同进步! 在调试之前你一定要熟悉原理图,及工作原理。在还没有layout之前能及时发现原理图的一些错误。 首先拿到打样的PCB板时,不急着焊元件,检查下PCB,(4层板以上的最好检查一下)。 有时候PCB本身就短路或开路,要是全部焊好后再找问题,会找死人的,,,,,, 调试时最好是一步步来(不要一次把所有元件全焊上),焊一部份调一部份。这样可以减少不必要的工作量,达到事半功倍的效果 先调电源,电源没有问题了,再往下调。(这时可以测试IC的供电电压对不对,可以避免烧IC)。 然后再调CPU的硬件部份,复位电压,晶振,CPU电压,地,及周围IC的电源,地。确认没有问题后,基本可以确认硬件没有什么大问题, 接着通电进行整机调式,看看工作的状态是否与你理解的一样。有如达不到,或不稳定,那就查查通信方面是不是存在什么干扰,CLOCK是否正确,等等, 反正调试是一项细心的工作,一定要有耐心。

AB_PLC调试步骤

AB PLC 调试步骤 此调试步骤为本人在实际工作中的经验总结,仅供参考。 一、 上电前测绝缘电阻,检查硬件装配。 1.用万用表分别测输入各相对地电阻;各相之间电阻以及24V对地电阻 等,是否有接地现象。 2.对照图纸,检查实际硬件装配是否与图纸一致,模块顺序是否正确;总 线杆是否拨到位;通讯电缆是否连接,重新紧固连接。 3.在打开PLC电源模块电源之前,也需要测输入电压,以防止第一次上 电损坏电源模块。 二、 BOOTP/DHCP设ENBT的IP地址 1.打开BOOTP/DHCP软件,根据ENBT的MAC地址,分别设置各以太 网模块的IP地址。 Fig 1 2.在Relation List栏中选中对象,点击“Disable BOOTP/DHCP”按钮,使 以太网模块永久保存IP地址。 详细请参加ENET-UM001。

三、 打开RSLinx,配置驱动,RSWho找目标PLC。 1.打开RSLinx,打开Configure Drivers配置驱动。如果是以太网连接,则 选择“EtherNer/IP Driver”。 2.打开RSWho,查找目标PLC,确定RSLinx中读到的硬件配置是否和实 际相符,如果不符合,需要断电后重新检查硬件装配连接,确保模块之 间的总线杆是否拨到位。 以下多种情况都是由于硬件装配不紧固,或是总线杆没到位所出现的问题Fig 2 注意上图硬件配置1769总线中模块前面的黄色问号。 Fig 3 注意上图中07槽号模块通讯错误;02~06模块出现的“Unkeyed”错误。 3.上载EDS文件 如果出现下图中所示的黄色问号图标,表示主机中没有此模块EDS文件,可以点击鼠标右键从模块中上载,也可以从AB官网上下载最新的EDS文件包。 Fig 4

硬件测试报告

测试报告是测试阶段最后的文档产出物。优秀的测试经理或测试人员应该具备良好的文档编写能力; 一份详细的测试报告包含足够的信息,包括产品质量和测试过程的评价,测试报告基于测试中的数据采集以及对最终的测试结果分析。测试报告的内容 测试报告的内容可以总结为以下目录: ·首页 ·引言(目的、背景、缩略语、参考文献) ·测试概要(测试方法、范围、测试环境、工具) ·测试结果与缺陷分析(功能、性能) ·测试结论与建议(项目概况、测试时间测试情况、结论性能汇总)·附录(缺陷统计) 各部分的格式与内容 1、首页 ··报告名称(软件名称+版本号+用户端类型(android,iphone,后台管理等等)+测试范围(单元,集成,系统,模块等等)+测试报告) ··报告委托方,报告责任方,报告日期等 ··版本变化历史 ··密级 2、引言 2.1编写目的

本测试报告的具体编写目的,指出预期的读者范围。 实例:本测试报告为XXX项目的测试报告,目的在于总结测试阶段的测试以及分析测试结果,描述系统是否符合需求(或达到XXX功能目标)。预期参考人员包括用户、测试人员、、开发人员、项目管理者、其他质量管理人员和需要阅读本报告的高层经理。 2.2 项目背景 对项目目标和目的进行简要说明。必要时包括简史,这部分不需要脑力劳动,直接从需求或者招标文件中拷贝即可。 2.3 系统简介 如果设计说明书有此部分,照抄。注意必要的框架图和网络拓扑图能吸引眼球。 2.4 术语和缩略语 列出设计本系统/项目的专用术语和缩写语约定。对于技术相关的名词和与多义词一定要注明清楚,以便阅读时不会产生歧义。 2.5 参考资料 1. 需求、设计、测试用例、手册以及其他项目文档都是范围内可参考的东西。 2. 测试使用的国家标准、行业指标、公司规范和质量手册等等。 3、测试概要 测试的概要介绍,包括测试的一些声明、测试范围、测试目的等等,主要是测试情况简介。(其他测试经理和质量人员关注部分) 3.1测试方法(和工具)

单片机程序调试步骤

步骤: ①首先建立工程项目文件; ②为工程选择目标器件(如TA89S52); ③工程项目设置软硬件调试环境; ④创建源程序文件并输入程序代码; ⑤保存创建的源程序项目文件; ⑥把源程序文件添加到项目中; 第一步:建立工程项目文件 双击桌面Keil uVision3.LNK快捷图标得到图1 KEIL 图标 在打开的下界面中点工程项得到图2。 图1 打开工程下拉菜单,选择点击“新建工程“,首先在这里要新建一个工程项目文件。 图2 为工程文件取一个名称,确定选择存放的路径(事先为每一个工程单独建立一个目录),在建立工程时形成的所有文件全部存放在这个目录下,如起工程名y2(此时不加后缀),保存类型选择 Project Files(*.uv2)点保存

选择新建工 图3 接下来选择CPU驱动芯片,如AT89S52芯片,然后点确定。 图4 这时提示:复制标准的8051开始代码到工程项目文件夹或添加文件到工程项目文件夹?(如果选择Y之后将会产生一个STARTUP文件,对我们实验是一个无用的文件,会在个别计算机上会导致不能创建目标文件,同时会产生一个空白的工程项目文件),选择N之后只建立一个空白的工程项目文件,我们选N便于操作。 至此用户就完成了建立一个空白的工程项目文件,并为工程选好了目标器件,但却是空白的工程项目文件。 第二步:建立源文件 在界面中打开文件下拉菜单,在打开的选项中点“新建”,产生一个新建空白文件。

点新建 图1 在新建空白文件中输入源程序文件 图3 在确认源程序无错时点保存,这时界面上弹出提示“另存为”菜单,选择好保存路径,也就是刚才保存建立工程项目文件的目录路径,输入文件名,如(要有后缀,汇编程序是*.asm),然后点击保存。 图4这时仅仅是完成了汇编程序的建立而已,但汇编程序与工程项目文件现在还没建立任何关系,此时应把源程序文件添加到工程中,构成一个完整的工程项目。 第三步:将源程序文件添加到工程项目中

2 捷顺停车场系统硬件调试

捷顺停车场系统硬件调试 停车场系统调试步骤: 设备接线-->单机调试-->数据库安装-->软件安装-->联网调试-->测试功能-->完成调试。 一、设备接线 1系统设备组成: 2出入口控制机接线(现场有变更建议参考控制机附图)

说明: 上图为P19菲尼克斯端子主要接线口: A、10、11接地感线圈 B、2、3、4、5、6、7接道闸隔离板J4对应的开、关、停、开到位、关到位、GND,若使用 RS485开闸则只需接GND、12V、道闸RS485A、道闸RS485B C、8、9接485转换器的A(485+、)B(485-) 3道闸隔离板接线 A、作用 该板实现停车场控制电平控制信号与数字道闸之间的光电隔离,且具有道闸RS485接口的隔离及防雷保护的功能,可有效的减少、消除道闸通过地线环路对控制机电源及信号干扰,并增强道闸RS485接口的抗雷击、干扰能力。 B、接线方法见下图(有两种接线方式,一种为电平开闸模式,只需将图中接带※标识的端子即可,适用于所有道闸,另一种为RS485模式,只需接不带※标识的端子,只用于数字道闸)

123 J1 1 2345678J3 123456 J4 道闸485隔离板JSPJ0104接线图 485A 485B PGND VDD GND2OpdIn CldIn OpenOut CloseOut TA TB O p e n C l o s e O p d C l d +12V G N D 1 接控制机道闸控制485A 接控制机道闸控制485B 接大地 *接车场控制机O P E N *接车场控制机C L O S E *接车场控制机开到位*接车场控制机关到位*接车场控制机+12V *接车场控制机G N D 接道闸V D D 接道闸G N D *接道闸O P EN *接道闸C LO SE *接道闸开到位*接道闸关到位接道闸R S 485A 接道闸R S 485B JSPJ0104(2008.05.26) 备注: 1、该板主要实现道闸RS485隔离、防雷, 2、D4为电源指示灯,D2为正在通讯的 3、接大地线务必保证可靠接地。 及电平信号的光电隔离; 状态指示; 4、用RS485方式控制道闸时,带*号接口不用接线。 图15-4 C 、安装 道闸隔离板可以安装在道闸机箱内或者读卡机中,为了便于维护建议安装在读卡机中。 4 002捷威数字道闸接线 A 、 J4接线排说明:

硬件测试规范

硬件测试规范 Document number:NOCG-YUNOO-BUYTT-UU986-1986UT

硬件测试规范 目录

1. 目的 在策略和方法上说明计划、管理测试活动,指导测试进行,以发现硬件的错误,验证硬件是否满足系统需求说明书和硬件设计说明书。 2. 适用范围 适用于所有硬件产品的各个测试阶段以及所有的硬件测试人员及与测试相关的人员。

3. 定义 4. 测试工作职责 测试的目标是:发现问题、改进问题,总结经验,起到保证硬件设计达到设计要求的作用。 1.负责硬件系统测试过程的组织和实施,具体包括实施完成硬件测试计划和测试方法文档、进行硬件系统测试、完成硬件测试报告,交付硬件系统。 2.负责整个硬件平台系统测试过程的组织和实施,实施完成硬件平台系统测试和交付测试,单板软件组配合硬件平台测试工作。具体包括完成硬件平台测试计划和测试方法文档、进行硬件平台系统测试、完成硬件平台测试报告。 5. 测试流程 测试需求在项目启动时给予说明。

测试开始时,应该完成测试计划。 测试开始后,由于测试情况有变化,可能导致测试计划文档内容的变化。如果文档内容有明显变化,必须在文档中添加变更历史来记载这些变化。 单板测试、硬件系统测试、硬件平台系统测试以及测试的其它阶段,均涉及如下活动: 测试计划:对测试方法和资源的分配进行计划,参见《测试计划》模板; 测试设计和开发:详细描述各个测试阶段的测试方法,特别是测试信号的设计,参见《测试方法说明》,搭建测试环境; 测试执行:按照测试计划执行测试过程,决定测试项目是通过/失败; 测试报告:记录测试结果和测试问题,参见《测试报告》模板; 测试评估:按照测试标准评价测试系统。 6. 测试阶段 测试阶段和硬件开发生命周期的对应关系: 单板测试 测试对象 每一个板卡的设计和实现。

组装后调试步骤及注意事项

硬件组装完成后设备调试步骤及注意事项一、步骤:确认线路插接正确、装驱动、连接数据线查端口、装微雕管家、通电调试安装舵轮、装活动笔架、画图测试、下载写字软件及教程、学习教程练习写字。 二、安装软件调试之前先仔细确认下线路是否连接正确;不要通电,不要连接数据线,参照说明及分解图片大胆接插,即使接错也没关系。连接数据线、通电之前务必确认(否则有可能损伤舵机),如无把握到时可拍照客服帮助确认(不通电、不连接数据线即使插接错误也没关系)。 舵机尾线延长线:连接舵机尾线和主板,延长线颜色不用去管,仅仅起延长作用,只要把舵机尾线(三种颜色线分别对应信号、正极、负极)和主板PWM 针脚(信号、正极、负极)相同性质的通过延长线一一对接上即可。 三、组装说明最后一章节务必仔细看下,有软件安装步骤和调试注意事项,也有对应软件名称说明,相关软件在您下载的网盘和群文件里都有,注意将下载的文件解压缩即可找到。 1、驱动文件(CH341SER.EXE)可从发您的网 盘资料中查找,或从售后服务QQ群(群号 139996442)文件中下载;驱动安装成功的标 志是连接数据线后,在“计算机-属性-设备管 理器-端口”中能查到本设备端口号,否则就 没有安装成功;如没有安装成功,可能是因为 电脑系统缺少相关文件导致,这时可下载驱动 精灵对电脑系统进行检测,并根据检测结果提 示,补充完善相关系统文件(WIN10系统免驱 动安装)。 (由于电脑设备不同、所插接串口不同,显示 的端口号会不同) 2、安装最新版微雕管家,将收到的文件压缩 包解压缩,并安装在您的电脑系统上。

四、舵轮角度组装调试成功以后再装活动笔架。 舵轮组装方法:连接数据线和电源后,在微雕管家位图打印界面,来回点选强弱光,观察舵机运转,然后在点击弱光时,将舵轮指向12点方向(垂直向上,如不能精确12点方向,无论偏左偏右以最接近12点方向为好)插好,接着再来回点击强弱光观察舵轮是否最高静止位指向12点(弱光静止位),最低静止位指向9:45左右(强光静止位);确认后用舵机配套螺丝固定好舵轮,如果角度不对则拔下舵轮换角度重插,直到符合前述要求(在此过程中千万不可掰转舵轮,否则可能损坏舵机,装螺丝时也注意阻挡不要拧转舵轮)。 五、装活动笔架时先点击强光,将舵轮调到9:45方向,以便安装活动笔架。笔的高度在下落静止位(强光时)接触纸面即可,不是越低越好;笔的角度随您需要调整。

硬件测试报告模板参考

XXXX 社信息管理系统
——企业信息管理系统 ——企业信息管理系统
承建单位: 承建单位: 审核单位: 审核单位:XXXX 信息管理系统项目组

XXXX 测 试 报 告
文档修订纪录
日期 版本 1.0 说明 作者 审阅人 备注
文档修订记录
第 1 页

XXXX 测 试 报 告


——企业信息管理系统 ——企业信息管理系统 ............................................................................................... 1 第 1 章 引言 .............................................................................................................. 1 1.1. 编写目的.......................................................................................................... 1 1.2. 背景.................................................................................................................. 1 1.3. 定义.................................................................................................................. 1 1.4. 参考资料.......................................................................................................... 1 第 2 章 概述 .............................................................................................................. 2 2.1. 软件说明.......................................................................................................... 2 2.2. 运行环境.......................................................................................................... 2 2.2.1. 硬件环境................................................................................................... 2 2.2.2. 软件环境................................................................................................... 3 2.3. 测试内容列表.................................................................................................. 3 第 3 章 测试计划 ...................................................................................................... 4 第 4 章 企业信息录入测试环节 .............................................................................. 4 4.1. 信息录入.......................................................................................................... 4 4.2. 信息详细查看.................................................................................................. 4
目录
第 1 页

硬件调试流程及说明

硬件调试流程 硬件调试是一项细心的工作,一定要有耐心。硬件调试工具需要示波器、万用表等,同时需要主芯片调试开发软件及相应的仿真器。硬件调试首先要熟悉原理图原理和PCB布局,然后根据功能模块进行相关调试。调试流程如下。PCB裸板测试 PCB加工生产故障往往由于设计和加工制板过程中工艺性错误所造成的,主要包括错线、开路、短路。当用户的PCB板制作完毕后,不要急于焊接元器件,请首先对照原理图仔细检查印制电路板的连线,确保无误后方可焊接。应特别注意电源系统检查,以防止电源短路和极性错误,利用数字万用表的短路测试功能测量一下板上所有的电源和地有没有短路的。 然后检查系统总线(地址总线、数据总线和控制总线)是否存在相互之间短路或与其它信号线路短路。 对于需要SMT的PCB板,量小建议每个PCB板都进行一下检查,如果量大可抽样检查。检查完毕无异常后交由SMT焊接,SMT焊接资料有硬件工程师提供焊接用partlist,PCB工程师提供PCB的SMT相关文档。 如果是手工焊接,建议焊接3块,以便调试时进行比较,排除焊接异常出现的问题。并且焊接时建议根据功能模块进行焊接,功能模块调试完成后再焊接其他功能模块。焊接及调试的一般顺序如下: 电源 主芯片及外围最小系统,包括主芯片,晶振,复位电路 RAM,FLASH,串口外设 其他功能模块 按照这样的序调试焊接,优点在于能一步一步的排除问题点。假设,当你把主芯片,存储器都焊好,而且也调试可以工作了,再去焊你的电源,结果板上的电源部分出问题了,一个高压窜到了主芯片上,那后果不是很严重? 排除元器件SMT错误 SMT后,观察板上是否有下述现象 有漏贴的器件 有焊接不牢固的现象 有极性电容、二极管、芯片是否焊接方向有错误 芯片的相邻管脚焊接短路 小封装的无极性的陶瓷电容,电阻焊接短路 相同封装的芯片焊接错误 芯片管脚有虚焊,挂锡现象 。。。。。。

单板硬件调试报告

XX单板硬件调试和单元测试报告 (仅供内部使用) 拟制: 日期:yyyy-mm-dd 审核: 日期:yyyy-mm-dd 审核: 日期:yyyy-mm-dd 批准: 日期:yyyy-mm-dd

1概述 6 1.1基本情况介绍 6 1.2单板模块划分 6 1.3调试测试组网图 6 1.4调试时间、地点及人员 6 2调试测试用例记录 6 2.1功能部分调试 6 2.1.1模块1 6 2.1.1.1调试用例1 6 2.1.1.2调试用例2 6 2.1.2模块2 6 2.1.3问题列表7 2.2信号质量测试用例7 2.2.1电源8 2.2.1.1测试数据8 2.2.1.2测试波形及分析8 2.2.1.3问题列表8 2.2.2逻辑信号9 2.2.2.1测试结果9 2.2.2.2测试波形及分析9 2.2.2.3问题列表9 2.2.3时钟信号10 2.2. 3.1测试结果10 2.2. 3.2实测波形及分析10 2.2. 3.3问题列表10 2.3时序测试用例10 2.3.1CPU接口部分时序11 2.3.1.1测试结果11 2.3.1.2测试时序及分析11 2.3.2业务接口部分时序11 2.3.2.1测试结果11 2.3.2.2测试时序及分析12 2.3.3问题列表12 2.4失效器件原因分析12 3调试测试总结12 3.1调试测试结果12 3.2遗留问题报告13 3.3调试测试经验总结14 4其他14 5评审报告14 表目录

表1 有问题信号记录表格9 表2 有问题信号记录表格10 表3 有问题信号记录表格10 表4 时序测试遗留问题12 表5 调试测试结果统计一12 表6 调试测试结果统计二12 表7 调试测试问题列表13 表8 信号质量遗留问题统计表13 表9 时序遗留问题统计表13 表10 功能遗留问题统计表13 图目录 图1 XX图 6

相关文档
最新文档