Управляющий модуль устройства проверки автоматических выключателей первичным током

Блок-схема алгоритма программы управления микроконтроллером. Требования к печатным платам и их разработка. Структурная схема измерительного устройства Ретом-30КА. Выбор микроконтроллера как одно из самых важных решений при разработке управляющего модуля.

Рубрика Коммуникации, связь, цифровые приборы и радиоэлектроника
Вид дипломная работа
Язык русский
Дата добавления 18.06.2010
Размер файла 1,9 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

ADC1_RMS_Data=0;ADC2_RMS_Data=0;ADC3_RMS_Data=0; }}}

Calibration.c (обработка клавиатуры)

void Calibration(void){char i,i1;if(CalibOutFlag && !DefaultCoefFlag){MenuSaveCoefKey(); MenuSaveCoef();}if(DefaultCoefFlag){MenuLoadDefaultKey(); MenuLoadDefault();}

if(!CalibOutFlag && !DefaultCoefFlag){if(!TimerFlags_bit.FixationFlag){GetTrueRMS();}

else{GetFixedRMS();} GetScaledRMSValue();

if(MenuSubItem<=2){if(!SubItemFlag){ //Выбор пункта меню, обработка клавиатуры

if(KBD_Data_No_Bounce_bit.KEY_3==0 ) //key_down

{if(SubItemChange!=0){SubItemChange--;

KeyCounter=KeySampleTime*10; KBD_Data_No_Bounce_bit.KEY_3=1; }}

if(KBD_Data_No_Bounce_bit.KEY_2==0 )//key_up

{if(SubItemChange!=5){SubItemChange++;KeyCounter=KeySampleTime*10; KBD_Data_No_Bounce_bit.KEY_2=1;}}}if(SubItemFlag)

{ //Изменение значений коэффициентов

if (KBD_Data_No_Bounce_bit.KEY_2 == 0 )//key_up

{switch (SubItemChange){ case 0: if(MenuSubItem!=2){ MenuSubItem++;

KeyCounter=KeySampleTime*10; KBD_Data_No_Bounce_bit.KEY_2=1;}break;

case 1:// изменение диапазона

if (Range[MenuSubItem]!=(RangeMax[MenuSubItem]-1))Range[MenuSubItem]++; break;

case 2:// изменение уровня силового трансформатора

if (TVOUT[MenuSubItem][Range[MenuSubItem]]!=TVMAX) TVOUT[MenuSubItem][Range[MenuSubItem]]++; break;

case 3:// изменение смещения X

if(KeyUpLongPressedFlag) KeyDelay = 1;

RMSCoef.TURMSCoef[MenuSubItem][Range[MenuSubItem]].X++; break;

case 4:// изменение коэфф. К

if(KeyUpLongPressedFlag) KeyDelay = 1;

RMSCoef.TURMSCoef[MenuSubItem][Range[MenuSubItem]].K+=

DeltaK[MenuSubItem][Range[MenuSubItem]]; break;

case 5: if(KeyUpLongPressedFlag) KeyDelay = 1;

RMSCoef.TURMSCoef[MenuSubItem][Range[MenuSubItem]].Y+=

DeltaY[MenuSubItem][Range[MenuSubItem]];}

KBD_Data_No_Bounce_bit.KEY_2 =1; KeyCounter=KeySampleTime*KeyDelay;}}

lcdGotoXY(0,0); lcdPrintData((char *)&CalibText[MenuSubItem*3],2); lcdGotoXY(3,0);

switch (MenuSubItem){ case 0: switch(Range[MenuSubItem])

{ case 0: // Переходим на предел 2.5В

Range_Select_bit.ADC1_25V= 1; Range_Select_bit.ADC1_250V=1;

Range_Select_bit.ADC1_500V=1; Range_Select_bit.ADC1_2_5V=0; break;

case 1: // Переходим на предел 25В

Range_Select_bit.ADC1_2_5V=1;Range_Select_bit.ADC1_250V=1;

Range_Select_bit.ADC1_500V=1; Range_Select_bit.ADC1_25V= 0; break;}

sprintf(string,"%5f",ADC1ScaledValue); break;

case 1: switch(Range[MenuSubItem]){case 0: // Переходим на предел 3kА

Outputs_Reg_bit.SET_3KA_30KA=0; Outputs_Reg_bit.LED3KA=1;

Outputs_Reg_bit.LED30KA=0; SetCurrentFlag=0; break;

case 1: // Переходим на предел 30kА

Outputs_Reg_bit.SET_3KA_30KA=1; Outputs_Reg_bit.LED3KA=0;

Outputs_Reg_bit.LED30KA=1; break; SetCurrentFlag=0;}

switch(TVOUT[MenuSubItem][Range[MenuSubItem]])

{case 0: // включаем режим 1

Outputs_Reg_bit.SUMM_DIV2=0; Outputs_Reg_bit.SUMM_DIV4=0; break;

case 1: // включаем режим 2

Outputs_Reg_bit.SUMM_DIV2=1; Outputs_Reg_bit.SUMM_DIV4=0; break;

case 2: // включаем режим 3

Outputs_Reg_bit.SUMM_DIV2=0; Outputs_Reg_bit.SUMM_DIV4=1; break; }break;

case 2: switch(Range[MenuSubItem])

{case 0: // Переходим на предел 2А

Range_Select_bit.DT_SEL0= 0; Range_Select_bit.DT_SEL1= 0;

Range_Select_bit.DT_SEL2= 0; break;

case 1: // Переходим на предел 20А

Range_Select_bit.DT_SEL0= 0; Range_Select_bit.DT_SEL1= 0;

Range_Select_bit.DT_SEL2= 1; break; }

sprintf(string,"%5f",(ADC3ScaledValue)); break; }

lcdPrintData(string,5); lcdGotoXY(9,0); lcdPrintData("R",1);

lcdGotoXY(11,0); sprintf(string,"%1d",Range[MenuSubItem]); lcdPrintData(string,1);

// уровень выходного силового трансформатора для данного диапазона

lcdGotoXY(15,0); lcdPrintData("TV",2); lcdGotoXY(18,0);

sprintf(string,"%2d",TVOUT[MenuSubItem][Range[MenuSubItem]] );

lcdPrintData(string,2); lcdGotoXY(0,1); lcdPrintData("X",1); lcdGotoXY(2,1);

if (RMSCoef.TURMSCoef[MenuSubItem][Range[MenuSubItem]].X>=0)

{sprintf(string,"%3d",(RMSCoef.TURMSCoef[MenuSubItem][Range[MenuSubItem]].X ) );

lcdPrintData(string,3); lcdPrintData(" ",1);}

else{sprintf(string,"%4d",(RMSCoef.TURMSCoef[MenuSubItem][Range[MenuSubItem]].X ) );

lcdPrintData(string,4);}lcdGotoXY(6,1); lcdPrintData("K",1);lcdGotoXY(8,1);

sprintf(string,"%0.3f",RMSCoef.TURMSCoef[MenuSubItem][Range[MenuSubItem]].K );

lcdPrintData(string,5); lcdGotoXY(13,1); lcdPrintData("Y",1); lcdGotoXY(15,1);

if(RMSCoef.TURMSCoef[MenuSubItem][Range[MenuSubItem]].Y>=0)

{ sprintf(string,"%0.2f",RMSCoef.TURMSCoef[MenuSubItem][Range[MenuSubItem]].Y );

lcdPrintData(string,4); lcdPrintData(" ",1); }

else{sprintf(string,"%0.2f",RMSCoef.TURMSCoef[MenuSubItem][Range[MenuSubItem]].Y );

lcdPrintData(string,5);}

for (i=0;i<6;i++){lcdGotoXY(PositionSubItem[i][0],PositionSubItem[i][1]);

if (i==SubItemChange){ string[0]=0x10; lcdPrintData(string,1);}

else {lcdPrintData(":",1);}}}}if(KBD_Data_No_Bounce_bit.KEY_0==0 ) //key_enter

{if(!SubItemFlag){ SubItemFlag=1; KeyCounter=KeySampleTime*10;

KBD_Data_No_Bounce_bit.KEY_0=1; }}

if(KBD_Data_No_Bounce_bit.KEY_4==0 ) //key_back

{if(!SubItemFlag && !CalibOutFlag){CalibOutFlag=1; KeyCounter=KeySampleTime*10;

KBD_Data_No_Bounce_bit.KEY_4=1; lcdClear();}

if(SubItemFlag){ SubItemFlag=0; KeyCounter=KeySampleTime*10;

KBD_Data_No_Bounce_bit.KEY_4=1; }}}

void MenuSaveCoef(void){ lcdGotoXY(0,0); for (istring=0; istring<9; istring++)

stringOut[istring]=SaveString[istring]; lcdPrintData(stringOut,9); lcdGotoXY(0,1);

for (istring=0; istring<14; istring++) stringOut[istring]=SaveString[istring+9];

lcdPrintData(stringOut,14); if(SYSFLAGS_bit.Save==1)

{ for (istring=0; istring<5; istring++) stringOut[istring]=YesString[istring]; }

else{for (istring=0; istring<5; istring++) stringOut[istring]=NoString[istring];}

lcdPrintData(stringOut,5);}

EEPROM.c (работа с ПЗУ)

void EepromWriteEnable(unsigned char Instruction)

{short int Temp; ClearEEPROM_CS();

SSPCR1_bit.SSE = 0; // Disable SPI1

SSPCR0_bit.DSS = 7; // Data Size Select

SSPCR1_bit.SSE = 1; // Enable SPI1

SSPDR = Instruction; // Sending instruction

while(SSPSR_bit.BSY){} // Waiting for the transmission complete

Temp=SSPDR_bit.DATA; SetEEPROM_CS();// EEPROM unselect }

unsigned char EepromInstructionSet(unsigned char Instruction, unsigned char Data)

{short int Temp; while (SSPSR_bit.BSY){}

ClearEEPROM_CS(); SSPCR1_bit.SSE = 0; SSPCR0_bit.DSS = 15;

SSPCR1_bit.SSE = 1; SSPDR = (Instruction<<8)|Data; while (SSPSR_bit.BSY){} SetEEPROM_CS(); return ((unsigned char) SSPDR_bit.DATA);};

void EepromDataWriteSPI (short int Address , unsigned char Data)

{ short int Temp; while (SSPSR_bit.BSY){}ClearEEPROM_CS();SSPCR1_bit.SSE = 0; SSPCR0_bit.DSS = 7; SSPCR1_bit.SSE = 1;SSPDR = WRITE;while(SSPSR_bit.BSY){}

Temp=SSPDR_bit.DATA; SSPCR1_bit.SSE = 0; SSPCR0_bit.DSS = 15;

SSPCR1_bit.SSE = 1; SSPDR = Address; while(SSPSR_bit.BSY){}

Temp=SSPDR_bit.DATA;SSPCR1_bit.SSE = 0; SSPCR0_bit.DSS = 7;

SSPCR1_bit.SSE = 1; SSPDR = Data; while(SSPSR_bit.BSY){}

Temp=SSPDR_bit.DATA; SetEEPROM_CS(); }

bool EepromArrayDataWrite( short int Address, short int SizeOffArray ,unsigned char *Data)

{ short int i; bool Result; unsigned char DataEEPROM; Result=true;

for (i=0;i<SizeOffArray;i++){ EepromWriteEnable(WREN);// разрешаем запись

EepromDataWriteSPI( Address, *(Data+i));// пишем по адресу Address

EEPROMRDSR = EepromInstructionSet(RDSR, 0x0);

while (EEPROMRDSR_bit.RDY){EEPROMRDSR = EepromInstructionSet(RDSR, 0x0);}

DataEEPROM = EepromDataReadSPI( Address, 0xFF);

if(DataEEPROM!=*(Data+i)) Result=false; Address++;}return (Result);}

void EepromArrayDataRead( short int Address, short int SizeOffArray ,unsigned char *Data)

{ short int i; unsigned char DataEEPROM; for (i=0;i<SizeOffArray;i++)

{ EEPROMRDSR = EepromInstructionSet(RDSR, 0x0);

while (EEPROMRDSR_bit.RDY){EEPROMRDSR = EepromInstructionSet(RDSR, 0x0);}

DataEEPROM = EepromDataReadSPI( Address, 0xFF);

*(Data+i)=DataEEPROM; Address++;}}

int EepromDataReadSPI(short int Address, unsigned char Data ){while (SSPSR_bit.BSY){}

ClearEEPROM_CS(); SSPCR1_bit.SSE = 0; SSPCR0_bit.DSS = 15;

SSPCR1_bit.SSE = 1; SSPDR_bit.DATA = (READ<<8)|(Address>>8);

while(SSPSR_bit.BSY){} Temp3=SSPDR_bit.DATA;

SSPCR1_bit.SSE = 0; SSPCR0_bit.DSS = 15; SSPCR1_bit.SSE = 1;

SSPDR_bit.DATA = (Address<<8); while(SSPSR_bit.BSY){}

SetEEPROM_CS(); Temp3=SSPDR_bit.DATA; return ((unsigned char) Temp3);}

LCD.c (управление индикатором)

void lcdInitHW(void){// Инициализация портов ввода/вывода, поключенных к LCD

// Конфигурируем управляющие выводы

CLEARBIT(LCD_CTRL_PORT_CLR, LCD_CTRL_RS);

CLEARBIT(LCD_CTRL_PORT_CLR, LCD_CTRL_E);

// Конфигурируем выводы как выходы

LCD_CTRL_DDR |= (1<<LCD_CTRL_RS);LCD_CTRL_DDR |=(1<<LCD_CTRL_E);}

void lcdControlWrite(unsigned char data) // Запись команды в LCD

{// Устанавливаем режим запись команды

CLEARBIT(LCD_CTRL_PORT_CLR, LCD_CTRL_RS);

CLEARBIT(LCD_CTRL_PORT, LCD_CTRL_RW);

#ifdef LCD_DATA_4BIT // 4-разрядный интерфейс

SETBIT(LCD_CTRL_PORT_SET, LCD_CTRL_E); // Устанавливаем линю "Е"

// Конфигурируем 4 вывода линии данных как выходы

LCD_DATA_DDR |= 0xF0; // Передаем 4 старших бита

LCD_DATA_POUT0_SET=(unsigned long int)(0x00003800&((unsigned long int)data << 6));

LCD_DATA_POUT0_CLR=(unsigned long int)(0x00003800&((unsigned long int)~data << 6));

LCD_DATA_POUT1_SET = (unsigned long int)(0x800000&((unsigned long int)data << 19));

LCD_DATA_POUT1_CLR = (unsigned long int)(0x800000&((unsigned long int)~data << 19));

LCD_DELAY;LCD_DELAY;

CLEARBIT(LCD_CTRL_PORT_CLR, LCD_CTRL_E); // "Сбрасываем" линию "Е"

LCD_DELAY;LCD_DELAY;

#else // 8-разрядный интерфейс

SETBIT(LCD_CTRL_PORT_SET, LCD_CTRL_E);LCD_DATA_DDR = 0xCF;}

void lcdInit(){lcdInitHW(); LCD_DELAY_20000uC;

lcdControlWrite((1<<LCD_FUNCTION) | (1<<LCD_FUNCTION_8BIT));

LCD_DELAY_64uC; lcdControlWrite((1<<LCD_FUNCTION) | (1<<LCD_FUNCTION_8BIT));LCD_DELAY_64uC;

lcdControlWrite((1<<LCD_FUNCTION) | (1<<LCD_FUNCTION_8BIT));

LCD_DELAY_64uC; // Установка функционального состояния по умолчанию

lcdControlWriteInit(LCD_FUNCTION_DEFAULT);LCD_DELAY_64uC;

lcdControlWrite(1<<LCD_ON_CTRL); // Выключить дисплей

LCD_DELAY_64uC; lcdControlWrite(1<<LCD_CLR); // Очистка дисплея

LCD_DELAY_1600uC;

lcdControlWrite(LCD_MODE_DEFAULT); // Установка режима ввода

LCD_DELAY_64uC;lcdControlWrite(1<<LCD_ON_CTRL | 1<<LCD_ON_DISPLAY );

LCD_DELAY_64uC;lcdControlWrite(LCD_FUNCTION_DEFAULT );LCD_DELAY_64uC; }

// Возврат курсора в начальное положение

void lcdHome(void) {lcdControlWrite(1<<LCD_HOME); LCD_DELAY_1600uC;}

void lcdClear(void){ // Очистка дисплея

lcdControlWrite(1<<LCD_CLR);LCD_DELAY_1600uC;}

// Переместить курсор в позицию XY

void lcdGotoXY(unsigned char x, unsigned char y){

unsigned char DDRAMAddr;// Высчитываем реальный адрес DDRAM

switch(y){case 0: DDRAMAddr = LCD_LINE0_DDRAMADDR+x; break;

case 1: DDRAMAddr = LCD_LINE1_DDRAMADDR+x; break;

case 2: DDRAMAddr = LCD_LINE2_DDRAMADDR+x; break;

case 3: DDRAMAddr = LCD_LINE3_DDRAMADDR+x; break;

default: DDRAMAddr = LCD_LINE0_DDRAMADDR+x;}

lcdControlWrite(1<<LCD_DDRAM | DDRAMAddr); // Установка адреса DDRAM

LCD_DELAY_40uC; //SysFlags1.SysFlags1 = ADCStart;}

void lcdPrintData(char* data, unsigned char nBytes){unsigned char i;

if (!data) return; // Проверяем указатель на правильность

for(i=0; i<nBytes; i++){// Выводим символы на дисплей

lcdDataWrite(data[i]); LCD_DELAY_40uC;}}

Time.c ( работа со временем)

void __delay_cycles(unsigned long int i){unsigned long int ii;

for (ii=i;ii!=0;ii--) {WDTCTL = WDTPW+WDTCNTCL;}} // обнуление

void TimerStart(){ T1TCR = 1;Outputs_Reg_bit.STOP_LED_ON = 1;

Outputs_Reg_bit.PUSK_LED_ON=0;Outputs_Reg_bit.GOTOV_LED_ON=1;}

void TimerStop(){ T1TCR = 0; Outputs_Reg_bit.STOP_LED_ON = 0;

Outputs_Reg_bit.PUSK_LED_ON = 1;Outputs_Reg_bit.GOTOV_LED_ON=1;}

void TimerCLR(){ T1TCR = 0; T1TC = 0;}

void Beep(short int delay){Buzz_Delay = delay;

SSP_Out_Flags_bit.BUZZ_ENABLE=1;}

void Output(void){if (TimerFlags_bit.QuotePwrOff){

TimerFlags_bit.QuotePwrOff=0;Outputs_Reg_bit.PWR1_OFF = 1;

for(char i=0; i<30;i++) LCD_DELAY_1600uC;Outputs_Reg_bit.PWR1_OFF = 0;

TimerFlags_bit.TimerStartQuote=0;TimerFlags_bit.Quote_Pusk_Flag =0;}

if(TimerFlags_bit.ContinousOutMode) //длительный режим

{ if(!IO1PIN_bit.P0_16) //кнопка пуск

{Outputs_Reg_bit.PWR1_ON = 1;PuskFlag =1;}

else {Outputs_Reg_bit.PWR1_ON = 0;PuskFlag = 0;}}

if(TimerFlags_bit.ImpulseOutMode)

{ if(!IO1PIN_bit.P0_16 && !TimerFlags_bit.QuotePwrOn && KBD_Data_No_Bounce_bit.KEY_1) //кнопка пуск

{for(int i;i<=511;i++){ ADC1_Sample_Vector[i]=0;

ADC2_Sample_Vector[i]=0;ADC3_Sample_Vector[i]=0;

ADC1_Sample_Vector_Fix[i]=0;ADC2_Sample_Vector_Fix[i]=0;

ADC3_Sample_Vector_Fix[i]=0;}TimerFlags_bit.TimerStartQuote=1; TimerFlags_bit.QuotePwrOn =1; Outputs_Reg_bit.PWR1_ON = 1; TimerFlags_bit.TimerStartK1 =1;PuskFlag =1;}}}

Menu.c (обработка меню)

void Main_Menu(void){ptFunc = ptasMenuCurrent->ptFunctionDisplay;ptFunc();}

void MainMenuBrowse(void){//обзор главного меню

if((KBD_Data_No_Bounce_bit.KEY_2==0))//key_up

{ KeyCounter=KeySampleTime*10;KBD_Data_No_Bounce_bit.KEY_2=1;

ptasMenuCurrent=ptasMenuCurrent->ptUp; }

if((KBD_Data_No_Bounce_bit.KEY_3==0))//key_down

{ptasMenuCurrent=ptasMenuCurrent->ptDown;KeyCounter=KeySampleTime*10;

KBD_Data_No_Bounce_bit.KEY_3=1;if((KBD_Data_No_Bounce_bit.KEY_0==0))//key_enter

{KeyCounter=KeySampleTime*10;KBD_Data_No_Bounce_bit.KEY_0=1;

ptasMenuCurrent=ptasMenuCurrent->ptNext; lcdClear();}

if((KBD_Data_No_Bounce_bit.KEY_4==0))//key_back

{ptasMenuCurrent=ptasMenuCurrent->ptPrev;KeyCounter=KeySampleTime*10;

KBD_Data_No_Bounce_bit.KEY_4=1; lcdClear();}}

void Secundomer(void){ MainMenuBrowse();lcdGotoXY(0,1);lcdPrintData(" ",1);

lcdGotoXY(19,1); lcdPrintData(" ",1); lcdGotoXY(1,0);

lcdPrintData( SEKUNDOMER,18); lcdGotoXY(0,0);lcdPrintData(arrow,1);

lcdGotoXY(19,0);lcdPrintData(enter,1);lcdGotoXY(1,1);

lcdPrintData( QUOTE_MODE,18);}

void Fixation(void){ MainMenuBrowse();lcdGotoXY(19,0);lcdPrintData(" ",1);

lcdGotoXY(0,0);lcdPrintData( back,1);lcdGotoXY(1,0);

lcdPrintData( SEKUNDOMER,18);lcdGotoXY(1,1);

lcdPrintData( FIXATION ,18);lcdGotoXY(0,1);lcdPrintData(arrow,1);

lcdGotoXY(19,1);lcdPrintData(enter,1);}if(TimerFlags_bit.ImpulseOutMode){

Outputs_Reg_bit.PWR1_OFF = 1;for(char i=0; i<10;i++)LCD_DELAY_1600uC;

Outputs_Reg_bit.PWR1_OFF = 0;} TimerFlags_bit.ImpulseOutMode=0;TimerFlags_bit.ContinousOutMode=1;

asMenuMain[1].ptNext = &asMenuQuote [0]; }

void QuoteAuto(void){ lcdGotoXY(19,0);lcdPrintData(" ",1); lcdGotoXY(0,0);

lcdPrintData( back,1); lcdGotoXY(1,0);lcdPrintData( QUOTE_MODE,18);

lcdGotoXY(1,1);lcdPrintData( AUTO_MODE ,18);lcdGotoXY(0,1);

lcdPrintData(arrow,1);lcdGotoXY(19,1);lcdPrintData(enter,1);

if(TimerFlags_bit.ContinousOutMode){Outputs_Reg_bit.PWR1_OFF = 1;

for(char i=0; i<10;i++) LCD_DELAY_1600uC;Outputs_Reg_bit.PWR1_OFF = 0;}

TimerFlags_bit.ContinousOutMode=0; TimerFlags_bit.ImpulseOutMode=1;

asMenuMain[1].ptNext = &asMenuQuote [1]; MainMenuBrowse();}

void Zapusk_Menu(void){if((KBD_Data_No_Bounce_bit.KEY_3==0))//key_up

{ TimerStartMenuItem++; if(TimerStartMenuItem == 3)

TimerStartMenuItem = 0; KeyCounter=KeySampleTime*10;

KBD_Data_No_Bounce_bit.KEY_3=1;} if((KBD_Data_No_Bounce_bit.KEY_2==0))//key_down

{if(TimerStartMenuItem == 0) TimerStartMenuItem = 3;TimerStartMenuItem--; KeyCounter=KeySampleTime*10;KBD_Data_No_Bounce_bit.KEY_2=1;}

if((KBD_Data_No_Bounce_bit.KEY_4==0))//key_back

{ ptasMenuCurrent=ptasMenuCurrent->ptPrev;

KeyCounter=KeySampleTime*10; KBD_Data_No_Bounce_bit.KEY_4=1;}

switch (TimerStartMenuItem){case 0: lcdGotoXY(19,0); lcdPrintData(" ",1);

lcdGotoXY(0,0);lcdPrintData( back,1);lcdGotoXY(1,0);lcdPrintData( ZAPUSK,18);

lcdGotoXY(1,1);lcdPrintData( K1 ,17);lcdGotoXY(0,1);lcdPrintData(arrow,1);

lcdGotoXY(18,1);lcdPrintData(upArrow,1);lcdGotoXY(19,1);

lcdPrintData(downArrow,1);TimerFlags_bit.TimerStartK1=1;

TimerFlags_bit.TimerStartPusk=0; break;

case 1: lcdGotoXY(19,0); lcdPrintData(" ",1); lcdGotoXY(0,0);

lcdPrintData( back,1); lcdGotoXY(1,0); lcdPrintData( ZAPUSK,18); lcdGotoXY(1,1);

lcdPrintData( PUSK ,17); lcdGotoXY(0,1); lcdPrintData(arrow,1); lcdGotoXY(18,1);

lcdPrintData(upArrow,1); lcdGotoXY(19,1);lcdPrintData(downArrow,1);

TimerFlags_bit.TimerStartK1=0; TimerFlags_bit.TimerStartPusk=1;break;

case 2: lcdGotoXY(19,0); lcdPrintData(" ",1); lcdGotoXY(0,0);

lcdPrintData( back,1); lcdGotoXY(1,0); lcdPrintData( ZAPUSK,18); lcdGotoXY(1,1);

lcdPrintData( NET ,17); lcdGotoXY(0,1); lcdPrintData(arrow,1); lcdGotoXY(18,1);

lcdPrintData(upArrow,1); lcdGotoXY(19,1); lcdPrintData(downArrow,1);

TimerFlags_bit.TimerStartK1=0; TimerFlags_bit.TimerStartPusk=0; break; }}

Lpc2148.c

void initLPC2148(void){ #pragma segment = "INTVEC"

if (( void * )0x00000000UL == __segment_begin( "INTVEC" ))

{MEMMAP = 1;} // normal flash mode

else { MEMMAP = 2 ; }

// user ram mode - Map lowest 64 bytes of the address space to

//bottom of internal RAM, moving exception vectors into place

PLLCFG=0x24;feed();// Enabling the PLL

PLLCON=0x1;feed();// Wait for the PLL to lock to set frequency

while(!( PLLSTAT_bit.PLOCK)){}// Connect the PLL as the clock source

PLLCON=0x3;feed();MAMCR=0x2;

MAMTIM=0x4;// Setting peripheral Clock (pclk) to System Clock (cclk)

VPBDIV=0x01; T0IR=0xFF; // reset match and capture event interrupts

T0TC=0; // Clear timer counter

T0PR= 0;T0MR0=3000;

T0MR1=4687; // Count up to 36,864 for 100Hz interrupt, period = 10ms

T0MR2 =4927; T0MCR = 0XC9; // Reset Timer Counter & Interrupt on match

T0TCR = 1; // Counting enable

T1IR = 0XFF; // reset match and capture event interrupts

T1TC=0; // Clear timer counter

T1PR= 6000; // Prescaler for 1 timer tick per 100uS

T1MR0=99990000; // Interrupt every 1 sec

T1MCR= 3; T1TCR = 0; Timer_Data_Sec=0;

VICIntSelect = 0; // Set all VIC interrupts to IRQ for now

VICIntEnClear = 0xFFFFFFFF; // Diasable all interrupts

VICProtection = 0; // VIC registers can be accessed in User or

VICVectAddr = 0; // Clear interrupt

VICProtection = 0; // Accesss VIC in USR | PROTECT

VICIntSelect &= ~(1<<VIC_TIMER0); // Timer 0 intrpt is an IRQ (VIC_TIMER0 = 4)

VICVectAddr0 = (unsigned int)&MM_TIMER0_ISR; // Install ISR in VIC addr slot 0

VICVectCntl0 = 0x20 | VIC_TIMER0; // IRQ type, TIMER 0 int enabled

VICIntEnable |= (1<<VIC_TIMER0); // Turn on Timer0 Interrupt

VICIntSelect &= ~(1<<VIC_SPI); // SPI intrpt is an IRQ (VIC_SPI = 11)

VICVectAddr1 = (unsigned int)&SPI_ISR; // Install ISR in VIC addr slot 1

VICVectCntl1 = 0x20 | VIC_SPI; // IRQ type, SPI int enabled

VICIntEnable |= (1<<VIC_SPI); // Turn on SPI Interrupt

VICIntSelect &= ~(1<<VIC_TIMER1); // SPI intrpt is an IRQ (VIC_SPI = 11)

VICVectAddr2 = (unsigned int)&MM_TIMER1_ISR; // Install ISR in VIC addr slot 1

VICVectCntl2 = 0x20 | VIC_TIMER1; // IRQ type, SPI int enabled

VICIntEnable |= (1<<VIC_TIMER1); // Turn on SPI Interrupt

//инициализация портов ввода/вывода

IO0DIR|=0X226A3D55; IO1DIR|=0XEE0000; IO0DIR_bit.P0_28 =1;

/* Configure Pin Connect Block */

PINSEL0=0x5500; PINSEL2=0X04;PINSEL1_bit.P0_28=0;

PINSEL0_bit.P0_4 = 1; //SCK0

PINSEL0_bit.P0_5 = 1; //MISO0

PINSEL0_bit.P0_6 = 1; //MOSI0

PINSEL0_bit.P0_7 = 1; //SSEL0

/* SPI1 Pin Connect Block definition */

PINSEL1_bit.P0_17=SCK1;PINSEL1_bit.P0_18=MISO1;PINSEL1_bit.P0_19=MOSI1;

PINSEL1_bit.P0_20=SSEL1;

/* SPI1 (SSP) Definition */

SSPCR0_bit.DSS=15; // Data Size Select

SSPCR0_bit.SCR=7; // Serial Clock Rate

SSPCPSR_bit.CPSDVSR=2; // Clock Prescale

SSPCR1_bit.SSE=1; // SSP Enable

S0SPCCR=0x3C; // Set to highest speed for SPI =1 MHz

S0SPCR=0xA4; // Device selected as master

SETBIT(IO0SET,RANGE_CS); CLEARBIT(IO0CLR,RANGE_CS);

RMSCoefArrayPointer=&RMSCoef;

EepromArrayDataRead(0x0000,sizeof (RMSCoef), (unsigned char *) RMSCoefArrayPointer);

__enable_interrupt(); // Global interrupt enable

MainMenuFlags=0;MainMenuItem=0;MainMenuSecondItem=0;TimerMenuItem=0;

KBD_Data_No_Bounce=0xFFFF;KeyCounter= 64;QuotePeriodNumber=1;

MeasureModeUpperItem=0;MeasureModeLowerItem=1;KeyUpDecadeCounter=0;

KeyDownDecadeCounter=0;Outputs_Reg_bit.PWR1_ON =0;PuskFlag=0;

Outputs_Reg_bit.PWR1_OFF =0;Outputs_Reg_bit.STOP_LED_ON = 1;

Outputs_Reg_bit.PUSK_LED_ON = 1;Outputs_Reg_bit.GOTOV_LED_ON = 0;

Range[0]=0;Range[1]=0;Range[2]=0;Range[3]=0;KeyDelay=10;

TimerFlags_bit.TimerStartK1 =1;TimerFlags_bit.TimerStartPusk=0;

TimerFlags_bit.TimerFixK2 =1;TimerFlags_bit.TimerFixShutoff =0;

TimerFlags_bit.ContinousOutMode=1;TimerFlags_bit.ImpulseOutMode=0;

TimerFlags_bit.Quote_Pusk_Flag=0;TimerFlags_bit.TimerStartQuote=0;

QuotePeriodValue = 200;TimerStartMenuItem=2;TimerFixMenuItem=2;

Outputs_Reg_bit.PWR1_OFF = 1;for(char i=0; i<30;i++) LCD_DELAY_1600uC;

Outputs_Reg_bit.PWR1_OFF = 0; Outputs_Reg_bit.SET_3KA_30KA=0;

Outputs_Reg_bit.LED3KA=1; Outputs_Reg_bit.LED30KA=0; Range[1] = 0;

Outputs_Reg_bit.SUMM_DIV2=0; Outputs_Reg_bit.SUMM_DIV4=0;

TimerFlags_bit.TimerStartK1=0; // Запуск выключен

TimerFlags_bit.TimerStartPusk=0;

TimerFlags_bit.TimerFixK2=0; //Фиксация выключена

TimerFlags_bit.TimerFixShutoff=0;}

void feed (void){PLLFEED=0xAA; PLLFEED=0x55;}

Приложение Г

Печатная плата управляющего модуля

Рисунок Г.1 - Верхний слой печатной платы

Рисунок Г.2 - Слой «земли»

Рисунок Г.3 - Слой «питания»

Рисунок Г.4 - Нижний слой печатной платы

Приложение Д

Спецификация на сборочный чертеж

Формат

Зона

Поз.

Обозначение

Наименование

Кол.

Примечание

Документация

А2

Д.П.230101.006 СБ

Сборочный чертеж

1

Детали

А1

1

Д.П.230101.006 ПП

Плата печатная

1

Прочие изделия

Конденсаторы

2

К10-17в-1 мкФ ОЖО.460.172 ТУ

1

С1

3

PSM-057-22 мкФ Vishay BCcomponents

1

C8

4

PSM-057-22 мкФ Vishay BCcomponents

1

C9

5

PSM-057-100 мкФ Vishay BCcomponents

1

С13

6

К10-17в-0,1мкФ ОЖО.460.172 ТУ

1

С16

7

К10-17в-0,1мкФ ОЖО.460.172 ТУ

3

С17,С21,С24

8

PSM-057-100 мкФ Vishay BCcomponents

1

С18

9

К10-17в-0,1мкФ ОЖО.460.172 ТУ

3

С19,С20,С22

10

К53-56-10 мкФ АДПК.673546.005ТУ

4

С23,С34,С54,С60

11

К53-56-10 мкФ АДПК.673546.005ТУ

1

С25

12

К10-17в-0,1мкФ ОЖО.460.172 ТУ

2

С26,С27

13

К10-17в-0,1мкФ ОЖО.460.172 ТУ

2

С28,С29

14

К53-56-1 мкФ АДПК.673546.005ТУ

1

C31

15

PSM-057-100 мкФ Vishay BCcomponents

1

С32

16

К53-56-1 мкФ АДПК.673546.005ТУ

1

C33

17

К10-17в-0,1мкФ ОЖО.460.172 ТУ

2

C35,С56

18

PSM-057-22 мкФ Vishay BCcomponents

2

С36,C53

19

К53-56-1 мкФ АДПК.673546.005ТУ

1

C37

20

PSM-057-100 мкФ Vishay BCcomponents

1

С38

21

PSM-057-100 мкФ Vishay BCcomponents

3

С39,С51,С55

22

К10-17в-1 мкФ ОЖО.460.172 ТУ

1

С41

23

К10-17в-1 мкФ ОЖО.460.172 ТУ

1

С42

24

К10-17в-1 мкФ ОЖО.460.172 ТУ

1

С43

25

К10-17в-1 мкФ ОЖО.460.172 ТУ

1

С44

26

К53-56-10 мкФ АДПК.673546.005ТУ

1

C45

27

PSM-057-22 мкФ Vishay BCcomponents

1

С46

28

К53-56-10 мкФ АДПК.673546.005ТУ

1

C47

29

К53-56-10 мкФ АДПК.673546.005ТУ

1

C48

30

PSM-057-100 мкФ Vishay BCcomponents

1

C49

31

PSM-057-100 мкФ Vishay BCcomponents

1

C50

32

К10-17в-0,1мкФ ОЖО.460.172 ТУ

1

С52

33

К10-17в-1 мкФ ОЖО.460.172 ТУ

1

С59

34

К10-17в-0,1мкФ ОЖО.460.172 ТУ

1

С73

35

К53-56-10 мкФ АДПК.673546.005ТУ

1

С78

36

К10-17в-0,1мкФ ОЖО.460.172 ТУ

1

С79

37

К10-17в-0,1мкФ ОЖО.460.172 ТУ

1

C101

Микросхемы

38

OP4177AR Analog Devices, Inc.

1

DA1

39

OP4177AR Analog Devices, Inc.

1

DA2

40

PVT422 International Rectifier

2

DA3,DA5

41

PVT422 International Rectifier

2

DA4,DA6

42

ADG408BR Analog Devices, Inc.

1

DA7

43

LM311M Fairchild Semiconductor Corporation

1

DA11

44

LM311M Fairchild Semiconductor Corporation

1

DA12

45

AM1P-0505SH30 Aimtec

2

DA13,DA14

46

AM1P-0505SH30 Aimtec

1

DA18

47

AM1P-0505SH30 Aimtec

1

DA19

48

LM311M Fairchild Semiconductor Corporation

1

DA25

49

MAX809-EUR-T Maxim Integrated Products

1

DA26

50

LTV817 LiteOn

1

DA27

51

LTV817 LiteOn

1

DA28

52

ADUM1402BRW Analog Devices, Inc.

1

DD1

53

ADUM1402BRW Analog Devices, Inc.

1

DD2

54

74HC4066D Philips Semiconductors

1

DD4

55

LPC2148FBD64 Philips Semiconductors

1

DD5

56

AT25640AN-10SU ATMEL Corporation

1

DD6

57

74HC165D Philips Semiconductors

2

DD7,DD8

58

74HC595D Philips Semiconductors

2

DD9,DD12

59

74HC595D Philips Semiconductors

2

DD10,DD11

60

FT232BM Future Technology Devices Intl Ltd.

1

DD15

61

74HC138D Philips Semiconductors

1

DD16

62

74HC14D Philips Semiconductors

1

DD18

Реле

63

FTR-B3GA4.5Z Fujitsu Media Devices

1

К1

64

FTR-B3GA4.5Z Fujitsu Media Devices

1

K4

65

FTR-B3GA4.5Z Fujitsu Media Devices

3

К7,K9,К10

Дроссели

66

LQH4N-330-33мкГн Murata Manufacturing

2

L1, L2

67

LQH4N-330-33мкГн Murata Manufacturing

1

L3

68

LQH4N-330-33мкГн Murata Manufacturing

1

L4

Резисторы АБШК.434110.050 ТУ

69

С2-29В-1-138 Ом±0,1

1

R2

70

С2-29В-1-138 Ом±0,1

1

R3

71

С2-29В-0,125-649 Ом±0,1%

3

R4,R11,R13

72

С2-29В-0, 5-255 кОм±0,1%

2

R7,R20

73

С2-29В-0, 5-255 кОм±0,1%

2

R8,R21

74

С2-29В-0,125-1,1 кОм±0,1%

6

R9,R10,R12,R22,R23,R24

75

С2-29В-0,125-1,1 кОм±0,1%

2

R14,R25

76

С2-29В-0,125-876 Ом±0,1%

3

R15,R17,R19

77

С2-29В-0,125-1,1 кОм±0,1%

5

R16,R18,R26,R44,R49

78

Р1-12-0,125-430 Ом±5%

7

R28,R30,R32,R34,R36,R38,R40

79

С2-29В-0,25-232 кОм±0,1%

2

R29,R33

80

С2-29В-0,25-232 кОм±0,1%

4

R31,R35,R39,R43

81

С2-29В-0,125-1,33 кОм±0,1%

2

R37,R41

82

Р1-12-0,125-100 кОм±5%

1

R45

83

Р1-12-0,125-100 кОм±5%

2

R47,R51

84

Р1-12-0,125-100 кОм±5%

2

R50,R63

85

Р1-12-0,125-10 кОм±5%

1

R65

86

Р1-12-0,125-100 кОм±5%

2

R66,R68

87

Р1-12-0,125-430 Ом±5%

1

R70

88

Р1-12-0,125-430 Ом±5%

1

R71

89

Р1-12-0,125-100 кОм±5%

1

R75

90

Р1-12-0,125-10 кОм±5%

1

R77

91

С2-29В-1-100 кОм±0,1

2

R79, R80

92

С2-29В-1-100 кОм±0,1

2

R81, R82

93

Р1-12-0,125-100 кОм±5%

1

R87

94

Р1-12-0,125-100 кОм±5%

1

R88

95

Р1-12-0,125-10 кОм±5%

1

R89

96

Р1-12-0,125-10 кОм±5%

1

R90

97

Р1-12-0,125-10 кОм±5%

1

R91

98

Р1-12-0,125-10 кОм±5%

1

R92

99

Р1-12-0,125-10 кОм±5%

1

R94

100

Р1-12-0,125-10 кОм±5%

1

R95

101

Р1-12-0,125-10 кОм±5%

2

R96,R93

102

Р1-12-0,125-10 кОм±5%

1

R97

103

Р1-12-0,125-10 кОм±5%

2

R99,R109

104

Р1-12-0,125-10 кОм±5%

1

R100

105

Р1-12-0,125-100 кОм±5%

4

R101...R103,R106

106

Р1-12-0,125-100 кОм±5%

1

R105

107

Р1-12-0,125-10 кОм±5%

1

R143

108

Р1-12-0,125-10 кОм±5%

1

R145

Диоды General Semiconductor

109

LL4148

2

VD3,VD7

110

LL4148

1

VD5

111

LL4148

2

VD8,VD9

112

LL4148

1

VD11

113

BZX55C6V2

1

VD13

114

BZX55C6V2

1

VD14

115

LL4148

1

VD15

116

LL4148

1

VD20

117

LL4148

1

VD21

118

LL4148

6

VD31...VD36

Транзисторы Fairchild Semiconductor

119

BC 807

1

VT1

120

BC 807

1

VT2

121

BC 817

1

VT3

122

BC 817

3

VT4,VT5,V8

123

BC 817

1

VT6

Разъемы

124

WF-2 BM

1

XP1

125

WF-4 BM

1

XP2

126

WF-6 BM

1

XP3

127

WF-2 BM

1

XP4

128

WF-2 BM

1

XP5

129

WF-10 BM

1

XP6

130

IDC-40MS AMP

1

XP7

131

WF-6 BM

2

XP8,XP10

132

WF-4 BM

1

XP9

133

WF-8 BM

1

XP11

134

WF-2 BM

1

XP13

135

IDC-14MS AMP

1

XP14

136

WF-6 BM

1

XP15

137

WF-4 BM

1

XP17

Прочее Sonitron

138

Пьезоизлучатель SMA-13P7.5

1

BA1

139

Кварц DT-38T-32,768 кГц-20 пФ

1

ZQ1

140

Кварц HC49/S-12 Мгц-20 пФ

1

ZQ2

141

Кварц HC49/S-6 Мгц-20 пФ

1

ZQ3


Подобные документы

  • Принцип работы электрических термометров, преимущества использования. Структурная схема устройства, выбор элементной базы, средств индикации. Выбор микроконтроллера, разработка функциональной схемы устройства. Блок-схема алгоритма работы термометра.

    курсовая работа [3,6 M], добавлен 23.05.2012

  • Структурная схема устройства управления. Алгоритм работы микроконтроллера в его составе. Строение центрального процессорного элемента – микроконтроллера AVR семейства Classic. Принципиальная схема устройства, расчет временных параметров ее работы.

    курсовая работа [636,5 K], добавлен 03.12.2013

  • Структурная схема микропроцессорного устройства для определения частоты сигнала. Выбор микроконтроллера, описание алгоритма нахождения частоты. Алгоритм работы программы управления микропроцессорным устройством. Программа работы микропроцессора.

    курсовая работа [605,7 K], добавлен 24.11.2014

  • Разработка вычислительного устройства из двух взаимосвязанных частей (операционного и управляющего автоматов), выполняющего операции десятичной арифметики. Разработка структурной схемы. Блоки суммы и разности, умножений и делений, управляющий блок.

    курсовая работа [1,3 M], добавлен 26.05.2013

  • Обзор генераторов сигналов. Структурная схема и элементная база устройства. Разработка печатной платы модуля для изучения генератора сигналов на базе прямого цифрового синтеза. Выбор технологии производства. Конструкторский расчет; алгоритм программы.

    дипломная работа [1,7 M], добавлен 25.04.2015

  • Электрическая принципиальная схема устройства автоматической тренировки аккумулятора. Выбор элементной базы. Разработка схемы электрической принципиальной. Размещение компонентов на печатной плате. Разработка алгоритма программы микроконтроллера.

    дипломная работа [670,2 K], добавлен 20.10.2013

  • Проектирование микроконтроллера системы управления холодильника, разработка принципиальной электрической и общей функциональной схемы устройства. Описание работы специальной прикладной программы. Программа устройства на Ассемблере. Блок-схема программы.

    курсовая работа [47,6 K], добавлен 14.07.2009

  • Теоретические основы процессоров. Построение процессоров и их общая структура. Цифровые автоматы. Расчёт количества триггеров и кодирование состояний ЦА. Структурная схема управляющего устройства. Построение графа функционирования управляющего устройства.

    курсовая работа [85,0 K], добавлен 08.11.2008

  • Управление работой устройства микроконтроллером PIC18F2550. Обмен информацией между микроконтроллером и часами. Передача данных на алфавитно-цифровой LED-индикатор. Меню изменения даты и времени. Схема устройства принципиальная. Листинг текста программы.

    курсовая работа [1,7 M], добавлен 15.01.2013

  • Общие принципы разработки программно-аппаратного терминала с CAN-шиной, его основные физические интерфейсы. Структурная схема разрабатываемого устройства. Схема подключения микроконтроллера. Схема подключения микроконтроллера Atmega128 и для ПЭВМ.

    дипломная работа [1,4 M], добавлен 07.07.2011

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.