Bienvenue aux nouveaux arrivants sur FantasPic !
- Pensez à lire les règles durant votre visite, il n'y en a pas beaucoup, mais encore faut-il les respecter .
- N’hésitez pas à faire des remarques et/ou suggestions sur le Forum, dans le but de l'améliorer et de rendre vos prochaines visites plus agréables.
- Vous pouvez regarder votre "panneau de l'utilisateur" afin de configurer vos préférences.
- Un passage par "l'utilisation du forum" est recommandé pour connaître les fonctionnalités du forum.
--- L’équipe FantasPic ---
- Pensez à lire les règles durant votre visite, il n'y en a pas beaucoup, mais encore faut-il les respecter .
- N’hésitez pas à faire des remarques et/ou suggestions sur le Forum, dans le but de l'améliorer et de rendre vos prochaines visites plus agréables.
- Vous pouvez regarder votre "panneau de l'utilisateur" afin de configurer vos préférences.
- Un passage par "l'utilisation du forum" est recommandé pour connaître les fonctionnalités du forum.
--- L’équipe FantasPic ---
Modérateur : Jérémy
Additionner 2 octets
-
folkeu08

Débutant- Messages : 64
- Âge : 59
- Enregistré en : novembre 2017
- Localisation : Ardennes (08)
- Contact :
bonjour,
Je cherche à additionner deux octets pour allumer en même temps les 2 premières led de mon MCP23S17.
Lorsque je fais ce calcul G = (A|B);, aucune des deux ne s'éclaire alors quzavec la table de vérité, ca devrai le faire.
J'ai encore loupé quelque chose
François
Je cherche à additionner deux octets pour allumer en même temps les 2 premières led de mon MCP23S17.
Code : Tout sélectionner
// Port Expander module connections
sbit SPExpanderRST at RC0_bit;
sbit SPExpanderCS at RC6_bit;
sbit SPExpanderRST_Direction at TRISC0_bit;
sbit SPExpanderCS_Direction at TRISC6_bit;
// End Port Expander module connections
bit oldstate; // Old state flag d'un bouton
unsigned char i = 0;
char A = 0b00000001;
char B = 0b00000010;
char G;
void main() {
PORTB = 0; // All PORTB pins are cleared
//TRISB = 0b11111111; // All PORTB pins are configured as outputs
TRISB0_bit = 1; // set RB0 pin as input
TRISB1_bit = 1; // set RB1 pin as input
TRISB2_bit = 1; // set RB2 pin as input
TRISB3_bit = 1; // set RB3 pin as input
TRISB4_bit = 1; // set RB4 pin as input
TRISB5_bit = 1; // set RB5 pin as input
TRISB6_bit = 1; // set RB6 pin as input
TRISB7_bit = 1; // set RB7 pin as input
Spi1_Init();
Expander_Init(0); // Initialize Port Expander
Expander_Set_DirectionPortA(0,0x00); // set expander's porta to be output
Expander_Set_DirectionPortB(0,0x00); // set expander's portb to be output
Expander_SetBit_PortA(0, 0x00);
//Expander_Set_PullUpsPortA(0, 0xFF);
//Expander_Set_PullUpsPortB(0, 0xFF);
while(1)
{
//Expander_SetBit_PortA(0, 0x01); //1ère led A0
//Expander_SetBit_PortA(0, 0x02); //1ère led A1
// Expander_SetBit_PortA(0, 0x04); //1ère led A2
//Expander_SetBit_PortA(0, 0x08); //1ère led A3
//Expander_SetBit_PortA(0, 0x0B); //1ère led A4
//Expander_Write_PortA(0, 0x01);
//Expander_Write_PortA(0, 0x02);
//Expander_Write_PortA(0, 0x04);
//Expander_Write_PortA(0, 0x08);
Expander_Write_PortA(0, 0b00000000);
Delay_ms(2000); /* One second pause */
Expander_Write_PortA(0, A);
Delay_ms(1000); /* One second pause */
Expander_Write_PortA(0, B);
Delay_ms(1000); /* One second pause */
//Expander_Write_PortA(0, 0b00000000);
//G = A ;
G = (A|B);
Delay_ms(1000); /* One second pause */
Expander_Write_PortA(0, G);
}
} Lorsque je fais ce calcul G = (A|B);, aucune des deux ne s'éclaire alors quzavec la table de vérité, ca devrai le faire.
J'ai encore loupé quelque chose
François
Additionner 2 octets
- paulfjujo

Maître- Messages : 3256
- Âge : 75
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
bonjour,
Si c'est OK,
sauf que tu eteins tes leds tout de suite apres ...
mets la tempo APRES l'ecriture dans l'expander
nota: GDB online est bien plus facile et rapide à utiliser pour un petit test que lancer MikroC ou XC8 !
Si c'est OK,
sauf que tu eteins tes leds tout de suite apres ...
mets la tempo APRES l'ecriture dans l'expander
Code : Tout sélectionner
G = A|B;
Expander_Write_PortA(0, G);
Delay_ms(2000); /* two second pause */nota: GDB online est bien plus facile et rapide à utiliser pour un petit test que lancer MikroC ou XC8 !
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Additionner 2 octets
-
folkeu08

Débutant- Messages : 64
- Âge : 59
- Enregistré en : novembre 2017
- Localisation : Ardennes (08)
- Contact :
Bonjour Paulfjujo,
J'ai en fait fortement réduis la durée du délai et ca me l'affiche maintenant correctement.
Maintenant opération inverse, j'allume les 2 leds au départ et je cherche à les éteindre l'un après l'autre. Faut que je cherche le bon opérateur !
Le souhait est de trouver comment allumer ou éteindre la led concernée (en fonction de l'interrupteur on ou off) sans changer l'état des autres leds.
Je connaissais pas le debugger en ligne. C'est même intéressant pour moi qui utilise lazarus car il fait le Pascal.
Je reprends l'élec et un peu la prog après une bonne 10aines d'années d'arrêt. Il me faut remettre mes automatismes en route et remonter la logique.
François
C'est pas la durée des délai qui ont corrigé, c'est que j'avais oublié un délai à la fin de la boucle pour laisser l'oeil le temps de voir les 2 leds. J'exécutais la dernière et le première instruction de la boucle à la suite.
J'ai en fait fortement réduis la durée du délai et ca me l'affiche maintenant correctement.
Maintenant opération inverse, j'allume les 2 leds au départ et je cherche à les éteindre l'un après l'autre. Faut que je cherche le bon opérateur !
Le souhait est de trouver comment allumer ou éteindre la led concernée (en fonction de l'interrupteur on ou off) sans changer l'état des autres leds.
Je connaissais pas le debugger en ligne. C'est même intéressant pour moi qui utilise lazarus car il fait le Pascal.
Je reprends l'élec et un peu la prog après une bonne 10aines d'années d'arrêt. Il me faut remettre mes automatismes en route et remonter la logique.
François
C'est pas la durée des délai qui ont corrigé, c'est que j'avais oublié un délai à la fin de la boucle pour laisser l'oeil le temps de voir les 2 leds. J'exécutais la dernière et le première instruction de la boucle à la suite.
Additionner 2 octets
-
folkeu08

Débutant- Messages : 64
- Âge : 59
- Enregistré en : novembre 2017
- Localisation : Ardennes (08)
- Contact :
Eteindre les leds une à une doit être un peu plus complexe car j'ai utiliser le premier qui me paraissait le plus logique (&) mais que nini.
Alors j'ai joué au débutant en essyant tous les opérateurs soit avec des 0 ou des 1 et ca éteint rien!
Dois-je passer par des masques ?
A+
Si c'est bon, c'est encore moi qui ai écrit une grosse bêtise comme mon nez au milieu du visage !
Normalement, je dispose de tout pour écrire mon programme en entier, hormis de jouer avec les interruptions.
Alors j'ai joué au débutant en essyant tous les opérateurs soit avec des 0 ou des 1 et ca éteint rien!
Dois-je passer par des masques ?
A+
Si c'est bon, c'est encore moi qui ai écrit une grosse bêtise comme mon nez au milieu du visage !
Normalement, je dispose de tout pour écrire mon programme en entier, hormis de jouer avec les interruptions.
Additionner 2 octets
Additionner 2 octets
- paulfjujo

Maître- Messages : 3256
- Âge : 75
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
folkeu08 a écrit :Dois-je passer par des masques ?
Oui...
poids du bit dans le masque ...
Attention, suivant les compilo ...
char peut etre signé ! 0 à 127 , sinon negatif au dela..
d'ou unsigned char avec mikroC
je prefere byte .. utilisé (jadis) avec turboC 2.00 , là on est tranquille
c'est au programmeur de decider s i on l'utilise avec signe ( bit 7) ou non
et c'est pas le compilo qui faisait sa loi ...
contrairement à MPLAB XC8 version 2.36 et C99 !
char
unsigned char
int8_t
uint8_t
plus des cas ou il veut un int16_t , voir uint16_t
meme si la donnée à traiter est sur 8 bits ..1 octet ..1 byte
......sinon warnings à gogo
tout cela pour rester au plus pres des PIC16 ou 24, 32 et les familles ATMEL
pourquoi faire simple ,quand on peut faire compliqué
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Qui est en ligne
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 2 invités

