une thermistance ctn peut descendre jusqu'a combien de degré ?
Sinon il me reste pas mal d'entrer analogique numerique ^^
-----
une thermistance ctn peut descendre jusqu'a combien de degré ?
Sinon il me reste pas mal d'entrer analogique numerique ^^
Nan parce que etant pour une voiture, le petit matin d'hiver, la temperature risque d'etre negative c'est pour ca ^^
Enfaite je sais pas trop comment m'en sortir avec une thermistance, je n'ai aucune experience la dedan :/
re,
moi je préfère les sondes de températures numériques...
exemples avé la DS18B20 (-55/+127°C) :
http://vede.free.fr/electronique/ds18b20/
et dispo gratos en "samples" auprès de son constructeur...
et qui ne nécessite qu'une "simple" IO numérique...
Rebonsoir a tous !
Je suis sur la partie programmation la,et j'ai un petit probleme visiblement.
J'ai donc pris un pic16f88
Frequence de 20MHz
pour le comptage, j'ai utiliser donc une interuption timer0. J'ai mis un prediviseur de tension me permetant d'obtenir une frequence d'interuption de 75 Hz. J'ai associer a cette interuption une macro qui m'incrémente de 1 a chaque fois une variable (nommé compt_int ).
J'ai donc une chaine de test me permettant a chaque fois qu'on arrive a une limite d'incrementer la suite de 1( par exemple, quand compt_int arrive a 75, on increment les seconde, et ainsi de suite)
Bref, lorsque je lance la simu (flowcode v4) les seconde ne sont pas du tout des vrai seconde, elles sont plus lente, mais bon, je ne vois qu'une solution, c'est que c'est de la simu, parce que j'ai fait du pas par pas pour la simu apres, et il semple que l'incrementation se fait a intervalle regulier au meme endroit, enfin meme si c'est un frequence fixe, etc, c'est bizare, une explication peut etre ?
re ;O]
tu te compliques la vie... comme moi pendant des ANnées...
(fait une recherche ici avec "vede timer" pour voir le boulot...)...
moi, maintenant (et encore merci pour vos zavis zavisés RISC, Gerard...),
je ferais comme ça :
-Utilisation de l'horloge interne (pas de Quartz 20Mhz) pour le programme
(car pas besoin de "haute précision temporelle" pour un afficheur LCD, des BP, sondes, ADC...)
infos+ : http://pagesperso-orange.fr/fabrice....ne%2016F88.htm
-Utilisation du Timer1 et son interruption pour le "comptage précis du temps"
avec un Quartz 32768Hz sur l'entrée "compteur" du Timer1 (RB6-7) pour
générer une interruption par seconde...
infos+ (pseudo code qui inverse l'état de leds sur le PortA chaque seconde):
Code:' le code de l'int TMR1 sub procedure interrupt TMR1H = 127 PortA = not PortA ' inverse etat leds PIR1.TMR1IF = 0 ' efface flag end sub main: ' init. le PIC ANSEL = %00000000 ' ADC OFF sur un 16F88 TrisA = %00000000 ' outs TrisB = %11000000 ' B6-7 = quartz 32768Hz T1CON = %00001111 ' paramétre TMR1 en compteur, prescaler 1... INTCON = %11000000 ' activation interruptions sur peripheriques PIE1 = %00000001 ' activation de l'interruption du TMR1 ' Le programme principal qui ne fait rien... while true wend end.
ps :
après n'éspére aucune précision "réelle' de la simu...
et même n'éspére rien de la simu... en gros...
et ni en ajoutant un "compteur" sur le TMR0...
à moins d'avoir un fréquencemètre pour pouvoir "étalonner" ta valeur (75Hz?)...
voir tous mes posts (vede timer) à ce sujet...
ah ouai mais la ca me parait beaucoup plus compliqué ce que tu vien de me donner x]
Donc il faut que j'utiliser pour le composant l'horloge interne, et que je branche une horloge (un quartz et de condo) sur rb6 et 7, qui sont osi et oso, donc je suppose entré et sortie de l'horloge ^^. De cette facon j'ai une horloge beaucoup plus precise, Le probleme est que sous flowcode, il me met directement 20 MHz --" Je sais pas si il y a une solution pour remedier a ca ; je vais aller voire
re ;O]
nan tu peux faire comme ça ...
mais sans "étalonnage" attends toi à une "dérive" de plusieurs minutes/jour...
dans FlowCode, tu vas dans le menu "Puce" en haut...
delà tu vas dans "Avancé", et au lieu de Oscillator = HS (quartz 20Mhz)
tu choisis "INTRC_IO"...
et après, juste après (début), tu configures la fréquence avec OSCCON,
on vient d'en parler là : http://forums.futura-sciences.com/el...-16f877-2.html
(pour 2550 mais similaire)
Ouai, c'est ce que je pensai, il ne faut pas compter sur la simu
ps : on peut changer la vitesse de l'horloge sur flowcode
rere ;O]
oui, regarde le fil pré-cité...
http://forums.futura-sciences.com/el...-16f877-2.html
ya un exemple...
Re !
Et donc tout cela permet de configurer la frequence que l'on souhaite ?
merci de ton aide en tout cas ^^
rerere ;O]
non pas exactement... c'est "fixé"... 8Mhz... 4Mhz... 2Mhz...
regarde cette page où c'est détaillé :
http://pagesperso-orange.fr/fabrice....ne%2016F88.htm
et la datasheet du 88 ;O]
Re !
Le souci visiblement, que tu trouve toi (si c'est ta page x] ) est le manque de precision, il faudrai la solution avec laquelle on a un oscillateur le plus precis possible pour avoir le moin de perte ^^
Je pencherai justement pour l'oscillateur externe de 32 KHz, qu'en pense tu ?
re
Si on devai mettre une horloge principale, il vaudrai mieu une 20 MHz sur ra6 et 7 non ? ^^
Simple curiosité, les condensateur de 22pF c'est bien ?
ps :
je te récapitules :
-l'horloge interne (pas précise) pour éxécuter le programme (gestion LCD, ADCs, BPs...)
-un quartz 32Khz pour l'horloge, via in int Timer1...
-oui mais...
mais ça prend 2 ports (et achats Q, C) alors que le programme n'a théoriquement pas besoin de précision temporelle... juste l'horloge...
oui, 22pf ça passe toujours...
ps : je m'apelle vede ;O] pas Fabrice Sincére que je salue bien bas ;O]
Yep, j'ai tout compris, c'est bon ^^
Plus qu'a rajouter des fonction externe, et de monter ca ^^
De toute facon je ferai un recapitulatif de tout (shema + code)
Bonne fin de soirer
Ciao
Yep,
comme c'était dans mes cartons je n'ai pas pu
m'empêcher de faire un premier schéma et programme,
qui fonctionnent (testé "en vrai", c'est câblé sur
une platine d'essais (car pas de simu ici...)...)...
pour écrire le programme j'ai téléchargé gratuitement
la dernière version de MikroC PRO(V3.8) sur le site MikroE...
il y a 2 BPs (pour le réglage des heures et minutes)...
et il reste 6 ports libres (RA5,6,7 et RB0,4,5)...
le code : http://vede.free.fr/electronique/lcd...cd88_v000.html
le schéma : http://vede.free.fr/electronique/lcd...lcd88_v000.gif
le hex : http://vede.free.fr/electronique/lcd...lcd88_v000.hex
n'hésitez pas si questions,
vede
;O]
____________
...
ps : j'ai pas branché le rétro-éclairage...
re-ps : aperçu du code :
...Code:// LCD module connections sbit LCD_RS at RA2_bit; sbit LCD_EN at RA3_bit; sbit LCD_D4 at RA4_bit; sbit LCD_D5 at RB1_bit; sbit LCD_D6 at RB2_bit; sbit LCD_D7 at RB3_bit; sbit LCD_RS_Direction at TRISA2_bit; sbit LCD_EN_Direction at TRISA3_bit; sbit LCD_D4_Direction at TRISA4_bit; sbit LCD_D5_Direction at TRISB1_bit; sbit LCD_D6_Direction at TRISB2_bit; sbit LCD_D7_Direction at TRISB3_bit; // End LCD module connections sbit BPH at RA0_bit; sbit BPM at RA1_bit; short FlagA = 1; short heures = 11; short minutes = 58; short secondes = 51; char texte[9] = "11:58:51"; void interrupt() // interruption Timer1 { TMR1H = 128; secondes++; if (secondes > 59) { secondes = 0; minutes++; if (minutes > 59) { minutes = 0; heures++; if (heures > 23) heures = 0; texte[0] = (heures / 10) + 48; // encodages ASCII texte[1] = (heures % 10) + 48; // pour affichages } texte[3] = (minutes / 10) + 48; texte[4] = (minutes % 10) + 48; } texte[6] = (secondes / 10) + 48; texte[7] = (secondes % 10) + 48; FlagA = 1; PIR1.TMR1IF = 0; } void main() { // Initialize le PIC OSCCON = 0b1110000; // _INTRC_IO FOsc = 8MHZ ANSEL = 0b00000000; // ADC OFF TrisA = 0b00000011; // 2 BPs TrisB = 0b11000000; // Q 32Khz Lcd_Init(); // Initialize le LCD Lcd_Cmd(_LCD_CLEAR); // Clear display Lcd_Cmd(_LCD_CURSOR_OFF); // Cursor off T1CON = 0b00001111; // Initialize le Timer1 INTCON = 0b11000000; // et son interruption PIE1 = 0b00000001; // ... TMR1H = 128; // ... while(1) { // ... if (FlagA == 1) // MAJ LCD { Lcd_Out(1,5,texte); FlagA = 0; } if (BPH == 1) // BP + heures { TMR1H = 128; secondes = 0; heures++; if (heures > 23) heures = 0; texte[0] = (heures / 10) + 48; texte[1] = (heures % 10) + 48; texte[6] = 48; texte[7] = 48; Delay_ms(99); FlagA = 1; } if (BPM == 1) // BP + minutes { TMR1H = 128; secondes = 0; minutes++; if (minutes > 59) minutes = 0; texte[3] = (minutes / 10) + 48; texte[4] = (minutes % 10) + 48; texte[6] = 48; texte[7] = 48; Delay_ms(99); FlagA = 1; } } }