Étiquette : LaunchPad

Librairies Energia de fonctions CMSIS DSP pour le LaunchPad Stellaris ou Tiva C

Texas Instruments Tiva C LaunchPad (http://xv4y NULL.radioclub NULL.asia/wp-content/uploads/2013/04/2013-04-12_Tiva_Launchpad_angle NULL.jpg)J’ai toujours dans la tête d’utiliser la carte LaunchPad Stellaris (http://xv4y NULL.radioclub NULL.asia/2013/04/15/le-stellaris-launchpad-rebaptise-tiva-c/) que j’ai dans un de mes tiroirs pour en faire un récepteur SDR I/Q autonome. Un peu comme le projet STM32-SDR (http://xv4y NULL.radioclub NULL.asia/2013/12/12/stm32-sdr-un-sdr-iq-autonome-et-opensource/) en somme, mais beaucoup plus simple. Cela me permettrait d’utiliser le SoftRock Ensemble comme récepteur indépendant et d’avoir un affichage du spectre en temps-réel.

Je vais être honnête, je n’ai pas du tout avancé sur ce projet car d’une part c’est à la lisière de mes compétences actuelles et demanderait un investissement sérieux en temps, et d’autre part beaucoup d’autres projets aux priorités plus élevées me prennent déjà mon temps.

Toujours est-il que sans rien faire mon projet vient de faire un pas important en avant avec la publication sur le forum Stellarisiti du portage de la librairie CMSIS-DSP pour l’environnement de développement Energia (http://forum NULL.stellarisiti NULL.com/topic/2018-cmsis-dsp-for-energia/). Cette librairie fournit toutes les fonctions mathématiques nécessaires pour faire du traitement du signal et utilise les possibilités d’accélérations matérielles disponibles sur le Cortex-M4 (FPU intégrée et instructions SIMD). Quatre nouveaux types sont disponibles : F32 (float), Q31 (int32), Q15 (int16), Q7 (int8) et utilise les instructions SIMD. Un exemple de code FIR32 est aussi fourni dans le paquet téléchargeable, ne me laissant plus que la partie I/Q à écrire et aussi la partie convertisseur A/N…

Nouvelle version de l’IDE Energia qui supporte nouveaux LaunchPad

Texas Instruments LaunchPad Tiva C port Ethernet (http://43oh NULL.com/2014/03/energia-ve0012-release-adds-iot-and-fram-launchpad-support/)Une nouvelle version de l’IDE Energia, portage de l’environnement de développement Arduino pour les plateformes Texas Instruments, vient d’être annoncée. Cette release 0101E0012 apporte le support de deux cartes supplémentaires ainsi que la correction de nombreux bogues (http://energia NULL.nu/download/). Ces cartes Texas Instruments sont :

  • La nouvelle LaunchPad Tiva C (http://www NULL.ti NULL.com/ww/en/launchpad/launchpads-tivac-ek-tm4c1294xl NULL.html)EK-TM4C1294XL (http://www NULL.ti NULL.com/tool/ek-tm4c1294xl) avec processeur Cortex-M4 à 120Mhz, 1 Mo de Flash, 256Ko de SRAM et surtout un port Ethernet 10/100 pour moins de 20$!
  • La LaunchPad MSP-EXP430FR5969LP (http://www NULL.ti NULL.com/ww/en/launchpad/launchpads-msp430-msp-bndl-fr5969lcd NULL.html) avec 64Ko de FRAM qui est disponible dans un bundle avec un BoosterPack écran LCD pour moins de 30$.

Autre nouveauté très importante sur Energia, le support des DriverLib API de Texas Instruments qui apporte de nombreuses facilité de programmation pour les LaunchPad à MSP430 et Tiva C.

Ma pomme dans CQ Magazine de Décembre – Kits balise WSPR

Sommaire CQ Décembre 2013 (http://xv4y NULL.radioclub NULL.asia/wp-content/uploads/2013/11/2013_12_cq_toc NULL.jpg)Le numéro “Spéciale technique” de décembre de CQ Magazine (http://www NULL.cq-amateur-radio NULL.com/) contiendra un article que j’ai écrit à propos des micro-contrôleurs MSP430 et du LaunchPad de Texas Instruments. En fait j’ai proposé cet article il y a plus d’un an mais ils ne trouvaient pas la place adéquate dans leurs colonnes.

Pour continuer sur ma lancée, je leur ai aussi proposé un article détaillant comment fabriquer sa propre balise WSPR ou QRSS avec un DDS AD9850 et un LaunchPad MSP430. C’est en fait la balise que je proposais en kit (http://xv4y NULL.radioclub NULL.asia/2013/03/21/la-balise-wspr-de-g4jvf/) dont je vais publier les schémas et code source. En principe l’article est accepté pour une publication au premier semestre 2014, j’attends leurs demandes de corrections.

Il y a quelques jours Hans G0UPL a lancé son kit Ultimate QRSS beacon 3 (U3) (http://hanssummers NULL.com/ultimate3 NULL.html)qui a maintenant atteint un bon niveau de fonctionnalité et surtout de stabilité (les premières versions ont essuyées pas mal de bogues). Il propose en option les kits module GPS et platine de filtre de bande à commutation par relais. C’est aujourd’hui l’offre la plus intéressante car il en produit des volumes de plusieurs centaines d’exemplaires. Son seul inconvénient c’est que Hans refuse d’en ouvrir le code source et qu’il est donc impossible de faire vos propres adaptations…

Au passage je suis content de voir que mon travail a porté ses fruits et que Hans a intégré dans son codes des idées issues du mien comme la mise en veille du DDS par le bit W34 et le mode WSPR-15 (pour les VLF). Je suis sûr que le côté “reprogrammable” de mes kits l’a aussi poussé à diffuser les binaires de ses firmwares en ligne pour que les utilisateurs puissent faire les mises à jour, ce qu’il ne voulait pas faire au début.

Un wobuloscope à partir d’un Raspberry Pi et d’un DDS

MI0IOU Wobuloscope Raspberry Pi (http://xv4y NULL.radioclub NULL.asia/wp-content/uploads/2013/10/MI0IOU_wobby1 NULL.jpg)Aujourd’hui, les “vrais techniciens” ne jurent que par l’analyseur de spectre ou l’analyseur de réseau vectoriel (VNA). Ces équipements sont devenus relativement bon marché et des versions “simplifiées” du dernier sont même à la portée de toutes les bourses radioamateurs ou presque. Toutefois, il fut un temps où ces équipements étaient rares et où le Wobuloscope était l’équipement de choix pour les amateurs. Largement suffisant pour caractériser un filtre ou un circuit oscillant, j’ai mis les mains sur un appareil vintage lorsque je préparais ma licence au radio-club RCNEG de F6KKU (merci à F6GUB et F9ZS(SK) au passage).

Tom de MI0IOU a conçu un équipement équivalent mais en le remettant à la mode grâce au Raspberry Pi et aux modules DDS AD9850 d’origine chinoise (http://asliceofraspberrypi NULL.blogspot NULL.co NULL.uk/2013/10/raspberry-pi-wobbulator-introduction NULL.html). Le RPi pilote le DDS et en fait varier la fréquence, et il effectue la lecture d’un signal “redressé” par un circuit de détection simple. Le RPi n’ayant pas d’entrée analogique, un module convertisseur analogique-numérique (ADC) est nécessaire. La couverture est uniquement pour les bandes HF, mais c’est suffisant pour la plupart d’entre nous. Des exemples de mesures sont disponibles sur le blog de MI0IOU (http://asliceofraspberrypi NULL.blogspot NULL.co NULL.uk/2013/10/using-raspberry-pi-wobbulator-to-test_28 NULL.html). Tom met aussi à disposition le code Python à installer sur le Raspberry Pi.

Je vais vous avouer que j’avais commencé à travailler sur un circuit similaire en utilisant un LaunchPad MSP430. L’idée était de reprendre mon code de contrôle de l’AD9850 (http://xv4y NULL.radioclub NULL.asia/2013/03/19/code-source-vfo-avec-dds-ad9850ad9851-et-launchpad-msp430/) et de faire la lecture avec le port ADC du micro-contrôleur. L’affichage était en texte sur l’écran d’un micro-ordinateur connecté au MSP430 part le port USB. Faute de temps libre pour ce type de projet, celui-ci est passé en voie de garage tout comme celui de kit station météo complète (http://xv4y NULL.radioclub NULL.asia/2013/02/04/station-meteo-avec-serveur-web-code-source/) avec modules sans-fil et pression atmosphérique.

Texas Instruments lance le nouveau LaunchPad MSP430F5529

La première mouture du LaunchPad MSP430 de chez Texas Instruments utilise dans ses dernières versions des micro-contrôleurs MSP430G2452 et MSP430G2553. De la gamme Value, ils ont le gros avantage d’être en boîtier DIL, ce qui permet de les intégrer facilement à des projets externes à la carte LaunchPad. Ils sont aussi bon marché (en grosse quantité). La plus grosse de leur lacune concerne la capacité mémoire, principalement avec la SRAM limitée à 512o et la Flash à 16Ko. Pour de nombreux projets ça va, mais gérer des chaînes de caractères pour l’affichage sur un écran LCD peut rapidement devenir très compliqué. Mon contrôleur de balise à DDS pour WSPR/QRSS (http://xv4y NULL.radioclub NULL.asia/2013/06/21/montage-dun-amplificateur-5w-classe-c-de-chez-kitsandparts-com/) arrive d’ailleurs à la limite de Flash et de SRAM ce qui m’empêche d’y intégrer de nouvelles fonctionnalités. Ceci est en partie compensé par le fait qu’on peut le reprogrammer très facilement via le port USB.

LaunchPad MSP430F5529 source 43oh.com (http://xv4y NULL.radioclub NULL.asia/wp-content/uploads/2013/09/LaunchPad-MSP430F5529_43ohcom NULL.jpg)Il y a quelques jours, Texas Instruments a annoncé un nouveau produit avec le LaunchPad MSP430F5529 (http://www NULL.43oh NULL.com/2013/09/ti-releases-new-msp430f5529-usb-launchpad-for-12-99/) proposé à 12,9$ et qui vient redistribuer les cartes dans la gamme de cartes expérimentales LaunchPad. En effet, cette fois-ci plus question de boîtier DIL, le circuit MSP430F5529 est un CMS soudé définitivement sur le carte, mais c’est nécessaire pour ce type de puce et c’est déjà le cas pour les cartes LaunchPad C2000 Piccolo (http://xv4y NULL.radioclub NULL.asia/2012/12/30/launchpad-c2000-experimenter-avec-un-dps/), LaunchPad Hercules (http://xv4y NULL.radioclub NULL.asia/2013/08/12/texas-instruments-annonce-les-nouveaux-launchpad-hercules-sous-la-barre-des-20/) et LaunchPad Tiva C (Stellaris (http://xv4y NULL.radioclub NULL.asia/2013/04/15/le-stellaris-launchpad-rebaptise-tiva-c/)). Il reprend d’ailleurs la disposition des connecteurs 40 broches de ceux-ci ce qui permet d’utiliser les mêmes Booster Packs. Aussi, comme plusieurs de ses grand-frères, il dispose d’un port USB attaché au micro-contrôleur et non plus simplement au circuit de Programmation/Debug. Ceci vous permet de concevoir des périphériques USB comme par exemple un circuit qui va chercher des informations sur un serveur web et les “tapes” au clavier sur une autre machine (quelqu’un se reconnaît-il dans la foule?).

Tout le détail est disponible sur 43oh.com ici (http://www NULL.43oh NULL.com/2013/09/ti-releases-new-msp430f5529-usb-launchpad-for-12-99/)là (http://www NULL.43oh NULL.com/2013/09/new-msp430f5529-launchpad-in-pictures/) et encore là (http://www NULL.43oh NULL.com/2013/09/msp430f2559-launchpad-first-impressions/), mais voici ce qu’il faut en retenir :

  • Port USB 2.0 connecté directement au micro-contrôleur
  • Processeur cadencé à 25MHz (contre 16MHz pour le G2553)
  • 128Ko de Flash et 8Ko de SRAM (c’est beaucoup)
  • Convertisseur analogique-numérique 12bits SAR
  • Convertisseur de tension DC-DC pour disposer facilement de 5V et 3,3V via l’USB

Texas Instruments met à disposition les outils de développement et les librairies y compris pour concevoir des périphériques USB de classes CDC, HID et MSC. Vous pouvez tout aussi bien choisir de programmer ce circuit via l’Environnement Energia qui reprend la syntaxe Arduino. Les premières impressions que livre “spirillis” (membre très actif de la communauté 43oh.com) sont très positives même si quelques limitations sont notées et que TI travaille pour les lever. Une bonne nouvelle c’est que la section USB comporte 2Ko de RAM que vous pouvez utiliser conjointement aux 8Ko de la mémoire principale si vous n’activez pas l’USB. Autre point intéressant, à la livraison le LaunchPad est programmé avec une démo qui le fait agir comme périphériques HID (un clavier) et comme mémoire de masse simultanément. Cela ouvre la porte à pas mal d’applications!

 

Contrôler un Si570 avec le LaunchPad MSP430 par F4DTR

Intérieur Si570 - Photo http://hifiduino.wordpress.com/2012/10/17/inside-the-silicon-labs-si570-programmable-xo/ (http://xv4y NULL.radioclub NULL.asia/wp-content/uploads/2013/09/Inside_Si570 NULL.jpg)Vous allez le voir, aujourd’hui, c’est un peu la journée du MSP430 avec 3 billets sur le sujet…

Tout d’abord, Jean-Yves de F4DTR a partagé sur le forum de 43oh.com son travail autour du Si570 (http://forum NULL.43oh NULL.com/topic/4380-change-frequency-to-si570-dxo-on-i2c-not-fully-fonctionnal/). C’est un travail en cours et malheureusement il manque de temps pour le faire aboutir. Si vous êtes à l’aise avec l’écriture de code pour le MSP430 sur Energia et que vous souhaitez bénéficier d’un oscillateur agile, stable et de très large gamme couverte, alors donnez-lui un coup de main.

Nouveau micro-contrôleurs plus puissants dans la gamme MSP430G2xxx de chez TI

MSP430G2955 (http://xv4y NULL.radioclub NULL.asia/wp-content/uploads/2013/04/MSP430G2955 NULL.png)Texas Instruments a annoncé il y a quelques jours le lancement de nouveaux micro-contrôleurs dans sa ligne Value dont fait partie le fameux MSP430G2553 de nos LaunchPad. Ce dernier était auparavant le haut de gamme avec 16Ko de Flash et 512o de SRAM.

Le nouveau MSP430G2955 offrira 56Ko de Flash et 4Ko de SRAM, ce qui est un véritable bond en avant, ainsi que 32 canaux ADC (au lieu de 4) et 3 Timers (au lieu de 2). Les autres caractéristiques (horloge du microprocesseur, périphériques…) restent globalement les mêmes.

Le boîtier du MSP430G2955 est au format CMS mais avec des broches espacées. Par contre le MSP430G2744 avec 32Ko de Flash et 1Ko de SRAM devrait être disponible en DIP 40 broches, ce qui le rend tout à fait adapté à nos besoins d’électronique amateur ou de petites séries. D’autres modèles intermédiaires viendront enrichir la gamme. Le détail est disponible sur 43oh.com (http://www NULL.43oh NULL.com/2013/03/ti-announces-bigger-and-better-value-line-msp430-controllers/). Le support dans l’IDE Energia (http://energia NULL.nu/) devrait se faire rapidement car les développeurs y travaillent déjà.

Station météo avec serveur web – code source

Prototype station météo (http://xv4y NULL.radioclub NULL.asia/wp-content/uploads/2013/02/100_3440 NULL.jpg)J’ai continué mes travaux autour de ma mini-station météo avec serveur web. J’ai atteint les objectifs de fonctionnalités que je m’étais fixés, même s’il me reste à enrichir de quelques indicateurs les statistiques. Ensuite il me faudra repasser toutes les valeurs en type float car je les avais mises en entier pour gagner de la place mémoire et parce que l’espace d’affichage sur l’écran LCD était limité. Il me faudra aussi faire un peu de gestion de la cohérence des valeurs pour éviter d’afficher 255°C quand mon capteur distant n’a plus de piles (comme actuellement). A propos du capteur distant, il faudra aussi que je travaille sur son code pour gérer la mise en veille afin d’économiser les batteries. Dernier point important, j’attends toujours mes capteurs de pression atmosphérique (ils sont assez chers donc j’ai hésité à les inclure dans les kits) pour pouvoir gérer ce type de mesures. L’architecture générale étant présente ça ne devrait pas prendre trop de temps à mettre en place.

Vous pouvez donc le voir par vous-même sur ce prototype de mini serveur web météo (http://cairang NULL.radioclub NULL.asia:8080/), cela fonctionne et plutôt bien à mon goût. Ne vous étonnez pas si parfois il y a peu de valeurs affichées car je continue à faire des tests et à remettre à zéro les mémoires…

J’ai même eu ma première commande, car XYL a trouvé cela pratique (pour une fois à propos de mes montages) et en aura besoin d’un pour son café-restaurant. Les services de l’hygiène demande de relever ces valeurs chaque jour en principe, même si dans la réalité peu de monde le fait… Comme elle ne prévoit pas d’ouvrir le service de restauration avant avril, j’ai le temps de mettre tout cela au point.

Je dois encore faire une étude précise, mais je pense pouvoir proposer ces stations météos autour de 70$, le prix variant suivant les options (écran, contrôleur Ethernet, capteur de pression…). Dès que je peux, je mets les informations à jour sur la page produit de la boutique (http://xv4y NULL.radioclub NULL.asia/boutique/?slug=product_info NULL.php&products_id=31). Les composants sont en fait assez chers si on veut une précision correcte (les capteurs DHT-11 par exemple ne sont bons que pour des mesures relatives) et il y a deux micro-contrôleurs (un pour la station et un pour le capteur distant). Dans tous les cas ça ne sera pas avant mi-mars prochain car les approvisionnements vont être bloqués pour plusieurs semaines à partir du week-end prochain avec le nouvel an lunaire.

En attendant je partage avec vous le code source du premier programme de test que j’avais fait pour mon prototype de mini station météo web (http://xv4y NULL.radioclub NULL.asia/2013/02/01/mini-station-meteo-web/). Il a évolué depuis mais celui-ci en principe fonctionne et offre le service de base… Il est prévu pour un Arduino Nano (ATMega328) et se compile avec Arduino 1.0.1. Je vous conseille d’utiliser mes packages librairies (http://xv4y NULL.radioclub NULL.asia/boutique/docs/) pour pouvoir les compiler.

/*
Arduino Thermometer and Humidity mini web server using internal and remote DHT11 sensors
By Yannick DEVOS - XV4Y
http://xv4y.radioclub.asia/

Copyright 2013 Yannick DEVOS under GPL 3.0 license
Any commercial use or inclusion in a kit is subject to author approval

====
This program sense and displays the current temperature and relative humidity for a local and remote sensors
It serve the values to a mini web server thanks to an ENC28J60 Ethernet module

In order to compile this program with Arduino 1.0.1, you will need to install 3 libraries :
- DHT-sensor Library by Adafruit
https://github.com/adafruit/DHT-sensor-library
- VirtualWire Library by Mike McCauley
http://www.open.com.au/mikem/arduino/VirtualWire.pdf
- Ethercard Library by JeeLabs
http://jeelabs.net/pub/docs/ethercard/index.html
====
Revision history :
v1.00    2013-02-02
         First release with mini web server test
====
This program needs at least 2KB of SRAM, that means an ATMega328...

The DHT11 Sensor need to be connected as described here below
- Connect pin 1 (on the left) of the sensor to +5V
- Connect pin 2 of the sensor to whatever your DHTPIN is (here pin D12)
- Connect pin 4 (on the right) of the sensor to GROUND
- Connect a 10K resistor from pin 2 (data) to pin 1 (power) of the sensor
We also need a push button on pin D2.

For RF modules, please see the VirtualWire documentation

====
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You can download a copy of the GNU General Public License at <http://www.gnu.org/licenses/>
*/

#include <EtherCard.h>
#include "DHT.h"
#include <VirtualWire.h>

// Here some parameters you would like to edit

#define RXPIN  A1        // What pin we use for Remote Sensor RX module
#define BAUDRATE 2000    // Transmission speed in bps, 1000-2000 is ok a give similar ranges, higher is useless
#define RX_LOST 60       // Max time in seconds without the sensor is considered lost
#define DHTPIN A2        // What pin we have connected the DHT sensor
#define DHTTYPE DHT22

// ethernet interface ip address
static byte myip[] = { 192,168,1,100 };
// gateway ip address
static byte gwip[] = { 192,168,1,254 };

// ethernet mac address - must be unique on your network
static byte mymac[] = { 0x74,0x69,0x69,0x2D,0x30,0x31 };

const byte header[4] = {0x01,'D','H','T'};

// Here you should not be touching it

const char http_OK[] PROGMEM =
    "HTTP/1.0 200 OK\r\n"
    "Content-Type: text/html\r\n"
    "Pragma: no-cache\r\n\r\n";

const char http_Found[] PROGMEM =
    "HTTP/1.0 302 Found\r\n"
    "Location: /\r\n\r\n";

const char http_Unauthorized[] PROGMEM =
    "HTTP/1.0 401 Unauthorized\r\n"
    "Content-Type: text/html\r\n\r\n"
    "<h1>401 Unauthorized</h1>";

DHT dht(DHTPIN, DHTTYPE);

byte Ethernet::buffer[700]; // tcp/ip send and receive buffer
BufferFiller bfill;

int hi=0xFF, ti=0xFF, hr=0xFF, tr=0xFF;
int last_rx;
unsigned int counter=0;

float tf=1;

byte buf[VW_MAX_MESSAGE_LEN];
byte buflen = VW_MAX_MESSAGE_LEN;

void setup(){
  ether.begin(sizeof Ethernet::buffer, mymac);  // Start the Ethernet module
  ether.staticSetup(myip, gwip);

  vw_set_rx_pin(RXPIN);
  vw_setup(BAUDRATE);

  vw_rx_start();       // Start the RF receiver PLL running
}

void loop() {

  hi = int(dht.readHumidity());    // we convert to integer since the DHT11 has not enough precision anyway
  ti = int(dht.readTemperature());

  if (vw_have_message()) {  // If we have a message from the RF module
    if (vw_get_message(buf, &buflen) && !memcmp(&buf, &header,4)) // If it is checked and the header is the same
    {
      // First temp, the RF module send a float but we only display an integer
      memcpy(&tf, &buf[4], 4);
      tr = int(tf);

      // THen humidity
      memcpy(&tf, &buf[8], 4);
      hr = int(tf);

      last_rx = millis()/1000;  // We save when was the last data received
    }
  }

  if ((millis()/1000) > (last_rx+RX_LOST)) {    // Without signal from the sensor for more than RX_LOST seconds, the sensor is considered out of reach
    hr = 0xFF;
    tr = 0xFF;
  }  

  // wait for an incoming TCP packet, but ignore its contents
  word len = ether.packetReceive();
  word pos = ether.packetLoop(len); 
  if (pos) {
    delay(1);
       bfill = ether.tcpOffset();
       char *data = (char *) Ethernet::buffer + pos;
    if (strncmp("GET /", data, 5) != 0) {
       // Unsupported HTTP request
       // 304 or 501 response would be more appropriate
       bfill.emit_p(http_Unauthorized);
    } else {
       data += 5;

       if (data[0] == ' ') {
           // Return home page
           homePage();
           counter++;
       } else {
           // Page not found
           bfill.emit_p(http_Unauthorized);
       }
    }
        ether.httpServerReply(bfill.position());    // send http response
  }
}

void homePage()
{
    bfill.emit_p(PSTR("$F"
        "<meta http-equiv='refresh' content='5'/>"
        "<title>Mini web météo v1.0 XV4Y</title>" 
        "<h1>Le temps du delta du mékong chez <a href=\"http://xv4y.radioclub.asia\">XV4Y</a></h1>"
        "<h2>Capteur interne</h2>"
        "Temp : $D°C</br>"
        "Hum. : $D%</br>"
        "<h2>Capteur distant</h2>"
        "Temp : $D°C</br>"
        "Hum. : $D%"
        "<h6>$Dème connexion.</h6>"
        "<h5>Copyright(C)2013 - <a href=\"http://xv4y.radioclub.asia/\">Yannick DEVOS XV4Y</a></h5>"
        ),
        http_OK,
        ti,
        hi,
        tr,
        hr,
        counter);
}

Voici aussi le code pour le capteur distant. Il fonctionne lui sur un MSP430G2452 et est écrit avec Energia 009.

/* Remote Temperature/Humidity sensor for MSP430G2452
 * Code for Energia 009

 * By Yannick DEVOS - XV4Y - December 2012
    http://xv4y.radioclub.asia/

    Copyright 2012-2013 Yannick DEVOS under GPL 3.0 license
    Any commercial use or inclusion in a kit is subject to author approval

====
  * Run on MSP430G2452
  * Hook a DHT sensor module to pin P2_1
  * Hook a 433MHz TX module to P2_4
  * Several pins are available for LED debugging
====
Revision history :
v1.00    2012-12-18
         First release, without MCU power saving features

====
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You can download a copy of the GNU General Public License at <http://www.gnu.org/licenses/>
*/

#include "DHT.h"
#include <VirtualWire.h>

#define DHTTYPE DHT11
#define DHTPIN   P2_1     // DATA Pin pour le DHT
#define TXPIN    P2_4     // DATA Pin pour le module TX RF
#define BAUDRATE 2000     // Transmission speed in bps, 1000-2000 is ok a give similar ranges, higher is useless
#define PWRPIN   P1_6     // Pin to turn ON/OFF power to the modules
#define LEDERR   P1_0     // This LED will turn on when DHT is not ok

float h, t;
byte trame[12] = {0x01,'D','H','T',0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF};  // The frame to be transmitted with "DHT" as header

DHT dht(DHTPIN, DHTTYPE);

void setup() {
  pinMode(PWRPIN, OUTPUT);     
  pinMode(LEDERR, OUTPUT);     

  vw_set_tx_pin(TXPIN);
  vw_setup(BAUDRATE);

  dht.begin();
}

void loop() {
  digitalWrite(PWRPIN, HIGH);  // Apply power to the modules
  delay (1000);                // We have to wait 1 second to let the DHT sensor stabilize

  // Reading temperature or humidity takes about 250 milliseconds!
  // Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
  t = dht.readTemperature();
  h = dht.readHumidity();

  // Check if returns are valid, if they are both 0 then something went wrong!
  if (t == 0 && h == 0) {
    digitalWrite(LEDERR, HIGH);
  } else {
    // First temperature
    memcpy(&trame[4], &t, 4);
    // Then humidity
    memcpy(&trame[8], &h, 4);
    vw_send((byte *)trame, 12);
    digitalWrite(LEDERR, LOW);
  }
  vw_wait_tx(); // Wait until the whole message is gone

  digitalWrite(PWRPIN, LOW);  // We turn off power to save batteries
  delay(5000);                // We rest 5 seconds before the next reading, longer wait time will save more batteries...

}

 

Bibliothèque RTC pour Energia version 1.04

Suite à une suggestion sur le forum dédié à Energia et au MSP430 en général (http://forum NULL.43oh NULL.com/forum/28-energia/), j’ai procédé à une petite réécriture de ma librairie horloge temps-réel (http://xv4y NULL.radioclub NULL.asia/2012/05/22/bibliotheque-rtc-pour-le-msp430/) (Real Time Clock ou RTC) pour le MSP430. Le changement sont principalement cosmétiques mais quelques petits bogues ont été corrigés.

Les fichiers peuvent être téléchargés sur la page téléchargements (http://xv4y NULL.radioclub NULL.asia/boutique/docs/).

Ici le fichier de déclarations sRTC.h :

/*
 sRTC.h - Library for adding simple RTC capabilities using MSP430 hardware
 By Yannick DEVOS (XV4Y) - 2012-2013
 Any commercial use or inclusion in a kit is subject to author approval

 ====
 Revision history :
 v1.00    2012-05-22
 First release
 v1.01    2012-12-17
 Minor cosmetic changes
 v1.02    2012-12-18
 Strucutral changes to improve code cleaness
 Currently does not work with Energia009
 v1.03    2012-12-21
 Settings in constructor to override default Energia settings, work with Energia 009
 v1.04    2013-01-08
 Moved settings to begin(), corrected bug related to Energia 009 => Thanks Grahamf72 from 43oh forums

 ====
 This program is free software: you can redistribute it and/or modify
 it under the terms of the GNU General Public License as published by
 the Free Software Foundation, either version 3 of the License, or
 at your option) any later version.

 This program is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.

 You can download a copy of the GNU General Public License at <http://www.gnu.org/licenses/>

///////////////////////////////// How to use the lib

 * Create an instance of the object

 RealTimeClock myClock;

 * Do low-level Timer and Clock setup yourself or call begin();

 myClock.begin();

 * In order to have this RTC library working you should add this code to the end of your main program :

 interrupt(TIMER1_A0_VECTOR) Tic_Tac(void) {
	myClock++;		      // Update chunks
 };

 * Enjoy the clock reading the RTC_sec, RTC_min, RTC_hr variables

 */

// ensure this library description is only included once
#ifndef RTC_h
#define RTC_h

// library interface description
class RealTimeClock
{
	// user-accessible "public" interface
public:
	RealTimeClock(void);
	void begin(void);
	void Set_Time(char hr, char mins, char secs);
    int RTC_chunk; // This how you read the time, by reading the vars
    char RTC_sec; // This how you read the time, by reading the vars
    char RTC_min;
    char RTC_hr;
	void Inc_chunk(void); // This methode should be invoked by an Interrupt call (see top of the file comment)
	RealTimeClock& operator++();	// Overload ++ operator for writing convenience (Prefix Variant)
	RealTimeClock& operator++(int);	// PostFix variant

	// A few private methods
private:
	void Inc_sec(void);
	void Inc_min(void);
	void Inc_hr(void);	
};

#endif

Et le code par lui même sRTC.cpp :

/*
 sRTC.h - Library for adding simple RTC capabilities using MSP430 hardware
 By Yannick DEVOS (XV4Y) - 2012
 Any commercial use or inclusion in a kit is subject to author approval

 ====
 This program is free software: you can redistribute it and/or modify
 it under the terms of the GNU General Public License as published by
 the Free Software Foundation, either version 3 of the License, or
 at your option) any later version.

 This program is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.

 You can download a copy of the GNU General Public License at <http://www.gnu.org/licenses/>

 */

// include this library's description file
#include 
#include 

// Constructor /////////////////////////////////////////////////////////////////

RealTimeClock::RealTimeClock(void)
{

};

// Methods /////////////////////////////////////////////////////////////////

void RealTimeClock::begin(void) {

	BCSCTL1 &= ~DIVA_3;		// ACLK without divider, set it to DIVA_0
	BCSCTL3 |= XCAP_3;		// Internal 12.5pF cap for 32KHz crystal

	TA1CCTL0 = CCIE;             //  CCR0 interupt activated
	TA1CCR0 = 128-1;             // 4096 ticks of 32KHz XTal = 1 second, so 4 slices are 1 second => CCR0 counts N+1
	TA1CTL = TASSEL_1 | ID_0 | MC_1;  // Clock for TIMER 1 = ACLK, No division, up mode

	P2SEL |= (BIT6 | BIT7); // This is to override default Energia settings that set P2_6 and P2_7 to GPIO instead of ACLK
	BCSCTL3 = LFXT1S_0;		// Override default Energia setting sourcing ACLK from VLO, now source from XTal

	RTC_chunk = 0;
	RTC_sec = 0;
	RTC_min = 0;
	RTC_hr = 0;	

};

RealTimeClock& RealTimeClock::operator++() {	// Overload ++ operator for writing convenience (Prefix Variant)
	Inc_chunk();	// This just call Inc_chunk
	return *this;
};

RealTimeClock& RealTimeClock::operator++(int) {	// PostFix variant
	RealTimeClock tmp(*this);
	++(*this);
	return tmp;
};

void RealTimeClock::Inc_chunk(void) {
	RTC_chunk = RTC_chunk + 1;		      // Update chuncks
	if (RTC_chunk == 256) {
		RTC_chunk=0;
		Inc_sec();
	};
};

void RealTimeClock::Inc_sec(void) {
	RTC_sec = RTC_sec + 1;		      // Update seconds
	if (RTC_sec == 60) {
		RTC_sec=0;
		Inc_min();
	};
};

void RealTimeClock::Inc_min(void) {
	RTC_min = RTC_min + 1;		      // Update minutes
	if (RTC_min == 60) {
		RTC_min=0;
		Inc_hr();
	};
};

void RealTimeClock::Inc_hr(void) {
	RTC_hr = RTC_hr + 1;		      // Update hours
	if (RTC_hr == 24) {
		RTC_hr=0;
	};
};

void RealTimeClock::Set_Time(char hrs=0, char mins=0, char secs=0) {
	if ((hrs>=0 && hrs <24) && (mins>=0 && mins<60) && (secs>=0 && secs<60)) {
		RTC_hr = hrs;	// Set time to values given in parameters
		RTC_min = mins;
		RTC_sec = secs;
		RTC_chunk = 0;
	};
};

Nouvelles des kits, balise WSPR à DDS et page téléchargements

Je viens de mettre en ligne une page avec quelques fichiers à télécharger (http://xv4y NULL.radioclub NULL.asia/boutique/docs/) pour le kit SpectroScope audio. Vous y trouverez pour l’instant le manuel utilisateur, les librairies nécessaires à la compilation des sources avec l’environnement Arduino et le code source la mini station météo. J’y ajouterai bientôt les librairies que j’ai écrites pour le MSP430 avec Energia.

Balise WSPR AD9850 et MSP430 (http://xv4y NULL.radioclub NULL.asia/2012/12/17/nouvelles-des-kits-balise-wspr-a-dds-et-page-telechargements/100_3338/)A part ça j’ai bien avancé ces derniers jours sur la balise QRSS / WSPR avec DDS 9850. Il reste encore pas mal de travail mais comme vous pouvez le voir j’ai un prototype pleinement fonctionnel sur le banc d’essai. Ce soir il devrait être relié à une antenne mais sans PA les reports risquent d’être limité par les 40mW du DDS. Le kit final comportera un écran graphique, un DDS et des boutons permettant de le reprogrammer comme générateur de signal ou comme VFO au besoin. L’ensemble des composants et logiciels fonctionnent bien mais j’ai du mal à faire cohabiter la génération de la séquence WSPR et le pilotage de l’écran LCD dans les faibles 512 octets de SRAM du MSP430G2553. J’y travaille…

J’ai aussi reçu mon StellarPad mais je ne l’ai pas encore sorti de sa boîte. Chaque chose en son temps. J’avoue ne pas avoir de projet précis qui nécessite toute la puissance d’un tel processeur. Je vais faire quelques en portant des programmes existants mais pour l’instant ce n’est pas une priorité.