Pendelautomaat voor digitale treinen

Gestart door Geert, 06 september 2013, 21:52:28 PM

Geert

#30
Voorbeeld filmpje servo aansturing

Het volgende FILMPJE geeft een voorbeeld weer hoe het digitale pendelautomaat servo's kan aansturen. Ik stuur via opcodes elke seconde nieuwe pulsen door.  En dit komt neer als de volgende opcodes, de digitale opcodes geef ik niet weer, wel de iets meer leesbare:

....
SS S1 50     <-- start Servo 1 met pulsen van 0,5ms
T1 T1 1        <--wacht 1 seconde
T1 S1 60      <-- nieuwe positie servo 1 met pulsen van 0,6ms
T1 T1 1        <-- wacht weer 1 seconde
....                <--enz....
T1 S1 250     <-- uiteindelijk komen we aan bij pulsen voor servo 1 van 2,5ms
T1 T1 5          <-- wacht 5 seconden
T1 S1 50        <-- Ga terug naar beginpositie servo 1:  0,5ms



Geert
Schaal HO - digitaal zelfbouw - Favoriete Lok: V200 DB
Huidig project: LocoNet 16 poorten ingangen/uitgangen

Geert

Digitale uitgangen (LED uitgangen)

Er zijn op het pendelautomaat 8 binaire uitgangen voorzien die aan (ON) of uit(OFF)  gezet kunnen worden, en dit via de volgende opcode achter de voorwaarde:

M1 BON 1           --> als Terugmelder  1 ='1' dan Binaire uitgang  1 ON (actief)
...
T1 BOFF 1           --> als Timer 1 afloopt dan Binaire uitgang 1 OFF

Handig om weten is dat een PIC µC zijn uitgangen van het type 'High current source/sink for direct LED drive' zijn, vrij vertaald je kan als de uitgang logisch '0' is een LED aansturen die via R verbonden is met +5V. Of je kan, als de uitgang logisch '1' is ook een LED aansturen die via R verbonden is met de massa. Wel rekening houdend dat elke uitgang maximum 25mA kan uitsturen, wat al veel is voor een LED. Als je de beide mogelijkheden combineert, kan je met één uitgang twee LED's aansturen waarvan er één oplicht, bijvoorbeeld een groene LED en een rode LED, zo bekom je een simpele sein. Op de volgende tekening kan ik zo als de uitgang BON (1) is een groene LED laten oplichten, en als de uitgang BOFF (0) is een rode LED laten oplichten.  (niet alle LED's zijn getekend) Wil je een iets realistischer sein bekomen met om ook  oranje LED's, dan heb je wel meerder uitgangen nodig.



Het is mogelijk, wel nog niet voorzien, dat je LED's kunt laten pinken. Handig bij overweglichten, ooit er eens bij programmeren denk ik...

Het kan zijn dat die 25mA wat weinig is, met één zeer goedkope ULN2803 kan je de 8 digitale signalen eenvoudig versterken zodat je maximum 500mA kan aansturen. Ik heb dit al eens toegepast om Marklin K rails wissels om te zetten. Met 8 versterkte digitale uitgangen kan je zo 4 wissels omzetten in een nieuwe stand. Wel rekening houden dat je de uitgang na 1 seconde terug uit zet: zo dus:

M1 BON 1           --> als terug melder 1 = ,1' dan Binaire uitgang 1 ON
M1 T1 1              --> terugmelder 1 start ook timer 1 voor 1 seconde
T1 BOFF 1           --> als timer 1 na 1 seconde afloopt dan Binaire uitgang 1 OFF

Ik ga nu niet direct uit de doeken doen hoe je een ULN2803 aansluit op een PIC µC. Ik heb dit al is eerder gedaan, en een beschrijving ervan kan je vinden op DEZE link.

Geert
Schaal HO - digitaal zelfbouw - Favoriete Lok: V200 DB
Huidig project: LocoNet 16 poorten ingangen/uitgangen

dani

voor wissels is 1 sekonde al ruim gerekend denk ik.   Met mijn arduino sturingen gebruik ik pulsen van 200 tot 300 mSec en dat is voldoende bij normale wisselbedieningen van Märklin.
Ik vermoed dat dat ook geldt voor andere merken.  (tenzij de speciale trage wisselbedieningen van bvb Viessmann, denk ik)
De kruik is te water gegaan...
De kruik is niet meer.

Geert

Weet ik, maar mijn timerbasis is 1seconde  ;)

Goeie wisselaansturingen op basis van spoelen zouden als ze geschakeld zijn de stroom zelf al onderbreken. Denk ik tenminste...


Geert
Schaal HO - digitaal zelfbouw - Favoriete Lok: V200 DB
Huidig project: LocoNet 16 poorten ingangen/uitgangen

dani

#34
juist; dat is zeker zo, behalve bij de oudere modellen.  en aangezien ik er vabn die ouwe rakkers nog flink wat heb (40-tal) heb ik de aanpassing gemaakt.  dus wat je zegt is correct, 1 sekonde moet kunnen, langer zelfs ook nog als je wissels met afschakeling hebt.

Mijhn volgende vraag daarbij dan is hoe je meerdere wissel na elkaar stuurt.  Wacht je tot je timer van 1 skonde is afgelopen en ga je dan naar de volgende of stuur je ze in parallel aan ?   bijvoorbeeld als je een "tracé" wil automatiseren waarbij je 5 wissels moet omleggen... dan is het handig als die na elkaar schakelen (om je voeding wat te kunnen  sparen kwa vermogen) maar toch niet te lang tussenpozen hebben.   Daar lag mijn compromis op 200 a 300 mSec.   Ik heb een aantal "presets" in mijn baan gebouwd zodat treinen een bepaald traject rijden naargelang hoe ik klik op het pc scherm   (ik gebruik geen standaard  out of the box software genre koploper of itrain of zo maar eigen gemaakt softwarespul)
De kruik is te water gegaan...
De kruik is niet meer.

Geert

Ik kan ze enkel maar na elkaar schakelen, dus vier (maximum via deze methode) wissels omzetten duur net iets meer dan 3 seconden (de vierde seconde is enkel om de spoelbekrachtiging terug uit te schakelen, maar hij is dan al geschakeld).

Maar dit is maar bijzaak, ik kan wel 8 wissels omzetten via de servo uitgangen   :D

Bij de servo sturing is het wel zo dat er maar 1 gelijkertijd kan bewegen, deels om de voeding wat te sparen maar vooral om de software eenvoudiger te houden.

Geert
Schaal HO - digitaal zelfbouw - Favoriete Lok: V200 DB
Huidig project: LocoNet 16 poorten ingangen/uitgangen

dani

wel, zelfs dan nog....   hoe vaak gebeurt het dat je  inderdaad meer dan 2 a 4 stuks na elkaar moet schakelen...  en je moet al  hele snelle treinen hebben om dat traject in die tijd te berijden  (of je wissels moeten vlak na elkaar liggen op een stations- f rangeerbereik).

In elk geval,  het werkt, en dat is het belangrijkst.   Ikheb hiervoor in de software   (aan de pc kant) gezorgd dat de pc de toestand van de wissels onthoudt en enkele degene schakelt die niet correct staan;  Dat scheelt ook al weer.
De kruik is te water gegaan...
De kruik is niet meer.

Geert

#37
Nog een FILMPJE. Hier kan ik al twee digitale treinen laten rijden op een simpel traject. Hierbij nog geen wisselaandrijving, seinen of wat dan ook. Gewoon laten zien wat dit kan. Geniet...

Let ook met het probleem dat ik nog altijd heb met de stoomlok en geluidfuncties die wegvallen. Dit zit ergens in de decoder van de loc.  >:(


Dit zijn de opcodes die je ziet:

      
      DE 0x8F, 0x10               ;SS L1 +0
      DE 0x8F, 0x94               ;SS L1 F10100
      DE 0xCF, 0x0A               ;SS T1 10
      DE 0x8E, 0x96               ;T1 L1 F10110
      DE 0xCE, 0x01               ;T1 T1 1
      DE 0x8E, 0x94               ;T1 L1 F10100
      DE 0x8E, 0x1A               ;T1 L1 +10
      DE 0xCE, 0x14               ;T1 T1 20
      DE 0x8E, 0x96               ;T1 L1 F10110
      DE 0xCE, 0x01               ;T1 T1 1
      DE 0x8E, 0x94               ;T1 L1 F10100
      DE 0xC0, 0x03               ;M1 T1 3
      DE 0x8E, 0x12               ;T1 L1 +2
      DE 0x81, 0x10               ;M2 L1 +0
      DE 0xC1, 0x05               ;M2 T1 5
      DE 0x8E, 0x80               ;T1 L1 F00000
      DE 0xCE, 0x0A               ;T1 T1 10
      DE 0xAE, 0x94               ;T1 L3 F10100
      DE 0xCE, 0x0A               ;T1 T1 10
      DE 0xAE, 0x1C               ;T1 L3 +12
      DE 0xCE, 0x05               ;T1 T1 5
      DE 0xAE, 0x96               ;T1 L3 F10110
      DE 0xCE, 0x01               ;T1 T1 1
      DE 0xAE, 0x94               ;T1 L3 F10100
      DE 0xCE, 0x04               ;T1 T1 4
      DE 0xAE, 0x96               ;T1 L3 F10110
      DE 0xCE, 0x01               ;T1 T1 1
      DE 0xAE, 0x94               ;T1 L3 F10100
      DE 0xC0, 0x02               ;M1 T1 2
      DE 0xAE, 0x12               ;T1 L3 +2
      DE 0xCE, 0x04               ;T1 T1 4
      DE 0xAE, 0x96               ;T1 L3 F10110
      DE 0xCE, 0x01               ;T1 T1 1
      DE 0xAE, 0x94               ;T1 L3 F10100
      DE 0xA2, 0x10               ;M3 L3 +0
      DE 0xC2, 0x0A               ;M3 T1 10
      DE 0xAE, 0x80               ;T1 L3 F00000
      DE 0xCE, 0x0A               ;T1 T1 10


Nu volgt de grotere uitdaging 4 treinen met wissels, seinen enz... echt laten pendelen. ;) 

Geert

Schaal HO - digitaal zelfbouw - Favoriete Lok: V200 DB
Huidig project: LocoNet 16 poorten ingangen/uitgangen

dani

1.  "Alle begin is moeilijk"
+
2. "Dit is een heel goed begin".

=   "dit komt helemaal goed",  echt respect voor wat je hier presteert in volledige zelfbouw en -ontwikkeling.
De kruik is te water gegaan...
De kruik is niet meer.

philippe_007

Dat ziet er goed uit,
ik blijf het volgen en wie weet dat ik dit ooit wil gebruiken...

Geert

#40
Het is nog niet gedaan, maar zo ziet het pendeltoestelletje er nu uit:



hardwarematig nog wat werk dus...

software:
-nog altijd uitzoeken waarom de stoomlokomotief (zie filmpje zijn geluid afzwakt als de snelheid mindert?
-seriële communicatie met PC waarmee je dit pendelautomaat kunt instellen.
-via deze seriële communicatie zou het ook mogelijk moeten worden, te volgen in welke stap deze zit, en de servo's in te stellen.

Allé, dus software ook nog heel wat werk  8)

Ondertussen nog met twee andere projectjes bezig.


Geert
Schaal HO - digitaal zelfbouw - Favoriete Lok: V200 DB
Huidig project: LocoNet 16 poorten ingangen/uitgangen

argilla

Geert, mooi gedaan
Een klein vraagje. Zou het mogelijk zijn die opstelling test, filmpje, ook eens te doen met een twee rail ipv drie rail ? Thx  ;)
argilla
H0, On30, 1/29, Gn15

Geert

Citaat van: argilla op 20 september 2013, 17:26:05 PM
Geert, mooi gedaan
Een klein vraagje. Zou het mogelijk zijn die opstelling test, filmpje, ook eens te doen met een twee rail ipv drie rail ? Thx  ;)

Citaat van: Geert op 20 september 2013, 17:17:24 PM

Ondertussen nog met twee andere projectjes bezig.



;)

Geert
Schaal HO - digitaal zelfbouw - Favoriete Lok: V200 DB
Huidig project: LocoNet 16 poorten ingangen/uitgangen

Geert

Link tussen OPCODE en het assembler program:

We gaan nu een stapje verder in de link tussen de opcode en de machine taal (assembler-code die de µC echt verstaat). Die opcode is niet zomaar een verzonnen code. Er zit wat logica in, die het assembler programma vereenvoudigd. Ik ga nu een techniek bespreken die 'berekende sprongadressen' wordt genoemd. Het komt er op neer dat we de instructieteller van de µC gaan beïnvloeden door er een waarde bij te tellen. De instructieteller springt dan wat verder naar een nieuwe positie in het programma. Op deze nieuwe locatie staat een gewone sprongopdracht, een GOTO, naar een locatie in het µC programma waar de opcode verder verwerkt wordt. De waarde die bij de instructieteller wordt bijgeteld zit deels in de opcode.

Ik heb al eerder verteld dat de opcode bestaat uit 2 bytes nl. OPCODEB1 en OPCODEB2. OPCODEB1 is opgesplitst in 8 bits: B7...B0.

In de eerste 4 bits B3,B2,B1 en B0 zit een sprongadres in verwerkt naar de voorwaarde om de OPCODE te mogen uitvoeren respectievelijk voorwaarde M1;...M14; T1 en SS. Het zijn deze 4 bits die bij de instructieteller worden opgeteld om verder te springen in het programma waar een GOTO staat. Op de nieuwe locatie in het programma, nadat er via een GOTO opdracht naar toe is gesprongen ,gaat de µC na of de voorwaarde is voldaan.

Is de voorwaarde voldaan, dan gaat het programma na wie de opdracht moet uitvoeren. Deze zit verwerkt in bits B7,B6,B5 en B4 van de opcode. Ook deze 4 bits worden bij de instructieteller opgeteld om zo via een GOTO opdracht de opdracht uit te voeren.

De nieuwe locsnelheid, locfuncties, timerwaarde, servowaarde of binaire waarde zit verwerkt in OPCODEB2.

In het assembler program wordt nog veel meer gebruik gemaakt van berekende sprongadressen om het programma te vereenvoudigen. Ik weet niet of deze techniek ook bestaat in een iets hogere programmeertaal zoals C of JAL?

Voor de geïnteresseerden het ASM programma als LINK. Het programma is nog niet af, werkt wel (zie filmpje hiervoor), maar maakt wel duidelijk wat ik bedoel met berekende sprongadressen.

Nu eerst het DCC protocol opwekken met dezelfde logica zoals hiervoor beschreven. Gelukkig heb ik 2 multiprotocol locomotieven, die zowel MM2 als DCC verstaan, om dit te testen  :).

Geert
Schaal HO - digitaal zelfbouw - Favoriete Lok: V200 DB
Huidig project: LocoNet 16 poorten ingangen/uitgangen