Show Posts
Pages: 1 ... 40 41 [42] 43 44 ... 128
616  International / Français / Re: réglage de l'heure sur DS1307 on: July 31, 2013, 01:34:46 pm
Si tu envoie simplement 0x40 tu met également l'heure à 0.
Il faut commencer par comprendre la différence entre :
Registre = 0x40
et
Registre |= 0x40
Dans le premier cas Registre = 01000000 et ne peut pas prendre une autre valeur, donc il sera aussi 0h 00mn.
Dans le deuxième cas comme tu fais un "OU" tu force le bit 6 a devenir égal à "1" mais tous les autres bits gardent la valeur qu'ils avaient avant.

Ce que fdufnews te suggérait de faire c'est de définir des variables intermédiaires pour que le programme soit plus lisible.
Exemple général.
Soit le registre Machin, on peut donner un nom à ses différents bits :
Bit 7 -> Raz
Bit 6 ->Bid6   (bid pour bidule  smiley-mr-green )
Bit 5 ->Bid5
Bit 4 ->Bid4
Bit 3 ->truc3
Bit 2 ->truc2
Bit 1 ->truc1
Bit 0 ->truc0

On écrit  une suite de define :
#define Raz  0b10000000;
#define Bid1  0b01000000;
#define Bid2  0b00100000;
#define Bid3  0b00010000;
#define Bid4  0b00001000;
#define truc3 0b00000100;
#define truc2 0b00000010;
#define truc1 0b00000010;
#define truc0 0b00000000;

Tu remarquera qu'a chaque fois un seul bit est à 1.
Je préfère la notation binaire à la notation hexa. L'hexa est plus simple pour ceux qui maîtrisent les arcanes de la programmation. Comme ce n'est pas mon cas et je pense pas que ce soit le tien je préfère la clarté à la concision.

Avec ce principe il est facile d'initialiser un registre.
1) On part de zéro, le registre Machin est entièrement réinitialisé: on fait une égalité simple.
Si on veut que les bits 7,5 3 et 0 soient à 1 on écrit :
Machin = Raz | Bid5 | truc3 | truc0 ;
Là les noms ne veulent rien dire mais si tu les choisi intelligemment le programme devient plus facile à relire.

2) On veut juste passer un bit particulier à 1 on fait une opération "|="
Le registre machin a été initialisé mais maintenant on veut que le bit 2 soit aussi égal à 1:
Machin |= truc2 ;
Tous les autres bits restent inchangés.

Pour faire passer un bit de 1 vers 0 il ne faut plus utiliser un "OU" mais un "ET" mais là c'est fini pour moi -> direction le site du zéro.


617  International / Français / Re: réglage de l'heure sur DS1307 on: July 31, 2013, 10:16:29 am
Quote
Je sais désormais que je dois mettre 0x80 pour mode 24h et 0x40 pour mode 12h
P**** c'est dur !
0x80 s'écrit en binaire 10000000. Tu n'interviens que sur le bit 7 qui ne fait strictement rien.
Le bit 7 est toujours maintenu à 0 parce qu'inutilisé ou réservé pour une évolution du produit.

Pour le mode 24h il faut mettre le bit 6 à "0" et à "1" pour le mode 12h.
Oublie cette histoire de 0x80. La librairie est écrite par un illustre inconnu qui peut s'être trompé , la datasheet est écrite par le fabricant du produit qui doit impérativement le vendre. D'après toi quelle est la source la plus sure ?

Sur le tableau que JMe87 à pris le temps de te transmettre on voit clairement que le réglage en mode 12/24 h est assuré par le bit 6 qui peut prendre la valeur 0 ou 1.
Dans le registre qui gère l'heure les bits :
- B0 B1 B2 et B3 gèrent les unité d'heure comprise entre 0 et 9
- B4 B5  gèrent les dizaines d'heure comprises soit entre 0 et 1, soit entre 0 et 2 selon la valeur de B6
- B6 gère le choix du mode 12h ou 24h
- B7 est inutilisé.

Il suffit de lire comprendre le tableau !
618  International / Français / Re: réglage de l'heure sur DS1307 on: July 30, 2013, 01:48:35 pm
Quote
pourquoi il y a ce "0x80 |".
fdufnews a déjà répondu et à conclu a une erreur.

Pour en avoir confirmation il faut lire la datesheet du DS1307.
Le registre pour la gestion de l'heure est le 02h (voir le tableau que JMe87 a tiré de la datasheet).
0x80 correspond à 0b10000000. Le seul 1 de cet octet correspond à la gestion du bit 7 de ce registre.

Effectivement ce bit n'est pas utilisé puisque sous le tableau on peut lire :
0 = Always reads back as 0.

Conclusion :
il ne faut pas avoir une confiance aveugle dans les librairies toutes faîtes et ne jamais négliger de lire les datasheets des composants qu'elles sont censée gérer.

619  International / Français / Re: réglage de l'heure sur DS1307 on: July 30, 2013, 12:14:34 pm
Rha la la
les deux pieds dans le même sabot  smiley-twist

Google , mot de recherche "convertisseurs  binaire vers hexadécimal"
Première réponse : http://sebastienguillon.com/test/javascript/convertisseur.html

Il faut tout vous faire ?
Quote
Désolé moi non plus je ne comprend pas cette ligne 0x80 | 0x12.

Le symbole | veut dire OU Logique, c'est donné et expliqué dans tout les liens qu'on vous a donné.

Avec le "splendide convertisseur" que vous auriez du trouver tout seul on traduit en binaire.
Pourquoi en binaire ?
Parce que pour faire des opérations sur les bits eh bien il faut utiliser des bits, c'est pas plus compliqué.

0X80 s'écrit en binaire : 10000000
0X12 s'écrit en binaire :  10010

C'est bien évident que les premiers zéro ne sont pas indiqués, dans la vie courante quand vous avez 6 chaises vous n'écrivez pas que vous avez 0006 chaises, se serait idiot, eh bien le convertisseur il fait pareil.

Donc pour faire notre  OU LOGIQUE ( | ), sans se tromper, on va ajouter les zéros non significatifs.
Comme cela les bits seront bien alignés selon leur rang.
0x80   -> 10000000
0x12   -> 00010010

On va faire le ou sur les bits de même rang.
Table de vérité :
BitA   BitB   Résultat
0        0        0
1        0        1
0        1        1
1        1        1

Donc le résultat de 0x80|0x12 = 10010010
Ce résultat correspond à l'octet qu'il faut envoyer au DS1307 par l'interface I2C.

Quote
donc si j'enleve le 0x80 je suis en mode 24h et si je le mets je suis en mode 12h ?
Je ne sais pas comment interpréter tes écrits. mais attention ce n'est pas à prendre comme un "if" d'un langage de programmation, c'est un "OU logique" sur les bits comme je l'ai expliqué plus haut.

Attention : j'ai seulement expliqué  l'expression "0x80|0x12" en aucun cas je ne contredis Fdufnews quand il dit que 0x80 est inutile, ne mélangez rien s'il vous plait.

Et allez faire un tour sur le site du zéro.

Edit :
Ne faites pas l'impasse sur la compréhension du mécanisme pour changer de base.
Les convertisseurs s'est très pratique mais de grâce comprenez les mécanismes mis en jeu.

620  Using Arduino / Programming Questions / Re: Stupid Question: What compiler is used? on: July 30, 2013, 10:38:37 am
Quote
avr-gcc 4.3.2, approximately, for the AVR

Perhaps True for windows ,but not sure.
False for Linux ! And sure .

Debian :
old stable (Squeeze) : 4.3.5
Stable (Wheezy), Testing (Jessie) and Sid   : 4.7.2

If you need absolutly to know the exact version use Linux.
621  Development / Other Software Development / Re: New fork of the IDE on: July 29, 2013, 03:30:33 pm
Quote
So I do not know which MCU the OP actually uses (my Q above).
--> ATMega328p,  UNO board Rev 2

I'll try to be as complete as possible but in English it is not easy for me (if anyone understand French it would be easier)

- no problem with arduino IDE (from 0.22 to 1.05).
- no problem with Eclipse and the Eclipse plugin-avr  (1)
http://avr-eclipse.sourceforge.net/updatesite/

(1) This is not the project initiate by Jantje  but official avr-plugin
622  International / Français / Re: réglage de l'heure sur DS1307 on: July 29, 2013, 02:55:48 pm
Quote
Je pige rien à ce tableau et ça m'énerve.
Principe de base : Ce n'est pas en s'énervant que cela s'améliorera.

Préalable à bien comprendre :Différence entre un nombre et un chiffre :
La distinction est facile dès qu'on parle de nombres supérieurs à 9 :
En système de numérotation décimal pour représenter des nombres on dispose de 10 symboles que l'on appelle des chiffres : 0, 1, 2, 3, 4, 5, 6, 7, 8 et 9
125 est un nombre construit à partir des chiffres 1, 2 et 5.

En fait le nombre  125  dans un système à base 10 (= mode décimal) est construit ainsi:
125 = 1*100 + 2*10 + 5*1
Pour le coder en BCD on code en binaire le chiffre des centaines, puis celui des dizaines puis celui des unités.
Comme  pour coder en binaire le chiffre 9 il faut 4 bits  125 s'écrira ainsi :
Forme générale : XXXX YYYY ZZZZ
Soit pour 125 :
Centaine : 1 -> XXXX = 0001
Dizaine   : 2 -> YYYY = 0010
Unité     : 5 -> ZZZZ = 0101

Application au DS1307 -> cas des secondes
Les secondes peuvent prendre toutes les valeurs entre 0 et 59.
Donc pour les unités il faudra coder des chiffres de 0 à 9 soit 4 bits.
Pour les dizaines le chiffre maximum sera égal à 5, 4 bits suffiront.

C'est bien pour cela que dans l'octet qui gère les secondes les bits 0, 1, 2 et 3 servent à coder les unités de secondes et les bits 4, 5 et 6 servent à coder les dizaines de secondes.

Quote
Ce tableau est en binaire et moi j'ai pas de binaire dans cette ligne : "Wire.send(0x80 | 0x12);
Déja le minimum que tu dois connaître pour programmer c'est de reconnaitre un nombre en notation décimale, binaire ou hexadécimale :
125 c'est du décimal
0b_quelquechose c'est du biniare
0x_quelquechose c'est de l'hexadécimal (base 16).
Peut importe la "présentation cosmétique" un nombre reste égal à lui même :
125 = 0b01111101 = 0x7D

Tant que tu ne maîtrisera pas ces notions il faudra te contenter d'utiliser des bibliothèques toute faites comme celle que l'on t-a déjà proposé.
623  Development / Suggestions for the Arduino Project / Improve analog layout on: July 29, 2013, 07:37:14 am
1) add an inductor between Vcc and Avcc -> see Atmel Documentation

2) As Aref pin from the board output connector  can't be move because existing shields, Aref link have to be improve.
  A) add a 100nF capacitor as close as possible from the microcontroller
  B) insert an inductor in the link between the microcontroller pin  and the Aref output board connector. This will make  a filter with the existing capacitor.
624  Topics / Product Design / Re: Strange resistor names in Eagle on: July 29, 2013, 07:21:46 am
Its normal.

You are using the free-version of Eagle.
The free-version is a limited version:
- two side PcB
- 50 components maximum
- size of PCB limited
- one sheet.

Use Kicad :
Open source and no limitations.
- multi layers,
- multi sheets
- no area limitations
- no numbers of components limitations
- easy to configure
etc  etc absolutly NO limitations
625  Development / Other Software Development / Re: New fork of the IDE on: July 29, 2013, 07:01:32 am
I found that this does not work with your IDE:
Code:
DDRD = (1<<PD6) | (1<<PD5) | (1<< PD3) ;
  DDRB = (1<<PB3) ;
  PORTB &= ~(1<<PB3);
  PORTD &= ~(1<<PD6);
  PORTD &= ~(1<<PD5);
  PORTD &= ~(1<<PD3);

Error message:
Code:
PWM.ino: In function ‘void configPort()’:
PWM.ino:95: error: ‘PD6’ was not declared in this scope
PWM.ino:95: error: ‘PD5’ was not declared in this scope
PWM.ino:95: error: ‘PD3’ was not declared in this scope
PWM.ino:96: error: ‘PB3’ was not declared in this scope
With the "official" version of the "Arduino IDE" or with Eclipse IDE or there is no problem to use "PD6, PD5, PD3 et PB3"

While of course this works:
Code:
DDRD = (1<<6) | (1<<5) | (1<< 3) ;
  DDRB = (1<<3) ;
  PORTB &= ~(1<<3);
  PORTD &= ~(1<<6);
  PORTD &= ~(1<<5);
System : Linux, Debian Jessie 64 bits
626  International / Français / Re: réglage de l'heure sur DS1307 on: July 28, 2013, 11:28:26 am
Quote
m'ouai bah au vus des exemples, ça me parait plus simple de gérer directement la liaison I2C avec le module.
C'est aussi mon point de vue, mais ça c'est à toi de le faire.
Pour cela tu as  la datasheet du DS1307 qui n'est pas compliquée du tout.
Le seul point a ne pas rater, et tu ne peux pas le rater puisqu'Icare te l'a signalé, c'est que les données doivent être codées en BCD -> Binaire Codé Décimal. Décimal Codé Binaire (#@?§ d'anglo saxons qui inversent tout)
Pour comprendre le BCD tu as Wikipédia à ta disposition.
Pour gagner du temps dans l'écriture de la programmation tu es autorisé à lire et à comprendre le contenu des librairies toutes faites et à t'inspirer de ce qui a déjà été fait pour la transposition Décimal <-> BCD.
bon courage..
627  International / Français / Re: petit conseil de programmation on: July 28, 2013, 11:19:50 am
Quote
mais je ne connais pas la fonction pour faire cela
C'est normal parce que la fonction qui va faire ce que tu veut c'est à toi de l'écrire  smiley-mr-green

Supposons que tu veuille faire deux actions avec les registres à décallage : action1, action2.
Tu écrit 2 fonctions :

void action1()
{
   bla1 bla1 bla1
}

int action1()
{
   bla2 bla2 bla2
   return truc;
}

Dans la fonction loop tu appelle les fonctions :
void loop
{
// Répéter 3 fois la fonction action1
for (int i=0; i<=3;i++)

   action1()
}
idem pour appeler la fonction action2

Il va te falloir faire une visite au "site du zero" pour apprendre les rudiments du C (ou C++).
Comprendre ce que veux dire void ou int dans la déclaration d'une fonction, a quoi correspond le mot clé "return".
Savoir faire une boucle "for" ou une boucle "while" , un choix avec des "if", etc, etc....
Tout le monde est passé par là.

628  Using Arduino / Networking, Protocols, and Devices / Re: interface one arduino with 4 I2C sensors on: July 28, 2013, 10:15:33 am
A good tutorial to begin :
http://www.nxp.com/documents/user_manual/UM10204.pdf

A second, also very good  smiley-mr-green :
http://arduino.cc/en/Reference/Wire

also :
http://en.wikipedia.org/wiki/I2C
629  International / Français / Re: RFID on: July 27, 2013, 08:14:06 am
Très très limite du point de vue légalité le sujet ..............
Je ne suis pas sûr que le service du personnel ait beaucoup d'humour sur ce coup.

Si c'est réellement vrai que les badges cassent  smiley-mr-green , je jouerais plutôt le jeu en le poussant jusqu'à l'absurde (c'est ce qui fonctionne le mieux) et quand la direction en aura marre de remplacer les badges  soit elle change de matériel soit elle supprime le badgeage.
630  Using Arduino / Programming Questions / Re: Blink not in sync with two Arduinos. Is it supposed to be? on: July 27, 2013, 07:47:37 am
Each arduino board has its own crystal. The frequency of each crystal is not strictly the same. The clock signal frequency remains constant but phase slip.

To have a true synchronization you must use only one card with a cristal.
The second board receive the clock frequency of the first board.

Consult the microcontroller datasheet, the procedure is described.
Pages: 1 ... 40 41 [42] 43 44 ... 128