Offline
Newbie
Karma: 0
Posts: 6
|
 |
« on: March 08, 2013, 11:49:04 am » |
Problema con libreria Sd.h
Devo fare un progetto in cui ho dei dati da salvare all'interno della scheda SD, il problema nasce quando vado a provare lo sketch datalogger la scheda la riconosce ma quando va a salvare i dati all'interno del file non so perché ma non tutti li salva in alcuni casi, appare il carattere NULL al posto del dato, oppure, la stringa viene scritta in parte cioè per metà. Questo quando va bene, altrimenti appena provo ad inserire la scheda nel pc mi appare una finestra in cui dice che il file system è danneggiato. Questo tipo di problema mi si presenta solo con il progetto datalogger perché con lo sketch ReadWrite il file viene scritto/letto correttamente sia dal pc che dal pic. Utilizzo l'arduino mega e una Shield per la Sd collegata in questo modo :
SS_PIN = 53; MOSI_PIN = 51; MISO_PIN = 50; SCK_PIN = 52;
ho modificato il programma in modo che il pin cs sia sul piedino n°53.
la scheda è una microSd da 4gb formattata in Fat32.
non capisco deve è il problema.
|
|
|
|
|
Logged
|
|
|
|
|
Genova
Offline
Edison Member
Karma: 13
Posts: 2437
|
 |
« Reply #1 on: March 08, 2013, 03:29:42 pm » |
ho modificato il programma in modo che il pin cs sia sul piedino n°53. no, nessuna modifica, i pin corretti sono pinMode(SS_PIN, OUTPUT); digitalWrite(SS_PIN, HIGH); pinMode(10, OUTPUT); // Set the CS pin as an output digitalWrite(10, 1); // Turn off the W5100 chip! (wait for configuration) pinMode(4, OUTPUT); // Set the SDcard CS pin as an output digitalWrite(4, 1); // Turn off the SD card! (wait for configuration) ciao
|
|
|
|
« Last Edit: March 08, 2013, 03:31:51 pm by pablos »
|
Logged
|
Meglio imparare dalle cose inutili piuttosto che non imparare niente. [Arduino Mega R3 + Ethernet shield W5100 + SD card 8Gb FAT32]
|
|
|
|
Offline
Newbie
Karma: 0
Posts: 6
|
 |
« Reply #2 on: March 08, 2013, 06:55:14 pm » |
ho modificato il programma in modo che il pin cs sia sul piedino n°53. no, nessuna modifica, i pin corretti sono pinMode(SS_PIN, OUTPUT); digitalWrite(SS_PIN, HIGH); pinMode(10, OUTPUT); // Set the CS pin as an output digitalWrite(10, 1); // Turn off the W5100 chip! (wait for configuration) pinMode(4, OUTPUT); // Set the SDcard CS pin as an output digitalWrite(4, 1); // Turn off the SD card! (wait for configuration) ciao Grazie in anticipo per la risposta ma nei commenti della libreria dice che il pin cs nell'arduino mega è il numero 53 // On the Ethernet Shield, CS is pin 4. Note that even if it's not // used as the CS pin, the hardware CS pin (10 on most Arduino boards, // 53 on the Mega) must be left as an output or the SD library // functions will not work.
|
|
|
|
|
Logged
|
|
|
|
|
BZ (I)
Offline
Brattain Member
Karma: 161
Posts: 15651
+39 349 2158303
|
 |
« Reply #3 on: March 09, 2013, 12:54:38 am » |
Il pin CS é un pin che deve essere diverso per ogni dispositivo collegato al SPI. Puoi usare qualsiasi Pin libero come CS.
Il Pin 53 é solo necessario quando usi Arduino MEGA come slave.
Ciao Uwe
|
|
|
|
|
Logged
|
|
|
|
|
Genova
Offline
Edison Member
Karma: 13
Posts: 2437
|
 |
« Reply #4 on: March 09, 2013, 06:37:23 am » |
quando vado a provare lo sketch datalogger la scheda la riconosce ma quando va a salvare i dati all'interno del file non so perché ma non tutti li salva in alcuni casi, appare il carattere NULL al posto del dato Attribuisci questo al pin 53? Ia scrittura su SD o va o non va per nessun char, se alcuni vengo scritti e altri no, potrebbe essere un problema di sd o di sketch. Se ci fai vedere il tuo sketch che ti da problemi magari si puo' capire dove sta il difetto.
|
|
|
|
|
Logged
|
Meglio imparare dalle cose inutili piuttosto che non imparare niente. [Arduino Mega R3 + Ethernet shield W5100 + SD card 8Gb FAT32]
|
|
|
|
Offline
Newbie
Karma: 0
Posts: 6
|
 |
« Reply #5 on: March 09, 2013, 06:47:42 am » |
quando vado a provare lo sketch datalogger la scheda la riconosce ma quando va a salvare i dati all'interno del file non so perché ma non tutti li salva in alcuni casi, appare il carattere NULL al posto del dato Attribuisci questo al pin 53? Ia scrittura su SD o va o non va per nessun char, se alcuni vengo scritti e altri no, potrebbe essere un problema di sd o di sketch. Se ci fai vedere il tuo sketch che ti da problemi magari si puo' capire dove sta il difetto. Si il codice che uso è questo.. /* SD card datalogger This example shows how to log data from three analog sensors to an SD card using the SD library. The circuit: * analog sensors on analog ins 0, 1, and 2 * SD card attached to SPI bus as follows: ** MOSI - pin 11 ** MISO - pin 12 ** CLK - pin 13 ** CS - pin 4 created 24 Nov 2010 modified 9 Apr 2012 by Tom Igoe This example code is in the public domain. */
#include <SD.h>
// On the Ethernet Shield, CS is pin 4. Note that even if it's not // used as the CS pin, the hardware CS pin (10 on most Arduino boards, // 53 on the Mega) must be left as an output or the SD library // functions will not work. const int chipSelect = 53;
void setup() { // Open serial communications and wait for port to open: Serial.begin(9600); while (!Serial) { ; // wait for serial port to connect. Needed for Leonardo only }
Serial.print("Initializing SD card..."); // make sure that the default chip select pin is set to // output, even if you don't use it: pinMode(53, OUTPUT); // see if the card is present and can be initialized: if (!SD.begin(chipSelect)) { Serial.println("Card failed, or not present"); // don't do anything more: return; } Serial.println("card initialized."); }
void loop() { // make a string for assembling the data to log: // open the file. note that only one file can be open at a time, // so you have to close this one before opening another. File dataFile = SD.open("datalog.txt", FILE_WRITE);
// if the file is available, write to it: if (dataFile) { dataFile.println("Prova"); dataFile.close(); // print to the serial port too: //Serial.println(dataString); } // if the file isn't open, pop up an error: else { Serial.println("error opening datalog.txt"); } if(millis() > 30000) while(1); }
|
|
|
|
|
Logged
|
|
|
|
|
Genova
Offline
Edison Member
Karma: 13
Posts: 2437
|
 |
« Reply #6 on: March 09, 2013, 07:15:23 am » |
non c'è la SPI.h e non dichiari i pin 4 e 10 comunque a me così modificato funziona /* SD card datalogger This example shows how to log data from three analog sensors to an SD card using the SD library. The circuit: * analog sensors on analog ins 0, 1, and 2 * SD card attached to SPI bus as follows: ** MOSI - pin 11 ** MISO - pin 12 ** CLK - pin 13 ** CS - pin 4 created 24 Nov 2010 modified 9 Apr 2012 by Tom Igoe This example code is in the public domain. */
#include <SD.h> #include <SPI.h> // On the Ethernet Shield, CS is pin 4. Note that even if it's not // used as the CS pin, the hardware CS pin (10 on most Arduino boards, // 53 on the Mega) must be left as an output or the SD library // functions will not work.
int n=0;
void setup() { pinMode(SS_PIN, OUTPUT); digitalWrite(SS_PIN, HIGH); pinMode(10, OUTPUT); // Set the CS pin as an output digitalWrite(10, 1); // Turn off the W5100 chip! (wait for configuration) pinMode(4, OUTPUT); // Set the SDcard CS pin as an output digitalWrite(4, 1); // Turn off the SD card! (wait for configuration) // Open serial communications and wait for port to open: Serial.begin(9600); while (!Serial) { ; // wait for serial port to connect. Needed for Leonardo only }
Serial.print("Initializing SD card..."); // make sure that the default chip select pin is set to // output, even if you don't use it: //pinMode(53, OUTPUT); // see if the card is present and can be initialized: if (!SD.begin(4)) { Serial.println("Card failed, or not present"); // don't do anything more: return; } Serial.println("card initialized."); }
void loop() { n++; File dataFile = SD.open("datalog.txt", FILE_WRITE);
// if the file is available, write to it: if (dataFile) { dataFile.println("Prova " + (String)n); dataFile.close(); // print to the serial port too: //Serial.println(dataString); } // if the file isn't open, pop up an error: else { Serial.println("error opening datalog.txt"); } if(millis() > 30000) while(1); }
Attenzione a non estrarre la SD mentre sta scrivendo, sfasci il file system della sd e perdi tutto e questo sketch causa proprio questo, non smette mai di scrivere, in teoria hai pochi istanti in cui puoi estrarla, arduino dovrebbe fare la rimozione sicura e questo programma non lo fa assolutamente. ciao
|
|
|
|
« Last Edit: March 09, 2013, 07:19:00 am by pablos »
|
Logged
|
Meglio imparare dalle cose inutili piuttosto che non imparare niente. [Arduino Mega R3 + Ethernet shield W5100 + SD card 8Gb FAT32]
|
|
|
|
Offline
Newbie
Karma: 0
Posts: 6
|
 |
« Reply #7 on: March 09, 2013, 07:56:19 am » |
Ho provato ma questo è il risultato: Prova 1 Prova 2 Prova 3 Prova 5 Prova 6 Prova 8 Prova 10 Prova 11 Prova 15 Prova 16 Prova 18 Prova 19 Prova 20 Prova 21 Prova 22 Prova 23 Prova 24 Prova 25 Prova 27 Prova 28 Prova 29 Prova 31 Prova 33 Prova 34 Prova 35 Prova 37 Prova 38 Prova 39 Prova 41 Prova 44 Prova 45 Prova 46 Prova 48 Prova 49 Prova 50 Prova 51 Prova 52 Prova 53 Prova 54 Prova 55 Prova 56 Prova 57 Prova 58 Prova 59 Prova 60 Prova 61 Prova 62 Prova 63 Prova 64 Prova 65
Prova 15Prova 67 Prova 68 Prova 69 Prova 70 Prova 71 Prova 72 Prova 73 Prova 74 Prova 75 Prova 76 Prova 77 Prova 27Prova 79 Prova 80 Prova 81 Prova 82 Prova 83 Prova 84 Prova 85 Prova 86 Prova 87 Prova 88 Prova 89 Prova 90 Prova 91
Prova 41Prova 93 Prova 94 Prova 44 Prova 45Prova 97 Prova 98 Prova 99 Prova 100 Prova 101 Prova 102 Prova 103 Prova 104 Prova 105 Prova 106 Prova 107 Prova 108 Prova 109 Prova 110 Prova 111 Prova 112 Prova 113 Prova 115 Prova 116 Prova 117 Prova 118 Prova 119 Prova 120 Prova 121 Prova 122 Prova 123 Prova 124 Prova 125 Prova 126 Prova 127 Prova 128 Prova 129 Prova 130 Prova 131 Prova 132 Prova 133 Prova 134 Prova 135 Prova 136 Prova 137 Prova 139 Prova 140 Prova 141 Prova 142 Prova 143 Prova 144 Prova 145 Prova 146 Prova 147 Prova 148 Prova 149 Prova 150 Prova 151 105 ProvaProva 153 107 Prova 108 ProvaProva 156 Prova 157 Prova 158 Prova 159 Prova 160 Prova 161 Prova 162 Prova 163 Prova 164 Prova 165 119 ProvaProva 167 Prova 168 Prova 169 Prova 170 Prova 171 Prova 172 126 Prova 127 ProvaProva 175 Prova 176 Prova 177 Prova 178 132 Prova 133 ProvaProva 181 Prova 182 Prova 183 137 Prova 185 Prova 186 Prova 187 Prova 188 Prova 189 Prova 190 Prova 191 Prova 192 Prova 193 Prova 194 Prova 195 Prova 196 Prova 197 Prova 198 Prova 199 Prova 200 Prova 201 Prova 202 Prova 203 Prova 204 Prova 205 Prova 206 Prova 207 Prova 208 Prova 211 Prova 212 Prova 213 Prova 215 Prova 217 Prova 219 Prova 220 Prova 221 Prova 222 Prova 223 Prova 225 Prova 226 Prova 227 Prova 228 Prova 229 Prova 230 Prova 231 Prova 232 Prova 233 Prova 234 Prova 237 Prova 238 Prova 240 Prova 242 Prova 243 197 ProvaProva 245 Prova 246 Prova 247 201 Prova 202 ProvaProva 250 Prova 251 Prova 252 Prova 253 Prova 254 Prova 255 Prova 256 Prova 257 Prova 258 Prova 259 Prova 260 Prova 261 Prova 262 Prova 263 Prova 264 Prova 265 Prova 266 Prova 267 Prova 268 Prova 269 Prova 270 Prova 271 225 ProvaProva 273 Prova 274 Prova 275 Prova 276 Prova 277 Prova 278 Prova 279 Prova 280 234 Prova 283 Prova 284 Prova 285 Prova 286 Prova 287 Prova 288 242 ProvaProva 290 Prova 291 Prova 292 Prova 293 Prova 294 Prova 295
ProvaProvaProva 297 Prova 298 Prova 299 253 Prova 254 ProvaProva 302 256 ProvaProva 304 258 Prova 259 Prova 260 ProvaProva 308 262 ProvaProva 310 Prova 311 Prova 312 Prova 313 267 ProvaProva 315 Prova 316 Prova 317 Prova 318 Prova 319 Prova 320 Prova 321 Prova 322 Prova 323 277 ProvaProva 325 Prova 326 Prova 327 Prova 328 ProvaProva 330 Prova 331 285 ProvaProva 333 287 ProvaProva 335 Prova 336 Prova 337 Prova 338 Prova 339 293 ProvaProva 341 Prova 342 Prova 343 Prova 344 Prova 345 Prova 346 Prova 347
ProvaProvaProva 349 Prova 350 Prova 351 Prova 352 Prova 353
ProvaProva 308 262 Prova 356 Prova 357 311 ProvaProva 359 Prova 360 Prova 361 Prova 362 316 ProvaProva 364 Prova 365 Prova 366 320 ProvaProva 368 Prova 369 Prova 370
ProvaProva 325 ProvaProva 373 Prova 374 Prova 375 Prova 376 330 ProvaProva 378 Prova 379 333 287 Prova 381 Prova 382 Prova 383 Prova 384 Prova 385 Prova 386 Prova 387 Prova 388 Prova 390 Prova 392 Prova 393 Prova 394 Prova 396 Prova 397 Prova 398 Prova 399 Prova 400 Prova 401 Prova 402 Prova 403 Prova 404 Prova 405 Prova 406 Prova 407 Prova 408 Prova 410 Prova 411 Prova 412 Prova 413 Prova 416 Prova 418 Prova 419 Prova 422 Prova 424 Prova 425 Prova 426 Prova 428 Prova 429 383 ProvaProva 431 385 ProvaProva 433 Prova 434 Prova 435 Prova 436 Prova 437 Prova 438 392 ProvaProva 440 Prova 441 Prova 442 Prova 443 397 Prova 398 ProvaProva 446 Prova 447 Prova 448 Prova 449 Prova 450 404 Prova 405 ProvaProva 453 407 Prova 408 ProvaProva 457 Prova 458 Prova 459 Prova 460 Prova 461 Prova 462 416 Prova 464 Prova 465 Prova 466 Prova 467 Prova 422 Prova 470 Prova 471 Prova 472 Prova 473 Prova 474 Prova 475 Prova 476 Prova 477 431 385 Prova 479 Prova 480 Prova 481 435 ProvaProva 483 437 ProvaProva 485 Prova 486 Prova 487 441 Prova 442 Prova 443 397 Prova 398 Prova 492 Prova 493 Prova 494 Prova 495 Prova 496 Prova 497 Prova 498 Prova 499 Prova 500 Prova 501 Prova 502 Prova 503 457 Prova 458 ProvaProva 506 Prova 507 Prova 508 Prova 509 Prova 510 Prova 511 Prova 512 466 Prova 467 Prova 515 Prova 516 Prova 517 Prova 518 472 ProvaProva 520 Prova 521 Prova 522 Prova 523 Prova 524
385 ProvaProva 526 Prova 527 Prova 528
ProvaProvaProva 530
ProvaProvaProva 532 Prova 533 Prova 534 Prova 535 Prova 536 Prova 537 Prova 538 Prova 539 Prova 540 Prova 541 495 Prova 496 ProvaProva 544 Prova 545 Prova 546 Prova 547 Prova 548 Prova 549 Prova 550 Prova 551 Prova 552 Prova 553 Prova 554 Prova 555 509 ProvaProva 557 511 ProvaProva 559 Prova 560 Prova 561 Prova 562 Prova 563 Prova 564 Prova 565 Prova 566 Prova 567 Prova 568 Prova 569 523 ProvaProva 571 Prova 572 Prova 573 Prova 574 Prova 575 Prova 576 530
ProvaProvaProvaProva 579 533 ProvaProva 581 Prova 582 Prova 583 Prova 584 538 Prova 539 ProvaProva 587 Prova 588 Prova 589 Prova 590 Prova 591 Prova 592 Prova 593 Prova 594 548 Prova 549 Prova 550 ProvaProva 598 Prova 599 Prova 600 Prova 601 Prova 602 Prova 603 557 511 Prova 605 Prova 606 560 Prova 561 Prova 562 Prova 563 ProvaProva 611 Prova 612 Prova 613 567 Prova 568 Prov Prova 616 Prova 617 Prova 620 Prova 622 Prova 623 Prova 624 Prova 625 Prova 626 Prova 627 Prova 628 Prova 629 Prova 631 Prova 632 Prova 633 Prova 635 Prova 636 Prova 637 Prova 638 Prova 639 Prova 640 Prova 641 Prova 642 Prova 646 Prova 649 Prova 652 Prova 653 Prova 654 Prova 655 Prova 656 Prova 658 Prova 660 Prova 662 Prova 663 Prova 664 Prova 666 Prova 667 ProvaProva 669 623 ProvaProva 671 625 Prova 626 ProvaProva 674 628 ProvaProva 676 Prova 677 Prova 678 632 Prova 633 Prova 681 Prova 682 636 ProvaProva 684 Prova 685 Prova 686 640 Prova 641 ProvaProva 689 Prova 690 Prova 692 Prova 693 Prova 694 Prova 649 Prova 697 Prova 698 652 ProvaProva 700 Prova 701 Prova 702 656 Prova 704 Prova 705 ProvaProva 707 ProvaProva 709 Prova 710 Prova 711 Prova 715 Prova 716 Prova 717 Prova 718 Prova 719 Prova 721 Prova 722 Prova 724 Prova 725 Prova 726 Prova 728 Prova 730 Prova 731 Prova 732 Prova 733 Prova 734 Prova 735 Prova 736 Prova 737 Prova 738 Prova 739 Prova 740 Prova 741 Prova 742 Prova 743 Prova 744 Prova 745 Prova 746 Prova 747 Prova 750 Prova 751 Prova 753 Prova 754 Prova ovviamente dopo aver ripristinato il file system perché era danneggiato.
|
|
|
|
|
Logged
|
|
|
|
|
Genova
Offline
Edison Member
Karma: 13
Posts: 2437
|
 |
« Reply #8 on: March 09, 2013, 08:03:06 am » |
prova a mettere un delay(10) dopo il close, a me non lo fa, non ho uno shield sd ma un ethernet con sd.
|
|
|
|
|
Logged
|
Meglio imparare dalle cose inutili piuttosto che non imparare niente. [Arduino Mega R3 + Ethernet shield W5100 + SD card 8Gb FAT32]
|
|
|
|
Offline
Newbie
Karma: 0
Posts: 6
|
 |
« Reply #9 on: March 09, 2013, 02:33:39 pm » |
/* SD card read/write This example shows how to read and write data to and from an SD card file The circuit: * SD card attached to SPI bus as follows: ** MOSI - pin 11 ** MISO - pin 12 ** CLK - pin 13 ** CS - pin 4 created Nov 2010 by David A. Mellis modified 9 Apr 2012 by Tom Igoe This example code is in the public domain. */ #include <SD.h>
File myFile;
void setup() { // Open serial communications and wait for port to open: Serial.begin(9600); while (!Serial) { ; // wait for serial port to connect. Needed for Leonardo only }
Serial.print("Initializing SD card..."); // On the Ethernet Shield, CS is pin 4. It's set as an output by default. // Note that even if it's not used as the CS pin, the hardware SS pin // (10 on most Arduino boards, 53 on the Mega) must be left as an output // or the SD library functions will not work. pinMode(10, OUTPUT); if (!SD.begin(4)) { Serial.println("initialization failed!"); return; } Serial.println("initialization done."); // open the file. note that only one file can be open at a time, // so you have to close this one before opening another. myFile = SD.open("test.txt", FILE_WRITE); // if the file opened okay, write to it: if (myFile) { Serial.print("Writing to test.txt..."); myFile.println("testing 1, 2, 3."); // close the file: myFile.close(); Serial.println("done."); } else { // if the file didn't open, print an error: Serial.println("error opening test.txt"); } // re-open the file for reading: myFile = SD.open("test.txt"); if (myFile) { Serial.println("test.txt:"); // read from the file until there's nothing else in it: while (myFile.available()) { Serial.write(myFile.read()); } // close the file: myFile.close(); } else { // if the file didn't open, print an error: Serial.println("error opening test.txt"); } }
void loop() { // nothing happens after setup }
questo sketch funziona correttamente scrive e legge senza creare problemi. Provo a sparare una soluzione non è che la sd è lenta e quindi ha bisogno di più tempo per scrivere i dati sul file?? perché sennò non mi spiego come mai se eseguo la scrittura in un ciclo alla fine inizia a danneggiarmi il system file.
|
|
|
|
|
Logged
|
|
|
|
|
Genova
Offline
Edison Member
Karma: 13
Posts: 2437
|
 |
« Reply #10 on: March 09, 2013, 03:57:11 pm » |
Ti ripeto a me lo sketch di prima funziona bene ..... magari mettere il tipo di shield che usi, fare prove con diverse sd, ad esempio io uso solo kingstom le altre mi hanno dato problemi in passato, il fatto che ti ritrovi il file system danneggiato te l'ho detto prima..... quando arduino nel loop scrive a raffica all' infinito, per leggerla col pc cosa hai divuto fare? estrarla mentre scriveva, non c'era altro modo, questo ha danneggiato il file system dovendola riformattare.
Non so che shield possiedi, hai cercato su google il modello ed esempi di sketch?
|
|
|
|
|
Logged
|
Meglio imparare dalle cose inutili piuttosto che non imparare niente. [Arduino Mega R3 + Ethernet shield W5100 + SD card 8Gb FAT32]
|
|
|
|
Offline
Newbie
Karma: 0
Posts: 6
|
 |
« Reply #11 on: March 12, 2013, 07:30:52 am » |
Ti ripeto a me lo sketch di prima funziona bene ..... magari mettere il tipo di shield che usi, fare prove con diverse sd, ad esempio io uso solo kingstom le altre mi hanno dato problemi in passato, il fatto che ti ritrovi il file system danneggiato te l'ho detto prima..... quando arduino nel loop scrive a raffica all' infinito, per leggerla col pc cosa hai divuto fare? estrarla mentre scriveva, non c'era altro modo, questo ha danneggiato il file system dovendola riformattare.
Non so che shield possiedi, hai cercato su google il modello ed esempi di sketch?
mi sa che il problema dipende proprio dalla shield, uso una prodotta dalla lc studio  e navigando in internet ho visto che molti hanno problemi con questo tipo di schede.
|
|
|
|
|
Logged
|
|
|
|
|
Forum Moderator
Italy
Online
Brattain Member
Karma: 219
Posts: 16440
Don't know what I do
|
 |
« Reply #12 on: March 12, 2013, 10:46:02 am » |
Ma hai lo schema elettrico? Di solito le SD lavorano a 3V3, se non c'è un traslatore di livelli oppure dei partitori per abbassare le tensioni dell'Arduino, puoi danneggiare le schedine che ci inserisci.
|
|
|
|
|
Logged
|
|
|
|
|
|