Programmation de l’Atmega328p hv
J’ai reçu un disque dur Seagate 7200.11 dans un état BSY (occupé). Le disque dur tourne, mais il est complètement invisible pour le BIOS. Apparemment tous ces modèles sont affectés par un bug dans le firmware du disque : ST31000340AS, ST3500320AS, ST3750330AS et d’autres encore.
J’ai trouvé ce guide très bien écrit sur la façon de réparer l’état BSY sur le disque Seagate 7200.11. J’avais besoin d’une sorte d’adaptateur TTL série pour me connecter au port série du disque, mais je n’en avais pas sous la main. Puis je me suis souvenu que j’avais un clone d’Arduino, Freeduino, qui traînait et je savais qu’il avait déjà une puce FTDI qui fait la conversion USB-série pour la puce Atmega. Ok, donc techniquement ce n’est pas la puce Arduino AVR qui est utilisée pour réparer le lecteur, juste la carte.
J’ai retiré le CI Atmega de la carte Freeduino, je l’ai branché à un oscilloscope et tada ! L’USB vers la série fonctionne, mais c’est 5V. Pas de soucis, j’ai juste besoin d’un diviseur de tension basique pour la ligne RX du lecteur pour la faire descendre à environ 3.3V. Il n’y a pas besoin de diviseur de tension sur la ligne TX du lecteur, car la puce FTDI comprend 3.3V comme entrée HIGH.
Digispark attiny85 reset
Comme je l’ai mentionné plus tôt cette semaine, j’ai récemment “perdu” un ATmega168 parce que j’ai flashé les fusibles de configuration pour désactiver la broche RESET, sans réaliser que cela rend le dispositif impossible à reflasher avec SPI. C’est particulièrement frustrant parce que le dispositif est encore 100% fonctionnel, juste complètement sourd aux programmateurs série ordinaires. La seule façon de récupérer le dispositif est d’utiliser ce qu’Atmel appelle “High Voltage Parallel Programming Mode” que très peu de programmateurs supportent, et surtout pas l’USBtinyISP que j’aime par ailleurs.
L’Arduino a juste assez d’entrées/sorties pour implémenter tout le protocole HV plus un bouton “go”. Jusqu’à présent, j’ai seulement implémenté le réglage de LFUSE et HFUSE dans le logiciel, mais il n’y a aucune raison pour que le code ne puisse pas être étendu pour supporter l’effacement de la puce et la programmation de la flash entière.
Update 12/17/08 : Un lecteur observateur a signalé qu’il y avait trois erreurs dans la façon dont GND/AGND, AREF et VCC/AVCC étaient connectés sur l’AVR cible dans le schéma original. Les erreurs ont été corrigées et le schéma mis à jour est ci-dessous. Nous vous prions de nous excuser pour la confusion que cela a pu causer.
Désactivation de la réinitialisation du Digispark
J’essaie de concevoir une charge à courant constant pour tester des éléments de batterie en utilisant l’ampli-op TLC070 (ce que j’ai sous la main) et une entrée PWM filtrée passe-bas (150Ohm + 470uF cap) provenant d’un Ardiuno. L’ampli-op est alimenté par un rail de 12v et l’Arduino par une alimentation de 5v, tous partageant une masse commune.
Le problème est que si je règle la tension d’entrée sur 0V, l’amplificateur optique ne pourra plus piloter le MOSFET (IRFZ44n). Si le PWM est réglé sur autre chose que 0, et que l’alimentation de l’ampli-op est mise sous tension, le circuit fonctionne comme prévu.
Certains amplis opérationnels peuvent faire des choses bizarres si vous leur demandez de s’approcher des rails d’alimentation. A moins que l’ampli-op ne soit spécifiquement conçu pour fonctionner avec une seule alimentation jusqu’à la masse, ou qu’il s’agisse d’une véritable entrée et sortie rail à rail, il n’est pas garanti qu’il fonctionne dans ces conditions.
Ce qui se passe, c’est que les non-linéarités près de la masse entraînent l’inversion de la courbe de gain, ce qui revient à inverser les bornes d’entrée. Au fur et à mesure que vous augmentez ce qui est étiqueté comme la borne positive, sa sortie essaie de devenir plus négative. Ce qui verrouille cette condition en place.
Le chargeur de démarrage de Digispark est cassé.
Il n’est pas rare que le bus i2c se “verrouille”, ce qui peut empêcher votre système de fonctionner. Si vous essayez de faire fonctionner un système distant ou embarqué, ce n’est pas idéal. Cet article traite des techniques que vous pouvez utiliser pour rendre votre système plus tolérant aux pannes et tenter de récupérer les erreurs éventuelles.
Le bus i2c (Inter-IC Communication) se compose de 2 fils (souvent appelés Two-Wire Interface aka TWI lorsque vous voulez éviter d’utiliser le terme i2c sous licence) : les données (SDA) et l’horloge (SCL). Ceux-ci doivent normalement se situer à un niveau élevé, quelle que soit la tension de votre système, c’est-à-dire 5V ou 3V3.
C’est une interface incroyablement utile et vous pouvez accrocher une multitude de puces très utiles à ces deux fils, par exemple des horloges en temps réel, des mémoires EEPROM, des accéléromètres, des extensions d’interface, etc. Avec une multitude potentielle de dispositifs accrochés à ce même bus, ils doivent jouer gentiment les uns avec les autres, et pour ce faire, il y a souvent un dispositif maître et un certain nombre de dispositifs esclaves. Chaque appareil a une adresse sur le bus et ne parle que lorsqu’il est sollicité par le maître.