Информация

Активация не завершена. Завершить

Дата регистрации: 2017-02-07 16:04:53

Комментариев: 1

Сайт: http://www.prom-electric.ru

Его последние комментарии:
  • e SPI bus Initialize the FAT file system Display menu on the PC screen Get a choice from the user (1, 2, or 3) If the choice = 1, assign the temperature file, read the temperature records, and display them on the PC screen www.newnespress.com 400 Chapter 7 TEMPERATURE LOGGER PROJECT In this project a SD card is connected to PORTC as follows: CS RC2 CLK RC3 DO RC4 DI RC5 In addition, a MAX232 type RS232 voltage level converter chip is connected to serial ports RC6 and RC7. Also, a LM35DZ type analog temperature sensor is connected to analog input AN0 of the microcontroller. The program is menu based. The user is given options of either to send the saved temperature data to the PC, or to read and save new data on the SD card, or to read temperature data and append to the existing file. Temperature is read at every 10 seconds. The temperature is stored in a file called "TEMPERTR.TXT" Author: Dogan Ibrahim Date: August 2007 File: SD4.C char filename = "TEMPERTRTXT"; unsigned short character; unsigned long file_size,i,rec_size; unsigned char ch1,ch2,flag,ret_status,choice; unsigned char temperature 10 ,txt 12 ; This function sends carriage-return and line-feed to USART void NewlineQ Usart_Write(0x0D); Send carriage-return Usart_Write(0x0A); Send line-feed This function sends a space character to USART void Space() Figure 7.15: Program listing of the project www.newnespress.com Advanced PIC18 ProjectsSD Card Projects 401 Usart_Write(0x20); This function sends a text to serial port void Text_To_Usart(unsigned char *m) unsigned char i; i = 0; while(m i != 0) Send TEXT to serial port Usart_Write(m i ); i++; This function reads the temperature from analog input AN0 void Get_Temperature() unsigned long Vin, Vdec,Vfrac; unsigned char op 12 ; unsigned char i,j; Vin = Adc_Read(0); Read from channel 0 (AN0) Vin = 488*Vin; Scale up the result Vin = Vin 10; Convert to temperature in C Vdec = Vin 100; Decimal part Vfrac = Vin 100; Fractional part LongToStr(Vdec,op); Convert Vdec to string in "op" Remove leading blanks j=0; for(i=0;i =11;i++) if(op i != ' ') If a blank temperature j =op i ; j++; temperature j = '.'; Add . ch1 = Vfrac 10; fractional part ch2 = Vfrac 10; Figure 7.15: (Cont'd) www.newnespress.com 402 Chapter 7 j++; temperature j = 48+ch1; j++; temperature j = 48+ch2; j++; temperature j = 0x0D; j++; temperature j = 0x0A; j++; temperature j =' 0'; Start of MAIN program void mainQ rec_size = 0; Configure A D converter TRISA = 0xFF; ADCON1 = 0x80; Use AN0, Vref = +5V Configure the serial port Usart_Init(2400); Initialise the SPI bus Spi_Init_Advanced(MASTER_OSC_DIV16,DATA_SAMPLE_MIDDLE, CLKJDLEJ.OW, LOW_2_HIGH); Initialise the SD card bus while(Mmc_Init( PORTC,2)); Initialise the FAT file system while(Mmc_Fat_Init( PORTC,2)); Display the MENU and get user choice NewlineQ; TextjTo_Usart("TEMPERATURE DATA LOGGER"); Newline(); Newline(); Text_To_Usart("1. Send temperature data to the PC"); Figure 7.15: (Cont'd) Add fractional part Add carriage-return Add line-feed www.newnespress.com Advanced PIC18 ProjectsSD Card Projects 403 Newline(); Text_To_Usart("2. Save temperature data in a new file); Newline(); Text_To_Usart("3. Append temperature data to an existing file") Newline(); Newline(); Text_To_Usart("Choice ? "); Read a character from the PC keyboard flag = 0; do if (Usart_Data_Ready()) If data received choice = Usart_Read(); Read the received data Usart_Write(choice); Echo received data flag = 1; while (flag); Newline(); Newline(); Now process user choice switch(choice) case '1': ret_status = Mmc_Fat_Assign( filename,1); if(!ret_status) Text_To_Usart("File does not exist..No saved data..."); Newline(); Text_To_Usart("Restart the program and save data to the file..."); Newline(); for(;;); else Read the data and send to UART Text_To_Usart("Sending saved data to the PC..."); Newline(); Mmc_Fat_Reset( file_size); for(i=0; i file_size; i++) Mmc_Fat_Read( character); Usart_Write(character); Figure 7.15: (Cont'd) www.newnespress.com 404 Chapter 7 Newline(); text_To_Usart("End of data...); Newline(); for(;;); case '2': Start the A D converter, get temperature readings every 10 seconds, and then save in a NEW file Text_To_Usart("Saving data in a NEW file..."); Newline(); Mmc_Fat_Assign( filename,0x80); Assign the file Mmc_Fat_Rewrite(); Clear Mmc_Fat_Write("TEMPERATURE DATA - SAVED EVERY 10 SECONDS r n",43); Read the temperature from A D converter, format and save for(;;) Mmc_Fat_Append(); Get_Temperature(); Mmc_Fat_Write(temperature,9); rec_size++; LongToStr(rec_size,txt); Newline(); Text_To_Usart("Saving record:"); Text_To_Usart(txt); Delay_ms(10000); break; case '3': Start the A D converter, get temperature readings every . For more information visit site www.prom-electric.ru