Repostare din 22.02.2015 cu link-urile imaginilor editate:
Nu imi dau seama exact de ce, dar vad ca in ultima vreme ShowDCC NU se mai intelege bine cu placile de sunet moderne (integrate in placa de baza). Posibil sa fie vreo problema de timing a softului care decodeaza in timp real forma de unda captata de acestea; cert este insa faptul ca ShowDCC afiseaza mult 'garbage', peste jumatate dintre pachetele DCC nefiind intelese.
Nemultumit de situatie, m-am gandit la o noua abordare - digitala - a problemei, care sa reuseasca afisarea fara erori a tuturor pachetelor DCC. Asa s-a nascut :
DCC Sniffer ver.2

Schema este relativ simpla, dar contine 2 PIC-uri, fiecare cu propriul firmware. Primul PIC (12F629) detecteaza pachetele DCC si extrage cei 3-6 bytes pe care ii transmite, impreuna cu informatii despre preambulul de sincronizare, catre cel de-al 2-lea PIC. Transmiterea este seriala, cu 100.000 baud.
Al 2-lea PIC (16F690) decodeaza bytes-ii primiti si ii traduce (in masura in care stie) in text 'in clar' pe care il transmite catre convertorul COM-USB (placuta rosie) si apoi la PC unde sunt afisate de Hyperterminal. Transmiterea este seriala, cu 225.000 baud (-2,3% fata de 230.400) 8-N-1. In acest mod, am reusit afisarea 100% fara erori a pachetelor DCC.

Montajul nu are nevoie de alimentare separata, preluand curent direct de la sine, consumul fiind mic ~30mA. Modulul COM-USB se alimenteaza direct din portul USB. Recomand folosirea modulelor bazate pe chipul FT232.
La apasarea micro-switch-ului, un numar de 256 de pachete DCC sunt detectate, decodate si afisate in Hyperterminal; tinerea apasata a butonului asigura monitorizarea continua a semnalului DCC. Totusi, 256 de pachete detectate fara erori sunt mai mult decat suficiente, acoperind ~2 secunde, rata de repetitie a pachetelor (refresh-ul) fiind mult mai mare (vezi postarile anterioare).
Hyperterminal-ul din Windows afiseaza datele in 3 coloane: prima coloana contine numarul de biti ai preambulului de sincronizare, a 2-a coloana contine cei 3-6 bytes ai pachetului DCC in format hexa, iar a 3-a coloana contine semnificatia pachetului. Primele 2 coloane sunt afisate permanent, a 3-a doar daca pachetul este 'inteles' de decodor. Standardul NMRA fiind destul de 'stufos', m-am axat pe decodarea pachetelor uzuale, de operare curenta, fiind excluse din start cele pt. 'service mode' sau 'consist'. In functie de timp, voi adauga si alte tipuri de pachete.
DCC Sniffer afiseaza urmatoarele tipuri de pachete DCC:
- comenzi catre locomotive (adresa scurta 0-127) sunt afisate ca "Loco" + adresa din 3 cifre (zerourile initiale fiind inlocuite de ".")
- comenzi de deplasare in 28 trepte de viteza sunt afisate ca "S" + viteza din 2 cifre + "F" pt. directia inainte, sau "R" pt. directia inapoi.
- comenzi de activare functii grup1 (F0-F4) sunt afisate ca [FX1234], functiile 'stinse' fiind afisate ca "-". (X este de fapt steluta)
- comenzi de activare functii grup2 (F5-F8 ) sunt afisate ca [F'5678], functiile 'stinse' fiind afisate ca "-".
- comenzi de activare functii grup2bis (F9-F12) sunt afisate ca [F"9ABC], functiile 'stinse' fiind afisate ca "-".

In imaginea din dreapta de mai sus, locomotiva cu adresa 96 se deplaseaza inapoi, cu viteza maxima si are toate functiile F0-F12 activate.
Comenzile catre functii >F12 nu sunt implementate, intrucat sunt rar folosite si nu beneficiaza de refresh. (nu sunt repetate de centrala)
- comenzi de deplasare in 126 trepte de viteza sunt afisate ca "S" + viteza din 3 cifre + "F" pt. directia inainte, sau "R" pt. directia inapoi.

In exemplu, locomotiva cu adresa 50 se deplaseaza inainte, cu viteza 72 (din 126). Se observa ca pachetul de viteza este format din 4 bytes, in timp ce pachetele de functii pt. aceeasi locomotiva (toate stinse) sunt formate din cate 3 bytes.
- comenzi catre locomotive (adresa lunga 0-10239) sunt afisate ca "Loco" + adresa din 5 cifre (zerourile initiale fiind inlocuite de ".")

Comenzile catre locomotive cu adresa lunga sunt formate din 4 bytes atat pt. viteza (28 trepte) cat si pt. functii. Locomotiva cu adresa 9999 se deplaseaza inapoi, cu viteza 21 (din 28 ).

In exemplul de mai sus locomotiva cu adresa 3000 se deplaseaza inainte, cu viteza 112 (din 128). Comanda de viteza este formata din 5 bytes, in timp ce comenzile functii au cate 4 bytes.
- comenzi catre accesorii (1 - 2048) sunt afisate ca "Acc" + adresa din 4 cifre + "to closed" pt. linia directa, sau "to thrown" pt. linia abatuta. Comenzile au 3 bytes.

- comenzi de modificare CV in mod POM (programming on main)

Comanda de scriere a valorii 125 in CV100 al locomotivei cu adresa 9999. Comanda contine 6 bytes :!: este repetata si urmata apoi de 6 pachete idle, pt. a da timp decodorului sa o execute.
Fisierele necesare programarii celor 2 PIC-uri pot fi descarcate de aici:
Nu imi dau seama exact de ce, dar vad ca in ultima vreme ShowDCC NU se mai intelege bine cu placile de sunet moderne (integrate in placa de baza). Posibil sa fie vreo problema de timing a softului care decodeaza in timp real forma de unda captata de acestea; cert este insa faptul ca ShowDCC afiseaza mult 'garbage', peste jumatate dintre pachetele DCC nefiind intelese.
Nemultumit de situatie, m-am gandit la o noua abordare - digitala - a problemei, care sa reuseasca afisarea fara erori a tuturor pachetelor DCC. Asa s-a nascut :
DCC Sniffer ver.2

Schema este relativ simpla, dar contine 2 PIC-uri, fiecare cu propriul firmware. Primul PIC (12F629) detecteaza pachetele DCC si extrage cei 3-6 bytes pe care ii transmite, impreuna cu informatii despre preambulul de sincronizare, catre cel de-al 2-lea PIC. Transmiterea este seriala, cu 100.000 baud.
Al 2-lea PIC (16F690) decodeaza bytes-ii primiti si ii traduce (in masura in care stie) in text 'in clar' pe care il transmite catre convertorul COM-USB (placuta rosie) si apoi la PC unde sunt afisate de Hyperterminal. Transmiterea este seriala, cu 225.000 baud (-2,3% fata de 230.400) 8-N-1. In acest mod, am reusit afisarea 100% fara erori a pachetelor DCC.

Montajul nu are nevoie de alimentare separata, preluand curent direct de la sine, consumul fiind mic ~30mA. Modulul COM-USB se alimenteaza direct din portul USB. Recomand folosirea modulelor bazate pe chipul FT232.
La apasarea micro-switch-ului, un numar de 256 de pachete DCC sunt detectate, decodate si afisate in Hyperterminal; tinerea apasata a butonului asigura monitorizarea continua a semnalului DCC. Totusi, 256 de pachete detectate fara erori sunt mai mult decat suficiente, acoperind ~2 secunde, rata de repetitie a pachetelor (refresh-ul) fiind mult mai mare (vezi postarile anterioare).
Hyperterminal-ul din Windows afiseaza datele in 3 coloane: prima coloana contine numarul de biti ai preambulului de sincronizare, a 2-a coloana contine cei 3-6 bytes ai pachetului DCC in format hexa, iar a 3-a coloana contine semnificatia pachetului. Primele 2 coloane sunt afisate permanent, a 3-a doar daca pachetul este 'inteles' de decodor. Standardul NMRA fiind destul de 'stufos', m-am axat pe decodarea pachetelor uzuale, de operare curenta, fiind excluse din start cele pt. 'service mode' sau 'consist'. In functie de timp, voi adauga si alte tipuri de pachete.
DCC Sniffer afiseaza urmatoarele tipuri de pachete DCC:
- comenzi catre locomotive (adresa scurta 0-127) sunt afisate ca "Loco" + adresa din 3 cifre (zerourile initiale fiind inlocuite de ".")
- comenzi de deplasare in 28 trepte de viteza sunt afisate ca "S" + viteza din 2 cifre + "F" pt. directia inainte, sau "R" pt. directia inapoi.
- comenzi de activare functii grup1 (F0-F4) sunt afisate ca [FX1234], functiile 'stinse' fiind afisate ca "-". (X este de fapt steluta)
- comenzi de activare functii grup2 (F5-F8 ) sunt afisate ca [F'5678], functiile 'stinse' fiind afisate ca "-".
- comenzi de activare functii grup2bis (F9-F12) sunt afisate ca [F"9ABC], functiile 'stinse' fiind afisate ca "-".

In imaginea din dreapta de mai sus, locomotiva cu adresa 96 se deplaseaza inapoi, cu viteza maxima si are toate functiile F0-F12 activate.
Comenzile catre functii >F12 nu sunt implementate, intrucat sunt rar folosite si nu beneficiaza de refresh. (nu sunt repetate de centrala)
- comenzi de deplasare in 126 trepte de viteza sunt afisate ca "S" + viteza din 3 cifre + "F" pt. directia inainte, sau "R" pt. directia inapoi.

In exemplu, locomotiva cu adresa 50 se deplaseaza inainte, cu viteza 72 (din 126). Se observa ca pachetul de viteza este format din 4 bytes, in timp ce pachetele de functii pt. aceeasi locomotiva (toate stinse) sunt formate din cate 3 bytes.
- comenzi catre locomotive (adresa lunga 0-10239) sunt afisate ca "Loco" + adresa din 5 cifre (zerourile initiale fiind inlocuite de ".")

Comenzile catre locomotive cu adresa lunga sunt formate din 4 bytes atat pt. viteza (28 trepte) cat si pt. functii. Locomotiva cu adresa 9999 se deplaseaza inapoi, cu viteza 21 (din 28 ).

In exemplul de mai sus locomotiva cu adresa 3000 se deplaseaza inainte, cu viteza 112 (din 128). Comanda de viteza este formata din 5 bytes, in timp ce comenzile functii au cate 4 bytes.
- comenzi catre accesorii (1 - 2048) sunt afisate ca "Acc" + adresa din 4 cifre + "to closed" pt. linia directa, sau "to thrown" pt. linia abatuta. Comenzile au 3 bytes.

- comenzi de modificare CV in mod POM (programming on main)

Comanda de scriere a valorii 125 in CV100 al locomotivei cu adresa 9999. Comanda contine 6 bytes :!: este repetata si urmata apoi de 6 pachete idle, pt. a da timp decodorului sa o execute.
Fisierele necesare programarii celor 2 PIC-uri pot fi descarcate de aici:
DCC sniffer I
MediaFire is a simple to use free service that lets you put all your photos, documents, music, and video in a single place so you can access them anywhere and share them everywhere.
www.mediafire.com
DCC sniffer I
MediaFire is a simple to use free service that lets you put all your photos, documents, music, and video in a single place so you can access them anywhere and share them everywhere.
www.mediafire.com
DCC sniffer II
MediaFire is a simple to use free service that lets you put all your photos, documents, music, and video in a single place so you can access them anywhere and share them everywhere.
www.mediafire.com
DCC sniffer II
MediaFire is a simple to use free service that lets you put all your photos, documents, music, and video in a single place so you can access them anywhere and share them everywhere.
www.mediafire.com









