Wikipedia

Résultats de recherche

dimanche 6 septembre 2015

Multiplexage - afficheurs sept segments


Code:
///////////////////////////////////////////////////////////////////////////////////////////////////
 unsigned short i;
 INTCON = 0; // Disable GIE , PEIE , INTE , RBIE , TOIE
 TRISA = 0;
 PORTA = 0;
 TRISD = 0;
 PORTD = 0;
 while (1) {
 for (i = 0; i <= 9u; i++)
 {
   PORTA = 0; // Turn off all 7seg displays
   PORTD = mask(i); // bring appropriate value to PORTD
   PORTA = 1; // turn on appropriate 7seg. display
   Delay_ms (1000);
  }
 }
 }
 unsigned short mask( unsigned short num)
{
 switch (num) {
 case 0 : return 0x3F;
 case 1 : return 0x06;
 case 2 : return 0x5B;
 case 3 : return 0x4F;
 case 4 : return 0x66;
 case 5 : return 0x6D;
 case 6 : return 0x7D;
 case 7 : return 0x07;
 case 8 : return 0x7F;
 case 9 : return 0x6F;
 }
 }

Arduino et Bluetooth HC06

Plusieurs types de modules Bluetooth sont disponibles avec en particulier le HC05 et le HC06.
>> Le HC-05 dispose d'un firmware complet avec beaucoup de commandes AT disponibles, il peut être configuré soit comme maitre, soit comme esclave.
>> Le HC-06 ne peut être configuré que comme esclave et dispose d'un nombre de commandes AT limité.
Pour les exemples de réalisation Bluetooth, nous utiliserons le composant HC-06.



Arduino BT montage

Une fois l'Arduino programmé, on peut réaliser le montage ci-dessous avec le cablage à réaliser entre le module HC06 et l'Arduino suivant :
Module HC06 (4 pattes utilisées) -> Arduino
VCC –> +5V
GND –> GND
TXD –> Patte 0 (RX)
RXD –> Patte 1 (TX)

Code Arduino

int compteur = 0;    // Compteur de messages envoyes
     unsigned long temps; // Mesure temps ecoule
     
    void setup() {
        Serial.begin(9600);    //Demarrage liaison serie
        pinMode(13, OUTPUT);   //La LED 13 est utilisee comme temoin de bon fonctionnement
    }
     
    void loop() {
        digitalWrite(13, HIGH);   // Allumage de la LED 13
        delay(200);               // Temporisation de 200 ms 
        digitalWrite(13, LOW);    // Extinction de la LED 13
        ++compteur                // Incrementation compteur de message
        temps = millis();
        // Envoi message via Bluetooth
        Serial.print("PHMARDUINO - Test du module Bluetooth HC06 - "); 
        Serial.print("Compteur de messages : "); Serial.print(compteur);
        Serial.print(" - Temps en ms : "); Serial.println(temps);      
        delay(1000);  //Delai d une seconde
    }

Mesure de température par arduino et LM35

Ce montage permet par exemple de mesurer en continu très simplement la température à l'intérieur d'une pièce. Les résultats sont transmis par l'Arduino au PC via l'interface série puis affichés dans la console Arduino. 

LM35

Le capteur retenu pour ce montage permettant la mesure de température est le LM35 DZ car il est très simple à mettre en oeuvre, il est étalonné directement en usine et ne coûte pas très cher.
Il permet de faire des mesures de températures assez précises (+/- 0.5 degré) de 0 à 100 degrés.
Il fournit une tension proportionnelle à la température mesurée. Celle-ci augmente de 10 mV par degré : Il fournit 0 V pour 0 degré, 250 mV pour 25 degrés, etc. et un maximum de 1 volt pour 100 degrés. 


LM35

Code Arduino :

/Déclaration et initialisation des variables
  float mesure=0;        //Variable pour le stockage mesure retournée par le capteur
  float tension=0;       //Variable pour le stockage de la tension 
  float temperature=0;   //Variable pour le stockage de la température 
  float tempmin=100;     //Temperature min
  float tempmax=0;       //Temperature max
  int portana0 = 0;      //Numéro du port analogique sur lequel la température est mesurée

//Traitements initialisation
  void setup()
  {
    analogReference(INTERNAL); //Permet de fixer la temperature de refernce à 1,1 volt
    Serial.begin(9600);        //initialisation de la liaison série à 9 600 bauds
  }

//Traitements itératifs
  void loop()
  {
    mesure = analogRead(portana0);  
    tension = mesure * 1.1 / 1024;  //Conversion en tension (en volt)
    
    temperature = tension * 100;    //Conversion en température (en degré Celsius)
    if (temperature < tempmin) {tempmin = temperature;} //Calcul temperature mini
    if (temperature > tempmax) {tempmax = temperature;} //Calcul temperature maxi

    Serial.print("Tension : "); Serial.print (tension); Serial.print(" Volts - ");         
    Serial.print("Temperatures :"); 
    Serial.print(" >Actuelle : "); Serial.print (temperature); 
    Serial.print(" >Mini : "); Serial.print (tempmin); 
    Serial.print (" >Max : "); Serial.println (tempmax);
    //Attente de 5 secondes avant de faire une nouvelle mesure
    delay(5000);                    
  }


LM35 Console

PWM pic 16F887



Code:
unsigned short current_duty, old_duty, current_duty1, old_duty1;

void InitMain() {
  ANSEL  = 0;                         // Configure AN pins as digital
  ANSELH = 0;
  C1ON_bit = 0;                       // Disable comparators
  C2ON_bit = 0;
  
  PORTA = 255;
  TRISA = 255;                        // configure PORTA pins as input
  PORTB = 0;                          // set PORTB to 0
  TRISB = 0;                          // designate PORTB pins as output
  PORTC = 0;                          // set PORTC to 0
  TRISC = 0;                          // designate PORTC pins as output
  PWM1_Init(5000);                    // Initialize PWM1 module at 5KHz
  PWM2_Init(5000);                    // Initialize PWM2 module at 5KHz
}

void main() {
  InitMain();
  current_duty  = 16;                 // initial value for current_duty
  current_duty1 = 16;                 // initial value for current_duty1

  PWM1_Start();                       // start PWM1
  PWM2_Start();                       // start PWM2
  PWM1_Set_Duty(current_duty);        // Set current duty for PWM1
  PWM2_Set_Duty(current_duty1);       // Set current duty for PWM2

  while (1) {                         // endless loop
    if (RA0_bit) {                    // button on RA0 pressed
      Delay_ms(40);
      current_duty++;                 // increment current_duty
      PWM1_Set_Duty(current_duty);
     }

    if (RA1_bit) {                    // button on RA1 pressed
      Delay_ms(40);
      current_duty--;                 // decrement current_duty
      PWM1_Set_Duty(current_duty);
     }

    if (RA2_bit) {                    // button on RA2 pressed
      Delay_ms(40);
      current_duty1++;                // increment current_duty1
      PWM2_Set_Duty(current_duty1);
     }

    if (RA3_bit) {                    // button on RA3 pressed
      Delay_ms(40);
      current_duty1--;                // decrement current_duty1
      PWM2_Set_Duty(current_duty1);
     }

    Delay_ms(5);                      // slow down change pace a little
  }
}

ADC pic 16F887


Code :

unsigned int temp_res;

void main() {
  ANSEL  = 0x04;              // Configure AN2 pin as analog
  ANSELH = 0;                 // Configure other AN pins as digital I/O
  C1ON_bit = 0;               // Disable comparators
  C2ON_bit = 0;
  
  TRISA  = 0xFF;              // PORTA is input
  TRISC  = 0;                 // PORTC is output
  TRISB  = 0;                 // PORTB is output

  do {
    temp_res = ADC_Read(2);   // Get 10-bit results of AD conversion
    PORTB = temp_res;         // Send lower 8 bits to PORTB
    PORTC = temp_res >> 8;    // Send 2 most significant bits to RC1, RC0
  } while(1);
}

samedi 5 septembre 2015

MCP4921 12 bit DAC interfacing with PIC16F877

MCP4921 12 bit DAC interfacing with PIC16F877 microcontroller via SPI Connectivity

 In this tutorial project we will see how we generate triangular Wave using MCP4921 12 bit DAC.  As we know that MCP4921 is a 12 bit DAC.
Code:
sbit Chip_Select at RC0_bit;
sbit Chip_Select_Direction at TRISC0_bit;
void main() {
int value,h_b,l_b;
float num=0;
while(1)
{
for(num=0;num<=5;)
{
SPI1_Init();
//SPI
Chip_Select_Direction = 0; // Set CS# pin as Output
value=num/0.001220703125;
value=value|3 << 12; h_b=(value>>8)& 255;
l_b=value & 255;
Chip_Select = 0;
SPI1_Write(h_b);
SPI1_Write(l_b);
Chip_Select = 1;
num=num+.1;
}
if(num==5)
{
for(num=5;num>=0;)
{
num=num-.1;
SPI1_Init();
//SPI
Chip_Select_Direction = 0; // Set CS# pin as Output
value=num/0.001220703125;
value=value|3 << 12; h_b=(value>>8)& 255;
l_b=value & 255;
Chip_Select = 0;
SPI1_Write(h_b);
SPI1_Write(l_b);
Chip_Select = 1;
}
}
}
}

Arduino et lm35


Ce tutoriel montre un moyen intéressant de lire la température de l'environnement avec l'Arduino, et le montre sur un écran LCD de 16x2 (en degrés Fahrenheit), en utilisant certains éléments de sa programmation et le capteur de LM35 de température.
Pour cela, il faudra les composants suivants:
- 1 Arduino
- Affichage 16x2 1 LCD
- Une 10K potentiomètre
- Capteur de température LM35 1
- Cavaliers pour la connexion
Ce capteur capte la température externe et la convertit en une valeur de tension correspondante. Dans ce circuit, nous nous connectons la sortie Vo du capteur à la broche A0 de l'Arduino, qui le convertit en un flotteur valeur de la température, et ensuite, il présente sur l'écran LCD. Le potentiomètre 10K ajuste le contraste de l'affichage.
Code arduino:
#include <LiquidCrystal.h> 
#define    capteur     0  
int Vin; // Variable pour lire la valeur de la broche de l'Arduino
flotter Température; // Variable qui reçoit la valeur de tension convertie à la température
flotter TF; // Variable devant recevoir la valeur convertie de ºC à ºF 
Lcd LiquidCrystal (12, 11, 5, 4, 3, 2); 
/ * La fonction ci-dessus déclare que les broches Arduino seront utilisés pour contrôler l'écran LCD * /
void setup ()
{
  lcd.begin (16, 2); // Il raconte l'Arduino que l'affichage est un type de 16x2
  lcd.print ("Température:"); // Envoyer le texte à l'écran de l'écran.
}
void loop ()
{
  Vin = analogRead (capteur); 
  Température = (500 * Vin) / 1023; 
 TF = ((9 * Température) / 5) 32; // Convertit ºC à ºF
  lcd.setCursor (0, 1); // Déplace le curseur de l'écran à la ligne suivante
  lcd.print (TF); // Présente la valeur de la température sur l'affichage
  lcd.print («F»); // Écrit "F" pour indiquer qu'il est en échelle Fahrenheit.
  delay(1000); // Attend une seconde à lire à nouveau la broche
}

Maison intelligente


Ce projet consiste à concevoir un système domotique  permettant de contrôler les appareils d'une maison tels que les lumières, le chauffage et la ventilation.

Commande moteur pas à pas

Le circuit intégré L293D est muni de 16 pins, qui seront branchées de la façon indiquée sur le dessin ci-dessous. 

Code Arduino Ici



vendredi 4 septembre 2015

PIC16F877A ADC Configuration

Now, onto the configuration of the ADC. There are only FOUR registers that you need to understand to configure the ADC. They are ADCON0, ADCON1, ADRESH and ADRESL. The two most important ones are ADCON0 and ADCON1. ADRESH and ADRESL are just the registers where the ADC stores the result of the conversion.

ADCON0




The user has to select the correct clock conversion. The period must be at least more than 1.6us to obtain an accurate conversion. For example, I’m using a 4MHz crystal oscillator on my PIC16F877A. So if I select Fosc/2, thats 2MHz and the period is just 500ns and it’s far less than the 1.6us required.

Système de cloche école automatique

schematic

Ce projet est un système de cloche école automatique. Un tel système déclenche une cloche (ou exploite toute autre charge) au moment prédéfinie. Dans cette version quelques fonctionnalités avancées sont introduites:
  • 16 x 2 LCD Display (Affiche la date, l'heure et jour)
  • 4 × 4 Clavier pour les entrées
  • Un produit autonome (pas de PC nécessaire pour programmer ou de maintenir le calendrier de sonnerie)
  • Aucune batterie nécessaire pour maintenir le calendrier d'horloge et la sonnerie
  • Temps de sonnerie variable
  • Max 10 cloches peuvent être réglés
  • Filtres personnalisés Week-End
  • OFF mensuel / OFF hebdomadaire
  • Demi journée
  • Manipulation totale d'alimentation secteur: 1000W (240V 5A)
  • Connectez autant de cloches électroniques AC en forme parallèle
  • Built-in de sauvegarde alimentation de la batterie
  • Construit dans la mémoire permanente pour les timings de cloche
  • Auto Scan-mémoire au démarrage du système
Je l'habitude PIC18F4520 microcontrôleur comme le cerveau du système. RTC1307 IC est utilisé pour maintenir l'horloge, la date et le jour avec une batterie de tension de sauvegarde de 3V. Timings de Bell sont stockés dans la mémoire EEPROM interne du MCU.
photo_1_th

carte de développement à base d'un ATmega64

3D_rendering_2

Ce projet est une carte de développement pour Atmel ATmega64 microcontrôleur et peut être utilisé pour développer facilement personnalisé AVR firmware ou comme un conseil d'introduction aux microprocesseurs et à la programmation. Un conseil de développement est mieux d'être utilisé à la place d'une configuration de carte de test car elle facilite la connexion des différents composants en utilisant les en-têtes de PCB. Le projet a été conçu à l'époque où la carte Arduino était pas disponible dans la République tchèque et est équipé de différents modules.

Description

Les caractéristiques de cette carte sont:

  • Atmega64 - tous les ports disponibles par le biais des broches, un cristal différent peut être connecté (cristal de fréquence en option)
  • DS3231 RTC, en temps réel IC / I2C
  • Temp. DS1820 1Wire Temp. capteur
  • EEPROM 24AA00SN / I2C EEPROM
  • Port USB FT232RL USB / convertisseur RS232
  • Boutons 8x -16x LED
  • Connectez Ecran LCD 16 × 2
  • Affichage à 7 segments LED
  • Pour N-FET PWM
  • Connecteur de programmation ISP

mardi 1 septembre 2015

Contrôle de moteur pas à pas bipolaire à base d'un L297

Contrôle de moteur Pas à Pas bipolaire à L297+L298

Cette carte n'est pas particulièrement innovante. Elle est basée sur le classique couple L297+L298, que l'on peut trouver un peu partout. Même si leurs performances n'ont rien d'extraordinaire (2A maximum par phase, et il faut prévoir une bonne dissipation), ces composants ont le mérite d'être plus simples qu'un pont en H personnalisé créé à partir de Mosfets discrets. Il aurait aussi été possible d'utiliser un L6208, lequel a l'inconvénient de nécessiter une grande surface de circuit imprimé uniquement pour la dissipation.
En revanche, la réelle particularité de cette implémentation est l'utilisation d'optocoupleurs de manière à parfaitement protéger les circuits logiques situés en amont de toute remontée de parasites. Ainsi, il est possible de totalement séparer les alimentations (même les masses) sans altérer le fonctionnement du circuit.

Caractéristiques générales
  • Utilisable pour le contrôle d'un moteur bipolaire (4 ou 8 fils), jusqu'à 2A par phase
  • Régulation de courant par le chopper intégré au L297, de manière à maximiser le couple dans le moteur sans le détruire.
  • Alimentation en 24V
  • Connecteur 12V pour raccorder un ventilateur de PC, pour améliorer la circulation de l'air dans le dissipateur (optionnel, mais conseillé pour les forts courants).
  • Contrôle en half-step ou full-step au choix par un simple cavalier
  • Optoisolation galvanique de toutes les entrées.

AVR Microcontroller

Microcontroller: Microcontroller can be termed as a single on chip computer which includes number of peripherals like RAM, EEPROM, Timers etc., required to perform some predefined task.

Architecture of AVR MicrocontrollerArchitecture of AVR Microcontroller
Does this mean that the microcontroller is another name for a computer…? The answer is NO!
The computer on one hand is designed to perform all the general purpose tasks on a single machine like you can use a computer to run a software to perform calculations or you can use a computer to store some multimedia file or to access internet through the browser, whereas the microcontrollers are meant to perform only the specific tasks, for e.g., switching the AC off automatically when room temperature drops to a certain defined limit and again turning it ON when temperature rises above the defined limit.
There are number of popular families of microcontrollers which are used in different applications as per their capability and feasibility to perform the desired task, most common of these are 8051AVR and PIC microcontrollers. In this article we will introduce you with AVR family of microcontrollers.
History of AVR
AVR was developed in the year 1996 by Atmel Corporation. The architecture of AVR was developed by Alf-Egil Bogen and Vegard Wollan. AVR derives its name from its developers and stands for Alf-Egil Bogen Vegard Wollan RISC microcontroller, also known as Advanced Virtual RISC. The AT90S8515 was the first microcontroller which was based on AVR architecture however the first microcontroller to hit the commercial market was AT90S1200 in the year 1997.
AVR microcontrollers are available in three categories:
1.      TinyAVR – Less memory, small size, suitable only for simpler applications
2.      MegaAVR – These are the most popular ones having good amount of memory (upto 256 KB), higher number of inbuilt peripherals and suitable for moderate to complex applications.
3.      XmegaAVR – Used commercially for complex applications, which require large program memory and high speed.
The following table compares the above mentioned AVR series of microcontrollers:

Series Name
Pins
Flash Memory
Special Feature
TinyAVR
6-32
0.5-8 KB
Small in size
MegaAVR
28-100
4-256KB
Extended peripherals
XmegaAVR
44-100
16-384KB
DMA , Event System included

Le Système Arduino

Un module Arduino est une plaquette contenant un microprocesseur Atmel et des bornes d'entrées-sorties. 
C'est un matériel développé en open-source, donc en évolution permanente.

arduino sur le net


Ivrea est une ville du Piémont, au débouché du Val d'Aoste, sur la Doire Baltée, au pied du Parc du Gran-Paradiso et pas très loin du tunnel du Mont-Blanc. 
En 1002, le roi Arduino est détrône par Henri II d'Allemagne. A Ivrea un bar honore sa mémoire, le Bar Di Re Arduino. C'est dans ce bar que le projet Arduino a été créé en 2005 par Massimo Banzi, architecte logiciel et professeur associé à l'Interaction Design Institute Ivrea .
Au départ, c'était un simple projet destiné à ses étudiants. 
C'est maintenant un projet en Open Source : les données matérielles (schémas) et les logiciels sont disponibles. 

Début 2012, la plus complète est la Mega2560 qui propose 54 entrées/sorties. Elle vaut environ 40€en France et 15€ en Asie.

Mega 2560