Decoder funzioni con ATtiny85

Utilizza questo forum per richiedere informazioni o condividere le tue esperienze sulla digitalizzazione dei modelli ferroviari.
 
Luca Regoli
Assistente di Stazione
Assistente di Stazione
Messaggi: 1767
Iscritto il: martedì 7 marzo 2006, 7:26

Decoder funzioni con ATtiny85

Messaggio da Luca Regoli »

E' forse meglio aprire un topic ad hoc per questa applicazione sempre basata su micro tiny85.
Obiettivo è collegare un segnale in modo che risponda ad un indirizzo DCC e poi tramite F1 proietti luce verde, tramite F2 proietti luce rossa; lasciando entrambe le funzioni attive verrà proiettata luce gialla (entrambi i led accesi).
Per realizzare il decoder avremo bisogno di un micro tiny85, un optoisolatore per interfacciare il binario e due led (o un segnale). Costo totale dell'HW necessario alla realizzazione del decoder circa 4€.... non male .... :yahoo:

Qui si trova lo schema dell'optoisolatore
https://rudysmodelrailway.files.wordpre ... matic1.png

questo è lo schema complessivo:
tiny85.JPG
e questo è lo sketch:

int decoderAddress = 15; // This is the decoder address.
#define F1_pin 3 // Available pin numbers: 0,1,3,4,5
#define F2_pin 4
#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;
}
if (Func[0]&B00000001) digitalWrite(F1_pin,HIGH); else digitalWrite(F1_pin,LOW);
if (Func[0]&B00000010) digitalWrite(F2_pin,HIGH); else digitalWrite(F2_pin,LOW);
}
}

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();
}
Ultima modifica di Luca Regoli il venerdì 25 marzo 2016, 12:40, modificato 2 volte in totale.
Luca Regoli
Assistente di Stazione
Assistente di Stazione
Messaggi: 1767
Iscritto il: martedì 7 marzo 2006, 7:26

Re: Decoder funzioni con ATtiny85

Messaggio da Luca Regoli »

L'anodo del led verde è collegato al pin 3, mentre l'anodo del led rosso al pin 4. Il comune catodo verrà collegato a massa sul pin apposito dell'ATTiny85
mario54i
Manovratore
Manovratore
Messaggi: 382
Iscritto il: domenica 4 giugno 2006, 16:05

Re: Decoder funzioni con ATtiny85

Messaggio da mario54i »

E l'alimentazione ?
Dopo aver letto il data sheet del 6N137 consiglierei di cambiare le resistenze.
Luca Regoli
Assistente di Stazione
Assistente di Stazione
Messaggi: 1767
Iscritto il: martedì 7 marzo 2006, 7:26

Decoder funzioni con ATtiny85

Messaggio da Luca Regoli »

Per ora, visto che è un prototipo da laboratorio, l'alimentazione proviene dalla presa usb del pc che utilizzo per caricare lo sketch. Va da sè che, aldilà dell'entusiasmo che ci porta a pronunciare "funziona!!!!", ora serve una fase di reingegnerizzazione del circuitino dell'optoisolatore dal quale va prelevato anche la tensione di alimentazione. Pensavo di spillare sia la 5v che una 12v per pilotare le strip di led x l'illuminazione delle carrozze inserendoci anche un bel condensatore tampone.
Che il circuito dell'optoisolatore abbia qualche problemino, me ne ero accorto in quanto la resistenza da 1k sull'ingresso dcc scalda troppo... Ci hai già lavorato? Che resistenza consigli?
Glifo
Ausiliario di Stazione
Ausiliario di Stazione
Messaggi: 59
Iscritto il: sabato 24 gennaio 2009, 17:23

Re: Decoder funzioni con ATtiny85

Messaggio da Glifo »

Lo uso da tempo questo schema e ne ho una ventina in funzione.
Io uso una 4.7k, in ingresso, non ho mai avuto problemi.
mario54i
Manovratore
Manovratore
Messaggi: 382
Iscritto il: domenica 4 giugno 2006, 16:05

Re: Decoder funzioni con ATtiny85

Messaggio da mario54i »

Infatti il data sheet mostra che 3 mA nel LED bastano per farlo funzionare, anche se consigliano un minimo di 6 mA.
http://www.mouser.com/ds/2/38/V02-0940E ... 844836.pdf fig.2 a pag. 14
La resistenza sul pin 7 non serve a niente, si collega direttamente a Vcc.
Volendo mettere l'optocoupler con uscita logica ce ne sono altri piu' piccoli e che consumano meno, come questo
http://www.mouser.com/ds/2/149/FODM8061-95625.pdf
ma nel decoder di DCCworld citato prima l'optocoupler non c'e' e funziona benissimo lo stesso.
Luca Regoli
Assistente di Stazione
Assistente di Stazione
Messaggi: 1767
Iscritto il: martedì 7 marzo 2006, 7:26

Re: Decoder funzioni con ATtiny85

Messaggio da Luca Regoli »

Glifo ha scritto:Lo uso da tempo questo schema e ne ho una ventina in funzione.
Io uso una 4.7k, in ingresso, non ho mai avuto problemi.
Benissimo grazie, appena ho un attimo la cambio!
Glifo
Ausiliario di Stazione
Ausiliario di Stazione
Messaggi: 59
Iscritto il: sabato 24 gennaio 2009, 17:23

Re: Decoder funzioni con ATtiny85

Messaggio da Glifo »

ma nel decoder di DCCworld citato prima l'optocoupler non c'e' e funziona benissimo lo stesso.[/quote]

Si è vero funziona molto bene anche senza l'opto,e risparmi spazio.
Se hai spazio, con l'opto è meglio per 2 motivi, il primo un segnale sicuramente migliore all'ingresso del pic, e il secondo la separazione galvanica ,che non fa mai male.
despx
Manovratore
Manovratore
Messaggi: 553
Iscritto il: sabato 17 novembre 2007, 22:28
Interesse per i treni reali: Si
Interesse per i treni in modello: Si
Località: Torino
Contatta:

Re: Decoder funzioni con ATtiny85

Messaggio da despx »

Piuttosto che complicarsi la vita con un fotoaccoppiatore, io realizzerei una alimentazione x rendere autonoma la scheda. A tal riguardo consiglio per raddrizzare il Dcc un ponte rettificatore della famiglia MBS un condensatore al tantalio da 47 uF 25 V. La tensione raddrizzata si applica a Vin e gnd, il segnale DCC si preleva invece da una rotaia e tramite una resistenza da 2,2K e zener da 5 V ( tra segnale e massa) si applica al pin del micro. Costo della cosa circa 2-3 euro ma vantaggio enorme :!:

Ciao
Despx
Progettista di: KDCCX, KBoosterX, K652, KLed, KDec, K652toPluX16, KUPS.
Sito web: http://www.despx.it
Luca Regoli
Assistente di Stazione
Assistente di Stazione
Messaggi: 1767
Iscritto il: martedì 7 marzo 2006, 7:26

Re: Decoder funzioni con ATtiny85

Messaggio da Luca Regoli »

Grazie Paolo del contributo!
Non capisco però una cosa: consigli di mandare al Vin del micro la tensione proveniente dal raddrizzatore: sul pcb c'è un regolatore 7805, non scalderà un pò troppo sparandogli dentro circa14volts (considerando 16v del dcc meno la perdita del ponte)? Consigli una resistenza sull'ingresso Vin? Metto cmq subito in cantiere il tuo schema per provarlo e vedere se riesco a fare a meno dell'optoisolatore.
Siccome stavo pensando di comandare una striscia di led (quelli cinesi che si vendono al metro) x illuminare le carrozze, l'idea che avevo era quella di porre dopo il ponte un condensatore e un 7812 e da li inviare a Vin x l'alimentazione del tiny e per avere la 12 v per alimentare la striscia tramite un transistor pilotato da un'uscita. Probabilmente con una resistenza al posto del regolatore si risolve lo stesso visti bassi assorbimenti in gioco....
Farò un pò di prove, ma dammi la tua opinione; probabilmente hai già risolto il problema con una soluzione migliore!
Ciao!
Rispondi

Torna a “Universo Digitale DCC”