J'espère que quelqu'un pourra me donner une piste pour me sortir de là:
J'expérimente un montage comme suit:
atmega328p standalone sans quartz horloge interne 8 MHz
capteur de température Dallas DS18B20
câblage comme suit:
Le DS18B20 ne répond pas:
Error: Could not read temperature data
Requesting temperatures...DONE
Error: Could not read temperature data
Requesting temperatures...
J'ai aussi testé isolément le bus OneWire. Il ne répond pas non plus ce qui explique la non réponse du 18B20.
J'ai relevé à l'oscillocope le signal sur la broche 2 du DS18B20:
Détail:
Le signal me paraît bizarre on dirait qu'il y a un conflit quelque-part.
Le bon type "d'Arduino" a été sélectionné dans l'IDE?
OneWire repose sur le respect de timings précis si tu n'as pas choisi le bon type de carte ces temps ne peuvent pas être respectés.
Le bus est en haute impédance une partie du temps lors de la lecture.
Pour écrire un 1
la ligne est à 0 pendant 10µs
la ligne est à 1 pendant 55µs
Pour écrire un 0
la ligne est à 0 pendant 65µs
la ligne est à 1 pendant 5µs
Pour lire
la ligne passe en sortie
la ligne est à 0 pendant 3µs
la ligne passe en entrée
on attend 10µs
on lit l'état de la ligne
on attend 53µs
Donc pendant une soixantaine de µs la ligne est en haute impédance ou forcée à 1 ou à 0 par l'organe qu'on lit.
Le fait que tu vois la ligne "flotter" donne à penser que ton 18B20 ne répond pas.
J'ai testé le composant DS18B20 sur une carte Arduino. Il fonctionne. La différence avec l'atmega328 standalone est la fréquence d'horloge qui est 16 MHz sur la carte Arduino au lieu de 8 et il n'y a pas de quartz pour la cadencer.
J'ai un truc pas normal, c'est que je suis obligé de régler le terminal en 1200 ou 2400 bauds (je ne sais plus) au lieu des 9600 initialisés dans le setup. La fréquence d'horloge passant de 16 MHz à 8 MHz n'explique pas un tel écart.
J'ai vu dans les sources de la librairie OneWire plein de delais en microsecondes programmés. Si ces délais sont indexés sur la vitesse du processeur, cela pourrait peut-être expliquer ces problèmes..
choisir une carte existante dans la liste des carte qui fonctionne avec l'horloge interne à 8MHz. Il y a la LilyPad Arduino w/ ATmega328P et l'Arduino Fio, peut-être feraient-elles l'affaire, je ne saurais trop m'avancer là-dessus. Il faudrait vérifier si elles sont matériellement équivalentes.
ajouter un type de carte dans board.txt qui utilise un ATmega328 et fonctionne à 8MHz
C'est normal si tu n'as pas reprogrammé les fuses. Il me semble que sur un atmega328 neuf la fréquence programmée dans les fuses est 1MHz.
Pour que ton processeur fonctionne correctement à 8 MHz il faut deux choses:
programmer les fuses pour une horloge interne à 8MHz
compiler avec une définition de fréquence d'horloge à 8MHz
J'avais fait ça il y a quelque temps déjà en suivant ce tuto chapitre ' Minimal Circuit'.
Il faut utiliser le fichier breadboard-1-6-x.zip. Je vois que le lien sur cette page est mort, mais il est disponible aussi sur cette page.
Ensuite tu as une carte "atmega328 on a breadboard (8MHz internal clock)" dans Outils/Cartes. Tu la sélectionnes et tu graves la séquence d'inittialisation. Ensuite tout roule.
Je n'ai pas de carte "atmega328 on a breadboard (8MHz internal clock)" dans Outils/Cartes mais j'ai ATMega328 (8MHz internal clock). est-ce que ça peut convenir pour graver le chargeur de démarrage?
Après bien des difficultés j'ai réussi à faire fonctionner le OneBus en faisant ce que tu 'as conseillé. Mais que de misères. Je haie ces breadboards. En faisant un montage avec l'ATMega328 sur la breadboard l'arduino UNO à côté, le câblage vérifiés x fois, pas moyen de téléverser.
J'ai cablé une carte prototype soudée avec un support pour l'ATMEGA328p qui s'enfiche directement dans les connecteurs de la UNO et là, enfin, ça a marché. J'ai maintenent un sabot de programmation qui fonctionne pour programmer mes ATMega328P.
Je vois au scope des signaux conformes et de fréquence bien plus élevée. Et sur ma liaison série,: la température apparaît enfin!
En plus de cela, la vitesse de la liaison série est devenue normale. 9600 bauds sont bien 9600 bauds de mon source.
Donc, ton diagnostique était le bon. C'est la vitesse de l'horloge interne qui était n'importe quoi.