1 2 3 Previous Next 30 Replies Latest reply on Feb 12, 2013 1:25 PM by user_14586677 Go to original post
      • 15. Re: EEPROM Interface
        user_14586677

         

        1 of 1 people found this helpful
        • 16. Re: EEPROM Interface
          user_14586677

          On second look SDCARD as a byte write memory may not be approach.

             

           

             

          You need to acquire sampes at a rate of 8500 SPS ~= 100 uS/byte which is too

             

          fast for byte write speed of SDCARD.

             

           

             

          You could use a ping-pong approach, 2 buffers in RAM, one active gathering samples, the

             

          other full from prior gather and being written to SDCARD, say 1KB each. Max speed of write

             

          for SDCARD,to write1K samples, is ~ 36 mS, compared to 1K samples to gather which is ~

             

          118 mS. So record 1KS in buffer A, then switch to B and start recording while writing buffer A

             

          to SDCARD, repeat this loop. So switch between buff that is being recorded/buff being written

             

          back and forth.

             

           

             

          You can do the calculations for smaller buffer size, to see if that works out.

             

           

             

          Regards, Dana.

             

           

             

           

             

          gather 1000 samplesin RAM

          1 of 1 people found this helpful
          • 17. Re: EEPROM Interface
            user_78878863

            If you only need intermediate storage, you might also use a serial sRAM. Microchip has 1 MBit ones available (e.g. 23LC1024: http://www.microchip.com/wwwproducts/Devices.aspx?dDocName=en559066 ). They follow basically the same protocol as the serial EEPROMs, but are much faster. And they have no limits on how often you are allowed to write (and they don't need to be erased before one can write).

            1 of 1 people found this helpful
            • 18. Re: EEPROM Interface
              rajendra.prasad

              hi hli,

                 

                 Can we use Flash Meomory in place of EEPROM to increase Size of SRAM.

                 

              Regards

                 

              PRP

              • 19. Re: EEPROM Interface
                user_14586677

                "Can we use Flash Meomory in place of EEPROM to increase Size of SRAM."

                   

                 

                   

                SRAM is a single cycle R/W memory. Has no lifetime limit  on R/W cycles

                   

                FLASH, EEPROM is a 20 mS write speed technology. FLASH specs written

                   

                aorund 100,000 erase cycles. EEPROM 1,00,000 erase cycles

                   

                 

                   

                You could substitue FLASH if you an live with slower write speed and limited

                   

                erase lifetime.

                   

                 

                   

                Regards, Dana.

                1 of 1 people found this helpful
                • 20. Re: EEPROM Interface
                  rajendra.prasad

                  Hi,

                     

                  uint16 ADC_Samples[ ]; 
                  int16 ADC_Sample_Index = 0;
                  writeStatus = EEPROM_1_Write(ADC_Samples[ADC_Sample_Index++], 0);
                  ERROR: .\main.c:108: illegal pointer conversion

                     

                  i got the following error, but given in data sheet  is cystatus EEPROM_Write(uint8 * rowData, uint8 rowNumber) , which is not matching with  uint16 ADC_Samples[ ]; ,  the ADC here is  14 bit . So is there any way to overcome this problem.

                  • 21. Re: EEPROM Interface
                    user_78878863

                    You can type-cast the pointer:

                       

                    writeStatus = EEPROM_1_Write((uint8_t*)ADC_Samples[ADC_Sample_Index++], 0);

                       

                    (did not try to compile it, though). Note that this call always write 16 bytes of data into the EEPROM. You might want to use EEPROM_ByteWrite() instead.

                    1 of 1 people found this helpful
                    • 22. Re: EEPROM Interface
                      user_14586677

                      Are you trying to write individual samples or a whole row of samples ?

                         

                       

                         

                      You use either

                         

                       

                         

                      cystatus EEPROM_ByteWrite(unit8 dataByte, uint8 rowNumber, uint8        // to write a byte at a time, so would take 2 writes

                         

                      or

                         

                      cystatus EEPROM_Write(const uint8 * rowData, uint8 rowNumber)            // to write a whole row, row size is

                         

                       

                         

                      CYDEV_EE_BASE                        The base pointer of the EEPROM memory 

                         

                      CYDEV_EE_SIZE                          The size of the EEPROM memory space in bytes 

                         

                       CYDEV_EEPROM_ROW_SIZE    The size of a row of the EEPROM in bytes 

                         

                       

                         

                      So there are several ways to write the EEPROM

                         

                       

                         

                      Regards, Dana.

                         


                       

                      1 of 1 people found this helpful
                      • 23. Re: EEPROM Interface
                        user_14586677

                        hli had a small typo in write, should be -

                           

                         

                           

                         

                           

                        writeStatus = EEPROM_1_Write((uint8 *)ADC_Samples[ADC_Sample_Index++], 0);

                           

                         

                        However, row method wastes memory if you are not writing a whole row's worth of samples. In other words, if ROW is 16 bytes, write 8 A/D samples would be optimal.

                         

                        Regards, Dana.

                         

                        1 of 1 people found this helpful
                        • 24. Re: EEPROM Interface
                          rajendra.prasad

                          hi hli, dana,

                             

                          the following error came ERROR: .\main.c:108: 'uint8_t': undefined identifier , here i am writing sample by sample from ADC to EEPROM.

                             

                          copy of code

                             

                          ----------------------------

                             

                          if (ADC_DelSig_1_IsEndConversion(ADC_DelSig_1_WAIT_FOR_RESULT))
                                                     {
                                                         /* Get the result */
                                                        ADC_Current_Sample = ADC_DelSig_1_GetResult16();
                                                        ADC_Sample_Available = 1;

                             

                          /* Testing for sample available from the ADC */
                                                 if (ADC_Sample_Available)
                                                      {
                                                         ADC_Sample_Available = 0;
                                            
                                                  /* storing the sample into the array, based on the index */
                                                         ADC_Samples[ADC_Sample_Index++] = ADC_Current_Sample;   
                                                         // EEPROM INTERFACE//
                                                         writeStatus = EEPROM_1_ByteWrite((uint8_t*)ADC_Samples[ADC_Sample_Index++], 0);
                                                         ADC_Sample_Max = 0;                          
                                                         for (i = 0; i < ADC_Sample_Index; i++)    
                                                              {
                                                                 if(ADC_Samples[i]>ADC_Sample_Max)
                                                                     {
                                                                        ADC_Sample_Max=ADC_Samples[i];
                                                                     }

                             

                          -----------------------------------------------------------------------

                          • 25. Re: EEPROM Interface
                            rajendra.prasad

                            Hi  hli, dana ,

                               

                            i am unable to resolve the problem,i am attaching the bundle_minimal.and i am doing on PSoC 3 ES2, Creator 2.0 version.

                            • 26. Re: EEPROM Interface
                              user_14586677

                              In my prior post, change

                                 

                               

                                 

                              writeStatus = EEPROM_1_Write((uint8_t *)ADC_Samples[ADC_Sample_Index++], 0);

                                 

                               

                                 

                              to

                                 

                               

                                 

                              writeStatus = EEPROM_1_Write((uint8 *)ADC_Samples[ADC_Sample_Index++], 0);

                                 

                               

                                 

                              Regards, Dana.

                              1 of 1 people found this helpful
                              • 27. Re: EEPROM Interface
                                rajendra.prasad

                                Hi dana,

                                   

                                           i have changed to writeStatus = EEPROM_1_Write((uint8 *)ADC_Samples[ADC_Sample_Index++], 0);  , but not working.

                                   

                                Regards

                                   

                                PRP

                                • 28. Re: EEPROM Interface
                                  user_14586677

                                  I compiled OK, but had to change -

                                     

                                   

                                     

                                   

                                         

                                   

                                     

                                  uint16 ADC_Samples[ ];

                                     

                                  to

                                     

                                  eg. give it a size.

                                     

                                   

                                     

                                  Also I used Creator 2.2, and had to change silicon to non ES2. Lastly

                                     

                                  I also updated a number of modules at request of Creator, normal for

                                     

                                  using a later version of Creator.

                                     

                                   

                                     

                                  Regards, Dana.

                                     

                                   

                                     

                                  uint16 ADC_Samples[ 16 ];               // Not sure what size you intend

                                  1 of 1 people found this helpful
                                  • 29. Re: EEPROM Interface
                                    user_14586677

                                    Blasted forum software screwed up post.

                                       

                                     

                                       

                                    change -

                                       

                                     

                                       

                                    uint16 ADC_Samples[ ];

                                       

                                    to

                                       

                                    uint16 ADC_Samples[ 16 ];

                                       

                                     

                                       

                                    Regards, Dana.

                                    1 of 1 people found this helpful