Stap 2: DCC packet ontvanger - Basic circuit
Bijgewerkt 23 maart 2016:
Toegevoegd stroomkring zin te beschermen opkomst spoelen en H-brugapparaten enz meer dan de huidige.
int analogPin = 7; const int Power_shut_off = 19; // A5 as digital pinMode(Power_shut_off, OUTPUT); digitalWrite(Power_shut_off, HIGH);
In de loop van het nietig:
amp = analogRead(analogPin); if (amp > 5){ Serial.println(amp); } if (amp > 200 ){ // approx 2 amps digitalWrite(Power_shut_off, LOW); }
Wanneer 2 versterkers wordt overschreden, uitschakelt de TIP 120 als de stroomvoorziening (12 volt of 15 volt) naar de wissels.
_____________________________________________________________________
Van een uitstekende tutorial door Geoff Bunza in het forum van de Hobbyist Magazine Model Railroad . Het beschreven hoe een Arduino Pro Mini (een low-cost Arduino board) kon worden bedraad en geprogrammeerd om te reageren op de functietoetsen op een DCC-controller. Dit opent een wereld van beheeropties voor animaties, geluid en andere opties op een DCC uitgerust model railroad.
Ik heb gebruik van dit circuit te vangen DCC pakketten van mijn Arduino gebaseerde opdracht Station
(Zie instructable). De opdracht station is ook gewijzigd zodat opkomst controle (8 opkomst tot nu toe).
Fundamentele accessoire decoder packet is:
0 10AAAAAA 0 1AAACDDD 0 EEEEEEEE 1
Uit de analyse van het pakket gebruikt door Lenz (Compact / Atlas) voor controle van de punten, ik heb de volgende binaire pakketindeling gebruikt voor bytes 1 en 2:
tunAddr = 1
Opkomst 1a: 1000 0001 1111 1000 / opkomst 1b: 1000 0001 1111 1001
Opkomst 2a: 1000 0001 1111 1010 / opkomst 2b: 1000 0001 1111 1011
Opkomst 3a: 1000 0001 1111 1100 / opkomst 3b: 1000 0001 1111 1101
Opkomst 4a: 1000 0001 1111 1110 / opkomst 4b: 1000 0001 1111 1111
tunAddr = 2
------------------------------------------------------------------------------------------------------------
Opkomst 5a: 1000 0010 1111 1000 / opkomst 5b: 1000 0010 1111 1001
Opkomst 6a: 1000 0010 1111 1010 / opkomst 6b: 1000 0010 1111 1011
Opkomst 7a: 1000 0010 1111 1100 / opkomst 7b: 1000 0010 1111 1101
Opkomst 8a: 1000 0010 1111 1110 / opkomst 8b: 1000 0010 1111 1111
-----------------------------------------------------------------------------------------------------------
Opkomst 9a: 1000 0011 1111 1000 / opkomst 9b: 1000 0011 1111 1001
enz...
Door manipulatie van het binaire pakket, kunnen we halen de wissels vereist en stuur een puls van 350 ms.
BV
Als we kijken naar de eerste byte:
0x80 in HEX = 1000 0000 in Binary
tunAddr = (Msg->Data[0] - 0x80);
tweede bytekijken:
0x8f8 in HEX = 1111 1000 in binaire, dan verschuiving bitwise >> 1 te elimineren laatste stukje
f1a op:
if (tunAddr == 1){
if ((((Msg->Data[1]) - 0xf8>>1) + 1) == 1 && (Msg->Data[1] & 0x01) == 1){
digitalWrite(FunctionPin1a, 1); delay(350); digitalWrite(FunctionPin1a, 0); }
Het diagram toont LED uitgangen. LEDs vervangen van solenoïde wagenmenner BV TIP120 (2 uitgeschakeld vereist voor elke opkomst) of SN754410 Quad stuurprogramma (levert 2 wissels per IC).
Alle digitale uitgangen worden gebruikt in paren te produceren van een puls die de opkomst elektromagneten via motor stuurprogramma's of macht darlington-transistors branden. De code kan worden aangepast aan de stuurprogramma's gebruikt van een '1' puls aan een '0' pulse.
NMRA-library downloaden hier
Arduino Code downloaden: