Une carte SD / SDHC peut être utilisée pour enregistrer des données en continu dans le temps à diverses fins, ce projet montre la conception d’un enregistreur de données de température avec système de contrôle de menu. 
La température ambiante est lue toutes les 20 secondes et stockée dans un fichier sur une carte SD.
Lorsque le programme démarre, l’utilisateur dispose de deux options:

  • Option 1: Enregistrer les relevés de température sur la carte SD / SDHC (un nouveau fichier texte sera créé: « DATA.TXT » ou si ce fichier existe déjà, des données lui seront ajoutées)
  • Option 2: Afficher les valeurs de température sur PC

L’utilisateur devra choisir une option pour démarrer l’enregistrement des données. Ce menu n’est accessible qu’une seule fois au démarrage du programme, si l’utilisateur souhaite choisir une autre option, il doit redémarrer le programme en appuyant sur le bouton reset.

Si vous préférez le tutoriel vidéo, veuillez regarder cette vidéo ci-dessous:

Configuration du projet

Dans ce projet, le PIC16F18346 est utilisé sur la carte de développement Curiosity. Le capteur de température LM35 est connecté à l’ANA0 analogique du PIC.

microSD Click est connecté aux broches SPI du PIC: SDI1 à RB4, SDO1 à RC7, SCK1 à RB6 et CS à RC6. Le TX du module série vers USB est connecté à RB7 et RX à RB5.

Pour en savoir plus, veuillez d’abord vous référer à ces tutoriels:

Lecture et écriture sur carte SD avec microcontrôleur PIC à l’aide du configurateur de code MPLAB

Convertisseur analogique-numérique dans un microcontrôleur PIC

Communication série avec microcontrôleur PIC

Le prototypage sur PCB est toujours robuste avec peu d’erreurs en raison de mauvaises connexions. Pour un développement rapide, vous pouvez acheter une carte SD que vous pouvez brancher directement sur votre carte de développement ou vos en-têtes PCB. Dans la boutique en ligne StudentCompanion, vous pouvez obtenir tous les composants utilisés dans ce projet.

L’autre et probablement le plus important est également le coût de fabrication de vos cartes de circuits imprimés. La qualité d’une carte de circuit imprimé peut affecter la qualité globale de l’ensemble de l’appareil électronique.

Il existe de nombreuses entreprises dans le monde qui peuvent vous fabriquer des cartes de circuits imprimés de bonne qualité, mais nous en avons besoin d’une qui peut produire des cartes bon marché de haute qualité sur de petites commandes car le premier lot de tout projet est probablement de petite quantité. Nous recommandons PCBWay, un fabricant de cartes de circuits imprimés basé en Chine, spécialisé dans le prototypage de PCB, la production de petits volumes et le service d’assemblage de PCB sous un même toit avec plus d’une décennie d’expérience. Vous pouvez obtenir 10 cartes de circuits imprimés de haute qualité (taille: 100 mm x 100 mm ou plus petit) pour seulement 5 $ USD. Les nouveaux membres reçoivent un bonus de 5 $ qui peut être utilisé pour obtenir votre première commande entièrement gratuite.

Ils offrent maintenant un rabais de vente important pour cette fin d’année 2019, vous pourriez gagner des cadeaux gratuits, des coupons et des ventes jusqu’à 70% de réduction pour le prototype et l’assemblage de PCB.

Ils offrent des coupons de Noël jusqu’à 200 $ que vous pouvez réclamer du 1er décembre au 31 décembre 2019, une remise énorme jusqu’à 70% sur le prototype et l’assemblage de PCB, y compris Advanced PCB et FPC / Rigid-Flex et des récompenses en espèces et des cadeaux électroniques en partageant simplement vos projets sur la communauté PCBWay.

Pour en savoir plus, veuillez cliquer sur l’image ci-dessous pour vous diriger vers leur site Web.

Bibliothèque de Microchip: File System 

La bibliothèque File System donne accès à la bibliothèque FatFs file system et à la bibliothèque de cartes SD. Dans ce tutoriel, nous utilisons la bibliothèque File System v1.00
FatFS est essentiellement le Chan’s FatFs un système de fichiers FAT générique disponible via une licence open source. Ça fournit des fonctions pour écrire sur des périphériques multimédias physiques qui utilisent le système de fichiers FAT, un système de fichiers commun utilisé sur les périphériques multimédias amovibles comme les cartes multimédias ou les cartes mémoire USB.

Pour plus d’informations sur FatFs, y compris la documentation des paramètres du module, les notes d’application FatFs et la documentation de l’API du système de fichiers, veuillez visiter la page d’accueil de FatFs: http://elm-chan.org/fsw/ff/00index_e.html

Module système:

Nous avons sélectionné l’oscillateur interne et l’avons réglé sur 16 MHz et activé le mode de programmation basse tension (low-voltage), ceci est important car la carte de développement de curiosité ne fonctionne qu’en mode de programmation low-voltage.

FatFs

Dans les ressources de l’appareil, et la bibliothèque FatFs, il va ajouter automatiquement la carte SD (SPI) sous la bibliothèque Foundation Services

Cliquez sur Insérer un pilote (Insert Driver) pour créer un pilote physique et définir son nom d’étiquette. Vous pouvez cliquer sur le bouton Aide des FatF pour obtenir plus d’informations sur la configuration de cette section.

Le reste du paramètre est plus ou moins laissé à ses valeurs par défaut. Vous pouvez jouer avec ces paramètres pour désactiver les fonctionnalités dont vous n’avez pas besoin pour optimiser le code.

Convertisseur analogique-numérique

EUSART

Le STDIO à USART n’est pas vérifié ici pour utiliser la fonction fprint () pour économiser de la mémoire de cette puce que nous utilisons. Nous utiliserons notre propre fonction pour imprimer une chaîne sur la sortie série:

//function to print string
void sendString(const char *x)
{
    while(*x)
    {
        EUSART_Write(*x++);
    }
}

Application principale

/**
  File Name:
    main.c

  Summary:
    This is the main file generated using PIC10 / PIC12 / PIC16 / PIC18 MCUs

  Description:
    This header file provides implementations for driver APIs for all modules selected in the GUI.
    Generation Information :
        Product Revision  :  PIC10 / PIC12 / PIC16 / PIC18 MCUs - 1.78
        Device            :  PIC16F18346
        Driver Version    :  2.00
  MPLAB® Code Configurator - Version: 3.85.1
  File System library v1.00
  Compiler : XC8 v2.05 
  C Standard: C90
  MPLAB : MPLAB X v5.25
  Tested with : SDHC 8GB card formatted with FAT32 
  Copyright (c) StudentCompanion 2019, https://www.studentcompanion.co.za
*/

#include "mcc_generated_files/mcc.h"
#include <stdlib.h>
#include <stdio.h>


/* conversion from integer to Celsius equivalent, Vref is 5V,
data comes in as a mV value, must be scaled by 100, 1024 is the 10 bit ADCC value */
#define conversionRawTemp (5 * 100) / 1024 

uint16_t raw;
char temperature[10];

//function to print string
void sendString(const char *x)
{
    while(*x)
    {
        EUSART_Write(*x++);
    }
}

//Read Temperature 
void readTemperature()
{
    unsigned long voltIn;
    
  ADC_StartConversion(LM35_ANA0);
  while(!ADC_IsConversionDone());        
        
     /*delivers a number of 0 to 1023, defined by (Vref / 1024) = step size in volts */   
     raw = ADC_GetConversionResult();       
     
     //converts the ADCC value to degrees celcius using scale equation
     voltIn = raw * conversionRawTemp; 
    
     //Convert long to string, decimal point values are ignored
     ltoa(temperature, voltIn, 10);      
}


FATFS drive;
FIL file;

//Write to sd card
void writeCard()
{
 UINT actualLength;
    char dataNewLine[] = "\r\n";
    char tempText[] = "Temperature is: ";
    if( SD_SPI_IsMediaPresent() == false)
    {
        return;
    }

    if (f_mount(&drive,"0:",1) == FR_OK)  //mount
    {
       
        if (f_open(&file, "DATA.TXT", FA_OPEN_APPEND | FA_WRITE ) == FR_OK) { //Open/Append or Create DATA.TXT file
        
            f_write(&file, tempText , sizeof(tempText)-1, &actualLength );     //Write Temperature is:
            f_write(&file, temperature , sizeof(temperature)-1, &actualLength ); //write temperature value            
            f_write(&file, dataNewLine, sizeof(dataNewLine)-1, &actualLength );  //go to new line            
                    
            f_close(&file);
        }
      //  f_mount(0,"0:",0);  //unmount disk
    }   
}
/*
                         Main application
 */
void main(void)
{
    // initialize the device
    SYSTEM_Initialize();
    
    unsigned char flag,choice;
       
    //Print Welcome message
    sendString("Temperature logger to SD Card. www.studentcompanion.co.za \n \r");
    __delay_ms(2000);  //2 seconds delay    
    
    //Display the Menu and get the user choice
    sendString("Please select one of the following by typing 1 or 2: \n \r");
    sendString("\n \r");
    sendString("1. Save Temperature data to SD card \n \r");
    sendString("2. Send Temperature data to PC \n \r");
    sendString("\n \r");
    
//Read a character from the PC Keyboard
flag = 0;
do { 
    if(EUSART_is_rx_ready())
      {
        choice = EUSART_Read();
        EUSART_Write(choice);  //Echo received data 
                
        if(choice =='1') 
         {
         flag = 1;  
         sendString(" Option 1 selected. the temperature will saved to sd card \n \r");
         }  
        if(choice =='2')
         {
         flag = 1; 
         sendString(" Option 2 selected. the temperature will be sent to PC \n \r");
          }
      }
   
}while (!flag);

    while (1)   //Loop continuously 
    {
        if (choice=='1')
        {
          //Read temperature
          readTemperature();           
         //Save temperature to file
         writeCard();         
        // 20 seconds delay
        for(int x = 0;x <=10; x++)  __delay_ms(2000); 
        }
        if (choice =='2')
        {
         //Read temperature
         readTemperature(); 
         //Send Temperature data to PC
         sendString("Temperature is: ");     
         sendString(temperature); 
         EUSART_Write(0xF8); //Degree sign 
         EUSART_Write('C');       
         sendString("\n \r"); //New line

        // 20 seconds delay
        for(int x = 0;x <=10; x++)  __delay_ms(2000); 
        }
    }
}
/**
 End of File
*/

Au démarrage, le projet affichera le menu sur l’écran de l’ordinateur.

Si le choix 1 est sélectionné, la température sera lue toutes les 20 secondes et enregistrée sur la carte SD.

Voici un exemple de données enregistrées sur la carte SD:

Si le choix 2 est sélectionné, la température sera lue toutes les 20 secondes et affichée sur l’ordinateur.

Vous pouvez télécharger les fichiers de projet complets (projet MPLAB X) ci-dessous ici.
Tous les fichiers sont zippés, vous devrez les décompresser (Téléchargez une version gratuite de l’utilitaire Winzip pour décompresser les fichiers).

Télécharger: MPLAB Project Temperature_Logger_SD_Card