Управляющий модуль устройства проверки автоматических выключателей первичным током
Блок-схема алгоритма программы управления микроконтроллером. Требования к печатным платам и их разработка. Структурная схема измерительного устройства Ретом-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