Pages

lundi 5 février 2024

utilisation  des hpds2000 présentés dans un autre article du blog,  brievement chaque digit est composé de 5 colonnes x7 lignes leds matricées, les 5 colonnes sont cablées en parallèle pour chaque digit col1 digit1 > col1 digit2 >.... col1 digit n, idem col2 col3 etc...

 chaque ligne est connectée a un registre a décalage interne










 depuis le 23 juillet 2023 la fabricaion des pcb passe par jlcpcb, pour 5 € TTC on a des 100x100 mm DF étamés masque soudures trous métallisés il suffit de dessiner sur eagle et d'envoyer les gerbers 

AVANT : je dessinais déjà sur eagle + impression sur mylar+ insolation, dev, gravure perçage  uniquement en SF avec des pads de diametre et pistes larges pour la gravure et le perçage

avec jlcpcb :  minimum size / clearence 8mils  min drill 0.4 mm avec le double face on reduit facilement la taille du pcb les smd en plus je ne descend jamais en dessous de 12mils pour la taille des piste et la clearence 

quand on depasse 100x100mm le prix grimpe faut compter 25€ pour une eurocard 160x100 quand on a vraiment besoin c'est que le projet est assez conséquent

l'autre détail : pour expérimenter et changer de composants, meme une simple résistance, c'est moins pratique que sur un simple face

2 mois avant de passer chez jlcpcb j'ai acheté 5l de perchlo et 25 eurocards bungard


mercredi 4 novembre 2020

dimanche 18 mars 2018


les horloges à tubes nixies russes 
spoutnik elektor 01/2007 à 89c2051
easynixieclock multiplexé a 16f628
plus tard celles à base d'arduino avec RTC+ temperature alterné avec l'heure



















un arduino uno et sur un promini pour la suite, un dht22, une i2c eeprom 24lc256 et voilà un datalogger temperature humidité, on ne trouve que des datalogger a base de sdcard sur le net.
la contrainte c'est qu'il faut ouvrir une console série sur le PC pour lire les enregistrements stockés dans la mémoire.  Le ds1615 sans mémoire annexe, enregistrait la temperature, il fallait un max232 et se branchait sur la rs232 db9 d'un pc, le programme gratuit de dallas convertissait automatiquement en graphique. Ici on n'a que les data en mode texte, il faut les recopier dans un fichier txt ou csv, pour les afficher sous excel, en prévoyant les bons délimiteurs.
Le mieux serait un affichage sur un tft ou lcd 20x4, je cherche un croquis arduino+afficheur directement adressable en série, qui remplace le moniteur série arduino du pc.
Le croquis est tiré de hackable n°15 avec de nombreuses modificatins. 
Il va falloir que j'aille faire un tour du coté de wordpress parce que je ne vois pas comment intégré un croquis arduino sur ce blog.

  Valeur actuelle du compteur: 33
18/03/2018 11:24:47;
temperature : 19.30
humidite : 30.70
18/03/2018 11:25:48;
temperature : 19.30
humidite : 30.60
18/03/2018 11:26:48;
temperature : 19.30
humidite : 30.70
18/03/2018 11:27:49;
temperature : 19.20
humidite : 30.60
18/03/2018 11:28:49;
temperature : 19.20
humidite : 30.80
18/03/2018 11:29:50;
temperature : 19.20
humidite : 31.20
18/03/2018 11:30:50;
temperature : 19.20
humidite : 30.90
18/03/2018 11:31:51;
temperature : 19.20
humidite : 30.70
18/03/2018 11:32:52;
temperature : 19.20
humidite : 30.70
18/03/2018 11:33:52;
temperature : 19.20
humidite : 30.60
18/03/2018 11:34:53;
temperature : 19.20
humidite : 30.70

exemple de relevé

croquis arduino
  
/* 18/03/18 : enregistre temp/hum dht22 dans l eeprom 24c32
 *  d'un  module ds3231 +24c32
 *  affichage sur moniteur série
 *  source de base : hackable n15 croquis
 *  https://github.com/Hackable-magazine/Hackable15/tree/master/enregistreur
 *  a faire : utiliser une 24lc256/512 externe
 *  afficher en temps réel les data sur un lcd 20x4/nokia/tft spi (voire glcd avec un mega)
 *  6 pins lcd, nokia, 3 pins pour commande dump, compteur, reinit
 *  ide 1.8.4
 */

#include <Wire.h>
#include <extEEPROM.h>
#include <DS3232RTC.h>
//#include <Adafruit_Sensor.h>
//#include <Adafruit_BME280.h>
#include <TimeLib.h>
#include <SPI.h>
#include "dht.h" // lib dhtstable robtillaert

#define DHT22_PIN 4
dht DHT;

// Notre format de données d'enregistrement
struct MesInfo {
  time_t horo;
  float temp;
  float humi;
                };

// stockage du temps
// c'est un unsigned long dans Time/TimeLib.h
time_t myTime;

// Variable pour nos données
MesInfo mesdata;

// Atmel 24C256 SANS suffixe A B C : A2 non connecté i2c 0x50 a 0x53 (datasheet)
//extEEPROM eep(kbits_256, 1, 64, 0x50); //24c256 atmel 2.7v-5v
extEEPROM eep(kbits_256, 1, 64, 0x54);//24lc256 A2 reliéau +vcc
//extEEPROM eep(kbits_512, 1, 128, 0x54);// 24lc512
//extEEPROM eep(kbits_32, 1, 32, 0x57); // 24c32 module ds3231
// gestion des intervalles de mesure
unsigned long previousMillis = 0;

// Affichage d'une valeur sur deux chiffres
void print2digits(int val, Stream &sortie) {
  // si <10 alors on préfixe d'un 0
  sortie.print(val < 10 ? "0" : "");
  sortie.print(val, DEC);
}

void Read_DHT22()
{
int chk = DHT.read22(DHT22_PIN);
}
// Enregistrement d'un relevé
void enreg() {
  // code retour de l'écriture
  int ret = 0;
 
  // lecture du compteur
  int compteur = 0; // pourquoi = 0 ?
  eep.read(0, (byte *) &compteur, sizeof(compteur));

  // remplissage de notre structure

  mesdata.horo=RTC.get();
 // mesdata.temp=bme.readTemperature();
  //mesdata.hygro=bme.readHumidity();
 // mesdata.pression=bme.readPressure()/100.0F;
  mesdata.temp=(DHT.temperature);
  mesdata.humi=(DHT.humidity);
 

  // écriture en EEPROM

  ret = eep.write(sizeof(compteur)+sizeof(mesdata)*compteur, (byte *) &mesdata, sizeof(mesdata));
  delay(10);
  // Une erreur ?
  if(ret != 0)
    return;

  // incrémentation du compteur

  compteur++;
  // mise à jour du compteur
  eep.write(0, (byte *) &compteur, sizeof(compteur));
  delay(10);
}

// fonction d'affichage des données
void dump() {
  int compteur;
  // lecture du compteur à la position 0 de l'EEPROM
  eep.read(0, (byte *) &compteur, sizeof(compteur));
  if(!compteur) {
    Serial.println("Pas de data");
    return;
  }

  // On boucle sur les enregistrements

  for(int i=0; i<compteur; i++) {
    eep.read(sizeof(compteur)+i*sizeof(mesdata), (byte *) &mesdata, sizeof(mesdata));

    // Affichage

    print2digits(day(mesdata.horo), Serial);
    Serial.print("/");
    print2digits(month(mesdata.horo), Serial);
    Serial.print("/");
    print2digits(year(mesdata.horo), Serial);
    Serial.print(" ");
    print2digits(hour(mesdata.horo), Serial);
    Serial.print(":");
    print2digits(minute(mesdata.horo), Serial);
    Serial.print(":");
    print2digits(second(mesdata.horo), Serial);
    Serial.println(";");
    Serial.print("temperature : ");
    Serial.println(mesdata.temp);
    Serial.print("humidite : ");
    Serial.print(mesdata.humi);
    Serial.println("");
    //Serial.print(mesdata.pression);
    //Serial.println("");  
  }
}

// Affichage de la valeur du compteur
// C'est le numéro du dernier enregistrement en mémoire
void printcompteur() {
  int compteur;
  eep.read(0, (byte *) &compteur, sizeof(compteur));
  Serial.print(F("Valeur actuelle du compteur: "));
  Serial.println(compteur);
}

// Effacement de l'EEROM
void reinit() {
  int compteur;
  eep.read(0, (byte *) &compteur, sizeof(compteur));
  Serial.print(F("Valeur actuelle du compteur: "));
  Serial.println(compteur);

  // Uniquement si broche 2 à la masse : cavalier en place

  if(!digitalRead(2)) {
    compteur=0;
    Serial.println(F("Effacement compteur"));
    eep.write(0, (byte *) &compteur, sizeof(compteur)); // ligne croquis original
    delay(10); // utile ?
    eep.read(0, (byte *) &compteur, sizeof(compteur));
    Serial.print("Valeur actuelle du compteur: ");
    Serial.println(compteur);
  } else {
    Serial.println(F("Effacement interdit ! Mauvais mode: mesures en cours"));
    Serial.println(F("Placez le cavalier pour autoriser l'effacement"));
  }
}

// configuration
void setup() {
 
  //Wire.begin();
  Serial.begin(19200);
  //while (!Serial) {} // pour leonardo
  // Cavalier
  pinMode(2, INPUT_PULLUP);

  // initialisation gestion EEPROM

  if (eep.begin(extEEPROM::twiClock400kHz)) {
    Serial.print(F("extEEPROM erreur"));
    while (1);
  }
}

void loop() {
  unsigned long currentMillis = millis();
  String commande;
  Read_DHT22();
  delay (3000);
  // Gestion des intervalle sans delay()
  if (currentMillis - previousMillis >= 60000) {
    previousMillis = currentMillis;
    // Cavalier ?
    if(digitalRead(2))
      enreg();
    else
      Serial.println(F("Cavalier en place: pas d'enregistrement"));
  }

  // récupération d'une chaîne via le moniteur série

  while (Serial.available() > 0) {
    commande = Serial.readStringUntil('\n');
  }

  // Analyse des commandes

  // affichage des données
  if(commande == "dump")
    dump();
  // affichage du compteur
  if(commande == "compteur")
    printcompteur();
  // Effacement EEPROM
  if(commande == "reinit")
    reinit();
}

voilà pour aujourd'hui, je vais tester sur un promini et remplacer le dht22 par un bme280

samedi 16 septembre 2017

je n'écris pas énormement sur ce blog, parce que il n'est pas tres "friendly user" ni "WYSIWYG"
je joue beaucoup avec arduino, surtout les UNO qui me servent à tester presqu instantanément ce que je trouve sur internet puis modifie à ma sauce, et quand je suis satisfait, je dessine le produit final sur eagle avec un atmega328p : çà fait plus propre et moins encombrant, je n'y gagne pas financieremnt : un clone UNO à 3 euros chez les chinois est meilleur marché que dessiner+tirer un PCB, rien que le mega328p + le pcb vierge dépassent les 3 €


thermometre à nixies :  


circuits imprimés gravés


Back to 80's 
le carilon 9 notes   a 555, 4017,2n2646, MECANORMA vendait un transfert du circuit imprimé
rien que les 9 ajustables à roulettes crantées devaient couter une fortune


retour 2017 avec un glcd datant de 15 ans
horloge et affichage de temperature sur glcd ks108 avec arduino et ds3231, le capteur de temperature est dans le ds3231


avec les glcd 12864 ks1808 JE-AN12864 acheté dans une foire en 2002, il m'a fallu des mois voire 2 ans avant d'avoir un proto a base de 16f876 fonctionnel, je passe les détails de mes recherches et bidouillages en mélangeant de l'asm et du C.
avec l'uno et la biblio u8g et u8g2, en moins de 4 heures : dessin et gravure d'un shield PCB compris, tous les exemples de u8g étaient fonctionnels, bon les 12864 monochrome sont obsoletes, faire quelques bargraphs, icones pour afficher des mesures de temperature, humidité, et autres grandeurs
il n'y a pas énormément d'exemples sur le net, le meme genre d'affichage se fait sur les nokia5110 monochrome, et encore plus sur les tft couleurs 2.2 2.4 2.8 pouces
nuts and volts a publié un enregistreur variations barometriques sur 90 heures en avril 2015 affichage graphique sur un ks108, avec la vieille biblio glcd, qui ne compile pas avec ide arduino > 1.0.x, j'ai récrit le croquis avec la lib openglcd, 

Il me reste à tester 2 vieux 12864 a t6963 varitronix sans broche Vee, il faut créer soi meme le moins 5 volts  : il faut moins 8volts minimum pour ces vieux varitronix des années 90, soit avec 2 icl7660 vu dans le datasheet stmicroelectronics (mon stock 7660 est  dangereusement bas), soit avec un mc34063, circuits achetés initialement pour faire le 170 volts nécessaires aux nixies, je pensais en commander 5, j'en ai pris 50 pour 4 euros, ils servent autant pour le step up que pour step down, le 90 volts pour mes lcd a retroeclairage fluo, pour les nixies, pour les afficheurs VFD !!!, pour les hautes tensions pour test condos HT, voire pour les testeurs d'isolation, megohmetres


j'ai aussi 2 glcd 240x128 POWERTIP avec un brochage "plus standard" pour les t6963, trouvés pour 1 euro à la brocante annuelle du village, testés avec ug8lib : affiche des images jpg en N&B, il suffit de les réduire à la taille voulue dans les limites du glcd, de convertir en N&B, d'enregistrer en XBM, de copier le contenu xbm en PROGMEM et c'est tout
Il y a de nombreuses fonctions dans u8glib et u8g2, parfois redondantes ou à utiliser pour une appli bien spécifique pour un afficheur, puisque u8g est capable de commander tous les afficheurs noir et blanc ou niveaux de gris si le driver est prévu pour, depuis le  pcd8444 des nokia jusqu'au ssd1306 des oled, j'ai vu quelque part sur le net un "SPACE INVADERS" sur glcd
openglcd est plus simple pour les ks108, excepté que le cablage ne peut pas etre changé dans le croquis, il faut aller chipoter dans les fichiers h de la biblio.

j'aimerais bien utiliser ma dizaine de 16f76 et mon autre dizaine de 16f676 pour ces glcd au lieu des atmega 328p où mon stock diminue de jour en jour, à moins de commander une centaine de 328p chez les chinois et etre tranquille jusqu'à la fin de ma vie

Les dizaines d'afficheurs de toutes sortes

afficheurs leds de chez HP 
  

mardi 27 septembre 2016

faire clignoter des leds avec arduino est simple, il n'y a pas si longtemps on utilisait un ne555 et un 4017 pour faire clignoter/ cheniller 10 leds, toutes dans le meme sens, avec quelques modifs on parvenait a faire un aller/retour limité à 5 leds "knightlight rider", on trouve des kits complets 555+4017 leds et circuit imprimé pour moins de 2 euros sur ebay.  Puis il y a eu le 16f84A, qui permettait de varier les effets, pour varier la vitesse avec un potentiometre : oscillateur en mode rc et R était le potentiometre, il y avait moyen de faire plus moderne avec 2 touches up/down, tout çà avec un seul circuit intégré. Les microcontrôleurs à 8 pins comme le 12f629, attiny13, etc.. permettent de commander 10 leds  vitesse variable avec potentiometre et choix de plusieurs effets avec un seul circuit intégré 8 pins qui est vendu le prix de 2 NE555. 

samedi 23 juillet 2016

et non je n'ai pas encore fini d'aménager l'enterieté des espaces de bricolage 
j'ai beau vouloir changer la taille de la police il ne  veut pas il revient  automatiquement sur la plus petite, désolé,
c'est bien les blogs plus simple que créer un site, du moins du temps où j'ai tester du html avec du javascript, il y a 10 ans...où il fallait envoyer chaque modif avec filezilla, etc.. meme si je pense qu'à l'heure actuelle il y moyen de creer un site hébergé gratuitement avec des outils simples, pas le temps de me pencher sur cette possibilité à l'heure actuelle.























récupération de 2 calculatrices bureau walther etr2, nixies ne s'allument plus
le tip32 d'une alim est trépassé, changer tous les chimiques, bientot...
réparée en changeant les chimiques par d'autres de recup, nouveau tip32, on doit certainement régler les ajustables, pour des valeurs précises de tension, sans "user manuel" d'origine de fabrication, à part le 5 volts, difficile de prévoir la valeur des autres tensions, donc laisser les ajustables dans l'état, elle calcule....meme si çà ne sert à rien à part comme objet de collection, aucun composants à recupérer, vu que j'ai déjà plein de nixies et 74141, à part le transfo qui a un enroulement haute tension.
avant 1995, j'aurai tout récupéré mêmes les résistances....



mercredi 22 octobre 2014

Arduino et module ds1302 RTC
pour mettre à l'heure le module j'ai utilisé l'exemple "SetSerial" de la librairie DS1302RTC : attention cet exemple a été écrit pour un arduino mega il faut modifier quelques lignes pour un UNO

maj2017 : il existe de nombreuses biblios pour les RTC, pour ds1307 et surtout ds32XX bien plus stable point de vue horloge quartz et temperature

 bien j'ai réussi a le mettre à l'heure , çà ne sert pas a grand chose de lire l'heure chaque seconde sur le moniteur série, il faut donc l'utiser dans une application : comme j'ai lu sur un site : le web est rempli d'exemples pour utiliser des modules arduino, utilisés seuls ils ne servent srictement à rien
j'ai donc essayé l'exemple DS1302_LCD avec un shield lcdkeypad df robot , acheté en septembre 2014 : j'ai eu la v1.0 alors que la v1.1 était sortie depuis un bon moment, celui que j'ai ne peut pas utiliser la pin10 de l'uno pour eteindre allumer gradué le backlight, pas tres grave vu que ce shield ne doit servir qu'au dévellopement j'ai plein de lcd stand alone.
là on n'est pas gaté : si je branche le 5 volts du rtc le lcd indique rtc synchro fail en mettant uniquement le gnd et les 3 clk data et rst, çà fonctionne sauf que l'heure n'est plus correcte à 5 secondes, pas encore résolu le probleme wait and see
fevrier 2016 : vu que le shield lcd dfrobot utilise les pins 4,5,6,7,8,9, 10, on est mal, les pins 7,8,9,10,11,12,13 ne sont pas accessibles physiquement une fois qu'on a embroché le shield, pins 0 et 1 sont utilisées pour le rx et tx, reste 2 et 3 A0 to A5, encore que A4 et A5 servent de i2c 

mardi 4 février 2014



COUNTDOWN TIMER
les schémas de minuteur décompteur sont légions sur le net
decomptage de 99 min avec une résolution de 1 seconde
je n'ai réalisé que ceux a base de pic 16f84 ou 628
 un des plus anciens http://www.piclist.com/techref/microchip/cntdn/index.htm

1 16f84, 1 4511, 4 aff leds cathodes communes : fournit un signal sonore lorsque le décomptage arrive à zéro




Modifications .multiples possibles http://www.turbokeu.com/myprojects/countdown3.htm

ajout d'un relais, afficheurs anodes ou cathodes communes au choix en remplacant le 4511 par 1 4543

les schémas à lcd  












 réalisation : compteur horaire de duree de fonctionnement

tiré du site http://xizard.chez.com montage présenté sur le site en 2000
 avec un 16f84
il affiche le temps que le montage est sous tension avec une résolution du dizieme d'heure, il enregistre toutes les x minutes, pas de remise à zero, il faut reprogrammer le pic pour recommencer un cycle ????

 il faut brancher le point décimal pour différencier heures et diziemes d'heure





 






tiré du site sonelec musique
compteur horaire de fonctionnement affichage heures minutes




 l'afficheur a l'extreme gauche a le segment C défectueux, pas important il ne comptera jamais au delà de 999h59min, comme le programme écrit toutes les minutes la valeur dans l'eeprom qui est prévue pour un million de cycles lecture/écriture, il faudra changer le 16f628 apres 700 jours ....
le code source écrit en mikropascal est fourni, on pourrait le changer pour enregistrer toutes les 10 minutes... 

 

La programmation des pics avec le programmateur g540 genius qui se branche sur port usb

Je suis passé au tl866 

eproms Vpp jusque 21 volts,tous les atmel base 8051, attiny, atmega, les pics, les eeproms
:  configuration des fuses bits des pics, se référer à la DS du pic concerné et au fichier config pic pdf sur le cd du g540, je suis passé au minipro 866 en 2016, pour 35€, la pin 1 de tous les mcu se place au meme endroit quelle que soit la marque et le nombre de pins, liste circuits très complete, limité aux 8 bits.



le terme programmation signifie dans ce cas : bruler un hex dans 1 mcu de microchip, le hex qui sera téléchargé depuis un site qui décrit des montages a pic et qui fournit le fichier, d'une revue ou d'un fichier source qui aura été compilé par un  compilateur dédié correspondant au fichier source 
le premier pgmateur pour pic que j'ai construit était de la revue electronique pratique sur port parallèle avec alimentation externe soft icprog, le 2eme était le k8048 de velleman kit soft fourni, et le 3eme était le multipic trouvé sur un site internet qui est un jdm amélioré sans alim externe soft fourni sur le site, qui fonctionne aussi avec icprog et winpic : tous ces pgmateurs avait une caractéristique gênante : le port qui ne se trouve que sur les pc tour : rs232 ou lpt.

j'ai été tenté par un pgmateur du commerce g540 a moins de 50 euros se branchant sur usb sans alim externe.  Le soft fourni n'est pas tres convivial.  

branché sur un portable win xp, installation des drivers, enfin il est reconnu.

voici un exemple de pgmation d'un 16f84A

on choisit le mcu a programmer avec le bouton select
 ensuite charger le hex dans le buffer en cliquant sur le bouton load



cliquez ok

et voilà les bits de configuration ne sont pas chargés ou du moins aléatoirement alors qu'ils se trouvent dans le fichier, il faut les cocher à la main en se référant au pdf config pic, une case cochée signifie pgmé a l'état 1, exemple pour la NON protection du code il faut cocher la case CP, car CP à 1= CP OFF, ce qui est contraire à l'habituel coché signifiant pgmé à zero, puisque sorti d'usine tous les fusibles sont à 1, dans le cas de icprog, c'est une approche différente : coché veut dire "enable", et icprog s’occupe de convertir "coché" en programmant ou pas le fusible concerné, puisque chez microchip enable ou disable n'est pas nécessairement 0 ou 1 respectivement.
ce n'est pas comme si un fusible est désactivé en le mettant à 1 et activé en le mettant à zero
çà varie suivant la fonction du fusible
Dans le cas où on trouve un circuit tout fait, où il n'y a que le hex sans source et quand l'auteur n'indique pas la configuration puisque contenue dans le hex, il faut charger le hex dans icprog qui vous indiquera la configuration.
configuration en image
ici oscillateur 01 = xt_osc  pwrt est à 0 = enable wdt à zero = disable et CP est à 1 = OFF
nous sommes prets pour bruler le hex
en cliquant sur l'icone prog
voilà c'est brulé 
prochain épisode avec un 16f628
le meme programme simple a été adapté pour 16f628A en mode quartz externe 4mhz comme le 16f84A, pgmation ok en se referant au fichier config pic pdf pour les fusibles a configurer à la main, 2eme essai du meme programme sans quartz avec la fonction intrcosc_noclkout, fonctionnement ok

LE G540 NE PROGRAMME PAS LES 16F54 ET CONSORTS JE SUPPOSE : F55 F57 C54 C55 ETC...le seul pgmateur qui programme mes 16f54 est le multipic un jdm sans alim sur port rs232, et uniquement avec le logiciel telechargeable sur le site du programmateur, le multipic est reconnu par winpic et icprog qui ne supportent pas le 16F54