Répondre à la discussion
Affichage des résultats 1 à 8 sur 8

eeprom externe



  1. #1
    Mr pico

    Wink eeprom externe


    ------

    hello guys
    salut tout le monde je suis nouveau on prgrammtion de pic(désoulé pour mon mouvai francais)
    je travail avec un pîc 16f877 et je l'ai programmé avec le css pcw compiler IDE j'ai fais un programme mais quand je le compile un message d'erreur s'affiche"not enough ram" c-adire le ram et plein (j'ai compris qu'il n'ay plus d'espace d'autre variables)
    je veux travailler avec un eeprom externe mais je ne le sais pas
    est que il ya personne pouver m'aider comment implanter un programme pas des données dans un eeprom externe please guys help me i dont have much more time i need your help

    -----

  2. Publicité
  3. #2
    invite03481543

    Re : eeprom externe

    Salut,

    bravo pour l'effort en français.

    Peut-être que ton programme nécessiterai juste quelques retouches pour pouvoir entrer en flash sans utiliser l'E²PROM.
    Je suppose que la flash elle n'est pas pleine.

    As-tu des textes pour un afficheur LCD par exemple?
    Ce genre de variables peut-être stockées en Flash par l'usage d'une commande de type:

    const char *tab[]= "ecritre en flash";

    Le mieux serait de poster ton prog et nous te dirons si une solution est possible.
    @+

  4. #3
    Mr pico

    Re : eeprom externe

    merci pour vous et voila le programme si tu peux m'aider

  5. #4
    Mr pico

    Re : eeprom externe

    Code:
    #include "C:\RAPPORT PFE\pcf programme\clock.h"
    #include <LCD.C>
    #include<math.h>
    #use i2c (master,sda=pin_c1,scl=pin_c0)
    
    void main()
    {   
       int retval,s1,s2;
       int min,m1,m2;
       int hr,h1,h2;
       int day,d1,d2;
       int mon,mo1,mo2,month;
       int year;
       int i,p=10;
       int mv=0,data;
       int h3,h4,m3,m4;
       float bta,D,N,N1,N2,N3,t;
       float R,G,H,L,B;
       float Z ,U1,U2,U,VD,Vn,w;
       float fajer,dhuhur,aser,maghreb,icha;
       setup_adc_ports(NO_ANALOGS);
       setup_adc(ADC_OFF);
       setup_psp(PSP_DISABLED);
       setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
       setup_timer_1(T1_DISABLED);
       setup_timer_2(T2_DISABLED,0,1);
       lcd_init();
       while(1)
       {
       data=input_b();
    //*************************************- Menu -***********************************************
    if(data==0x01)
         {
            mv=mv+1;
            if(mv==4)
            {
              mv=1;
            }
            delay_ms(150);
    
         }
                          if(mv==1)
                      {
    
                      lcd_gotoxy(1,1);
                      lcd_putc("Reveil                  ");
    
     if (data==0x04 )
      {
       p=p+3;
      if(p>13)
      {
        p=10;
      }
    
     lcd_gotoxy((p-2),2);
     lcd_putc(" 00| ");
     delay_ms(200);
    
      }
    if(data==0x02 && p==10 )
    
     {
    
      h3=h3+1;
          if(h3==10 && h4<3)
           {
              h3=0;
              h4=h4+1;
           }
    
    
          if ((h4==2) && (h3>3))
           {
              h4=0;
              h3=0;
           }
           lcd_gotoxy((p-1),2);
          lcd_putc(h4+48);
          lcd_gotoxy((p ),2);
          lcd_putc(h3+48);
          delay_ms(200);
     }
     //******************************************************************************
     if(data==0x02 && p==13 )
    
     {
    
      m3=m3+1;
          if(m3==10 && m4<6)
           {
              m3=0;
              m4=m4+1;
           }
    
    
          if ((m4==5) && (m3>9))
           {
              m4=0;
              m3=0;
           }
           lcd_gotoxy((p-1),2);
          lcd_putc(m4+48);
          lcd_gotoxy((p ),2);
          lcd_putc(m3+48);
          delay_ms(200);
     }
    }
     //********************************************************************************
    
    if(mv==2)
    {
    //********************************************- programme pcf -***************************************
       i2c_start();
       i2c_write(0xa0);
       i2c_write(0x00);
       i2c_write(0x00);
       i2c_stop();
    strt:
     {
      //********************************- SECONDES -*****************************
       i2c_start();
       i2c_write(0xa0);
       i2c_write(0x02);
       i2c_start();
       i2c_write(0xa1);
       retval=i2c_read(0);
       i2c_stop();
    
       if(retval>9)
       { retval=retval-6; }
       if(retval>19)
       { retval=retval-6; }
       if(retval>29)
       { retval=retval-6; }
       if(retval>39)
       { retval=retval-6; }
       if(retval>49)
       { retval=retval-6; }
    
          s1=retval/10;
          s2=retval%10;
    
       lcd_gotoxy(1,1);
       lcd_putc("Time: ");
       lcd_gotoxy(13,1);
       lcd_putc(s1+48);
       lcd_gotoxy(14,1);
       lcd_putc(s2+48);
    
      //-********************************- MINUTES -*****************************
       i2c_start();
       i2c_write(0xa0);
       i2c_write(0x03);
       i2c_start();
       i2c_write(0xa1);
       min=i2c_read(0);
       i2c_stop();
    
       if(min>9)
       { min=min-6; }
       if(min>19)
       { min=min-6; }
       if(min>29)
       { min=min-6; }
       if(min>39)
       { min=min-6; }
       if(min>49)
       { min=min-6; }
    
          m1=min/10;
          m2=min%10;
    
       lcd_gotoxy(10,1);
       lcd_putc(m1+48);
       lcd_gotoxy(11,1);
       lcd_putc(m2+48);
       lcd_gotoxy(12,1);
       lcd_putc(":");
      //-********************************- HEURES -*****************************
       i2c_start();
       i2c_write(0xa0);
       i2c_write(0x04);
       i2c_start();
       i2c_write(0xa1);
       hr=i2c_read(0);
       i2c_stop();
    
       if(hr>9)
       { hr=hr-6; }
       if(hr>19)
       { hr=hr-6; }
    
          h1=hr/10;
          h2=hr%10;
    
       lcd_gotoxy(9,1);
       lcd_putc(":");
       lcd_gotoxy(7,1);
       lcd_putc(h1+48);
       lcd_gotoxy(8,1);
       lcd_putc(h2+48);
      //-*******************************-Date -********************************
       lcd_gotoxy(1,2);
       lcd_putc("Date: ");
      //-********************************- jours -*****************************
       i2c_start();
       i2c_write(0xa0);
       i2c_write(0x05);
       i2c_start();
       i2c_write(0xa1);
       day=i2c_read();
       day=day & 0x1f;
       i2c_stop();
    
       if(day>9)
       { day=day-6; }
       if(day>19)
       { day=day-6; }
       if(day>29)
       { day=day-6; }
       if(day>20)
       {d1==2;  }
    
       d1=day/10;
       d2=day%10;
    
       lcd_gotoxy(7,2);
       lcd_putc(d1+48);
       lcd_gotoxy(8,2);
       lcd_putc(d2+48);
      //-********************************- mois -******************************
       i2c_start();
       i2c_write(0xa0);
       i2c_write(0x06);
       i2c_start();
       i2c_write(0xa1);
       mon=i2c_read(0);
       i2c_stop();
       month=(mon & 0x1f);
       if(month>10)
       { month=month-6; }
    
       mo1=month/10;
       mo2=month%10;
    
       lcd_gotoxy(9,2);
       lcd_putc("/");
       lcd_gotoxy(10,2);
       lcd_putc(mo1+48);
       lcd_gotoxy(11,2);
       lcd_putc(mo2+48);
    //-*********- alarme de reveil-*********//
       if(h1==1 && h2==7 && m1==5 && m2==2)
       {
           output_b(0x08);
    
       }
    
    //-***********- calculate the day of the year -****************-//
     
            N1 = floor( (275 * month / 9));
    	N2 = floor((month + 9) / 12);
            N3 = (1 + floor((2008 - 4 * floor(2008 / 4) + 2) / 3));
    	N = ((N1 - (N2 * N3) ) + (day - 30));
    
       
       bta=(((2*(0.001))*N)/360);//year angle
    
       //-****-declinaison de soleil-**********-//
    
      	 D=((180/(0.001))*(0.006918-(0.399912*cos(bta))+(0.070257*sin(bta))-(0.006758*cos(2*bta))+(0.000907*sin(2*bta))-(0.002697*cos(3*bta))+(0.001480*sin(3*bta))));
      
      //-******equatiopn de temps en minutes -****-//
     
    	  T=(229.18*(0.000075+(0.001868*cos(bta))-(0.032077*sin(bta))-(0.014615*cos(2*bta))-(0.040849*sin(2*bta))));
       
     //-*******(R)=reference de longitude; (G)=degree de fajr et maghreb; (H)=altitude above sea -****-//
       R=15;
       G=18;
       H=25;
       L=34;
       B=8;
      
    	
     
     Z=(12+((R-L)/15)-(T/60));
    
      U1=(sin((-0.8333-0.0347*(H/abs(H))*(sqrt(abs(H)))*((0.001)/180))-sin(D*((0.001)/180))*sin(B*((0.001)/180))));
    
      U2=(cos(D*((0.001)/180))*cos(B*((0.001)/180)));
    
      U=((180/(15*(0.001)))*acos(U1/U2));
    
      Vd=((180/0.015)*acos((-(sin(19.5*(0.001/180)))-(sin(D*(0.001/180)))*(sin(B*(0.001/180))))/
      ((cos(D*(0.001/180)))*(cos(B*(0.001/180))))));
    
      Vn=((180/0.015)*acos((-(sin(17.5*(0.001/180)))-(sin(D*(0.001/180)))*(sin(B*(0.001/180))))/((cos(D*(0.001/180)))*(cos(B*(0.001/180))))));
    
      W=((180/0.015)*acos((sin(atan(1/(1+tan(abs(B-D)*(0.001/180)))))-sin(D*(0.001/180))*sin(B*(0.001/180)))/((cos(D*(0.001/180)))*(cos(B*(0.001/180))))));
    
      fajer=Z-Vd;
      dhuhur=Z;
      aser=Z+w;
      maghreb=Z+U;
      icha=Z+Vn;
     }
    
      delay_ms(200);
      goto strt;
      }
     }
    }
    je besoin de votre please et merci pour tout.
    j'attends votre reponse
    Dernière modification par HULK28 ; 27/12/2007 à 15h44. Motif: Ajout des balises "code"

  6. A voir en vidéo sur Futura
  7. #5
    Mr pico

    Re : eeprom externe

    salut HULK
    et voila le schéma de montage(sur l'isis professionnel 6.9.03) si tu le besoin
    a+

  8. #6
    invite03481543

    Re : eeprom externe

    C'est visiblement l'usage des float dans les calculs qui pose soucis, je vais regarder si on peut faire autrement.

    Pour le schéma il faudrait le poster en pièce jointe (trombonne dans la page d'édition de la réponse) et non pas comme tu l'as fait avec des balises, ton PC n'étant pas un serveur.
    @+

  9. Publicité
  10. #7
    invite03481543

    Re : eeprom externe

    Pour gagner un peu de place en mémoire RAM voici quelques pistes que tu peux exploiter:

    1/ Plutôt que d'écrire (2(0.001)*N)/360 (float=4 byte soit ici 7 byte sans compter N) tu peux faire N/180000 (long int-> 4 byte sans N)
    2/ 180/0.001 (5 byte)= 180*1000 (3 byte)
    3/0.006918 (4 byte)= 1/144= (2 byte) si approximation suffisante
    4/Placer tous les textes à afficher en mémoire flash

    exemple:
    lcd_putc("Reveil ")

    Si ton compilateur permet de passer un pointeur en argument:

    const char *texte = "Reveil ";
    lcd_putc(texte);

    sinon tu peux écrire une fonction intermédiaire qui réalise le passage de paramètre en RAM du style:

    void chaine_Const_Copie_en_ram(cons t char *source)

    {
    char *destination;
    char buffer[8]; // buffer contient la taille maximum du texte source + 1

    destination = buffer;
    while(*source)
    *destination++=*source++;
    *destination=0;
    lcd_putc(buffer);
    }
    Ainsi tu gagnes encore de l'espace mémoire en monopolisant uniquement des ressources lorsque cette fonction est appelée puisque seule "buffer" occupera une place en RAM lors de l'appel du texte.
    Quelques byte gagnés par-ci par-là devrait permettre de rentrer dans les 368 bytes dont dispose le 16F877.
    Tu as le principe à toi de jouer.
    Tiens nous au courant.

    @+

  11. #8
    Mr pico

    Re : eeprom externe

    merci HULK pour ton idees mais pour les caracteres je ne les besoins pas juste j'affiche les mots "reveil" au menu et "temp","date" seulement et pour le schéma j'ai pas pu l'envoyé mais elle est simple jusye connect un afficheur lcd au pic16f877 et trois boutons pousoires et 6 leds connecteés au port B est une pcf8583 connecter au port c scl=pin_c0,sda=pin_c1
    et merci de nouveau je vais essayer ton ideés maintenants
    @+

Discussions similaires

  1. disque dur externe v/s externe multimédia
    Par prof01 dans le forum Matériel - Hardware
    Réponses: 6
    Dernier message: 31/12/2007, 12h56
  2. Eeprom I²c
    Par Olfox dans le forum Électronique
    Réponses: 12
    Dernier message: 24/04/2007, 22h51
  3. Adapter une mémoire EEPROM externe à un PICBASIC 3B
    Par thomasalbert1993 dans le forum Électronique
    Réponses: 1
    Dernier message: 28/12/2006, 09h20
  4. lire et ecrire dans une eeprom externe par un pic en C
    Par spilz dans le forum Électronique
    Réponses: 47
    Dernier message: 26/08/2006, 22h52
  5. Eeprom
    Par sronin1 dans le forum Électronique
    Réponses: 2
    Dernier message: 24/05/2003, 18h22
Découvrez nos comparatifs produits sur l'informatique et les technologies.