| View previous topic :: View next topic   | 
	
	
	
		| Author | 
		Message | 
	
	
		
			chico_pic
 
 
  Joined: 21 Sep 2012 Posts: 10
  
			
			 
			 
			
			
			
			
			
			
			
  
		  | 
		
			
				| Saving struct data in SD card? | 
			 
			
				 Posted: Sat Feb 09, 2019 10:24 am     | 
				     | 
			 
			
				
  | 
			 
			
				hi..
 
I've started to work with SD card, still i have some problems. Before i want to tell you that i used libraries from CCS (mmcsd.c & fat_m).
 
 
How i can save that?:
 
 
 	  | Code: | 	 		  struct formas_sonidales{
 
int8 senoidal_1[48];
 
int8 senoidal_2[48];}; | 	  
 
 
I want save this data in a file on SD card FAT32 but i don't know make it.
 
 
 
Can someone help me ? | 
			 
		  | 
	
	
		  | 
	
	
		
			dluu13
 
 
  Joined: 28 Sep 2018 Posts: 395 Location: Toronto, ON 
			
			 
			 
			
			 
			
			
			
			
			
  
		  | 
		
			
				 | 
			 
			
				 Posted: Sat Feb 09, 2019 10:41 am     | 
				     | 
			 
			
				
  | 
			 
			
				I personally have had little luck with the CCS libraries. You can check the 
 
sticky thread in the Code Library forum regarding the fat.c and mmcsd.c 
 
files. There are several changes that you need to make. 
 
 
I was never able to get fat.c working myself, but I was able to make 
 
mmcsd.c work just writing bytes to specific locations.
 
 
You also need to make sure that you are using the correct voltage level 
 
(3V3) and that you have the proper pullups on the pins.
 
 
It will also be helpful if you tell us what PIC you are using, along with 
 
compiler version. Also, paste the code for your SPI setup. | 
			 
		  | 
	
	
		  | 
	
	
		
			Ttelmah
 
 
  Joined: 11 Mar 2010 Posts: 19967
  
			
			 
			 
			
			
			
			
			
			
			
  
		  | 
		
			
				 | 
			 
			
				 Posted: Sat Feb 09, 2019 11:56 am     | 
				     | 
			 
			
				
  | 
			 
			
				You do also realise that to write this to SD, you need to create/open a file 
 
with write permission, write the data, then close the file.
 
You also need to ensure the WP switch on the SD is not on.
 
As others have asked 'what PIC', but also 'what SD (particularly size)'. You  need the modifications in the code librarly if it is over 2GB.
 
If the PIC is not 3.3v, then there is the complexity of buffering required. | 
			 
		  | 
	
	
		  | 
	
	
		
			PrinceNai
 
 
  Joined: 31 Oct 2016 Posts: 554 Location: Montenegro 
			
			 
			 
			
			
			
			
			
			
			
  
		  | 
		
			
				 | 
			 
			
				 Posted: Sat Feb 09, 2019 12:08 pm     | 
				     | 
			 
			
				
  | 
			 
			
				| A while ago I needed to make a logger that saves data on a SD card. I tried to make it by interfacing the card directly to the PIC, but I soon got lost with all the drivers, voltage problems and other things. So I just bought an Open Log which interfaces with the PIC via serial communication. It does everything for you, you just send the data via uart and it stores it on SD. I didn't need any reads from the card. Just a simple: something happened ---> log it. | 
			 
		  | 
	
	
		  | 
	
	
		
			dluu13
 
 
  Joined: 28 Sep 2018 Posts: 395 Location: Toronto, ON 
			
			 
			 
			
			 
			
			
			
			
			
  
		  | 
		
			
				 | 
			 
			
				 Posted: Sat Feb 09, 2019 12:14 pm     | 
				     | 
			 
			
				
  | 
			 
			
				Theoretically, chico, you can write to the SD card as if it was some generic 
 
memory using the mmcsd drivers :D But doing that requires a lot of 
 
keeping track of memory locations on your own part. It would be much 
 
easier to work with a file system.
 
 
You can try the code modifications in the library, but at least for me, they 
 
still did not work. After a long time of messing around, I only managed to 
 
get the mmcsd library working.
 
 
I bought the Brush Electronics FAT drivers and was talking to it reading 
 
and writing within a couple of hours. The openlog will definitely be a 
 
cheaper option than buying the driver source code if you are making only 
 
one. Another user (temtronic) also talked about the Vinculum modules 
 
that can talk to USB keys via serial uart.
 
 
The advantage of buying an openlog or Vinculum is that you don't need to 
 
worry about any low-level stuff or electronics. They are just expensive if 
 
you are making a bunch. | 
			 
		  | 
	
	
		  | 
	
	
		
			empty
 
 
  Joined: 13 Jan 2018 Posts: 16
  
			
			 
			 
			
			
			
			
			
			
			
  
		  | 
		
			
				 | 
			 
			
				 Posted: Sat Feb 09, 2019 2:57 pm     | 
				     | 
			 
			
				
  | 
			 
			
				As Ttelmah said, The original fat library and sd card driver only support small
 
size SD cards (I think < 1GB), try with the modified versions at the following link:
 
https://simple-circuit.com/ccs-c-fat-library-for-mmc-sd-cards/
 
 
If you've the 'F' version (5V) then you should use a 5V to 3.3V converter or at least
 
3 proper voltage dividers for CLK, MOSI and CS lines.
 
The MISO line may be connected directly between the SD card and the microcontroller,
 
but if you want to use hardware SPI module, then it's highly recommended
 
to add another converter that converts the 3.3V levels into 5V levels.
 
Keep in mind that many unoriginal SD cards may not work in SPI mode.
 
 
The original CCS fat example (ex_fat.c) was tested with PIC18F4550 microcontroller using the modified versions:
 
https://simple-circuit.com/ccs-c-ex_fat-example-pic18f4550/
 
 
and this shows a temperature and humidity data logger (with date and time) using the PIC18F4550 again:
 
https://simple-circuit.com/pic18f4550-data-logger-sd-ds3231-dht22/ | 
			 
		  | 
	
	
		  | 
	
	
		
			Ttelmah
 
 
  Joined: 11 Mar 2010 Posts: 19967
  
			
			 
			 
			
			
			
			
			
			
			
  
		  | 
		
			
				 | 
			 
			
				 Posted: Sat Feb 09, 2019 3:01 pm     | 
				     | 
			 
			
				
  | 
			 
			
				Thanks 'empty'. I know the standard drivers do work (with the mods), used them some time ago, but it is nice to have someone else confirm this.
 
Also the comments on the voltage handling are vital.... | 
			 
		  | 
	
	
		  | 
	
	
		
			dluu13
 
 
  Joined: 28 Sep 2018 Posts: 395 Location: Toronto, ON 
			
			 
			 
			
			 
			
			
			
			
			
  
		  | 
		
			
				 | 
			 
			
				 Posted: Sat Feb 09, 2019 3:08 pm     | 
				     | 
			 
			
				
  | 
			 
			
				This thread has a post and link to a reference schematic for interfacing 5V 
 
PIC with 3v3 SD card:
 
http://www.ccsinfo.com/forum/viewtopic.php?t=53223
 
 
Instead of resistor networks for level translation, I suggest using something 
 
like this: 
 
https://www.sparkfun.com/products/12009
 
 
Since you are going to have to translate the MISO line anyway, might as well 
 
translate all of them through this bidirectional level shifter. It also has built in 
 
pullups. So if you are trying to build all this on a breadboard, this makes 
 
things a little cleaner.
 
 
Either that or just straight up use a 3v3 PIC. | 
			 
		  | 
	
	
		  | 
	
	
		
			chico_pic
 
 
  Joined: 21 Sep 2012 Posts: 10
  
			
			 
			 
			
			
			
			
			
			
			
  
		  | 
		
			
				 | 
			 
			
				 Posted: Sat Feb 09, 2019 5:01 pm     | 
				     | 
			 
			
				
  | 
			 
			
				tnks to all for answer
 
 
i use 18f4550, Nokia 5110, SDHC 8 Gb for interface i use 74lcv125 so i convert the voltages... and i edit my libraries as say in the forum.
 
 
i can
 
read txt files (makes in pc & own pic)
 
make files txt (makes in pc& own pic)
 
edit files txt (makes in pc & own pic)
 
 
 
so work with fat32
 
 
i can't:
 
read files bmp to display in Nokia
 
save 2 signal sine on file (signals read from ADC pin)
 
 
 
but i haven't idea for save a struct in some file in SDHC
 
 
 
this is other problem:
 
http://www.todopic.com.ar/foros/index.php?topic=49294.0 | 
			 
		  | 
	
	
		  | 
	
	
		
			temtronic
 
 
  Joined: 01 Jul 2010 Posts: 9589 Location: Greensville,Ontario 
			
			 
			 
			
			
			
			
			
			
			
  
		  | 
		
			
				 | 
			 
			
				 Posted: Sat Feb 09, 2019 5:49 pm     | 
				     | 
			 
			
				
  | 
			 
			
				re:
 
save 2 signal sine on file (signals read from ADC pin) 
 
 
That PIC  cannot read a sine wave( AC) signal. It will ONLY read a voltage from 0 to +5 VDD. It's the the 'datasheet', in the ADC section as well as the 'electrical specs' section.
 
To read a sine wave or AC signal you need to 'offset' the analog signal by 1/2 of the VDD and ensure that neither +ve max  or -ve max exceeds the limits( +5 and gnd). A simple rail2rail opamp and a few resistors can make the required circuit. You should use a very stable Vref and proper filtering to make the circuit stable and have accurate readings. Pay a LOT of attention to grounds, bypass caps,layout, etc.
 
 
as for the files..... 'technically' there's no difference in a BMP file or a TXT file, they're both just '1's and '0's. I suspect it's the actual FORMAT that's the problem. A device reading in a BMP file requires the data in the official BMP format. I'm sure if you Goggle 'BMP format' there will be several 'hits' as how those files are laid out or formatted.
 
 
Jay | 
			 
		  | 
	
	
		  | 
	
	
		
			chico_pic
 
 
  Joined: 21 Sep 2012 Posts: 10
  
			
			 
			 
			
			
			
			
			
			
			
  
		  | 
		
			
				 | 
			 
			
				 Posted: Sat Feb 09, 2019 6:02 pm     | 
				     | 
			 
			
				
  | 
			 
			
				yes!!  my sine wave is 0-5v DC
 
 
but now i just want save my 2 signals as struct 
 
and i don“t know how make it. (inside that txt file, inside that .hex file, inside .ABC file, inside .123 file.   etc etc)
 
or own file format. | 
			 
		  | 
	
	
		  | 
	
	
		
			temtronic
 
 
  Joined: 01 Jul 2010 Posts: 9589 Location: Greensville,Ontario 
			
			 
			 
			
			
			
			
			
			
			
  
		  | 
		
			
				 | 
			 
			
				 Posted: Sat Feb 09, 2019 7:22 pm     | 
				     | 
			 
			
				
  | 
			 
			
				I just need to make sure....
 
Your sine wave has a 'zero cross' at +2.50 volts ? So 0 volts represents 'lowest' or most -ve  part of the sine wave and +5 volts represents the 'highest' or most +ve of the sine wave.
 
 
It sounds like you're trying to record an analog source (an offset sine wave) to a file. If so, how do you expect to play it back ? Take the file, download  into a PC and 'play  it' ? For that you would need to see how .wav files are created and stored. I'd use google for that search. It may not b epossible to run that PIC fast enough to capture the 'sine wave' and store into the SD card. I'm sure others will know.
 
A better description of your project would help.
 
I know the translation into English can be hard, but the more details you give us, the easier it will be for us to guide you.
 
 
Jay | 
			 
		  | 
	
	
		  | 
	
	
		
			Ttelmah
 
 
  Joined: 11 Mar 2010 Posts: 19967
  
			
			 
			 
			
			
			
			
			
			
			
  
		  | 
		
			
				 | 
			 
			
				 Posted: Mon Feb 11, 2019 1:40 am     | 
				     | 
			 
			
				
  | 
			 
			
				.wav is actually quite an easy format for a PIC to generate. 
 
However, there is a 'caveat', that your data needs to be sampled at 
 
a rate and resolution that it supports. Though wav actually supports
 
any clock rate you want, standard players won't accept formats in 
 
'non standard' rates.
 
The standard supported formats that a PIC can probably do, which are
 
supported by standard players, are 8KHz and
 
11025Hz sampling using either 8 or 16bit.
 
Key is though that you are going to have to write the correct .wav header
 
and format header, before the data, and the data assumes that you know how
 
large it is before writing the headers (the size has to be in the header). So 
 
if doing unknown duration sampling, the code is going to have to go back
 
after the sample is finished, and update the header size to match.
 
MSDN has a full description of the RIFF format (wav is a subset of this),
 
and the wav version. | 
			 
		  | 
	
	
		  | 
	
	
		
			temtronic
 
 
  Joined: 01 Jul 2010 Posts: 9589 Location: Greensville,Ontario 
			
			 
			 
			
			
			
			
			
			
			
  
		  | 
		
			
				 | 
			 
			
				 Posted: Mon Feb 11, 2019 5:59 am     | 
				     | 
			 
			
				
  | 
			 
			
				I reread this thread...
 
saw this...
 
i can't:
 
read files bmp to display in nokia 
 
...
 
so I looked up how a BMP is created. 
 
Yeesh..there sure is a LOT of code required to store a couple of pixels!! | 
			 
		  | 
	
	
		  | 
	
	
		 |