Exemple #1
0
/*********************************************************************
 * Function    : void EEPROM_Erase(void);
 * DESCRIPTION : This function is used to erase the entire EEprom memory.
 * PARAMETERS  : void.
 *
 * Return Value: void.
 * Note        : void.
 ***********************************************************************/
void EF_void_EEPROM_Erase(void)
{
	U16_t eeprom_address;
	for(eeprom_address=0; eeprom_address < MAX_EEPROM_SIZE; eeprom_address++)
	{
		EF_void_EEPROM_WriteByte(eeprom_address,0xff);     /* Write Each memory location with OxFF */
	}
}
Exemple #2
0
/*********************************************************************
 * Function    : void EF_void_EEPROM_WriteNBytes(U16_t EepromAddr,
 *                                          U8_t *RamAddr,
 *                                          S8_t NoOfBytes);
 * DESCRIPTION : This function is used to write N-bytes of data
 *               at specified EEPROM_address.
 * PARAMETERS  :
 *               U16_t eeprom_Address: Location address for data.
 *               U8_t *RamAddr      :
 *               S8_t NoOfBytes     :
 *
 * Return Value: void.
 * Note        : void.
 ***********************************************************************/
void EF_void_EEPROM_WriteNBytes(U16_t eeprom_Address, U8_t *RamAddr, S8_t NoOfBytes)
{
	if(NULL != *RamAddr)
	{
		while(NoOfBytes !=  0)
		{
			EF_void_EEPROM_WriteByte(eeprom_Address,
					            *RamAddr);  /* Write a byte from RAM to EEPROM       	   */
			eeprom_Address++;               /* Increment the EEprom Address 			   */
			RamAddr++;                      /* Increment the RAM Address 				   */
			NoOfBytes--;                    /* Decrement NoOfBytes after writing each Byte */
		}
	}
}
int main (void)
 {



	 U16_t Period;
	DDRD = 0x00;
	PORTD = 0x00;

	EF_void_TimerInit();
	EF_void_LCD_init();
	EF_void_LCD_Clear_Screen();
	EF_void_LCD_goto(1, 2);
//		_delay_ms(1000);
		EF_void_LCD_print(" EmbeddedFab");
		_delay_ms(1000);

//	GICR  = (1<<INT0);					// Enable INT0
//	MCUCR = (1 << ISC00) | (1 << ISC01);
	sei();
	EF_void_PWM_init(TIMER_0);
	EF_void_InputCapture_Init();
	EF_void_PWM_SetDutyCycle (90 ,TIMER_0);
	u8Counter = EF_BOOLEAN_InputCapture_GetPeriod (&Period, 100);
	EF_void_LCD_Clear_Screen();
	EF_void_LCD_goto(1, 2);
	EF_void_LCD_print_NUM( Period, 2);
	EF_void_LCD_print_NUM( u8Counter, 1);

	while(1)
	{
		PORTD &= ~(1 << 7);

//		_delay_ms(100);

		PORTD |= 1 << 7;
		_delay_ms(50);


	}

#if 0
	U8_t temp[2];
	U8_t number;


	DDRD  = 0xff;
	PORTD = 0x00;
	EF_void_LCD_init();
	EF_void_KeyPad_Init();

#if RTC_ENABLE
	void_TIMER_init();
	EF_void_DS1307_Init();
	sei();              /*Enable interrupts*/
	EF_void_DS1307_SetTime(17, 13, 30);
#endif

	EF_void_LCD_Clear_Screen();
	EF_void_LCD_goto(1,2);
	EF_void_LCD_print("Embedded");

#ifdef PWM_test
	/*don't forget init. the PWM*/
	EF_void_PWM_SetDutyCycle (0,TIMER_0);
	_delay_ms(500);
	EF_void_PWM_SetDutyCycle (23,TIMER_0);
	_delay_ms(500);
	EF_void_PWM_SetDutyCycle (50,TIMER_0);
	_delay_ms(500);
	EF_void_PWM_SetDutyCycle (80,TIMER_0);
	_delay_ms(500);
	EF_void_PWM_SetDutyCycle (100,TIMER_0);
	_delay_ms(500);
	_delay_ms(100);
#endif
#ifdef EEPROM_ENABLE
	EF_void_I2C_Init();
	EF_EEPROM_Write_Byte(6,0xA0,0x65);
	number = EF_EEPROM_Read_Byte(6,0xA0);
	if (0x15 == number)
	{
		EF_void_LCD_goto(2,8);
		EF_void_LCD_HextoASCII(&number);
	}
	else
	{
		EF_void_LCD_goto(2,8);
		EF_void_LCD_HextoASCII(&number);
	}
#endif
#ifdef INPUT_CAPTURE_TEST
	/* enable timer init and sei()*/
	EF_void_PWM_init(TIMER_0);
	EF_void_InputCapture_Init();
	EF_void_PWM_SetDutyCycle (90 ,TIMER_0);
	u8Counter = EF_BOOLEAN_InputCapture_GetPeriod (&Period, 100);
	EF_void_LCD_Clear_Screen();
	EF_void_LCD_goto(1, 2);
	EF_void_LCD_print_NUM( Period, 2);
	EF_void_LCD_print_NUM( u8Counter, 1);
#endif
#ifdef ADC_ENABLE
	/* don't forget ADC_init before while */
	u16DigitalValue = EF_u16_ADC_read(0);
	EF_void_LCD_Clear_Screen();
//		u16DigitalValue = (u16DigitalValue*5)/1024;
	itoa(u16DigitalValue, string, 10);
	EF_void_LCD_goto(1, 2);
	EF_void_LCD_print(string);

#endif
#ifdef EEPROM_INTERNAL
	EF_void_EEPROM_WriteByte(0, 0x99);
	number = EF_u8_EPROM_ReadByte (0);
	if (0x15 == number)
	{
		EF_void_LCD_goto(2,8);
		EF_void_LCD_HextoASCII(&number);
	}
	else
	{
		EF_void_LCD_goto(2,8);
		EF_void_LCD_HextoASCII(&number);
	}

#endif
	while(1)
	{
#ifdef RTC_ENABLE
		if((SystemTick1MSec - TimeOut) > TIMEOUR_1SEC)
		{
			TimeOut   = SystemTick1MSec;
			EF_void_DS1307_GetTime(&Hours, &Mintes, &Seconds);
			LCD_update_time(Hours, (Mintes), (Seconds));
			PORTD = 0x7F;
		}
#endif
#ifdef WAVECOM
		/* using ISR */
		volatile U8_t gSecondTimeEntery     = 0;    	 /* flag to define  the second response to get SMS */
		volatile U8_t gNumberOfPunctuation  = 0;     	 /* flag to know when SMS begin */
		volatile U16_t gNumberOfRxBytes 	= 0;    	 /* save number of SMS bytes */
		volatile U16_t counter = 0;					 /* using in SMS array in ISR */

		U8_t gBuffer [50];
		Wavecom_Sms_cfg_str Wavecom_Sms_cfg ={ENABLE,ENABLE,ENABLE};
		char const SMS[] = "Again , it's ATMEGA \n :) ;)";
		Wavecom_Call_cfg_str Wavecom_Call_cfg = {DISABLE, DISABLE};
		Wavecom_ReadSms_cfg_str Wavecom_ReadSms_cfg ={0, All_list, 0 ,10 , (U8_t*)&gBuffer};
		sei();
	//	EF_B_Wavecom_SendSms((U8_t*)"01091067575",11,(U8_t*)SMS, strlen(SMS));
	//	EF_B_Wavecom_Call ((U8_t*)"01117079935",11);
	//	EF_B_Wavecom_ReadSms (&Wavecom_ReadSms_cfg);
		while (1)
		{
	//		PORTD ^= 0xc0;
			EF_B_Wavecom_InitModule();
			EF_B_Wavecom_InitSms(&Wavecom_Sms_cfg);
			EF_B_Wavecom_InitCall (&Wavecom_Call_cfg);
			_delay_ms(1000);
			EF_void_LCD_Clear_Screen();
			EF_void_LCD_goto(1, 1);
			_delay_ms(1000);
			EF_void_LCD_goto(2, 1);
	//		EF_B_Wavecom_CallRelease();

		}




		ISR (USART_RXC_vect)
		{
			 static volatile U8_t RX_data = 0;

			 RX_data = UDR;
			 if ((RX_data != '\r') && (RX_data != '\n'))
			 {
				 if (gSmsReadyFlag == 1)
				 {
					 if (gNumberOfPunctuation == 6)
					 {
						 gRX_SMS[counter] = RX_data;
						 //TODO modify this check.
						 if ( gRX_SMS[counter] == 'K' && gRX_SMS[counter-1] == 'O')
						 {
							 gNumberOfRxBytes   = counter-1;
							 counter=0;
							 gSmsReadyFlag     = 0;
							 gSecondTimeEntery = 0;
						 }
						 counter++;
					 }
					 else
					 {
						 if (RX_data == '\"')
						 {
							 gNumberOfPunctuation++;
						 }

					 }
				 }
				 else
				 {
					 EF_void_LCD_send_data (RX_data);
					 if (RX_data == 'K')
					 {
						 EF_void_LCD_send_data (' ');
					 }
				 }

			 }


		}




#endif

#ifdef SKYLAB_GPS
		double D_Longitude = 0;
		double D_Latitude  = 0;
		BOOLEAN b_Datavaild  = 0;
		EF_void_LCD_init();
		EF_B_SkyLabGPS_Init();
		//timer OS
		EF_void_TimerInit();
	    EF_void_LCD_Clear_Screen();
	    DDRD = 0xc0;
	    while (1)
	    {
	    	b_Datavaild = EF_B_SkyLabGPS_GetPosition( &D_Latitude , &D_Longitude);
	    	if (b_Datavaild == DATA_VAILD)
	    	{
	    		EF_B_SkyLabGPS_PrintPosition(  D_Latitude,  D_Longitude);
	    	}
	    	PORTD ^=0xc0;
	    }
#endif

#ifdef ULTRASONIC
	    /* it used timer of timer.h , be careful if you
			depend on this timer in anther application */
		EF_UltraSonic_Init();
		U8_t Distance_Cm ;
		while (1)
		{
			 Distance_Cm = EF_UltraSonic_GetDistance();
	#if INTERRUPT_BASED ==   0
			EF_void_LCD_Clear_Screen();
			itoa(Distance_Cm, string, 10);
			EF_void_LCD_goto(1, 2);
			EF_void_LCD_print(string);
	#endif
			_delay_ms (20);
		}
#endif
#if 1
		number = EF_u8_KeyPad_Scan();
		if(number != 0)
		{
			EF_void_LCD_goto(2,1);
			itoa(number,temp,10);
			EF_void_LCD_print(temp);
		}
#endif
	}
#endif
	return 0;
}