Continue to Site

Welcome to EDAboard.com

Welcome to our site! EDAboard.com is an international Electronics Discussion Forum focused on EDA software, circuits, schematics, books, theory, papers, asic, pld, 8051, DSP, Network, RF, Analog Design, PCB, Service Manuals... and a whole lot more! To participate you need to register. Registration is free. Click here to register now.

Help in this montage ''anemometer based on PIC16F88''

Status
Not open for further replies.

youse2013

Newbie level 2
Newbie level 2
Joined
Apr 23, 2013
Messages
2
Helped
0
Reputation
0
Reaction score
0
Trophy points
1,281
Visit site
Activity points
1,380
This montage works on the program isis
But in real there is a problem see photo
DSC01985.jpgDSC01986.jpg

File. Rar
Where (isis-hex-c)
View attachment anemo_v1.zip

PHP:
#include "header_anemo.h"
unsigned long temps,v,vmax,tampon,tampon2,nb_timer,var_temps;
unsigned long var_2s,moyenne_1,tab_10[10],moyenne10,moyenne_av1,moyenne_av2,moyenne_av3;
char v0,v1,v2,v3,v4,i,a,tmr,valid_it,var_tampon,h,bit_h_lect,bit_l_lect;
char i_1Min,i_tab,tampon_s;
float temps_ms,fl_temp;
//******************************************************************
//Programme d'interruption
#pragma origin 4
interrupt ils(void){
        int_save_registers
        tmr=TMR0;
        TMR0=3;
        if(TMR0IF){
                TMR0IF=0;
                nb_timer++;
                var_2s++;
                if(nb_timer>TEMPS_MAX){
                        var_temps=TEMPS_MAX;
                        nb_timer=TEMPS_MAX;
                        if(valid_it==0){
                                valid_it=1;
                        }
                }
        
        }
        if(INT0IF){
                INT0IF=0;
                var_temps=nb_timer;
                var_tampon=tmr-2;
                nb_timer=0;
                valid_it=1;
                PORT_DEL=!PORT_DEL;
        }
        int_restore_registers
}
#pragma sharedAllocation
//******************************************************************



//******************************************************************
//Programme principal
void main(void){
        TRISA=0b00110000;
        ANSEL=0;
        PORT_DATA=0;
        TRISB=0b00000001;
        PORTB=0;
        OPTION_REG=0b11000001;                 //front montant sur RB0 et TMR0=TCycle*4
        init_lcd();                                        //Initialisation du LCD
        genere_car();                                //Genere les caractères
        clear();
        tempo_l();
        ecrire_donnee_horloge(105,0x90);        //Instruction de charge de la capa de sauvegarde
        if(BP_Horloge){                                //Activation de la fonction écriture de l'horloge si demandé
                ecrire_heure();
                clear();
                tempo_l();
        }
        // Lecture et affichage de l'heure
        affichage_heure(0x8F);
        
        //Affichage des caractère nécessaire
        curseur(0x80);
        affich_chaine("V=---.-Km/h",11);//"---.-Km/h"
        curseur(0xC0);
        affich_chiffre(210);
        for(h=0;h<10;h++){
                affich_chiffre(211);                //Barre des Bfts
        }
        affich_chiffre(212);
        affich_chaine("  0 Bft",7);
        curseur(0x94);
        affich_chaine("Moy=---.-Km/h",13);
        curseur(0xD4);
        affich_chaine("Max=---.-Km/h",13);
        for (a=0;a<255;a++){
                tempo_l();
        }
        for (a=0;a<255;a++){
                tempo_l();
        }

        //Initialisation des variables
        TMR0=0;
        var_2s=0;
        vmax=0;
        valid_it=1;
        nb_timer=TEMPS_MAX;
        var_temps=TEMPS_MAX;
        i_1Min=0;
        i_tab=0;
        moyenne_1=0;
        moyenne_av3=0;
        moyenne_av2=0;
        moyenne_av1=0;
        moyenne10=0;
        for(i=0;i<10;i++){
                tab_10[i]=0;
        }

        INTCON=0b10110000;// Validation des interruption, sur RB0 et TMR0
        for(;;){
                if(valid_it==1){
                        //Calcul de la vitesse        
                        temps_ms=(float)var_temps*0.2048; //Temps en ms
                        tampon_s=var_tampon-3;
                        fl_temp=tampon_s*0.00080314;// calcul des dixièmes de milliseconde
                        fl_temp+=temps_ms;
                        fl_temp=11309.8/fl_temp;
                        v=fl_temp;
                        affichage_vitesse(0x82,v);

                        if(v>=vmax){
                                vmax=v;
                                affichage_vitesse(0xD8,vmax);
                                affichage_heure(0xE3);
                        }

                        if(var_temps>=TEMPS_MAX) {        //Empeche le retour dans la boucle si V=0
                                valid_it=3;
                        }
                        else{                                        //Empeche le retour dans la boucle
                                valid_it=0;
                        }

                        echelle_bft(v);
                }// Fin du traitement d'interruption sur la vitesse.


                if(var_2s>9730){
                        PORT_2S=!PORT_2S;
                        var_2s=0;
                        moyenne_1+=v;                
                        i_1Min++;
                        if(i_1Min==30){
                                i_1Min=0;
                                moyenne_1/=30;
                                tab_10[i_tab]=moyenne_1;
                                moyenne_1=0;
                                if(i_tab==9){i_tab=0;}
                                else{i_tab++;}
                                tampon=0;
                                for(i=0;i<10;i++){
                                        tampon2=tab_10[i];
                                        tampon+=tampon2;
                                }
                                moyenne_av3=moyenne_av2;
                                moyenne_av2=moyenne_av1;
                                moyenne_av1=moyenne10;
                                moyenne10=tampon/10;
                                tampon_s=3;
                                if(moyenne_av2>moyenne_av3){
                                        tampon_s++;
                                }
                                else if(moyenne_av2<moyenne_av3){
                                        tampon_s--;
                                }
                                if(moyenne_av1>moyenne_av2){
                                        tampon_s++;
                                }
                                else if(moyenne_av1<moyenne_av2){
                                        tampon_s--;
                                }
                                if(moyenne10>moyenne_av1){
                                        tampon_s++;
                                        }
                                else if(moyenne10<moyenne_av1){
                                        tampon_s--;
                                }
                                curseur(0xA3);
                                if(tampon_s>4){
                                        affich_chiffre(208);
                                }
                                else if(tampon_s<2){
                                        affich_chiffre(209);
                                }
                                else{
                                        affich_chiffre(0x7E-48);
                                }
                                affichage_vitesse(0x98,moyenne10);
                                //Lecture de l'heure
                                affichage_heure(0x8F);
        
                        }//Moyenne sur 1min
                }//Fin moyenne
                if(BP_Gene){
                        vmax=0;
                        affichage_vitesse(0xD8,vmax);
                        curseur(0xE3);
                        affich_chaine("     ",5);
                }
        }// Fin for
}// Fin Main










// Temporisation courte 40µs
void tempo_c(void){
        for(i=0;i<20;i++);
}

//Tempo pour clignotement des heures et autres...
void tempo_longue(void){
        for(h=0;h<200;h++){
                tempo_l();
                tempo_l();
        }
}

// Temporisation longue 1.64 ms
void tempo_l(void){
        for(i=0;i<255;i++);
        for(i=0;i<255;i++);
        for(i=0;i<255;i++);
        for(i=0;i<255;i++);
}

// Impulsion E pour l'envoie de données 
void impuls(void){
        PORT_E=1;
        nop();
        nop();
        nop();
        PORT_E=0;
        tempo_c();
}

//Affiche une caîne de caractère
void affich_chaine(const char * chaine,char nb){
char count;
for(count=0;count<nb;count++)
        {
        char tempon;
        tempon=chaine[count];
        PORT_DATA=tempon>>4;
        impuls();
        PORT_DATA=chaine[count];
        impuls();
        }
}
//Affiche un chiffre
void affich_chiffre(char chiff){
chiff=chiff+48;
PORT_DATA=chiff>>4;
impuls();
PORT_DATA=chiff;
impuls();
}

//Efface l'écran        
void clear(void){
PORT_RS=0;
PORT_DATA=0;
impuls();
PORT_DATA=1;
impuls();
tempo_l();
PORT_RS=1;
curseur(0x80);
}


//Position le curseur dans la RAM/CG-RAM
void curseur(char place){
char temp;
temp=place;
PORT_RS=0;
PORT_DATA=place>>4;
impuls();
PORT_DATA=temp;
impuls();
PORT_RS=1;
}

//Initialisation du LCD
void init_lcd(void){
for(a=0;a<255;a++){//On attend que le LCD s'allume
        tempo_l();
        }
PORT_DATA=3;//mode 8 bits
impuls();

PORT_DATA=3;//mode 8 bits
impuls();

PORT_DATA=3;//mode 8 bits
impuls();

PORT_DATA=2;//mode 4 bits
impuls();

PORT_DATA=2;//mode 4 bits + 1 ligne + caractère 5*7
impuls();
PORT_DATA=8;
impuls();

PORT_DATA=0;//allumage affichage + cache curseur
impuls();
PORT_DATA=12;
impuls();

PORT_DATA=0;//le curseur bouge vers la droite
impuls();
PORT_DATA=4;
impuls();

PORT_DATA=0;//Incrémentation du curseur a chaque nouvelle donnée
impuls();
PORT_DATA=6;
impuls();

PORT_RS=1;//On passe en mode "données"
clear();
tempo_l();
}

//Affichage d'une vitesse "v_affiché"
void affichage_vitesse(unsigned position,unsigned long v_affich){
        curseur(position);
        v1=v_affich/1000;
        tampon=v_affich%1000;
        v2=tampon/100;
        tampon=v_affich%100;
        v3=tampon/10;
        v4=v_affich%10;
        if(v1==0){
                v1=112;
        }
        if(v2==0){
                v2=112;
        }
        affich_chiffre(v1);
        affich_chiffre(v2);
        affich_chiffre(v3);
        curseur(position+4);
        affich_chiffre(v4);
}

void ecrire_heure(void){
        unsigned heure_h,minute_h;
        unsigned adresse;
        curseur(0x80);
        affich_chaine("REGLAGE HORLOGE...",18);
        curseur(0xC0);
        affich_chaine("APPUYEZ POUR CHANGER",20);
        curseur(0x94);
        affich_chaine("LES MINUTES",11);
        curseur(0xD4);
        affich_chaine("00:00",5);
        while(!PORTA.5){
                curseur(0xD7);
                affich_chaine("  ",2);
                tempo_longue();
                curseur(0xD7);
                affich_chaine("00",2);
                tempo_longue();
        }
        minute_h=255;
        heure_h=255;
        while(PORTA.5){
                minute_h++;
                curseur(0xD7);
                affich_chiffre(minute_h/10);
                affich_chiffre(minute_h%10);
                if(minute_h==59){minute_h=0;}
                tempo_longue();        
        }
        curseur(0x94);
        affich_chaine("LES HEURES ",11);
        while(!PORTA.5){
                curseur(0xD4);
                affich_chaine("  ",2);
                tempo_longue();
                curseur(0xD4);
                affich_chaine("00",2);
                tempo_longue();
        }
        while(PORTA.5){
                heure_h++;
                curseur(0xD4);
                affich_chiffre(heure_h/10);
                affich_chiffre(heure_h%10);
                if(heure_h==24){heure_h=0;}
                tempo_longue();        
        }
        ecrire_donnee_horloge(0,0x80);                        //ecriture des secondes
        ecrire_donnee_horloge(minute_h,0x82);        //ecriture des minutes
        ecrire_donnee_horloge(heure_h,0x84);        //ecriture des heures
}//fin reglage_heure






void ecrire_donnee_horloge(unsigned data_h,unsigned adresse_ecriture)
{
        unsigned bit_h_ecr;
        unsigned bit_l_ecr;
        bit_h_ecr=data_h/10;        
        bit_l_ecr=data_h%10;
        data_h=bit_h_ecr;
        data_h<<=4;
        data_h=bit_l_ecr+data_h;
        TRISB.7=0;
        nop();
        PORTB.7=0;
        nop();
        PORTB.6=0;
        nop();
        PORTB.5=0;
        nop();
        nop();
        PORTB.5=1;
        for(i=0;i<8;i++){
                PORTB.6=0;
                PORTB.7=adresse_ecriture.0;
                nop();
                PORTB.6=1;
                adresse_ecriture=adresse_ecriture>>1;
        }
        for(i=0;i<8;i++){
                PORTB.6=0;
                PORTB.7=data_h.0;
                nop();
                PORTB.6=1;
                data_h=data_h>>1;
        }
        PORTB&=0b00011111; //Mise à zéro de Rb7 Rb6 Rb5
        
}
        
void lecture_donnee_horloge(char adresse_lecture)
{
        TRISB.7=0;
        PORTB.7=0;
        PORTB.6=0;
        PORTB.5=0;
        PORTB.5=1;
        for(i=0;i<8;i++){
                PORTB.6=0;
                PORTB.7=adresse_lecture.0;
                PORTB.6=1;
                adresse_lecture=adresse_lecture>>1;
        }
        TRISB.7=1;
        PORTB.6=0;
        tampon_s.7=PORTB.7;
        for(i=0;i<7;i++){
                PORTB.6=1;
                tampon_s>>=1;
                PORTB.6=0;
                tampon_s.7=PORTB.7;
        }
        bit_l_lect=0b00001111&tampon_s;
        bit_h_lect=0b01110000&tampon_s;
        bit_h_lect>>=4;
        bit_h_lect=bit_h_lect*10;
        tampon_s=bit_h_lect+bit_l_lect;
        TRISB.7=0;
        PORTB.7=0;
        PORTB.6=0;
        PORTB.5=0;
}

void affichage_heure(unsigned adresse){
        tampon_s=0;
        lecture_donnee_horloge(0x85);
        curseur(adresse);
        affich_chiffre(tampon_s/10);
        affich_chiffre(tampon_s%10);
        affich_chaine(":",1);
        lecture_donnee_horloge(0x83);
        affich_chiffre(tampon_s/10);
        affich_chiffre(tampon_s%10);
}


void genere_car(void)
{
        static const char car_1[] = {0x0,0xf,0x3,0x5,0x9,0x10,0x0,0x0};                        //fleche haut
        static const char car_2[] = {0x0,0x10,0x9,0x5,0x3,0xf,0x0,0x0};                        //fleche bas
        static const char car_3[] = {0x1f,0x10,0x10,0x10,0x10,0x10,0x1f,0x0};        //debut barre
        static const char car_4[] = {0x1f,0x0,0x0,0x0,0x0,0x0,0x1f,0x0};                //milleu barre
        static const char car_5[] = {0x1f,0x1,0x1,0x1,0x1,0x1,0x1f,0x0};                //fin barre
        static const char car_6[] = {0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x0};        //barre pleine
        unsigned i_car_a;
        PORT_RS=1;
        curseur(0x40);
        tempo_c();
        for (i_car_a=0;i_car_a<8;i_car_a++){
                affich_chiffre(car_1[i_car_a]-48);
        }
        for (i_car_a=0;i_car_a<8;i_car_a++){
                affich_chiffre(car_2[i_car_a]-48);
        }
        for (i_car_a=0;i_car_a<8;i_car_a++){
                affich_chiffre(car_3[i_car_a]-48);
        }
        for (i_car_a=0;i_car_a<8;i_car_a++){
                affich_chiffre(car_4[i_car_a]-48);
        }
        for (i_car_a=0;i_car_a<8;i_car_a++){
                affich_chiffre(car_5[i_car_a]-48);
        }
        for (i_car_a=0;i_car_a<8;i_car_a++){
                affich_chiffre(car_6[i_car_a]-48);
        }
}
#pragma codepage 1
void echelle_bft(unsigned long v_comp){
        unsigned bft;
        bft=0;
        curseur(0xC0);
        if(v_comp>10){
                affich_chiffre(213);
                bft=1;
        }
        else{
                affich_chiffre(210);
                bft+=0;
        }
        if(v_comp>60){
                affich_chiffre(213);
                bft++;
        }
        else{
                affich_chiffre(211);
        }
        if(v_comp>120){
                affich_chiffre(213);
                bft++;
        }
        else{
                affich_chiffre(211);
        }
        if(v_comp>200){
                affich_chiffre(213);
                bft++;
        }
        else{
                affich_chiffre(211);
        }
        if(v_comp>290){
                affich_chiffre(213);
                bft++;
        }
        else{
                affich_chiffre(211);
        }
        if(v_comp>390){
                affich_chiffre(213);
                bft++;
        }
        else{
                affich_chiffre(211);
        }
        if(v_comp>500){
                affich_chiffre(213);
                bft++;
        }
        else{
                affich_chiffre(211);
        }
        if(v_comp>620){
                affich_chiffre(213);
                bft++;
        }
        else{
                affich_chiffre(211);
        }
        if(v_comp>750){
                affich_chiffre(213);
                bft++;
        }
        else{
                affich_chiffre(211);
        }
        if(v_comp>890){
                affich_chiffre(213);
                bft++;
        }
        else{
                affich_chiffre(211);
        }
        if(v_comp>1030){
                affich_chiffre(213);
                bft++;
        }
        else{
                affich_chiffre(211);
        }
        if(v_comp>1180){
                affich_chiffre(213);
                bft++;
        }
        else{
                affich_chiffre(212);
        }
        
        curseur(0xCD);
        if(bft<10){
                affich_chiffre(112);
        }
        else{
                affich_chiffre(bft/10);
        }
        affich_chiffre(bft%10);
}
 
Last edited:

Status
Not open for further replies.

Similar threads

Part and Inventory Search

Welcome to EDABoard.com

Sponsor

Back
Top