Futura Sciences
Image de la rubrique en cours

Forum FS Generation

Précédent   Vous êtes ici : Forum FS Generation » Futura Technique » Électronique

Découvrir d'autres sujets sur ces thèmes : ,


Réponse
Vieux 06/07/2005, 10h27   Sujet Registre Intcon - Message #1
franck1
 
Date d'inscription: novembre 2003
Messages: 17
Registre Intcon
Bonjour,

Je veux réaliser un compteur qui me servira pour le calcul de distance d'un télémètre à ultrasons. J'utilise le timer0(parce que je n'ai pas le choix); le programme que je voudrais réaliser doit compter le nombre de fois qu'il y a eu interruptions. Pour cela, j'ai vu qu'il fallait voir lorsque le bit TOIF passe à 1 ou 0. Mon problème c'est que je n'arrive pas à faire un programme (en C) avec le compilateur ccs qui contrôle l'état de ce bit.

Pourriez-vous m'aider?
Merci.
franck1 est déconnecté   Réponse avec citation
Alt Aujourd'hui
Publicité

Beitrag Liens sponsorisés

   
Vieux 06/07/2005, 11h32   Sujet Registre Intcon - Message #2
romelec
 
Date d'inscription: avril 2003
Localisation: Entre Serre-Chevalier et Grenoble
Âge: 23
Messages: 435
Re : Registre Intcon
Salut franck, que souhaites-tu faire ?
-Compter le nombre d'interruptions T0 ou
-Compter le nombre de fronts descendants de T0IF ?

Je penche pour la 1° solution: tu crées un sous_prog d'interruption qui incrémente un compteur (variable globale)
Code:
int cpt=0; #int_TIMER0 TIMER0_isr() { cpt++; }
bien sur il faudra initialiser et penser à remettre ce compteur à 0 de temps en temps...
EDIT: et mettre le T0IF à 0 si c'est pas automatique
EDIT2: il y a la fonction bit_test() pour tester l'état d'un bit.

tout ceci a été fait en 30sec avec le project wizard de pcwh.
Bye.

Dernière modification par romelec 06/07/2005 à 11h35. Motif: oubli
romelec est déconnecté   Réponse avec citation
Vieux 06/07/2005, 12h15   Sujet Registre Intcon - Message #3
franck1
 
Date d'inscription: novembre 2003
Messages: 17
Re : Registre Intcon
Bonjour,

Justement, je dois pouvoir contrôler le bit TOIF et le remettre à 0 à chaque fois, 54 fois maximum. Car le télémètre ne mesure pas plus de 6 mètres. Si je comprends bien, comme il y a une interruption toutes les 6,55ms, je voudrais savoir combien de fois est-ce qu'il y a eu interruption (pas plus de 54) pour pouvoir ensuite calculer le distance.

Merci
franck1 est déconnecté   Réponse avec citation
Vieux 06/07/2005, 12h44   Sujet Registre Intcon - Message #4
T-Bot
 
Date d'inscription: juin 2005
Localisation: 67
Messages: 236
Re : Registre Intcon
romelec : Je suppose que en CSS la commande pour faire l'interruption est la suivante :
TIMER0_isr()

franck1 :
Je te propose la chose suivante. tu mets une LED+resistance1k sur une des pattes, et dans le main, tu fais allumer quand cpt >32 et quand cpt >64, tu fais éteindre...
Pour que TOIF monte à 1 il faut avoir positionné T0IE à 1. PEIE à 1 et GEIE à 1.
Pour que le timer0 se mette en route, il faut le configurer, mais ca dépends du pic : tu as quoi comme pic ? (lis le datasheet)
Ensuite quand T0IF monte, cela déclenche l'interruption. Dans cette interruption tu incrémentes ton compteur. (tu peux faire plus) : c'est le code fourni par romelec
Dans l'interruption, la première manipulation consiste à remettre T0IF à 0 (pas fait par romelec). Ceci permettra au pic de redéclancher une interruption au prochain tour de TIMER0.
T-Bot est déconnecté   Réponse avec citation
Vieux 06/07/2005, 12h57   Sujet Registre Intcon - Message #5
romelec
 
Date d'inscription: avril 2003
Localisation: Entre Serre-Chevalier et Grenoble
Âge: 23
Messages: 435
Re : Registre Intcon
Pour tester le valeur d'un bit il y a la fonction bit_test(), je te l'ai dit.
Mais l'interruption (il faut bien sur la valider) du timer0 est déclenchée par le front montant de T0IF. Donc dans la routine d'interruption tu as bien T0IF=1 (il faut le remettre à 0).

Pour la durée du comptage c'est toi qui la règle, en fonction du prédiviseur et de la valeur que tu mets dans le compteur.

Tu as lu les cours de bigonoff, quel pic utilises-tu?

Je me pose 2 questions: comment vas-tu relier les interruptions du timer avec la distance? comment est branché ton télémètre au pic?

EDIT: grilled.
la commande pour l'interruption Timer0 est #int_TIMER0
La fonction qui suit (qqsoit son nom) est la routine d'interruption correspondante.
romelec est déconnecté   Réponse avec citation
Vieux 06/07/2005, 13h54   Sujet Registre Intcon - Message #6
franck1
 
Date d'inscription: novembre 2003
Messages: 17
Re : Registre Intcon
Bonjour,

J'utilise le 18F458, pour pouvoir avoir une interruption toute les 6,55ms il faut : setup_timer_0(RTCC_INTERNAL|RT CC_DIV_128|RTCC_8_bit); c'est à dire mettre le timer0 sur 8 bits et avoir un prédiviseur de 128.

Pour faire correspondre le nombre de fois qu'il y a eu interruptions à la distance, je fais comme suis: comme je sais que pour parcourir les 6 mètres il faut 349ms (donc 54 fois le registre), pour parcourir 3 mètres il faudra la moitié du temps etc.

Pour générer mon signal de 40khz,il faut utiliser le timer2 en mode PWM, j'utilise la pin CCP1 du PIC. setup_ccp1(CCP_PWM). Pour avoir les 40khz il faut mettre: setup_timer_2(T2_DIV_BY_1,127, 1);

Pour générer le signal, je n'ai pas de problème.

Merci pour votre aide.
franck1 est déconnecté   Réponse avec citation
Vieux 06/07/2005, 14h10   Sujet Registre Intcon - Message #7
T-Bot
 
Date d'inscription: juin 2005
Localisation: 67
Messages: 236
Re : Registre Intcon
Ecrit en C18 pour 18F258 ca donne ceci : (pour 458 ce sera pareil)
voir fonction start_timer0();...
Citation:
#include <p18f258.h>
#include <timers.h>

far unsigned char timer0_loop;

void reset_timer0()
{
INTCONbits.T0IE=0;
INTCONbits.T0IF=0;
//T0CON=7; //prescaler à 256
//T0CON=4; //prescaler à 32
T0CON=3; //prescaler à 16
TMR0L=0;
TMR0H=0;
timer0_loop=0;
}

void start_timer0()
{
INTCONbits.T0IE=1;
INTCONbits.T0IF=0;
INTCONbits.GIE=1;
INTCONbits.PEIE=1;
T0CONbits.TMR0ON=1;
}

void stop_timer0()
{
INTCONbits.TMR0IE=0;
T0CONbits.TMR0ON=0;
}

T-Bot est déconnecté   Réponse avec citation
Vieux 09/07/2005, 13h55   Sujet Registre Intcon - Message #8
franck1
 
Date d'inscription: novembre 2003
Messages: 17
Re : Registre Intcon
Merci T-Bot.

@+
franck1 est déconnecté   Réponse avec citation
Bienvenue
Si ceci est votre première visite, vous devez vous inscrire avant de pouvoir envoyer des messages. En étant inscrit vous pourrez poster votre question, participer aux débats, joindre vos images... alors n'attendez-plus, cela vous prendra 1 minute !

Pour commencer à lire les messages, depuis la page d'accueil des forums, sélectionnez le forum qui vous tente et partez ensuite à sa découverte...

Publicité

A voir aussi
Problème registre (Forum Logiciel - Software - Open Source)
Base de registre (Forum Logiciel - Software - Open Source)
Base de registre (Forum Logiciel - Software - Open Source)
base de registre (Forum Logiciel - Software - Open Source)
registre d'enzyme (Forum Biologie)






A voir aussi (Futura Sciences n'est pas responsable du contenu de ces publicités)
Réponse



Outils
Modes d'affichage

Règles de messages
Vous pouvez ouvrir de nouvelles discussions : nonoui
Vous pouvez envoyer des réponses : nonoui
Vous pouvez insérer des pièces jointes : nonoui
Vous pouvez modifier vos messages : nonoui

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Navigation rapide


Les dernières actualités
05/09 16:12 - 2008 KV42, l'astéroïde qui tourne à l'envers
05/09 13:21 - Un thon robot pour l'armée américaine
05/09 11:37 - La Nasa envisage de prolonger la vie de ses navettes
05/09 09:34 - Flambée de fièvre Q aux Pays-Bas
04/09 17:30 - Bataille autour du sang de tyrannosaure
04/09 15:31 - Le réchauffement aurait déjà augmenté la puissance des cyclones
04/09 13:25 - Rosetta en approche finale de l'astéroïde Steins

Fuseau horaire GMT +2. Il est actuellement 08h47.

Propulsé par vBulletin
Copyright © 2000 - 2008, Jelsoft Enterprises Ltd. Tous droits réservés.
Traduction par l'association vBulletin francophone