Nieuws:

Nu in MSM 251 PRAKTIJK: Zelfbouw van briketten voor de stoomlocomotief * Een Railpool-TRAXX in een Lineas-jasje * Een trein voor de staalindustrie

Hoofdmenu

Universele functie decoder voor wagons

Gestart door Sattrickske, 04 mei 2013, 11:02:06 AM

Geert

Bedankt voor de info,

20 jaar geleden nog met Thomsom µC bezig geweest. Die koste toen per stuk 800Bfr, ik heb (had) er veel van liggen maar vorig jaar allemaal weggegooid.  Sinds 3 jaar blijf ik bij de PIC's

Geert
Schaal H0 - digitaal zelfbouw - Favoriete Lok: V200 DB

Geert

Citaat van: Sattrickske op 09 mei 2013, 22:50:43 PM
'k Ben nu al een paar jaar met PIC bezig (voornamelijk 12F683, 16F628 en 18F4550),

Ik zie dat je al eens met PIC's uit de 18 reeks gewerkt heb. Voor mijn huidig project een zelfbouw digitale centrale kom ik wat rekenkracht te kort. Ik denk er aan om de 32 reeks aan te schaffen. Heb jij daar al ervaring mee?

Geert
Schaal H0 - digitaal zelfbouw - Favoriete Lok: V200 DB

Sattrickske

Citaat van: Geert op 11 mei 2013, 10:46:06 AM
Ik zie dat je al eens met PIC's uit de 18 reeks gewerkt heb. Voor mijn huidig project een zelfbouw digitale centrale kom ik wat rekenkracht te kort. Ik denk er aan om de 32 reeks aan te schaffen. Heb jij daar al ervaring mee?
Toch al wat ja.  Ik gebruik een 18F4550 voor de selfmade heated build platform van m'n 3D printer aan te sturen.  Enkel m'n PicPro programmer doet 't niet met deze reeks (nog niet uitgezocht waarom).  M'n development board kan wel deze reeks zonder problemen programmeren.  Ik gebruik niet echt de 'rekenpower' van dat beestje, ik had veel I/O nodig (keyboard, LCD, USB, temp. sensoren, relais aansturing, ...).

Sattrickske

Ben helemaal niet stilgevallen, ben gewoon aan 't wachten op nog een paar componentjes uit China (diodes en condensatoren).  Ondertussen was ik bezig om m'n wagons van stroom te voorzien, maar ben op een probleempje gebotst: m'n fosfor brons is op.  Ik heb een leverancier in Duitsland (duurt altijd een week voor m'n bestelling aan huis geleverd wordt), maar is er niks dichterbij zodat ik snel verder kan?  Weet iemand een leverancier ergens in België?  Ik zoek platen van 0.1mm.

Sattrickske

De laatste componentjes zijn deze week gearriveerd dus decoder kon verder afgewerkt worden.  Was niet simpel, dit is de kleinste print die ik ooit gemaakt heb (12x21mm) met een microcontroller, een voeding en een MOSFET versterker.
De voeding zijde (met gelijkrichter, zener-stabilisatie en condensatoren):


De controller zijde (met PIC, dual MOSFET):


Ik nu 2 van (on-)dingen klaar, er staat een voorlopige test-software op die het DCC protocol verstaat.  De software moet nog worden aangepast en geoptimaliseerd, maar da's voor ergens volgende week.

conducteur

Hoe maak je de verbinding tussen top en bottom layer?
Rian 2-Rail DCC NMBS TPIII
Grote Modeltreinruilbeurs Blankenberge Pasen 2016
Zaal Forum

Geert

Knap werk.  ;)

Ik heb deze week 12F683 PIC's besteld voor een gelijkaardig project. Het is de bedoeling dat deze een mfx lok mee leest als deze zich aanmeld bij de centrale. Het teruggemelde adres zal de PIC opslagen in zijn EEPROM om zo sluitlichten en binnenverlichtingen te schakelen. 

De code in ASM heb ik al geprogrammeerd, nu nog wachten op de µC...

Geert
Schaal H0 - digitaal zelfbouw - Favoriete Lok: V200 DB

Sattrickske

Terwijl ik aan 't wachten was op m'n componentjes was ik aan 't nadenken over een ander probleem.  De decodertjes zijn bedoeld voor wagons; maar dan moet je natuurlijk stroom in je wagons krijgen.  Stroomvoerende koppelingen gebruik ik liever niet omdat ze bij mij niet zo goed werken als er wagons aangekoppeld moeten worden (er is serieus wat druk nodig voor de koppeling vastklikt).  Dus wou ik de wagons uitrusten met massa pickup en slepers (3-rail).
Voor de meeste modellen (Märklin) gaat dat heel eenvoudig, de wagons zijn hierop voorzien, een setje kopen, vastklikken en klaar is kees.  Maar ik heb een hele serie wagons van Liliput (Compagnie Internationale des Wagons-Lits) die m'n Orient Express gaan vormen.  En dat zijn rot-wagons om er stroom in te krijgen:

Een domme zelftappende schroef houdt het wielstel op z'n plaats en zit lelijk in de weg.

Na testen en prutsen, tot de volgende oplossing gekomen met een adaptertje (met de hulp van de 3D-printer, maar had ook perfect met wat stukjes styreen gekund):


En met fosforbrons een paar wheel-pickups gemaakt:


Een standaard sleper van Märklin 7164 aan gepast (2 extra gaatjes geboord voor M1.6) en de wheel-pickup tegen m'n adaptertje gekleefd met secondenlijm:


En tadaaa, stroom in m'n Liliput wagons.  Opgelet het heeft wel één nadeel: de wagon wordt een beetje afgeremd door de wheel-pickups.  Dit kan bij mij geen kwaad omdat ik geen rangeerheuvel gebruik.  Dit nadeel kan snel worden weggewerkt door de massa aan het andere wielstel af te tappen en de pickup dan tegen de wiel assen te laten slepen, geeft minder wrijving.  Maar ik had geen zin om draden door gans m'n wagon te gaan trekken, dus heb ik het op mijn manier opgelost.

Later ga ik wel het interieur van deze wagons serieus moeten bijwerken, want Liliput heeft hier iets heel idioots gedaan: het gans interieur is GEEL :o.  Geen flauw idee waar dat goed voor is, maar het trekt in ieder geval op niks, laat staan op de Orient Express...

Sattrickske

Citaat van: conducteur op 08 juni 2013, 22:37:54 PM
Hoe maak je de verbinding tussen top en bottom layer?
Ik heb maar 3 verbindingen tussen top en bottom, dus gewoon een stukje draad (wire-wrap draad) aan beide kanten solderen.

Sattrickske

Citaat van: Geert op 08 juni 2013, 22:48:21 PM
Knap werk.  ;)

Ik heb deze week 12F683 PIC's besteld voor een gelijkaardig project. Het is de bedoeling dat deze een mfx lok mee leest als deze zich aanmeld bij de centrale. Het teruggemelde adres zal de PIC opslagen in zijn EEPROM om zo sluitlichten en binnenverlichtingen te schakelen. 

De code in ASM heb ik al geprogrammeerd, nu nog wachten op de µC...

Geert
Thanks!
Welke 12F683 heb je nodig?  Ik heb er nu genoeg op voorraad (>100) liggen (wel allemaal SMD).  Als je wil mag je er een paar komen halen om je te depanneren...
Ziet er mij anders ook wel een leuk projectje uit.

Geert

Aan MSD ben ik nog niet aan toe. Ik werk nog steeds met gaatjesprinten. Ik heb ze besteld in DIL, maar zeer prijzig  :( , toch bedankt voor je aanbod. Wie weet in de toekomst...

Geert
Schaal H0 - digitaal zelfbouw - Favoriete Lok: V200 DB

Sattrickske

Wou vandaag proberen om de vernieuwde (C) code in de functie decoder te uploaden.  Maar 't gaat mis...
Ik heb een paar optimalisaties in de code ingebouwd, zodat deze herbruikbaar is voor de andere projecten.  De DCC decodering werkt perfect.  De PWM heb ik uitgeschakeld omdat hiervoor te weinig processor tijd overschiet.  Maar bij de aansturing van de uitgangen loopt 't mis.
Ik heb geprobeerd om de gebruikte poorten als initiële pointers te definiëren.  Zo hoef je maar op één plaats je configuratie van je schakeling mee te geven en de software trekt verder z'n plan.  Maar 't werkt niet, m'n pointers zitten verkeerd na de declaratie:

#define MAX_OUTPUTS 4
typedef struct {
volatile unsigned char * outputPort;
unsigned char outputBit;
} output;
const output outputs[MAX_OUTPUTS] = {
&PORTA, 1<<0,
&PORTA, 1<<1,
&PORTA, 1<<2,
&PORTA, 1<<3
};

PORTA zit op adres 0x005, als ik met de debugger ga kijken na de initialisatie zie ik voor de 4 outputPort constanten 3 verschillende waarden (0x3405, 0x3402, 0x3405, 0x3FFF), de outputBits zijn ook allemaal verkeerd.  Als ik de data bekijk, lijkt het erop of alles 1 of meer bytes verschoven is.
Het boeltje is gecompileerd met de HI-TECH C compiler.

Iemand een idee?

conducteur

Je hebt het blijkbaar in C geschreven, met de C van Chinees...
Rian 2-Rail DCC NMBS TPIII
Grote Modeltreinruilbeurs Blankenberge Pasen 2016
Zaal Forum

MickeyMouse

#43
Hoe en waar is PORTA gedefinieerd?
Je wil dus de waarden 1, 2, 4 en 8 in outputBit krijgen?

Geert

Sattrickske

Citaat van: MickeyMouse op 16 juni 2013, 18:40:48 PM
Hoe en waar is PORTA gedefinieerd?
Je wil dus de waarden 1, 2, 4 en 8 in outputBit krijgen?
PORTA zit in de header van de PIC

// Register: PORTA
volatile unsigned char           PORTA               @ 0x005;

Ik wil vermijden dat er verder in m'n code referenties naar die PORTA zitten.  En ja, de waarden voor de outputBit zijn de bitmasks voor de betreffende pinnetjes; 'k ga later trouwens 'outputBit' vervangen door 'bitmask'.