Auteur Sujet: Utilisation d'ATTiny  (Lu 224634 fois)

CATPLUS

  • Sr. Member
  • ****
  • Messages: 435
    • Voir le profil
Utilisation d'ATTiny
« le: décembre 14, 2016, 10:09:03 am »
Bonjour
Je voudrais faire le montage de Rudys (voir le sujet)

https://rudysmodelrailway.wordpress.com/2015/10/15/use-an-attiny-with-usb-as-a-dcc-function-decoder/

Je ne trouve pas le fichier *.ino pour la programmation.
Quelqu'un peut-il m'aider?
Cordialement
Best Regards

msport

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 2217
  • HO avec DCC++ en DIY Réseaux très éphémères
    • Voir le profil
Re : Utilisation d'ATTiny
« Réponse #1 le: décembre 14, 2016, 05:56:08 pm »
Bonjour,
sauf erreur, un ATTiny n'est pas un Arduino et faute d'un bootloader ne peut être programmé par l'IDE d'Arduino (mais je ne sais pas tout)
Question encombrement, l'Arduino pro mini n'est pas mal et là, on a les sketches.
A connecter au PC le temps de la programmation avec un adaptateur RS232 USB (FTDI ...)
A interfacer ensuite avec un opto 6N135 et alimenter par le DCC mais je crois qu'on en a parlé dans ces colonnes ...
Voir également la library :
https://github.com/MynaBay/DCC_Decoder
et les réalisations :
http://model-railroad-hobbyist.com/node/24316
http://model-railroad-hobbyist.com/node/20739
http://model-railroad-hobbyist.com/node/19446 -> schéma qu'on trouve reproduit de nombreuses fois
http://model-railroad-hobbyist.com/node/19775

« Modifié: décembre 14, 2016, 06:45:21 pm par msport »
Cordialement

CATPLUS

  • Sr. Member
  • ****
  • Messages: 435
    • Voir le profil
Re : Utilisation d'ATTiny
« Réponse #2 le: décembre 15, 2016, 02:17:31 pm »
Bonjour
Merci pour ta réponse. Je connaissais les posts que tu as sélectionné (il est toujours bon de faire un rappel)
J'ai réalisé ces montages
Il semble que ma question n'était pas conforme à mes attentes.
Je souhaite faire le montage  précédent  pour plusieurs raisons
1 Fonctionnement en dcc
2 le nombre de sorties est limité (pour faire fonctionner 1 led, ou un relais) et surtout petit encombrement
 J'avais fait des petits modules genre compresseur de frigo avec des 555 et je souhaitai les faire démarer avec ce montage le coût est dérisoir par rapport à un décodeur.
3 programmation aisé par le biais d'un arduino

         https://www.indiegogo.com/projects/attiny-isp-shield#/
         http://www.semageek.com/tuto-programmation-des-attiny45-avec-un-arduino/

Ma préoccupation comment  programmer le ATTiny en mode dcc
Merci
Cordialement

Best Regards

msport

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 2217
  • HO avec DCC++ en DIY Réseaux très éphémères
    • Voir le profil
Re : Utilisation d'ATTiny
« Réponse #3 le: décembre 15, 2016, 06:45:54 pm »
Merci d'avoir complété mon information !
Et probablement en intéressera plus d'un pour réaliser des minis décodeurs.

Sur cette page, https://rudysmodelrailway.wordpress.com/software/
en suivant le lien :
Arduino DCC, S88, and more Download link
on récupère un zip qui contient un sketch qui concerne un Attiny. Est ce pertinent ?

comment ajoute-t-on les Attiny à la liste des cartes Arduino dans l'IDE : il semble que c'est là via un des liens fournis :
https://codeload.github.com/damellis/attiny/zip/master
merci pour les liens pour la programmation (aisée ?)
« Modifié: décembre 15, 2016, 07:06:15 pm par msport »
Cordialement

patrick

  • Newbie
  • *
  • Messages: 43
    • Voir le profil
Re : Re : Utilisation d'ATTiny
« Réponse #4 le: décembre 15, 2016, 10:37:29 pm »
Petite utilisation maison d'un ATTiny pour jeu de lumières... https://4.bp.blogspot.com/-2ImM1FXzQp4/V_lv_mAlbfI/AAAAAAAAA3Q/nWcVPA-YRnoM7rTvyBL_QKZjFj1red27ACLcB/s1600/premier%2Bpcb%2Bcomposants.jpg Certe, le résultat est quasiment aussi gros qu'un Arduino Mini, mais c'est fait maison  ;)

Ma préoccupation comment  programmer le ATTiny en mode dcc

Que veux-tu dire par: programmer le ATTiny en mode dcc ?

CATPLUS

  • Sr. Member
  • ****
  • Messages: 435
    • Voir le profil
Re : Utilisation d'ATTiny
« Réponse #5 le: décembre 16, 2016, 07:46:23 am »
Bonjour
Quand tu regarde la vidéo et le titre parle de lui même

https://rudysmodelrailway.wordpress.com/2015/10/15/use-an-attiny-with-usb-as-a-dcc-function-decoder/

il programme le ATTiny avec un numéro DCC, je ne trouve pas le programme pour faire la même chose
IL y a un raccourcis https://app.box.com/s/nekqcwvfc3z11imc1ksxr6htroenxjrs
mais impossible de charger
Cordialement

Best Regards

patrick

  • Newbie
  • *
  • Messages: 43
    • Voir le profil
Re : Utilisation d'ATTiny
« Réponse #6 le: décembre 16, 2016, 02:52:42 pm »
Salut,

Ok je comprends ce que tu veux dire: tu veux donner une adresse au décodeur et non pas programmer les CV du décodeur en utilisant le bus DCC tel que tu pourrais le faire sur un réseau...

Quoiqu'il en soit, si tu n'arrives pas à télécharger les fichiers, tu peux trouver la librairie NMRA DCC à d'autres endroits, en particulier ici http://mrrwa.org/download/. Dans les exemples fournis avec la librairie tu trouveras un fichier DDC_Decoder.ino ou DCC_AccessoryDecoder.ino  ou un nom équivalent. Je n'ai pas chargé le fichier ZIP pour vérifier, mais en général, toutes les versions sont à peu près faites de la même manière...

Ensuite, une fois la librairie installée, pour donner une adresse à ton décodeur, tu devrais trouver dans le programme d'exemple, une structure avec un champs DCC_Address ou équivalent. Il te suffit de renseigner ce champs avec l'adresse qui t'intéresse et de compiler le programme. Ca ne devrait pas être plus compliqué que cela...

Remarque: certaines librairies renseignent l'adresse du décodeur sur 2 octets différents plutôt qu'avec un seul entier/valeur. Il faut bien vérifier lequel des deux octets est celui de poids fort et celui de poids faible. Sinon, en inversant les deux valeurs, tu crées une adresse différente.

Si tu as encore des difficultés, je pourrai essayer de poster une réponse plus détaillée dans la soirée ou ce week-end.

Patrick

CATPLUS

  • Sr. Member
  • ****
  • Messages: 435
    • Voir le profil
Re : Utilisation d'ATTiny
« Réponse #7 le: décembre 16, 2016, 03:47:36 pm »
Bonjour
Merci
 
Tu as tout à fait compris ma requête, c'est exactement ce que cherchais (oui je souhaite donner une adresse DCC à l'ATTiny et en sortie lui attribuer une tache, led, relais, etc....)

Donc je vais suivre tes recommandations et je vous ferais part de mes tests.

Cordialement
Best Regards

msport

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 2217
  • HO avec DCC++ en DIY Réseaux très éphémères
    • Voir le profil
Re : Utilisation d'ATTiny
« Réponse #8 le: décembre 16, 2016, 05:35:00 pm »
Pour l'instant, cela dépasse mes compétences mais dans le lien de mon précédent message il y a le fichier zip correspondant au raccourci https://app.box.com/s/nekqcwvfc3z11imc1ksxr6htroenxjrs
Dans ce fichier Arduino_DCC_S88 inaccessible par le raccourci, il y a le sketch RB_DCC_Decoder_Function_ATtiny.ino ci-dessous
Est-ce que cela permet de programmer un Attiny ? Je vois que l'adresse DCC est en dur. Merci pour vos précisions.

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// DCC Function Decoder
// Author: Ruud Boer - October 2015
// This sketch turns an Arduino into a DCC function decoder for F0 - F12
// Output pins used: 3-19 (14-19 = A0-A5). Pin is HIGH when Function is ON.
// The DCC signal is fed to pin 2 (=Interrupt 0).
// Optocoupler schematics for conversion of DCC - 5V: www.rudysmodelrailway.wordpress.com/software
// Many thanks to www.mynabay.com for publishing their DCC monitor and -decoder code.
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// IMPORTANT: GOTO lines 15 - 28 to configure some data!
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

int decoderAddress = 1830; // This is the decoder address, change into the number you want.
#define F0_pin 1 // Define the output pin for every Function number in use
#define F0_pin2 3 // 2nd pin for same function is possible. Can use forward / reverse direction ... see line 97.
#define F1_pin 0 // Available pin numbers: 0,1,3,4,5
#define F2_pin 0
#define F3_pin 0
#define F4_pin 0
#define F5_pin 0
#define F6_pin 0
#define F7_pin 0
#define F8_pin 0
#define F9_pin 0
#define F10_pin 0
#define F11_pin 0
#define F12_pin 0

#include <DCC_Decoder.h>
#define kDCC_INTERRUPT 0

byte Func[4]; //0=L4321, 1=8765, 2=CBA9, 3=F20-F13, 4=F28-F21
byte instrByte1;
int Address;
byte forw_rev=1; //0=reverse, 1=forward

boolean RawPacket_Handler(byte pktByteCount, byte* dccPacket) {
  Address=0;
  if (!bitRead(dccPacket[0],7)) { //bit7=0 -> Loc Decoder Short Address
    Address = dccPacket[0];
    instrByte1 = dccPacket[1];
  }
  else if (bitRead(dccPacket[0],6)) { //bit7=1 AND bit6=1 -> Loc Decoder Long Address
    Address = 256 * (dccPacket[0] & B00000111) + dccPacket[1];
    instrByte1 = dccPacket[2];
  }

  if (Address==decoderAddress) {
    byte instructionType = instrByte1>>5;
    switch (instructionType) {
      case 2: // Reverse speed
        forw_rev=0;
        break;
      case 3: // Forward speed
        forw_rev=1;
        break;
      case 4: // Loc Function L-4-3-2-1
        Func[0]=instrByte1&B00011111;
        break;
      case 5: // Loc Function 8-7-6-5
        if (bitRead(instrByte1,4)) {
          Func[1]=instrByte1&B00001111;
        }
        else { // Loc Function 12-11-10-9
          Func[2]=instrByte1&B00001111;
        }
        break;
    }
    // F0 is an example of two output pins that alternate based on loc forw_rev driving direction.
    if (Func[0]&B00010000) {digitalWrite(F0_pin,forw_rev); digitalWrite(F0_pin2,!forw_rev);} else digitalWrite(F0_pin,HIGH);
    if (Func[0]&B00000001) digitalWrite(F1_pin,LOW); else digitalWrite(F1_pin,HIGH);
    if (Func[0]&B00000010) digitalWrite(F2_pin,LOW); else digitalWrite(F2_pin,HIGH);
    if (Func[0]&B00000100) digitalWrite(F3_pin,LOW); else digitalWrite(F3_pin,HIGH);
    if (Func[0]&B00001000) digitalWrite(F4_pin,LOW); else digitalWrite(F4_pin,HIGH);
    if (Func[1]&B00000001) digitalWrite(F5_pin,LOW); else digitalWrite(F5_pin,HIGH);
    if (Func[1]&B00000010) digitalWrite(F6_pin,LOW); else digitalWrite(F6_pin,HIGH);
    if (Func[1]&B00000100) digitalWrite(F7_pin,LOW); else digitalWrite(F7_pin,HIGH);
    if (Func[1]&B00001000) digitalWrite(F8_pin,LOW); else digitalWrite(F8_pin,HIGH);
    if (Func[2]&B00000001) digitalWrite(F9_pin,LOW); else digitalWrite(F9_pin,HIGH);
    if (Func[2]&B00000010) digitalWrite(F10_pin,LOW); else digitalWrite(F10_pin,HIGH);
    if (Func[2]&B00000100) digitalWrite(F11_pin,LOW); else digitalWrite(F11_pin,HIGH);
    if (Func[2]&B00001000) digitalWrite(F12_pin,LOW); else digitalWrite(F12_pin,HIGH);
  }
}

void setup() {
  DCC.SetRawPacketHandler(RawPacket_Handler);
  DCC.SetupMonitor( kDCC_INTERRUPT );
  pinMode(0, OUTPUT);
  pinMode(1, OUTPUT);
  pinMode(3, OUTPUT);
  pinMode(4, OUTPUT);
  pinMode(5, OUTPUT);
}

void loop() {
  DCC.loop();
}
Cordialement

patrick

  • Newbie
  • *
  • Messages: 43
    • Voir le profil
Re : Utilisation d'ATTiny
« Réponse #9 le: décembre 16, 2016, 06:03:50 pm »
En effet, il semble s'agir du programme recherché. Il est basé sur DCC_decoder.h/.c.

La fonction RawPacket_Handler() agit comme une callback dans laquelle on peut ajouter la fonctionnalité désirée. Le principe de callback garantit que la fonction sera appelée lorsque le bon paquet DCC sera reçu. Elle est instanciée avec:

  DCC.SetRawPacketHandler(RawPacket_Handler);


Dans cet exemple, RawPacket_Handler() est appelé à chaque fois qu'un paquet générique (raw) est reçu (il peut s'agir d'un paquet décodeur de fonction ou décodeur de locomotive, etc...).  Une des premières tâches est de décoder l'adresse du destinataire transportée par le paquet.

  Address=0;
  if (!bitRead(dccPacket[0],7)) { //bit7=0 -> Loc Decoder Short Address
    Address = dccPacket[0];
    instrByte1 = dccPacket[1];
  }
  else if (bitRead(dccPacket[0],6)) { //bit7=1 AND bit6=1 -> Loc Decoder Long Address
    Address = 256 * (dccPacket[0] & B00000111) + dccPacket[1];
    instrByte1 = dccPacket[2];
  }


Ensuite, le code va vérifier que l'adresse reçue correspond à l'adresse du décodeur. Dans le cas contraire, le paquet est ignoré. De plus, libre à chacun d'utiliser l'adresse qu'il veut ici...

  int decoderAddress = 1830; // This is the decoder address, change into the number you want.
(...)
  if (Address==decoderAddress)...


Si c'est le cas, alors le paquet "est arrivé au bon endroit". Il ne reste plus qu'à décoder le numéro de fonction et son contenu, et d'exécuter l'action désirée (digitalWrite()... etc...).

J'espère que cela clarifie le problème...



msport

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 2217
  • HO avec DCC++ en DIY Réseaux très éphémères
    • Voir le profil
Re : Utilisation d'ATTiny
« Réponse #10 le: décembre 16, 2016, 10:57:41 pm »
Merci pour la réponse. Je l'ai comprise mais je ne veux pas en poser d'autres car avant je dois lire les articles auxquels le sujet se réfère et dans lesquels je trouverai certainement au moins les réponses de base. (et voir ce que fait le DCC_decoder.h etc.)
Mon intérêt est de placer un mini décodeur embarqué dans la voiture de queue d'une rame nouvellement digitalisée pour allumer feux rouges et blancs (soit parallèlement à l'adresse de la locomotive avec gestion du sens, soit indépendamment). Pour cela, je n'ai besoin que de deux sorties.
Cordialement

patrick

  • Newbie
  • *
  • Messages: 43
    • Voir le profil
Re : Utilisation d'ATTiny
« Réponse #11 le: décembre 16, 2016, 11:45:21 pm »
C'est un beau petit projet pour commencer avec les décodeurs embarqués.

Ceci-dit, si tu veux utiliser ton décodeur comme un décodeur de fonctions (par exemple dans la motrice de queue d'un TGV), tu devrais plutôt prendre un peu de temps pour examiner la librairie NMRA. Je pense qu'elle est plus adaptée pour ce cas-là. En effet, il y a déjà un exemple de décodeur loco (ou fonctions) ici: https://github.com/mrrwa/NmraDcc/blob/master/examples/NmraDccMultiFunctionDecoder_1/NmraDccMultiFunctionDecoder_1.ino

La librairie est disponible au complet ici: https://github.com/mrrwa/NmraDcc

Quoiqu'il en soit, tu devrais obtenir à peu près les mêmes résultats avec ton approche...

Tiens-nous au courant...
Patrick


CATPLUS

  • Sr. Member
  • ****
  • Messages: 435
    • Voir le profil
Re : Utilisation d'ATTiny
« Réponse #12 le: décembre 17, 2016, 04:30:22 pm »
Bonjour
Merci à Patrick et msport

Après avoir lu et relu, testé, chargé un tas de programmes pour les essais la première phase fonctionne
Mis le programme dans le NANO (voir pièce jointe)
Tester sur le banc d'essai avec le 6N137 et ma central ZIMO, fonctionnement correct, juste un soucis sur les 9 Leds qui doivent fonctionner la sortie 7 ne donne rien (à suivre)

La prochaine phase adapter le programme pour le ATTiny

Cordialement


Best Regards

msport

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 2217
  • HO avec DCC++ en DIY Réseaux très éphémères
    • Voir le profil
Re : Re : Utilisation d'ATTiny
« Réponse #13 le: décembre 17, 2016, 10:02:25 pm »

Tiens-nous au courant...

un grand merci pour le lien. J'y étais déjà allé mais bien rangé dans mes favoris, je ne l'avais pas exploité.
et merci d'un rappel au raisonnable déjà validé. Pour l'ATTiny, je crois que je me laisse aller à trop de curiosité et d'enthousiasme ... Je vais déjà tenter le décodeur sur base d'un arduino Mini *, pour l'ATTiny ce sera plus tard, d'autant que sauf erreur, une fois programmé, si il y a une erreur, c'est fini.
Mais je lirai avec plaisir tous les développements ! Merci CATPLUS.

* En fait, pour l'encombrement, les composants autour prennent beaucoup de place. j'attends des CMS dont le prix est en rapport avec la taille.
Cordialement

patrick

  • Newbie
  • *
  • Messages: 43
    • Voir le profil
Re : Re : Re : Utilisation d'ATTiny
« Réponse #14 le: décembre 18, 2016, 01:20:25 am »
un grand merci pour le lien.
Avec plaisir...

Citer
d'autant que sauf erreur, une fois programmé, si il y a une erreur, c'est fini.
??? Que veux-tu dire?