Horloge à Pic : Porgrammer un niveau "1" à une date et heure précise
Répondre à la discussion
Affichage des résultats 1 à 9 sur 9

Horloge à Pic : Porgrammer un niveau "1" à une date et heure précise



  1. #1
    lcoulon

    Horloge à Pic : Porgrammer un niveau "1" à une date et heure précise


    ------

    Bonjour,

    Sauriez vous ou je pourrais trouver un montage à base Pic qui me permettrait de faire commander l'état d'une ou des sorties d'un PIC a une date et heure précise ?

    Les dates et heures des événements seraient directement programmés grace au soft programmé en C ou assembleur.

    Je vous remercie de votre aide,

    -----

  2. #2
    DAUDET78

    Re : Horloge à Pic : Porgrammer un niveau "1" à une date et heure précise

    Citation Envoyé par lcoulon Voir le message
    Sauriez vous ou je pourrais trouver un montage à base Pic qui me permettrait de faire commander l'état d'une ou des sorties d'un PIC a une date et heure précise ?
    Ca , c'est vachement simple à faire! Tu prends une sortie du PIC et tu commandes l'action à faire. Ce qui n'est pas simple, c'est le programme . Il te le faut emballé avec un ruban rose ou bleu ?
    J'aime pas le Grec

  3. #3
    lcoulon

    Re : Horloge à Pic : Porgrammer un niveau "1" à une date et heure précise

    Justement, n'étant pas capable de l'écrire moi meme, c'est pour cela que je demande si il n'existerai pas un exemple déja réalisé que je pourrai utiliser et modifier pour l'adapter à mon besoin ...

  4. #4
    invite2ff5531f

    Re : Horloge à Pic : Porgrammer un niveau "1" à une date et heure précise

    Bonjour,

    Au vu des messages précédemment posté, on peut penser que vous n'avez, comme moi, pas de grandes compétences en C et en assembleur....

    Aussi je vous suggère, comme moi, de vous tourner vers le Basic, que nous avons plus de chances de maîtrise que des langages plus complexes.

    Faites un petit tour à cette adresse et vous trouverez un compilateur basic - assembleur simulateur pour pic qui est un petit bijou :
    http://www.oshonsoft.com/pic.html

    Il y a un chapitre pour démarrer:
    http://www.oshonsoft.com/picgetstarted.html

    Et en prime vous avez des exemples très proches de ce que vous désirez faire et que vous pouvez facilement combiener entre eux pour réaliser des vrais miracles:
    http://www.oshonsoft.com/picexamples.html

    Il y a une version d'essai de ce produit disponible en téléchargement, et si vous vous décidez à l'acheter il ne coûte que 29 Euros...

    Cordialement

  5. A voir en vidéo sur Futura
  6. #5
    invite43cc251c

    Re : Horloge à Pic : Porgrammer un niveau "1" à une date et heure précise

    Citation Envoyé par lcoulon Voir le message
    Justement, n'étant pas capable de l'écrire moi meme, c'est pour cela que je demande si il n'existerai pas un exemple déja réalisé que je pourrai utiliser et modifier pour l'adapter à mon besoin ...
    Salut, je te conseillerai d'utiliser une RTC (ex PCF8583 ) qui fonctionnera en I2C avec ton PIC. ce petit joujou dispose d'un calendrier interne il suffit d'envoyer une requête I2C pour connaître la date et le jour, tu pourras comparer ces valeurs à celles de ton PIC pour amorcer ton relais.Je l'ai fait et je te rassure que ça marche plutôt bien.
    a++

  7. #6
    lcoulon

    Re : Horloge à Pic : Porgrammer un niveau "1" à une date et heure précise

    oui mais en prog, je suis débutant voir "nul"

    Aurais tu un example de code avec un bout de schema à me proposer ?

    Merci bien,

  8. #7
    invite43cc251c

    Re : Horloge à Pic : Porgrammer un niveau "1" à une date et heure précise

    Citation Envoyé par lcoulon Voir le message
    oui mais en prog, je suis débutant voir "nul"

    Aurais tu un example de code avec un bout de schema à me proposer ?

    Merci bien,
    Voici un code fait en C pour DSPIC avec afficheur GLCD, tu devras faire un tri juste pour conserver la partie lecture de la RTC .Mais, si tu ne comprends rien C, je te conseille de t'initier d'abord.

    Ce programme permet d'ouvrir les volets en fonction de la date et heure ou la température que rentre l'utilisateur .

    voici le code:

    /*
    * Project name: Marcel_travail
    */
    void ReprogrammationRTC (void);
    void MainInit (void);
    void ReadTime(void);
    void Display_Time(void);
    void ReadDisplayTemp (void);


    struct TTime {
    char year, month, day, hours, minutes, seconds;
    } TimeToWrite,TimeRead;
    char yearmod4, byteRead;
    char txt[11];

    void ReadDisplayTemp (void) {
    unsigned temp, savetemp ;
    unsigned short j;

    ow_reset(&PORTE,2); // Onewire reset signal
    OW_Write(&PORTE,2,0xCC); // Issue command SKIP_ROM
    OW_Write(&PORTE,2,0x44); // Issue command CONVERT_T
    Delay_us(120);

    OW_Reset(&PORTE,2);
    OW_Write(&PORTE,2,0xCC); // Issue command SKIP_ROM
    OW_Write(&PORTE,2,0xBE); // Issue command READ_SCRATCHPAD
    Delay_ms(400);

    j = OW_Read(&PORTE,2); // Get temperature LSB
    temp = OW_Read(&PORTE,2); // Get temperature MSB
    temp <<= 8; temp += j; // Form the result

    savetemp=temp;
    txt[0]=temp=temp/20+48 ;
    temp=savetemp;
    txt[1]=Temp=(temp%20)/2+48;
    txt[2]=',';
    temp=savetemp;
    txt[3]=Temp=(((temp%20)%2)*10/2)+48;
    txt[4]=' ' ;
    txt[5]='(' ;
    txt[6]='c';
    txt[7]=')';
    txt[8]=0;
    // InttoStr(UniteTemp,text2);
    Glcd_Write_Text(txt,50,5,1); // affiche menu sur la ligne 0 et décalé de 15
    Delay_ms(500);
    }


    void MainInit (void) {
    Glcd_Init(&PORTB, 0,1,2,3,5,4, &PORTD); // Initialisation du GLCD
    Glcd_Set_Font(FontSystem5x8,5, 8,32);
    Glcd_fill(0);
    Glcd_Write_Text("DATE :",5,1,1); // affiche menu sur la ligne 0 et décalé de 15
    Glcd_Write_Text("TIME :",5,3,1); // affiche menu sur la ligne 0 et décalé de 15
    Glcd_Write_Text("Temp :",5,5,1); // affiche menu sur la ligne 0 et décalé de 15

    Glcd_H_Line(0,127,18,2);
    Glcd_H_Line(0,127,35,2);
    Glcd_H_Line(0,127,50,2);
    I2C_Init(100000); // initialize I2C
    }

    void Display_Time(void){

    // output values to LCD display
    txt[0] = (TimeRead.day / 10) + 48;
    txt[1] = (TimeRead.day % 10) + 48;
    txt[2] = '/';
    txt[3] = (TimeRead.month / 10) + 48;
    txt[4] = (TimeRead.month % 10) + 48;
    txt[5] = '/';
    txt[6] = '2';
    txt[7] = (TimeRead.year / 100) + 48;
    txt[8] = ((TimeRead.year % 100) / 10) + 48;
    txt[9] = (TimeRead.year % 10) + 48;
    txt[10] = 0; // null to terminate the string
    Glcd_Write_Text(txt,50,1,1);

    txt[0] = (TimeRead.hours / 10) + 48;
    txt[1] = (TimeRead.hours % 10) + 48;
    txt[2] = ':';
    txt[3] = (TimeRead.minutes / 10) + 48;
    txt[4] = (TimeRead.minutes % 10) + 48;
    txt[5] = ':';
    txt[6] = (TimeRead.seconds / 10) + 48;
    txt[7] = (TimeRead.seconds % 10) + 48;
    txt[8] = 0; // null to terminate the string
    Glcd_Write_Text(txt,50,3,1);
    }


    void ReadTime(void) {
    char updateYear;

    updateYear = 0;

    I2C_Start(); // issue start signal
    I2C_Wr(0xA0); // address PCF8583
    I2C_Wr(2); // first word address
    I2C_Repeated_Start(); // issue repeated start signal
    I2C_Wr(0xA1); // address PCF8583 for reading R/W=1

    byteRead = I2C_Rd(1); // read seconds byte
    TimeRead.seconds = (byteRead >> 4)*10 + (byteRead & 0x0F); // transform seconds
    while (I2C_Is_Idle() = 0) // this lines are not neccessary in new versions
    asm nop; // starting from mikroC 6.0.0.1

    byteRead = I2C_Rd(1); // read minutes byte
    TimeRead.minutes = (byteRead >> 4)*10 + (byteRead & 0x0F); // transform minutes
    while (I2C_Is_Idle() = 0)
    asm nop;

    byteRead = I2C_Rd(1); // read hours byte
    TimeRead.hours = (byteRead >> 4)*10 + (byteRead & 0x0F); // transform hours
    while (I2C_Is_Idle() = 0)
    asm nop;

    byteRead = I2C_Rd(1); // read year/day byte
    TimeRead.day = ((byteRead & 0b00110000) >> 4)*10 + (byteRead & 0x0F); // transform day
    yearmod4 = (byteRead & 0b11000000) >> 6; // get year mod 4 from RTC
    while (I2C_Is_Idle() = 0)
    asm nop;

    byteRead = I2C_Rd(0); // read weekday/month byte
    TimeRead.month = ((byteRead & 0b00010000) >> 4)*10 + (byteRead & 0x0F); // transform month
    while (I2C_Is_Idle() = 0)
    asm nop;
    I2C_Stop();

    I2C_Start(); // issue start signal
    I2C_Wr(0xA0); // address PCF8583
    I2C_Wr(0x10); // first word address
    I2C_Repeated_Start(); // issue repeated start signal
    I2C_Wr(0xA1); // address PCF8583 for reading R/W=1

    byteRead = I2C_Rd(0); // read year
    if (yearmod4 != byteRead % 4 ) { // check if year is incremented in RTC
    byteRead++; // in this case the new value should be written to RTC RAM at address 16(0x10)
    updateYear = 1;
    }
    TimeRead.year = byteRead;

    while (I2C_Is_Idle() = 0)
    asm nop;
    I2C_Stop();

    if (updateYear > 0) {
    I2C_Start(); // issue start signal
    I2C_Wr(0xA0); // address PCF8530
    I2C_Wr(0x10); // start from word at address 16
    I2C_Wr(TimeRead.year); // write year to RAM
    I2C_Stop(); // issue stop signal
    }
    }


    void ReprogrammationRTC (void) {

    TimeToWrite.year = 8; // 2007 (offset from 2000)
    TimeToWrite.month = 05;
    TimeToWrite.day = 07;
    TimeToWrite.hours = 19;
    TimeToWrite.minutes = 33;
    TimeToWrite.seconds = 20;

    I2C_Init(10000); // initialize full master mode
    I2C_Start(); // issue start signal
    I2C_Wr(0xA0); // address PCF8583
    I2C_Wr(0); // start from word at address 0 (configuration word)
    I2C_Wr(0x80); // write 0x80 to config. (pause counter...)
    I2C_Wr(0); // write 0 to cents word
    I2C_Wr(((TimeToWrite.seconds/10)<<4) + (TimeToWrite.seconds%10)); // write seconds word
    I2C_Wr(((TimeToWrite.minutes/10)<<4) + (TimeToWrite.minutes%10)); // write minutes word
    I2C_Wr(((TimeToWrite.hours/10)<<4) + (TimeToWrite.hours%10)); // write hours word
    I2C_Wr(((TimeToWrite.year%4)<< 6) + ((TimeToWrite.day/10)<<4) +(TimeToWrite.day%10));
    I2C_Wr(((TimeToWrite.month/10)<<4) + (TimeToWrite.month%10)); // write weekday/month
    I2C_Stop(); // issue stop signal

    I2C_Start(); // issue start signal
    I2C_Wr(0xA0); // address PCF8530
    I2C_Wr(0x10); // start from word at address 16
    I2C_Wr(TimeToWrite.year); // write year to RAM
    I2C_Stop(); // issue stop signal

    I2C_Start(); // issue start signal
    I2C_Wr(0xA0); // address PCF8530
    I2C_Wr(0); // start from word at address 0
    I2C_Wr(0); // write 0 to config word (enable counting)
    I2C_Stop(); // issue stop signal
    }

    void main() {
    ADCON1 = 0xFF; // Configure RA5 pin as digital I/O
    PORTE = 0xFF;
    TRISE = 0x0F; // PORTE is input
    PORTB = 0;
    TRISB = 0; // PORTB is output
    PORTC = 0;
    TRISC = 0; // PORTB is output
    PORTD = 0;
    TRISD = 0; // PORTB is output

    MainInit();

    while(1) {
    ReadTime();
    // Glcd_Write_Text("Press ok to config ",5,7,1); // affiche menu sur la ligne 0 et décalé de 15
    //Glcd_Write_Text("Time ",3,5,1); // affiche menu sur la ligne 0 et décalé de 15
    Display_Time();
    ReadDisplayTemp();
    // delay_ms(400);
    // Glcd_Write_Text(" ",1,5,1); // affiche menu sur la ligne 0 et décalé de 15
    //Glcd_Write_Text(". .",5,7,1); // affiche menu sur la ligne 0 et décalé de 15

    }
    }

  9. #8
    lcoulon

    Re : Horloge à Pic : Porgrammer un niveau "1" à une date et heure précise

    Ton projet semble parfaitement correspondre à ce que je veux faire ( piloter des volets )

    Serais tu d'accord pour poste l'intégralité du programme et son schéma structurel ?

    Je te remercie,

  10. #9
    invite43cc251c

    Re : Horloge à Pic : Porgrammer un niveau "1" à une date et heure précise

    Citation Envoyé par lcoulon Voir le message
    Ton projet semble parfaitement correspondre à ce que je veux faire ( piloter des volets )

    Serais tu d'accord pour poste l'intégralité du programme et son schéma structurel ?

    Je te remercie,
    Voici le schéma, mais il faudra revoir le code et extraire la partie capteur et afficheur LCD
    Images attachées Images attachées  

Discussions similaires

  1. La science du "Comment?" peut-elle dire "POURQUOI?" au moins une fois?
    Par invite33b26c8f dans le forum Epistémologie et Logique (archives)
    Réponses: 83
    Dernier message: 12/07/2017, 22h12
  2. [Microbiologie] Comment obtenir une concentration bactérienne "précise" à partir d'une culture pure?
    Par invite06a8039b dans le forum Biologie
    Réponses: 3
    Dernier message: 22/04/2008, 01h26
  3. "oui mais" : dernière date ?
    Par invite427a2582 dans le forum Orientation après le BAC
    Réponses: 6
    Dernier message: 06/06/2007, 13h19
  4. Une "couleur", "race" unique dans 50 000 ans?
    Par invite287f4e7c dans le forum Biologie
    Réponses: 1
    Dernier message: 13/12/2006, 10h26
Découvrez nos comparatifs produits sur l'informatique et les technologies.