Exemple #1
0
void io_init(void)
{
#ifdef IO_USE_PCA9535
  io_extender_init();
#elif PROJECT_MODEL == 60 || PROJECT_MODEL == 70 || PROJECT_MODEL == 71
 // do nothing, io_hardware_init() is called in init_basic_modules() for quick IO line restore on hot (re)start
#else
  io_hardware_init();
#endif
  unsigned sign;
  EEPROM_READ(&eeprom_io_signature, &sign, sizeof sign);
  if(sign != io_signature)
  {
    io_reset_params();
  }
  else
  {
#if IO_MAX_CHANNEL == 4
    // check 'update' sign, reset setup of user io lines 3,4
    EEPROM_READ(&eeprom_io_signature_io34, &sign, sizeof sign);
    if(sign != io_signature_io34) io_reset_params_io34_only();
#endif
  }
  EEPROM_READ(&eeprom_io_setup, io_setup, sizeof io_setup);
  // safe pulse_dur value, it's new field from uninitialized reserved bytes
  for(int n=0; n<IO_MAX_CHANNEL; ++n)
    if(io_setup[n].pulse_dur == 0)
      io_setup[n].pulse_dur = 10; // 1s
  //
  io_restart();
}
Exemple #2
0
void tstat_init(void)
{
  unsigned sign;
  EEPROM_READ(&eeprom_tstat_signature, &sign, sizeof sign);
  if(sign != tstat_signature) tstat_reset_params();
  EEPROM_READ(eeprom_tstat_setup, tstat_setup, sizeof tstat_setup);
  tstat_restart();
}
Exemple #3
0
void logic_init(void)
{
  tstat_init();
  logic_pinger_init();

  unsigned sign;
  EEPROM_READ(&eeprom_logic_signature, &sign, sizeof sign);
  if(sign != logic_signature) logic_reset_params();
  EEPROM_READ(eeprom_logic_setup, logic_setup, sizeof logic_setup);
  EEPROM_READ(&eeprom_logic_flags, &logic_flags, sizeof logic_flags);
  logic_restart();
}
Exemple #4
0
void logic_pinger_init(void)
{
  unsigned sign;
  EEPROM_READ(&eeprom_logic_pinger_signature, &sign, sizeof sign);
  if(sign != logic_pinger_signature) logic_pinger_reset_params();
  EEPROM_READ(eeprom_logic_pinger_setup, logic_pinger_setup, sizeof logic_pinger_setup);
#ifdef DNS_MODULE
  struct logic_pinger_setup_s *q = logic_pinger_setup;
  for(int i=0; i<LOGIC_MAX_PINGER; ++i, ++q)
    dns_add(q->hostname, q->ip);
#endif
  logic_pinger_restart();
}
Exemple #5
0
void main(void) {
    TRISB0 = 0; //blue
    TRISB1 = 0; //green
    TRISB2 = 0; //red

    //set up timer
    T0IF = 0;
    TMR0 = PW_period;
    T0CS = 0;
    PSA = 1;
    GIE = 1; //global interrupt flag
    T0IE = 1;

    TRISB3 = 1; //button

    short i = EEPROM_READ(0x0A);
    while (1) {
        if (i >= 360/60) i=0;

        EEPROM_WRITE(0x0A, i);

        setHue(60*i);

        //delay(1000);
        while(RB3 == 1); //debounce
        while(RB3 == 0);
        setColor(100,100,100);
        delay(1000);
        i++;
    }
}
int main(void)
{
	
	DDRD=0xFF;
	
	unsigned int Addr[3]={1,2,3}; //Adress Array
	unsigned char Data[3]={0x10,0x4F,0xF0}; // Datenarray
	unsigned char Vergleichswert; //Vergleichswert initialisieren
		
		for (int i=0;i<3;i++) //Beschreiben des EEPROMs, NUR BEI PROGRAMMSTART!
		{
			EEPROM_WRITE(Addr[i],Data[i]);
		}
	


    while (1)  //Endlosschleife
    {	
		for (int j=0;j<3;j++) // Durchschalten der verschiedenen EEPROM-Zustände auf Ausgang
    {
		Vergleichswert=EEPROM_READ(Addr[j]);
		
		FAST_PWM(Vergleichswert);
		//_delay_ms(5000); //Anschalten , für Sim-Zwecke ausgeschaltet
    }

		
    }
}
Exemple #7
0
void main()
{
	setup();
	PORTAbits.RA5 = 0;
	
	lcd_cursor(LCD_NOCURSOR);

	char timezone = EEPROM_READ(STORE_TZADDRESS);
	__delay_ms(20);

	sys_ready();
	
	while(1)
	{
		if(PORTBbits.RB2 == 0)
		{
			timezone = EEPROM_READ(STORE_TZADDRESS);

			rtc_get_time_and_date(time,date);
			tz_get_date(screenbuf,date);
			lcd_write_at(0,0,screenbuf);
			tz_get_time(screenbuf,time,timezone);
			lcd_write_at(1,0,screenbuf);

			if(input_get_button_no_block() == b_menu)
			{
				menu_main();
			}
		}
		else
		{
			lcd_blankscreen();
			sys_sleep();
		}
	}
}
Exemple #8
0
//-----------------------------------------------
unsigned char eeprom_read(unsigned char addr)
{
return EEPROM_READ(addr);
}
Exemple #9
0
/*==============================================================================
*   MODULE        : main
*   FUNCTION      : IR Remocon リモコンメイン関数
*   ARGUMENT      : none
*   RETURN        : none
*   NOTE          : none
*===============================================================================*/
void main()
{
    unsigned char   i;              /* LED 点滅回数カウンタ         */
    unsigned char   ir_state;       /* 受信状態 (成功/不明/ノイズ)  */
    unsigned char   key_code;       /* キーコード取得用             */
    unsigned char   func_key_type;  /* ファンクションキー種別       */
    unsigned char   eep_offset;     /* EEPROM保存先 オフセット      */


    /* PORT A/B/C 入出力設定 (1b:Input 0b:Output)   */
    TRISA   = 0xCF; /* Port A 入出力設定            */
	TRISB   = 0x00; /* Port B 入出力設定            */    /* masa すべてのPORTをOUTPUTにする。*/
    //TRISB   = 0xC1; /* Port B 入出力設定            */
    TRISC   = 0x81; /* Port C 入出力設定            */

    /* A/Dコンバータ設定                            */
    ADCON0  = 0x00; /* ADコンバータ電源OFF(未使用)  */
    ANSEL   = 0x00; /* AN0~AN7  Pin Digital I/O     */
    ANSELH  = 0x00; /* AN8~AN13 Pin Digital I/O     */

    /* コンパレータ設定                             */
    CM1CON0 = 0x07; /* Comparator 1 Disable         */
    CM2CON0 = 0x07; /* Comparator 2 Disable         */

    /* キャリア周波数設定 (PWM用 TIMER2 の設定)     */
    PR2     = 0x19; /* 38KHz (1cycle = 25~26us)     */
    T2CON   = 0x0C; /* Postscaler   -> 1:2          */
                    /* Timer2       -> ON           */
                    /* Prescaler    -> 1            */
    CCPR2L  = 0x0C; /* Duty         -> 50% (0x32)   */
                    /* CCPR2L:1100b                 */
                    /* CCP2CON(bit5~4):10b->110010b */
    CCP2CON = PWM_STOP; /* PWM      -> OFF          */
                        /* 2LSB of duty cycle->10b  */

    /* 受信データ解析用 TIMER1 設定                 */
    T1CON   = 0x01; /* Prescaler      -> 1:1 (65ms) */
                    /* Clock Source   -> Internal   */
                    /* Timer1        -> Start       */
    TMR1L   = 0;    /* Timer1 Value MSB 8bit Clear  */
    TMR1H   = 0;    /* Timer1 Value LSB 8bit Clear  */
    TMR1IF  = 0;    /* Timer1 Interrupt Flag Clear  */
    TMR1IE  = 1;    /* Timer1 Interrupt Enable      */

    /* Port 初期化 */
    PORTA   = 0x00; /* PortA RA7~0:Lo               */
    PORTB   = 0x00; /* PortB RB7~1:Lo    RB0:Hi     */    /* masa */
	//PORTB   = 0x01; /* PortB RB7~1:Lo    RB0:Hi     */
    PORTC   = 0x01; /* PortC RC7~1:Lo    RC0:Hi     */

    /****************************************************************/
    /* Dip SW が両方 Hi ⇒ 送信モード                               */
    /****************************************************************/
    if ((PORTA & MODE_MASK) == RUN_MODE_1) {
        /* Function Type Init (Function 1 で初期化) */
        func_key_type = KEY_CODE01;
        /* Function1 LED On */
        led_control(LED_MASK);

        for (;;)
        {
            /* Key Check */
            key_code = key_input_check();

            /* Key 押下なし -> CPU Sleep    */
            if (key_code == KEY_OFF) {
                /* CPU Sleep -> Wake Up     */
                cpu_sleep();
            }
            /* Key 押下あり -> 何れかの動作 */
            else {
                /* Function Key 押下された  */
                if (key_code <= KEY_CODE04) {
                    /* Function Type 保持   */
                    func_key_type = key_code;
                    /* 対応した LED On      */
                    led_control((LED_MASK << key_code));
                }
                /* 動作キーが押下された     */
                else {
                    /* 対応したコードを送信 */
                    ir_out_start(func_key_type, key_code);
                }
            }
        }
    }

    /****************************************************************/
    /* Dip SW 1:Lo  Dip SW 2:Hi ⇒ 受信モード (EEPROMへの保存)      */
    /****************************************************************/
    if ((PORTA & MODE_MASK) == RUN_MODE_2) {
        /* Function LED All Off */
        led_control(ALL_ON);

        for (;;) {
            /* Key Check */
            key_code = key_input_check();
            /* Function Key が押されたら受信モードへ    */
            if (key_code <= KEY_CODE04) {
                /* Function Key Code 保持               */
                func_key_type = key_code;
                /* Key に対応した LED 点灯              */
                led_control((LED_MASK << key_code));
                break;
            } else {
                /* Key 押下されるまでチェックを続ける   */
                ;
            }
        }

        /* 何か受信するまでIRチェック */
        for (;;) {
            /* 赤外線コード受信                         */
            ir_state = ir_recieve();
            /* 受信成功 (NEC/家電協フォーマット)        */
            if (ir_state == SUCCESS) {
                /* LED制御 & データ保存処理へ遷移       */
                break;
            }
            /* 不明のフォーマットを受信                 */
            else if (ir_state == UNKNOWN) {
                for (;;) {
                    /* 電源OFFまで 150ms 間隔で全LED点滅    */
                    led_control(ALL_OFF);
                    __delay_ms(150);
                    led_control(ALL_ON);
                    __delay_ms(150);
                }
            }
            /* 何らかのノイズを受信                     */
            else {
                /* もう一度受信処理                     */
                ;
            }
        }

        /* 受信完了状態通知 */
        for (i=0; i<2; i++) {
            /* 選択した Key に対応した LED 点滅 (2回)   */
            /* 150ms 間隔で点滅                         */
            led_control(ALL_OFF);
            __delay_ms(150);
            led_control((LED_MASK << func_key_type));
            __delay_ms(150);
        }
        /* IR format 一時保持       */
        eep_wdata.format = rx_format;
        /* 受信データ一時保持       */
        memcpy(&eep_wdata.data, &rcv_data, sizeof(rcv_data));
        /* EEPROM 書込み先取得      */
        eep_offset = (key_code * EEPROM_DATA_SIZE);
        /* FormatをEEPROMへ書込み   */
        EEPROM_WRITE(eep_offset, eep_wdata.format);
        /* 書込んだ分オフセット移動 */
        eep_offset++;
        /* DataCodeをEEPROMへ書込み */
        for (i=0; i < TBL_CODE_SIZE; i++) {
            /* HI-TECH C 標準関数   */
            /* 1byte ずつ書込み     */
            EEPROM_WRITE((eep_offset + i), eep_wdata.data[i]);
        }
        /* IR Data 記録後無限ループ */
        for (;;);
    }

    /****************************************************************/
    /* Dip SW 1:Hi  Dip SW 2:Lo ⇒ 学習モード (EEPROM Data 送信)    */
    /****************************************************************/
    if ((PORTA & MODE_MASK) == RUN_MODE_3) {
        /* EEPROM Data を RAM へ展開 */
        for (i = 0; i < EEPROM_TABLE_SIZE; i++) {
            eep_rdata[i] = EEPROM_READ(i);
        }

        for (;;)
        {
            /* Key Check */
            key_code = key_input_check();

            /* KEYが押されてなかったらSleepにする   */
            if (key_code == KEY_OFF) {
                /* CPU Sleep -> Key INT -> Wake Up  */
                cpu_sleep();
            }
            else {
                /* Function Key (4つ) のみ対応      */
                if (key_code <= KEY_CODE04) {
                    /* Key に対応したRAM読込先取得  */
                    eep_offset = (key_code * EEPROM_DATA_SIZE);
                    /* Data存在する場合のみ送信     */
                    if ((eep_rdata[eep_offset] == FORM_NEC) ||
                        (eep_rdata[eep_offset] == FORM_KDN)) {
                        /* 送信中 -> 対応したLED On */
                        led_control((LED_MASK << key_code));
                        /* フォーマット -> NEC      */
                        if (eep_rdata[eep_offset] == FORM_NEC) {
                            /* Keyに対応したDataを  */
                            /* NEC formatで送信     */
                            /* 読込んだ分オフセット移動 */
                            eep_offset++;
                            IR_NEC_format((unsigned char*)&eep_rdata[eep_offset]);
                        }
                        /* フォーマット -> 家電協   */
                        else {
                            /* Keyに対応したDataを  */
                            /* 家電協 formatで送信  */
                            /* 読込んだ分オフセット移動 */
                            eep_offset++;
                            IR_KDN_format((unsigned char*)&eep_rdata[eep_offset]);
                        }
                        /* 送信終了 -> LED Off      */
                        led_control(ALL_OFF);
                    }
                }
            }
        }
    }
    /****************************************************************/
    /* Dip SW 1:Lo  Dip SW 2:Lo ⇒ LCD表示モード                   */
	/* このモードがmainの役目を果たす                              */
    /****************************************************************/
    if ((PORTA & MODE_MASK) == RUN_MODE_4) {
        /* LCD Initialize       */
        lcd_init();
        /* IR 比較データ初期化  */
        memset(&pre_data, 0x00, sizeof(pre_data));
        for (;;)
        {
            /* IR受信 */
            ir_state = ir_recieve();

        	
        	/*以下がmotion controlを制御するpart  masa */
        	switch(rcv_data[5]){
        	case FORWARD:
        		motion_control(MOVE_FORWARD);
        		break;
        	case BACKWARD:
        		motion_control(MOVE_BACKWARD);
        		break;
        	case STOP:
        		motion_control(MOVE_STOP);
        		break;
        	case LEFT:
        		motion_control(MOVE_LEFT);
        		break;
        	case RIGHT:
        		motion_control(MOVE_RIGHT);
        		break;
        	}
        	/* ここまで   masa  */
        	
        	
        	/* 受信データと比較データが異なる場合のみ表示を更新         */
//            if ((memcmp(&pre_data, &rcv_data, sizeof(rcv_data))) != 0) {    /* comment out 開放 masa  */
            if ((memcmp(&pre_data, &rcv_data, sizeof(rcv_data))) != 0) {
                if (ir_state == SUCCESS) {
                    lcd_clear();                    /* LCD All Clear        */
                    lcd_put_ir_format(rx_format);   /* IR format Type 表示  */
                    switch (rx_format) {
                      case FORM_NEC:        /* 受信コード = NEC format      */
                        /* NEC format の IR 受信データ表示                  */
                        lcd_put_ir_data(&rcv_data, FORMAT_DISP_SIZE_NEC);
                        break;
                      case FORM_KDN:        /* 受信コード = 家電協 format   */
                        /* 家電協 format の IR 受信データ表示               */
                        lcd_put_ir_data(&rcv_data, FORMAT_DISP_SIZE_KDN);
                        break;
                      default:              /* 受信コード = 未対応 format   */
                        break;
                    }
                } else if (ir_state == UNKNOWN) {
                    /* 未対応 format の IR 受信データ表示               */
                    lcd_clear();                    /* LCD All Clear        */
                    lcd_put_ir_format(FORM_UKN);   /* IR format Type 表示  */
//                    lcd_put_ir_data(&rcv_data, FORMAT_DISP_SIZE_UKN);
                } else {
                    ;   /* ノイズの為、もう一度受信処理 */
                }
                /* IR 比較データ保持 */
                memcpy(&pre_data, &rcv_data, sizeof(rcv_data));
            }
        }
    }
}
Exemple #10
0
void log_read(unsigned addr, unsigned char *buf, unsigned size)
{
  EEPROM_READ(addr, buf, size);
  ////util_cpy(log_debug+addr-LOG_START, buf, size);
}
Exemple #11
0
/**
 * M501 - Retrieve Configuration
 */
void Config_RetrieveSettings() {
  EEPROM_START();
  char stored_ver[4];
  EEPROM_READ(stored_ver); // read stored version
  uint16_t stored_checksum;
  EEPROM_READ(stored_checksum);
  //  SERIAL_ECHOLN("Version: [" << ver << "] Stored version: [" << stored_ver << "]");
  if (strncmp(version,stored_ver,3) == 0) {
    eeprom_checksum = 0; // clear before reading first "real data"

    // version number match
    EEPROM_READ(axis_steps_per_unit);
    EEPROM_READ(max_feedrate);
    EEPROM_READ(max_acceleration_units_per_sq_second);
    EEPROM_READ(acceleration);
    EEPROM_READ(retract_acceleration);
    EEPROM_READ(minimumfeedrate);
    EEPROM_READ(mintravelfeedrate);
    EEPROM_READ(minsegmenttime);
    EEPROM_READ(max_xy_jerk);
    EEPROM_READ(max_z_jerk);
    EEPROM_READ(max_e_jerk);
    EEPROM_READ(add_homeing);
#ifndef ULTIPANEL
#ifdef PRINT_PLA
    int plaPreheatHotendTemp, plaPreheatHPBTemp, plaPreheatFanSpeed;
#endif
#ifdef PRINT_ABS
    int absPreheatHotendTemp, absPreheatHPBTemp, absPreheatFanSpeed;
#endif
#endif
#ifdef PRINT_PLA
    EEPROM_READ(plaPreheatHotendTemp);
    EEPROM_READ(plaPreheatHPBTemp);
    EEPROM_READ(plaPreheatFanSpeed);
#endif
    /*#ifdef PRINT_ABS
      EEPROM_READ(absPreheatHotendTemp);
      EEPROM_READ(absPreheatHPBTemp);
      EEPROM_READ(absPreheatFanSpeed);
      #endif*/
#ifndef PIDTEMP
    float Kp,Ki,Kd;
#endif
    // do not need to scale PID values as the values in EEPROM are already scaled
    EEPROM_READ(Kp);
    EEPROM_READ(Ki);
    EEPROM_READ(Kd);
#ifndef DOGLCD
    int lcd_contrast;
#endif
    EEPROM_READ(lcd_contrast);
#if !HAS_BED_PROBE
    float zprobe_zoffset;
#endif
    EEPROM_READ(zprobe_zoffset);

    if (eeprom_checksum == stored_checksum) {
      Config_Postprocess();
      SERIAL_ECHO_START;
      SERIAL_ECHO(version);
      SERIAL_ECHOPAIR(" stored settings retrieved (", (unsigned long)eeprom_index);
      SERIAL_ECHOLNPGM(" bytes)");
    } else {
      SERIAL_ERROR_START;
      SERIAL_ERRORLNPGM("EEPROM checksum mismatch");
      Config_ResetDefault();
    }
  } else {
    Config_ResetDefault();
  }
#ifdef EEPROM_CHITCHAT
  Config_PrintSettings();
#endif
}
Exemple #12
0
/******************************************************************************************
*    COMMAND FUNCTIONS        *
******************************************************************************************/
void ProcessCommand(void)
{
    if (HEART_B == '1')
        ACT_LED_01 = 0; //Turn it ON (inverted open drain)
    if (COMMAND_DATA[0] == 'R')// READ COMMAND --------------------------------------------
    {


        if (COMMAND_DATA[1] == '*')// READ ALL REGISTERS
        {

            Read_Analog_Inputs(); // READ ANALOG PERIPHERIALS****
            Read_Digital_Inputs(); // READ DIGITAL INPUT PERIPHERIALS**
            Read_Digital_Outputs(); // READ DIGITAL OUTPUT PERIPHERIALS**

            SEND_TX_START();    // START TRANSMISSION
            SEND_ANALOG_DATA();
            WriteUSART(0x2C);
            while (BusyUSART()); // Send a  ,
            SEND_DIGITAL_INPUT_DATA();
            WriteUSART(0x2C);
            while (BusyUSART()); // Send a  ,
            SEND_DIGITAL_OUTPUT_DATA();
            SEND_TX_STOP(); // End all transmissions

        }

        if (COMMAND_DATA[1] == 'C')// READ REGISTER LIST
        {
            if (COMMAND_DATA[2] == '0')// READ INFO REGISTER 0  MODEL
            {
                for (unsigned char n=0; n <= 7; n++ ) //Reset Buffer
                    TRANSMITT_DATA[n] = EEPROM_READ(n); // COPY BUFFER TO COMMAND DATA for further processing
                SEND_TX_RESPONSE();
            }
            else if (COMMAND_DATA[2] == '1')// READ INFO REGISTER 1  FIRMWARE
            {
                unsigned char d=0x08;
                for (unsigned char n=0; n <= 7; n++ ) //Reset Buffer
                    TRANSMITT_DATA[n] = EEPROM_READ(d),d++; // COPY BUFFER TO COMMAND DATA for further processing
                    
                SEND_TX_RESPONSE();
            }
            else if (COMMAND_DATA[2] == '2')// READ INFO REGISTER 2  ADDRESS
            {
                TRANSMITT_DATA[0] = EEPROM_READ(0x10); // AdDDRES 1
                TRANSMITT_DATA[1] = EEPROM_READ(0x11); // AdDDRES 1
                SEND_TX_RESPONSE();
            }
            else if (COMMAND_DATA[2] == '3')// READ INFO REGISTER 3  DEVICE SERIAL NUMBER
            {
                TRANSMITT_DATA[0] = SERIAL[0];
                TRANSMITT_DATA[1] = SERIAL[1];
                TRANSMITT_DATA[2] = SERIAL[2];
                TRANSMITT_DATA[3] = SERIAL[3];
                TRANSMITT_DATA[4] = SERIAL[4];
                TRANSMITT_DATA[5] = SERIAL[5];
                TRANSMITT_DATA[6] = SERIAL[6];
                TRANSMITT_DATA[7] = SERIAL[7];
                SEND_TX_RESPONSE(); // Send list character

            }
            else if (COMMAND_DATA[2] == '4')// READ INFO REGISTER 4  LIST DEVICE
            {
                TRANSMITT_DATA[0] = '@', SEND_TX_RESPONSE(); // Send list character
            }
        }


        else if (COMMAND_DATA[1] == 'A')// READ ANALOG INPUTS ADC
        {
            Read_Analog_Inputs(); // READ ANALOG PERIPHERIALS****
              

            if (COMMAND_DATA[2] == '*') // READ ALL ANALOG DATA AND SEND IT
                SEND_TX_START() , SEND_ANALOG_DATA(), SEND_TX_STOP();
            else if (COMMAND_DATA[2] == '0')// READ ANALOG REGISTER 1
                itoa( TRANSMITT_DATA, ADCValue[0],10), SEND_TX_RESPONSE(); //convert to string VAL 1 TO 1024

            else if (COMMAND_DATA[2] == '1')// READ ANALOG REGISTER 2
                itoa( TRANSMITT_DATA, ADCValue[1],10), SEND_TX_RESPONSE(); //convert to string VAL 1 TO 1024

            else if (COMMAND_DATA[2] == '2')// READ ANALOG REGISTER 3
                itoa( TRANSMITT_DATA, ADCValue[2],10), SEND_TX_RESPONSE(); //convert to string VAL 1 TO 1024

            else if (COMMAND_DATA[2] == '3')// READ ANALOG REGISTER 4
                itoa( TRANSMITT_DATA, ADCValue[3],10), SEND_TX_RESPONSE(); //convert to string VAL 1 TO 1024

            else if (COMMAND_DATA[2] == '4')// READ ANALOG REGISTER 5
                itoa( TRANSMITT_DATA, ADCValue[4],10), SEND_TX_RESPONSE(); //convert to string VAL 1 TO 1024


        }

        else if (COMMAND_DATA[1] == 'I')// READ DIGITAL INPUTS
        {
            Read_Digital_Inputs(); // READ DIGITAL PERIPHERIALS**

            if (COMMAND_DATA[2] == '*') // READ ALL DIGITAL INPUTS AND SEND IT
                SEND_TX_START() , SEND_DIGITAL_INPUT_DATA(), SEND_TX_STOP();
            else if (COMMAND_DATA[2] == '0')// READ DIGITAL INPUT REGISTER 1
                TRANSMITT_DATA[0] = INPUTValue[0], SEND_TX_RESPONSE();
            else if (COMMAND_DATA[2] == '1')// READ DIGITAL INPUT REGISTER 2
                TRANSMITT_DATA[0] = INPUTValue[1], SEND_TX_RESPONSE();
            else if (COMMAND_DATA[2] == '2')// READ DIGITAL INPUT REGISTER 3
                TRANSMITT_DATA[0] = INPUTValue[2], SEND_TX_RESPONSE();

        }

        else if (COMMAND_DATA[1] == 'O')// READ DIGITAL OUTPUTS
        {
            
            Read_Digital_Outputs(); // READ DIGITAL PERIPHERIALS**

            if (COMMAND_DATA[2] == '*') // READ ALL DIGITAL INPUTS AND SEND IT            
                SEND_TX_START() , SEND_DIGITAL_OUTPUT_DATA(), SEND_TX_STOP();

            else if (COMMAND_DATA[2] == '0')// READ DIGITAL OUTPUTS REGISTER 1
            {
                if (OUT_00)
                    TRANSMITT_DATA[0] = '1';
                else
                    TRANSMITT_DATA[0] = '0';
                SEND_TX_RESPONSE();
            }
            else if (COMMAND_DATA[2] == '1')// READ DIGITAL OUTPUTS REGISTER 2
            {
                if (OUT_01)
                    TRANSMITT_DATA[0] = '1';
                else
                    TRANSMITT_DATA[0] = '0';
                SEND_TX_RESPONSE();
            }


        }

    }




    else if (COMMAND_DATA[0] == 'W')// WRITE COMMAND ----------------------------------------
    {
        if (COMMAND_DATA[1] == 'O')// WRITE DIGITAL OUTPUT
        {
            if (COMMAND_DATA[2] == '0')// WRITE OUTPUT REGISTER 1
            {
                if (COMMAND_DATA[3] == '1')
                    OUT_00 = 1;
                else
                    OUT_00 = 0;
                TRANSMITT_DATA[0] = '1', SEND_TX_RESPONSE();
            }   
           else if (COMMAND_DATA[2] == '1')// WRITE OUTPUT REGISTER 2
           {
                if (COMMAND_DATA[3] == '1')
                    OUT_01 = 1;
                else
                    OUT_01 = 0;
                TRANSMITT_DATA[0] = '1', SEND_TX_RESPONSE();
           }    

        }
        if (COMMAND_DATA[1] == 'C')// WRITE CONFIGURATION
        {
            if (COMMAND_DATA[2] == '2')// WRITE CONFIGURATION REGISTER 2
            {

                EEPROM_WRITE(0x10, COMMAND_DATA[3]);
                Delay10TCYx(30);
                EEPROM_WRITE(0x11, COMMAND_DATA[4]);
                Delay10TCYx(30);
                Add_HI = COMMAND_DATA[3];
                Add_LO = COMMAND_DATA[4];
                TRANSMITT_DATA[0] = '1', SEND_TX_RESPONSE();

            }
        }
        

    }
    
    ACT_LED_01 = 1; //Turn it OFF (inverted open drain)
    return;
}
Exemple #13
0
/******************************************************************************************
*    HARDWARE CONFIGURATION FUNCTIONS        *
******************************************************************************************/
void Conf(void)
{
    /*   GUIDE TO PORTS
    TRIS ? To set a pin as Input or Output -- 1 = Input (1 looks like I ? input ) -- 0 = Output ( 0 looks like o = output)
    LAT ? Write to this bit = write to a pin -- 1 = make pin high -- 0 = make pin low
    PORT ? You can read/write to a pin -- 1 = pin is high -- 0 = pin is low
    */
    
    //SET DEVICE CONFIG VARS---------------------------------------------------------------

    Add_HI = EEPROM_READ(0x10); // Read Address High Byte
    Add_LO = EEPROM_READ(0x11); // Read Address Low Byte
    Bauds_S = EEPROM_READ(0x12); // Read Baudas Speed Low Byte
    HEART_B = EEPROM_READ(0x13); // Read HeartBeat Flag Low Byte


    #ifdef _18F1320//PIC 18F1320 CONFIGURATION----------------------------------------------
    //IO **************************************************
    OSCCON = 0x70;	//set it to use the 8MHz internal clock.
    TRISBbits.RB1 = 0; //TX USART pin set as output
    TRISBbits.RB4 = 1; //RX USART pin set as input

    //TRISAbits.RA3 = 0; //ACTIVITY LED  pin set as output
    TRISAbits.RA4 = 0; //ACTIVITY LED  pin set as output

    TRISBbits.RB2 = 0; //GENERAL OUTPUT pin set as output
    TRISBbits.RB3 = 0; //GENERAL OUTPUT pin set as output

    TRISBbits.RB5 = 1; //GENERAL INPUT pin set as input
    TRISBbits.RB6 = 1; //GENERAL INPUT pin set as input
    TRISBbits.RB7 = 1; //GENERAL INPUT pin set as input


    /*
     this is cause of errorr
      this is cause of errorr
     *  this is cause of errorr
     *  this is cause of errorr
     *  this is cause of errorr
     *  this is cause of errorr 
     *  this is cause of errorr
     *  this is cause of errorr
     */
    //OUT_00 = 0; //Turn it off
    //OUT_01 = 0; //Turn it off

    ACT_LED_01 = 0; //Turn it ON (inverted open drain)
    OUT_00 = 0;
    OUT_01 = 0;
    
    PCFG5 = 1; //Cancel analog pin and cnovert it to digital for USART USE
    PCFG6 = 1; //Cancel analog pin and cnovert it to digital for USART USE
    

    //OPEN USART **************************************************
    OpenUSART(USART_TX_INT_OFF & USART_RX_INT_ON & USART_ASYNCH_MODE & USART_EIGHT_BIT & USART_CONT_RX & USART_BRGH_HIGH, 25);	//This function is called in order to configure the USART module in the PIC. transmit interrupts will be turned off, receive interrupts will be turned off, asynchronous mode is chosen, eight bit is chosen, sync option is ignored, and continuous receive is chosen
    //baudconfig = BAUD_IDLE_RX_PIN_STATE_HIGH & BAUD_IDLE_TX_PIN_STATE_HIGH;
    //baudUSART (baudconfig);
    //OPEN TIMER 0 USART TIMEUP ***********************************
    OpenTimer0(TIMER_INT_ON & T0_16BIT & T0_SOURCE_INT & T0_PS_1_1);

    //OPEN ADC ***************************************************
    OpenADC(ADC_FOSC_2 & ADC_RIGHT_JUST & ADC_20_TAD, ADC_CH0 & ADC_INT_OFF & ADC_VREFPLUS_VDD & ADC_VREFMINUS_VSS, ADC_4ANA); //Open 5 Analog channels ADC_5ANA
    //ADC_INT_ENABLE(); //Easy ADC interrupt setup
    //ConvertADC(); //Start ADC CONVERSION


    #endif//PIC 18F1320 CONFIGURATION--------------------------------------------------------




    //INTERRUPTIONS **************************************************

    //USART related interrupt flags------------------------------------
    RCIF = 0; //reset RX pin flag USART
    RCIP = 1; //Set high priority USART
    RCIE = 1; //Enable RX interrupt USART

    //TIMER related interrupt flags------------------------------------
    TMR0IF = 0; //reset Interrupt Flag
    TMR0IE = 1; //Enable TMR0 Overflow Interrupt Enable bit
    TMR0IP = 0; //SET TMR0 Low Priority

    // GLOBAL related interrupt flags---------------------------------
    PEIE = 1; //Enable pheripheral interrupt (serial port is a pheripheral)
    IPEN = 1; // Enable priority levels on interrupts.
    GIEL = 1; // Enable all low priority interrupts.
    GIEH = 1; // Enable all hi priority interrupts.
    ei();     // macros master switch for global interrupt

    Delay1KTCYx(100);
    ACT_LED_01 = 1; //Turn it OFF (inverted open drain)
}