www.micro-examples.com
Microcontroller circuits and source code examples
 
 FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 
 

aide pour modifier un programme
Goto page Previous  1, 2, 3, 4, 5, 6, 7, 8  Next
 
Post new topic   Reply to topic    www.micro-examples.com Forum Index -> General Discussion About PIC Microcontrollers
View previous topic :: View next topic  
Author Message
numerique1



Joined: 17 Nov 2006
Posts: 69

PostPosted: Tue Apr 03, 2007 12:33 pm    Post subject: Reply with quote

hello dear Bruno
Crying or Very sad desole meme apres avoir entrer ce code, l alarme est toujours actif le samedi apres midi. Exclamation
merci.
A+
Back to top
View user's profile Send private message
BrunoG
Site Admin


Joined: 22 Nov 2005
Posts: 636

PostPosted: Wed Apr 04, 2007 9:14 pm    Post subject: Reply with quote

Hum oui les jours sont comptés à partir de zéro alors qu'ils sont codés à partir de un Embarassed

il faut donc les renuméroter :

Code:
symbol  LUNDI           = 0
symbol  MARDI           = 1

etc...

voila voila Mr. Green
_________________
BrunoG, Administrator
Back to top
View user's profile Send private message Send e-mail
numerique1



Joined: 17 Nov 2006
Posts: 69

PostPosted: Wed Apr 04, 2007 11:32 pm    Post subject: Reply with quote

salut ami Bruno
Razz merci je vais essayer de modifier. j ai aussi un probleme bizarre: a la mise a zero et au reglage des jours; quand je regle en reculant tout les jours se deffillent de 0 a 6 c est normal. mais si j avance le 6 ne s affiche pas. a 5 l affichage se remet a 0. aussi un probleme de reglage mais rarement avec les heures et les minutes: en avancant l affichage deborde et compte plus que 23h pour les heures et plus que 59mn pour les minutes. Shocked
Question est ce que cette numerotation est la cause?
aussi pour l exploitation de la sortie A4 j ai mesure 1.4 v par rapport au + de l alimentation, et cette valeur ne change pas avec ou sans alarme. Exclamation .
merci.
A+
Back to top
View user's profile Send private message
numerique1



Joined: 17 Nov 2006
Posts: 69

PostPosted: Thu Apr 05, 2007 2:57 pm    Post subject: Reply with quote

hello ami
Very Happy oui ami vous avez raison .la numerotation n etait pas conforme avec le code. c est bien maintenant tout est entre en ordre.j ai bien regle mes alarmes pour samedi. sauf les problemes cites lahaut.
merci.
A+.
Back to top
View user's profile Send private message
BrunoG
Site Admin


Joined: 22 Nov 2005
Posts: 636

PostPosted: Thu Apr 05, 2007 10:17 pm    Post subject: Reply with quote

numerique1 wrote:
salut ami Bruno
Razz merci je vais essayer de modifier. j ai aussi un probleme bizarre: a la mise a zero et au reglage des jours; quand je regle en reculant tout les jours se deffillent de 0 a 6 c est normal. mais si j avance le 6 ne s affiche pas. a 5 l affichage se remet a 0. aussi un probleme de reglage mais rarement avec les heures et les minutes: en avancant l affichage deborde et compte plus que 23h pour les heures et plus que 59mn pour les minutes. Shocked
Question est ce que cette numerotation est la cause?
aussi pour l exploitation de la sortie A4 j ai mesure 1.4 v par rapport au + de l alimentation, et cette valeur ne change pas avec ou sans alarme. Exclamation .
merci.
A+


Hello,

oui la fonction setValue() ne permet pas d'atteindre la dernière valeur et le bit RA4 est remis à zéro dans la routine d'interruption Rolling Eyes

voici les modifications :

Code:
program alarmClock

#define CATHODE_COMMUNE

symbol  LUNDI           = 0
symbol  MARDI           = 1
symbol  MERCREDI        = 2
symbol  JEUDI           = 3
symbol  VENDREDI        = 4
symbol  SAMEDI          = 5
symbol  DIMANCHE        = 6
symbol  LMMJV           = 7

symbol  NBALARM         = 16

const   alarmTable   as byte[NBALARM * 4] = (
'       JOUR            HEURE   MINUTE  DUREE (secondes, 59 maxi)
        LUNDI,          0,       0,     200,
'        LUNDI,          8,      30,     10,
        LUNDI,          12,     30,     10,
        LUNDI,          14,     00,     10,
        LUNDI,          16,     30,     10,
        MARDI,          8,      30,     10,
        MARDI,          12,     30,     10,
        MARDI,          14,     00,     10,
        MARDI,          16,     30,     10,
        JEUDI,          8,      30,     10,
        JEUDI,          12,     30,     10,
        JEUDI,          14,     00,     10,
        JEUDI,          16,     30,     10,
        VENDREDI,       8,      30,     10,
        VENDREDI,       12,     30,     10,
        VENDREDI,       14,     00,     10,
        VENDREDI,       16,     30,     10
        )

dim maxcount    as word
dim scaler      as word
dim jj          as byte
dim hh          as byte
dim mn          as byte
dim ss          as byte
dim digiled     as byte[4]
dim digit       as byte
dim dp          as byte
dim key         as byte
dim alarm       as byte

sub procedure interrupt
        dim i as byte

        scaler = scaler + 1
        if scaler > maxcount
        then
                scaler = 0

                inc(ss)
                if ss = 60
                then
                        ss = 0
                        inc(mn)
                        if mn = 60
                        then
                                mn = 0
                                inc(hh)
                                if hh = 24
                                then
                                        hh = 0
                                        inc(jj)
                                        if jj = 8
                                        then
                                                jj = 1
                                        end if
                                end if
                        end if
                end if
        end if

#ifdef CATHODE_COMMUNE
        PORTA = 0
        TRISA = $0f
        key = PORTA
        TRISA = 0
        PORTB = 0
#else
        PORTA = $0f
        TRISA = $0f
        key = PORTA
        key = not(key)
        TRISA = 0
        PORTB = $ff
#endif
        key = key and $07

        digit = digit + 1

        if digit > 3
        then
                digit = 0
                i = $01
        else
                i = $01 << digit
        end if
       
#ifdef CATHODE_COMMUNE
        PORTB = digiled[digit]
        PORTA = i
#else
        PORTB = digiled[digit]
        PORTB = not(PORTB)
        PORTA = not(i)
#endif
        PORTA.4 = dp.3

        INTCON.T0IF = 0
end sub

sub function intTo7seg(dim n as byte) as byte
        select case n
                case 0  result = $3F
                case 1  result = $06
                case 2  result = $5B
                case 3  result = $4F
                case 4  result = $66
                case 5  result = $6D
                case 6  result = $7D
                case 7  result = $07
                case 8  result = $7F
                case 9  result = $6F
        end select
end sub

sub procedure setValue(dim v as ^byte, dim s as byte, dim max as byte)
        digiled[0] = s
        digiled[1] = 0

        while 1
                if key.0
                then
                        inc(v^)
                        if(v^ > max)
                        then
                                v^ = 0
                        end if
                end if

                if key.1
                then
                        if(v^ = 0)
                        then
                                v^ = max
                        else
                                dec(v^)
                        end if
                end if

                if key.2
                then
                        Delay_ms(50)
                        while key.2
                        wend
                        Delay_ms(50)
                        scaler = 0
                        ss = 0
                        return
                end if

                digiled[2] = intTo7seg(v^ / 10)
                digiled[3] = intTo7seg(v^ mod 10)

                delay_ms(300)
        wend
end sub

main:
        dim i as byte

        dp = 0

        hh = 0
        mn = 0
        ss = 0
        jj = 0

        maxcount = 15625

        PORTA = 0
        TRISA = %00000000

        PORTB = 0
        TRISB = $00

        INTCON = %10100000

        OPTION_REG = %11011000

        setValue(@hh, 116, 23)
        setValue(@mn, 55, 59)
        setValue(@jj, 14, 6)

        while true
                if key
                then
                        digiled[0] = intTo7seg(jj)
                        digiled[1] = 0
                        digiled[2] = intTo7seg(ss / 10)
                        digiled[3] = intTo7seg(ss mod 10)
                else
                        if hh < 10
                        then
                                digiled[0] = 0
                                digiled[1] = intTo7seg(hh)
                        else
                                digiled[0] = intTo7seg(hh / 10)
                                digiled[1] = intTo7seg(hh mod 10)
                        end if
                        digiled[2] = intTo7seg(mn / 10)
                        digiled[3] = intTo7seg(mn mod 10)
                end if

                if scaler > maxcount / 2
                then
                        dp.1 = 1
                else
                        dp.1 = 0
                end if

                digiled[0].7 = dp.0
                digiled[1].7 = dp.1
                digiled[2].7 = dp.2
                digiled[3].7 = dp.3

                alarm = 0
                for i = 0 to (NBALARM - 1) * 4
                        if ((alarmTable[i] = jj) or ((alarmTable[i] = LMMJV) and (jj < SAMEDI))) and (alarmTable[i + 1] = hh) and (alarmTable[i + 2] = mn) and (alarmTable[i + 3] > ss)
                        then
                                inc(alarm)
                        end if
                next i

                if alarm
                then
'                        PORTA.4 = 1
                        dp.3 = 1
                else
'                        PORTA.4 = 0
                        dp.3 = 0
                end if
        wend
end.


avec ça la cloche devrait sonner Wink
_________________
BrunoG, Administrator
Back to top
View user's profile Send private message Send e-mail
numerique1



Joined: 17 Nov 2006
Posts: 69

PostPosted: Thu Apr 05, 2007 11:29 pm    Post subject: Reply with quote

hello ami Bruno.
merci pour les modifications. je vous tiendrai au courant. Smile
A+
Back to top
View user's profile Send private message
numerique1



Joined: 17 Nov 2006
Posts: 69

PostPosted: Fri Apr 06, 2007 11:34 pm    Post subject: Reply with quote

Very Happy salut ami
oui plus de problemes avec l affichage qui debordait. merci ami. seulement j ai rencontre des problemes au niveau de l exploitation de la sortie A4. pouriez vous m indiquer un simple schema a transistor pour commander un relais 12v.ou bien dois je passer par les circuits logiques? merci.
A+.
Back to top
View user's profile Send private message
Gérard



Joined: 01 Mar 2007
Posts: 38
Location: Alsace - France

PostPosted: Sat Apr 07, 2007 7:42 am    Post subject: Reply with quote

Attention, je crois que A4 est à drain ouvert et ne peut que commander une charge reliée au +5V.
Gérard.
Back to top
View user's profile Send private message
numerique1



Joined: 17 Nov 2006
Posts: 69

PostPosted: Sat Apr 07, 2007 12:23 pm    Post subject: Reply with quote

salut
merci Mr Gerard de l information. auriez vous un schema pratique pour exploiter ce type de port?, car mon pic a deja rendu l ame en se trompant sur les broches d un transistor:cry: .
merci. A+.
Back to top
View user's profile Send private message
BrunoG
Site Admin


Joined: 22 Nov 2005
Posts: 636

PostPosted: Sat Apr 07, 2007 11:08 pm    Post subject: Reply with quote

Oui Gérard a raison RA4 est en collecteur ouvert, si vous tentez de commander directement une charge sous plus de 5V avec cette sortie elle ne résistera pas, idem si vous lui faites débiter plus de 25 mA Confused
pour commander un relais, quelque chose comme ça devrait donner satisfaction :



A+,
_________________
BrunoG, Administrator
Back to top
View user's profile Send private message Send e-mail
numerique1



Joined: 17 Nov 2006
Posts: 69

PostPosted: Sat Apr 07, 2007 11:21 pm    Post subject: Reply with quote

Very Happy salut.
merci ami Bruno pour le schema. je vous tiendrai au courant .
A+.
Back to top
View user's profile Send private message
numerique1



Joined: 17 Nov 2006
Posts: 69

PostPosted: Sun Apr 08, 2007 11:44 am    Post subject: Reply with quote

salut cher ami Bruno.
desole mais le schema ne marche pas Crying or Very sad .le relai reste colle des la mise sous tension.en plus l afficheur demarre toujours avec un M00 et non avec un J 00. je crois qu il faut mettre un NPN et non un PNP .car l etage de sortie de A4 est cable a la masse. j ai essaye avec un NPN mais j ai du mal a regler l heure car l afficheur demarre parfois avec un M 00. Crying or Very sad Crying or Very sad.
Question vous ne croyais pas qu il faut mettre une resistance de tirage a la sortie A4 vers le 5v pour avoir des niveaux exploitables?
meci.A+.
Back to top
View user's profile Send private message
numerique1



Joined: 17 Nov 2006
Posts: 69

PostPosted: Sun Apr 08, 2007 7:17 pm    Post subject: Reply with quote

hello
j ai un phenomene bizzare que j ai pas compris. si je soude un fil de 10cm de long sur la broche 3 (A4): il y a impossibilite de de redemarrer le montage a zero (h 00) Shocked . il demarre toujours par un (m00). si je retire ce fil il demarre a zero (h 00) Exclamation .
Back to top
View user's profile Send private message
BrunoG
Site Admin


Joined: 22 Nov 2005
Posts: 636

PostPosted: Sun Apr 08, 2007 11:14 pm    Post subject: Reply with quote

numerique1 wrote:
hello
j ai un phenomene bizzare que j ai pas compris. si je soude un fil de 10cm de long sur la broche 3 (A4): il y a impossibilite de de redemarrer le montage a zero (h 00) Shocked . il demarre toujours par un (m00). si je retire ce fil il demarre a zero (h 00) Exclamation .


Houla Shocked

Les ports RA0 à RA2 sont bien tirés à la masse par une résistance de 10K ?

Je n'ai pas testé le circuit que j'ai proposé pour commander le relais, je vais vérifier cela.

A+!
_________________
BrunoG, Administrator
Back to top
View user's profile Send private message Send e-mail
numerique1



Joined: 17 Nov 2006
Posts: 69

PostPosted: Sun Apr 08, 2007 11:43 pm    Post subject: Reply with quote

salut ami Bruno.
oui les ports A0,A1 et A2 sont bien tires a la masse par des 10k Rolling Eyes . merci cher ami.
A+
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    www.micro-examples.com Forum Index -> General Discussion About PIC Microcontrollers All times are GMT + 1 Hour
Goto page Previous  1, 2, 3, 4, 5, 6, 7, 8  Next
Page 5 of 8

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum



Powered by phpBB © 2001, 2005 phpBB Group