Bienvenue aux nouveaux arrivants sur FantasPic !

- Pensez à lire les règles durant votre visite, il n'y en a pas beaucoup, mais encore faut-il les respecter .
- N’hésitez pas à faire des remarques et/ou suggestions sur le Forum, dans le but de l'améliorer et de rendre vos prochaines visites plus agréables.
- Vous pouvez regarder votre "panneau de l'utilisateur" afin de configurer vos préférences.
- Un passage par "l'utilisation du forum" est recommandé pour connaître les fonctionnalités du forum.

--- L’équipe FantasPic ---
Forum général sur le langage C !

Modérateur : Jérémy

Trier des données RS232 vers pic16F690?
Subzero64170
Avatar de l’utilisateur
Débutant
Débutant
Messages : 51
Âge : 37
Enregistré en : octobre 2015
Localisation : PAU

#1 Message par Subzero64170 » sam. 3 oct. 2015 13:48

Bonjour,
Petit descriptif du projet : A partir d'une application smartphone réalisée avec App inventor du MIT, je souhaite modifier l'heure de mon DS1307 (module calendrier) raccordé a mon pic 16f690. J'arrive a changer les heures mais à présent je voudrais faire la même chose pour les minutes et secondes.Le problème c'est que je ne sais pas comment mon pic va faire pour savoir par exemple que lorsqu'il reçoit "13" sur la broche RX du pic cela représente des heures et nom des minutes ou des secondes.Il faudrait pour cela que je puisse faire un trie, voir mettre un identifiant pour qu'il puisse faire la différence entre les heures, minutes et secondes.Lorsque j'appuie sur le bouton heure j'envoie l'heure, lorsque j'appuie sur le bouton minutes j'envoie les minutes etc.. comment mon pic peut t-il faire le trie avec tout ça?
DS1307_Prob.JPG
Est ce que quelqu'un à une petite idée?
Merci
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
“L'imagination est plus importante que le savoir.” A.Einstein

Trier des données RS232 vers pic16F690?
HULK28
Avatar de l’utilisateur
Amateur
Amateur
Messages : 106
Enregistré en : août 2015
Localisation : IdF

#2 Message par HULK28 » sam. 3 oct. 2015 14:49

Bonjour,

dans un DS1307 il y a un registre différent pour les heures, minutes, secondes.
Donc il faut que tu récupères l'ensemble de la trame Temps de ton smartphone que tu vas stocker dans un tableau par exemple, puis ensuite il faut que tu isoles chaque catégorie temporelle et que tu les stockes dans des variables dédiées: Vseconde, Vminute, Vheure.
Puis tu envoies en i2c la valeur à modifier dans ta DS1307 en appelant une fonction d'écriture heure/mn/sec qui va accéder aux bons registres pour chacun.
"Pour la carotte, le lapin est la parfaite incarnation du mal" -Robert Shecley-

Trier des données RS232 vers pic16F690?
Subzero64170
Avatar de l’utilisateur
Débutant
Débutant
Messages : 51
Âge : 37
Enregistré en : octobre 2015
Localisation : PAU

#3 Message par Subzero64170 » sam. 3 oct. 2015 19:47

Merci, j'essaye ca dans la semaine et vous tiens au courant.
“L'imagination est plus importante que le savoir.” A.Einstein

Trier des données RS232 vers pic16F690?
Jérémy
Administrateur du site
Administrateur du site
Messages : 2722
Âge : 44
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#4 Message par Jérémy » sam. 3 oct. 2015 19:54

Hello,

A l'issue et si tu finis ton projet , ce serait cool de faire une présentation avec photo et tout tout , si ca te dis , je pourrais t'aider !

ce sont des sujets qui intérresse pas mal de monde , autant la RTC DS1307 , que l'application pour smart-phone !
C'est en faisant des erreurs, que l'on apprend le mieux !!!

Trier des données RS232 vers pic16F690?
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 2589
Âge : 73
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#5 Message par paulfjujo » dim. 4 oct. 2015 16:16

bonjour,


j'ai fais une appli similaire (avec Appinventor 1 sur une tablette android archos43)
sur laquelle je peux remettre à jour ma RTC DS1302 ...(ce n'est pas un RTC DS1307 !)
mais le principe devrait etre le meme.
La liaison Bluetooth ... arrive sur mon UART1 RX en mode interrupt.

coté PIC

Code : Tout sélectionner





void set_datetime
(unsigned char day, unsigned char mth,
     unsigned char year, unsigned char dow,
      unsigned char hr, unsigned mini)
{
     write_ds1302(0x80,get_bcd(0));
     write_ds1302(0x82,get_bcd(mini));
     write_ds1302(0x84,get_bcd(hr));
     write_ds1302(0x86,get_bcd(day));
     write_ds1302(0x88,get_bcd(mth));
     write_ds1302(0x8A,get_bcd(dow));
     write_ds1302(0x8C,get_bcd(year));
 }

void MAJ_RTC()
{
  int l,m,dr;
  dr=0;
  if(INTCON.GIE==1)
  {
   dr=1;
   INTCON.GIE =;  // Anulation autorisation globale des IT
  }
  m=2;             // step d'avance dans le buffer
  j=0;
  PIE1.RCIE = 0;
  l=strlen(buff1);
  // from appli Appinventor  U;15;10;13;02;14;25#  + CR
  // from Vbray U;15;10;13;02;14;25#035#013
  // from TeraTerminal Broadcast :  U;15;10;13;02;14;25#<CR enter key>
  txt=&Texte[0];
  sprintf(txt,"Recu ordre <U>pdate RTC  L=%d  buff1=%s \r\n ",l,buff1);
  k=PutStr_RS2(txt);
  CRLF2();
  for (i=2;i<l;i++)
   {
     if(buff1[i]==';')
     {
        buff1[i]=0;
        DateTime[j]=atoi(buff1+m);
           // debugging
            sprintf(txt,"i=%2d   DateTime[%2d]= %02d\r\n ",i,j,DateTime[j]);
            k=PutStr_RS2(txt);
            CRLF2();
           /* Recu ordre <U>pdate RTC  L=20  buff1=U;23;01;15;04;14;58#
            i= 4   DateTime[ 0]= 23
            i= 7   DateTime[ 1]= 01
            i=10   DateTime[ 2]= 15
            i=13   DateTime[ 3]= 04
            i=16   DateTime[ 4]= 14
            */

        m=i+1;
        j++;
      }
    }// for i
   // ne pas oublier le dernier!
   //buff1[l-1]=0; // elimine # en fin de chaine
   buff1[19]=0; // elimine # en fin de chaine
   DateTime[j]=atoi(buff1+m);
   jour=DateTime[0];
   mois=DateTime[1];
   An=DateTime[2];
   dow=DateTime[3]; // jour de la semaine sur 1 seul digit
   heure=DateTime[4];
   mini=DateTime[5];
   // mise à jour effective RTC DS1302
   set_datetime( jour,mois,An,dow,heure,mini);
   RazIndex();
   if(dr==1)INTCON.GIE =;  // re-autorisation globale des IT
 }
    


et dans ma boucle principale du main()
je teste si mon buffer1 de reception UART1 contient une commande
terminée par un CR , qui arme mon drapeau DataReady1
je teste alors plusieurs cas , dont la Mise à jour RTC


Code : Tout sélectionner


 
    
//  Test si arrivé de car sur UART1 pendant la reception UART2 de  a trame EDF
    // sequence attendue  U;JJ;MM,AA,DD;HH;MN#   20 cars   (secondes forcees a 00)
    // macro sur touche vbray :
    // U;11;07;14;05;17;24#035#013
    // BroadCast sur Teraterminal :
    // U;11;07;14;05;17;24#   <avec Enter Key coché et CR>
    // si receptionde U au debut et # au 19em cars, on valide 
    if (( DataReady1 == 1)&& (buff1[0]=='U')&& (buff1[19]=='#'))
    {
       MAJ_RTC();
    }
   ... autre tests 
   


Est-tu passé sur Appinventor II ?
j'utilise aussi RFO Basic coté Android.. qui permet de gerer des APK en local
sans passer par google & Co.
Aide toi, le ciel ou FantasPic t'aidera

Trier des données RS232 vers pic16F690?
Subzero64170
Avatar de l’utilisateur
Débutant
Débutant
Messages : 51
Âge : 37
Enregistré en : octobre 2015
Localisation : PAU

#6 Message par Subzero64170 » dim. 4 oct. 2015 22:21

Salut,
Pour l'instant je suis novice j'ai decouvert app inventor il y a peu.Merci pour ton programme mais il y a beaucoup de choses que tu utilise que je ne sais pas encore faire.C'est ça d'ailleurs ce qui est frustrant quand on programme les pics, l'apprentissage est fastidieux, heureusement ca me fait bondir quand je parviens a faire un truc cool
“L'imagination est plus importante que le savoir.” A.Einstein

Trier des données RS232 vers pic16F690?
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 2589
Âge : 73
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#7 Message par paulfjujo » lun. 5 oct. 2015 10:42

bonjour,

post ton code pour savoir ou tu en es ...

sur le dessin du post #1.. on voit une liaison filaire Phone -> PIC
mais je suppose que tu utilises bluetooth ?
Peux-tu aussi mettre un lien sur ton appli Inventor
pour dialoguer il faut bien intervenir des 2 cotes.

Le point de départ est de receptionner ,cote UART PIC, les donnees en mode interrupt et les stocker dans un buffer
pour pouvoir en analyser le contenu .
et agir en consequence ..

exemple Appinventor + PIC


j'ai decouvert app inventor


c'est bien Appinventor II ?
Aide toi, le ciel ou FantasPic t'aidera


Retourner vers « Langage C »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 47 invités