G.I.P: automatisch schaduwstation zonder wissels

Gestart door conducteur, 09 mei 2012, 21:33:26 PM

conducteur

Niet gezien dat er zoveel activiteit was in dit draadje, wellicht méér dan een jaar geleden :p
Mijn adres hier in the White Mountains toon ik niet openbaar op een display, dus PM... :p  :)
Rian 2-Rail DCC NMBS TPIII
Grote Modeltreinruilbeurs Blankenberge Pasen 2016
Zaal Forum

conducteur

Zoek de fout  (hoe ik er in geslaagd ben, géén idee :p)



Rian 2-Rail DCC NMBS TPIII
Grote Modeltreinruilbeurs Blankenberge Pasen 2016
Zaal Forum

PeterC

Zes gaten in de flens en acht in de steun...
Onoplettend geweest zeker  ;)
Groetjes, Peter


conducteur

Ik wou het monteren, maar er pastte iets niet goed ::)
Rian 2-Rail DCC NMBS TPIII
Grote Modeltreinruilbeurs Blankenberge Pasen 2016
Zaal Forum

Steam.N

Oeps  :o ::)
Gelukkig dat toch twee gaten passen ... anders moest je opnieuw beginnen  ;D ;D ;D
Knutselgroeten !  Jean       TP-I (B) & TP-II (DR) - N - DC - Handbediening - Zelfbouw  { Sedelocus - De Feniks - Pira-N's Crossing - Turnhout NEEB - Scrap Yard }

conducteur

Met de CNC machine dat opnieuw maken is maar een kleine moeite, dus ik denk dat ik het hopelijk nu 100% juist ga hermaken. Voor de zekerheid nog eens alles nameten (diameter van de cirkel waarop de gaten staan bv). Op deze moer komt de volledige duwkracht van de motor te staan en moet dus proper vast te zitten. Maar eerst eens naar school gaan nu  :D
Rian 2-Rail DCC NMBS TPIII
Grote Modeltreinruilbeurs Blankenberge Pasen 2016
Zaal Forum

conducteur

Je display is gearriveerd, Peter. Ik zet er zo snel mogelijk de connector aan. Bedankt!
Rian 2-Rail DCC NMBS TPIII
Grote Modeltreinruilbeurs Blankenberge Pasen 2016
Zaal Forum

conducteur


Ik krijg de foto jammer genoeg niet recht, sorry voor de stijve nek...

Rian 2-Rail DCC NMBS TPIII
Grote Modeltreinruilbeurs Blankenberge Pasen 2016
Zaal Forum

PeterC

Groetjes, Peter


conducteur

Nu nog de achtergrondverlichting deftig aansluiten :p die was niet voorzien voor het oude display
Rian 2-Rail DCC NMBS TPIII
Grote Modeltreinruilbeurs Blankenberge Pasen 2016
Zaal Forum

Sattrickske

Citaat van: conducteur op 21 maart 2014, 19:38:46 PM
Nu nog de achtergrondverlichting deftig aansluiten :p die was niet voorzien voor het oude display
Als je de backlight bedoelt, dit kan via een potmetertje, heel simpel.  Of via een state-of-the-art PWM gestuurd via je micro controller.

conducteur

#491
Ja, is in orde hoor :p Er staat een connector op het printje, maar die was voorzien voor het 14 pins display uit de oertijd dat ik heb gekregen van Peter ter vervanging van m'n kapotte display.
De weerstand van 47 ohm was voorzien maar dus niet aangesloten via deze connector. Twee draadjes en het euvel was al verholpen :p.


Beetje bij beetje maken we vorderingen, gisteren mij bezig gehouden met het programma verder te testen en uit te breiden met de nodige boodschappen die per rs232 naar de terminal gestuurd worden. Werkt schitterend. Vandaag vlug eens de lichtsluis geprobeerd (nog definitief te monteren), kabelgootje gezaagd, om nog wat kabeltjes in orde te krijgen aan de spoor.


Elke dag beetje uitbreiden (dingen die nog definitief moeten gemonteerd worden, of aangesloten worden, en dan dat deel testen in het programma) en beetje bij beetje gaat het wel vooruit. Ik heb er een positief gevoel bij, de laatste tijd heb ik elke keer de volle goesting om er aan voort te doen (al is het maar iets klein, na school en niet altijd evenveel tijd. In de afgelopen 1,5 jaar zijn er wel momenten geweest waarbij ik het ding door het raam wou smijten. Maar iemand zij me ooit, elke mislukking is er gekomen door één keer te weinig te proberen, en heb geleerd dat dit geen halve waarheid is. 


Zover staan we nu, tot +/- de helft werkt alles al 100% zoals het moet. De rest moet ik nog verder testen en uitproberen (zie programma):


;


-------------------------------------------------------------------------------
;programma GIP
;Controller = PIC 16F887
;-------------------------------------------------------------------------------
include 16f887


pragma target OSC HS               -- internal crystal or resonator
pragma target clock 20_000_000     -- oscillator frequency
pragma target WDT  disabled           -- WDT off
pragma target LVP  disabled           -- no low voltage programming
pragma target MCLR  external          -- re3/mclr pin function select bit
include delay
include print
include format


--
;Volledig digitale IO (analoge ingangen uitgeschakeld)
enable_digital_io()


--------------------------------------------------------------------------------
;aliassen en direction
--------------------------------------------------------------------------------
;Led op poort A1


alias direction is pin_C0
alias step is pin_C1
alias schakelaar is pin_C2
alias lichtsluis is pin_b2
alias relais is portd
alias relaisinrij is pin_b1
alias inrij is pin_b0




portd_direction=output


pin_C0_direction = output
pin_C1_direction = output
pin_C2_direction = input
pin_b0_direction = input
pin_b1_direction = output
pin_b2_direction = input
pin_c3_direction = output




;-------------------------------------------------------------------------------
;arrays voor programma
;-------------------------------------------------------------------------------
const word   spoor[8]   = { 8000, 16000, 24000,32000,40000,48000,56000,64000}
;const word   spoor[8]   = { 64000, 40000, 56000,32000,16000,48000,24000,8000} --
;random array voor test verandering van richting
--array spoor: aantal vanaf oorsprong
-- driver op 800 stappen per omwenteling,
--waarden nog af te regelen op exacte waarden
var byte      bezet[8]
const byte leeg[]="                  "
const byte spoorop[]="verplaatsen"
const byte bereikt[]="bereikt"
const byte zoeknul[]="zoek nulpunt"
const byte oprijden[]="oprijden"
const byte afrijden[]="afrijden"
const byte initstart[]="initialisatie"
const byte nulpunt[]="nulpunt bereikt"
const byte zoekspoor[]="zoekt vrij spoor"
const byte einde[]="Einde "
const byte init[]="Initialisatie"
const byte nulpunt2[]="naar nulpunt"
const byte cfr1 [] = "1"




;-------------------------------------------------------------------------------
;variabelen voor programma
;-------------------------------------------------------------------------------
var word eindpositie
var word positie
;var sword verplaatsing  (in procedure of hier?)
;var sword stappen


var byte teller
var byte teller2
var bit vrijbezet
var bit i
var bit display
var byte serialcommand
var byte char


;-------------------------------------------------------------------------------
;Seriële poort
;9600 Baud
;------------------------------------------------------------------------------
const serial_hw_baudrate = 9600
include serial_hardware


serial_hw_init()
--------------------------------------------------------------------------------
; procedure verplaatsing
;direction=off/0 ==> richting nulpunt
;direction=onn/1 ==> van nulpunt weg
--------------------------------------------------------------------------------
procedure verplaatsen (word in  Ppositie, word in  Peindpositie) is


          var word stappen                       ;


          if Ppositie> Peindpositie then
            stappen=Ppositie-Peindpositie
             direction=0
          else
              direction=1
              stappen=Peindpositie-Ppositie
          end if


          for stappen loop
              step=!step
              delay_10us(25)
          end loop


end procedure
--------------------------------------------------------------------------------
;display clear procedures
-------------------------------------------------------------------------------
procedure leeg1() is
          serial_hw_data=160
          delay_100ms(5)
          print_string(serial_hw_data, leeg)
          delay_100ms(5)
end procedure


procedure leeg2() is
          serial_hw_data=176
          delay_100ms(5)
          print_string(serial_hw_data, leeg)
          delay_100ms(5)
end procedure


procedure cleardisplay() is
          serial_hw_data=192
          delay_100ms(5)


end procedure
--------------------------------------------------------------------------------
;procedure voor vrij spoor zoeken
--------------------------------------------------------------------------------
procedure vrijspoor() is
i=1
leeg2()
serial_hw_data=176
print_string(serial_hw_data, zoekspoor)
     while i loop
     teller=teller+1
    if bezet[teller]==1 then
         eindpositie=spoor[teller]
         verplaatsen(positie,eindpositie)
         positie=eindpositie
         i=0
      end if
     end loop
teller=0
end procedure
--------------------------------------------------------------------------------
;wachten op einde opstartboodschap terminal
--------------------------------------------------------------------------------


delay_100ms(50)
;-------------------------------------------------------------------------------
;initialisatie start


cleardisplay()   ; wis display


print_string(serial_hw_data, initstart)


cleardisplay()
print_string(serial_hw_data, zoeknul)




;--------------------------------------------------------------------------------
; zoek nulpunt (schakelaar=microswitch nulpunt)
;--------------------------------------------------------------------------------


relais=off
relaisinrij=off
direction=off
while schakelaar loop
      step=!step
      delay_10us(25)
end loop
positie=0
delay_1ms(250)


cleardisplay()
delay_1ms(250)


print_string(serial_hw_data, nulpunt)
delay_1ms(1250)


cleardisplay()


print_string(serial_hw_data, zoekspoor)
;--------------------------------------------------------------------------------
; controle 8 sporen vrij/ bezet in array bezet en terug naar nulpunt
;--------------------------------------------------------------------------------
for 8 using teller loop
    eindpositie= spoor[teller]
    verplaatsen(positie, eindpositie)
    positie=eindpositie
    bezet[teller]=lichtsluis
     delay_1ms(1000)
end loop
delay_1ms(1250)
eindpositie=500


cleardisplay()




print_string(serial_hw_data, nulpunt2)


verplaatsen(positie, eindpositie)
positie=eindpositie


--------------------------------------------------------------------------------
;;terugmelding array bezet via rs232 op lcd
;--------------------------------------------------------------------------------
cleardisplay()
serial_hw_data=165
delay_1ms(250)




print_string(serial_hw_data,einde)
serial_hw_data=176
print_string(serial_hw_data,init)
delay_100ms(20)
cleardisplay()
serial_hw_data=160
for 8 using teller loop
    if bezet[teller]>0 then


       print_string(serial_hw_data,cfr1 )
       delay_1ms(250)
    else
        serial_hw_data=32
        delay_1ms(250)
    end if
end loop




Tot hier programma al volledig foutloos, verder nog niet voldoende kunnen testen, maar al gemerkt dat bepaalde elementen min of meer werken... :p
Daarvoor moet ik eerst wat onderdelen terug permanent aansluiten. (lichtsluis en stroomdetectie inrijspoor)
--------------------------------------------------------------------------------
;einde initalisatie, start programma (afrijden, trein verlaat fiddle yard)
;--------------------------------------------------------------------------------
display=1
forever loop
  relaisinrij=off
  teller=128


  if true then
     display=0
     const byte gereed[]="gereed"
     leeg2()
     serial_hw_data=176 ; R1K1
     delay_1ms(250)
     print_string(serial_hw_data, gereed)
  end if
   


  if (serial_hw_read(char))   then
  leeg2()
  serial_hw_data=176
  print_string(serial_hw_data,oprijden)


    for 8 using teller2  loop
        if char==teller then
           eindpositie=spoor[teller2]


           leeg2()
           serial_hw_data=176
           print_string(serial_hw_data, spoorop)
           verplaatsen(positie, eindpositie)


           leeg2()
           serial_hw_data=176
           print_string(serial_hw_data, bereikt)
           positie=eindpositie
           teller=teller/2
           serial_hw_data= (160+teller2)


           relais=teller
           while lichtsluis loop
           delay_100ms(15)
           end loop
           relais=0
           display=1
           serial_hw_data=32
          else
          teller=teller/2
    end if
  end loop
end if


;--------------------------------------------------------------------------------
;oprijden
;--------------------------------------------------------------------------------
  if inrij ==1 then   ; indien wachtende trein
  leeg2()
  serial_hw_data=176
  print_string(serial_hw_data,oprijden)


   teller=0
   i=1
     while i loop
     teller=teller+1
      if bezet[teller]==1 then
;staat normaal al op vrij spoor maar toch voor veiligheid zoeken naar vrij spoor
         eindpositie=spoor[teller]
         leeg2()
         serial_hw_data=176
         print_string(serial_hw_data, spoorop)
         verplaatsen(positie, eindpositie)
         positie=eindpositie
         
         leeg2()
         serial_hw_data=176
         print_string(serial_hw_data, bereikt)
         i=0
         display=0
        end if
        end loop


      while lichtsluis==0 loop
            relaisinrij=1
            relais=teller
      end loop
          relaisinrij=0
          relais=0




;--------------------------------------------------------------------------------
;terug  vrij spoor zoeken
;------------------------------------------------------------------------------
     vrijspoor()
     end if
end loop

























Rian 2-Rail DCC NMBS TPIII
Grote Modeltreinruilbeurs Blankenberge Pasen 2016
Zaal Forum

conducteur

#492
Ik hoop dit project toch stilaan te kunnen afronden, dus nu het zomer is tijd om daar aan voort te werken.
http://www.treinbaanrian.be/elektronica/backlash%20test.htm
Van Peter had ik een meetklokje in bruikleen gekregen met magnetische voet, maar dat blijft niet goed plakken op aluminium frames ::) , wat het wat "moeilijk" maakte om backlash te meten op mijn as. Dan maar een klein programma gemaakt (op basis van het "hoofdprogramma") om dit op te meten.
1)Stappenmotor gaat naar nulpunt
2)verplaatst 2000 stappen
3)gaat terug naar nulpunt, en telt aantal stappen
4)nu kan ik uitrekenen hoeveel stappen extra ik moet doen om van richting te veranderen en weergeven op mijn LCD.
Dat zou dus ook voldoende nauwkeurig moeten werken hoop ik...


edit: Ik moet het nog uitproberen, maar volgens mij is dit niet nauwkeurig genoeg? Ik ga naar het nulpunt, verander van richting (backlash is niet gecompenseerd) en zet zgn 2000 stappen. Dan draai je weer van richting (backlash), heffen beide spelingen elkaar niet op?
Rian 2-Rail DCC NMBS TPIII
Grote Modeltreinruilbeurs Blankenberge Pasen 2016
Zaal Forum

Havoc

CiteerVan Peter had ik een meetklokje in bruikleen gekregen met magnetische voet, maar dat blijft niet goed plakken op aluminium frames

Kan je niet enkele bouten/moeren in de gleuven van je frames bevestigen? Het hoeft maar tijdelijk vast te zitten. Of een blok ijzer of boorklem die zwaar genoeg is. Zo'n meetklok loopt soepel, zolang je niet "door de stoppen" gaat zal een stevige voet niet verschuiven.

Citeeredit: Ik moet het nog uitproberen, maar volgens mij is dit niet nauwkeurig genoeg? Ik ga naar het nulpunt, verander van richting (backlash is niet gecompenseerd) en zet zgn 2000 stappen. Dan draai je weer van richting (backlash), heffen beide spelingen elkaar niet op?

Denk het ook. Dat is nl wat je doet als je met een draaibank/freesmachine werkt om zeker te zijn dat je geen last hebt van de backlash (die is er altijd wel). Als je naar een nieuwe positie gaat werk je altijd in dezelfde richting: terugdraaien en instellen.
Met vakantie voor onbepaalde duur.

conducteur

#494
Ja... Ik zal wel iets moeten vinden om dat te proberen op te meten met die meetklok. Mijn oplossing was te mooi om waar te zijn.
...Met die meetklok heb ik toch exact hetzelfde probleem?
1) Het systeem loopt aan tot aan het nulpunt
2) verandert van richting (speling)
3) gaat 2000 stappen vooruit, en verandert weer van richting (speling) en 2000 stappen achteruit en dan zou ik moeten proberen het verschil in afgelegde weg opmeten, maar opnieuw compenseert deze speling zich toch?


Edit: die eerste speling kan ik mogelijk opvangen, maar hoe het dan verder moet weet ik niet zo zeer. Nu ligt het nulpunt daar waar de schakelaar ingedrukt wordt. Als ik nu eens aanloop naar de schakelaar, en dan traag heel even terug vooruit ga tot die niet meer ingedrukt is? Dan kan ik direct terug vooruit zonder speling..., dan 2000 stappen (bv) vooruit, richting veranderen. Maar als ik dan terug naar de schakelaar aanloop, weet ik nooit waar dat nulpunt nu juist lag... (ik moet dan het aantal stappen tellen tussen schakelaar ingedrukt en schakelaar niet ingedrukt tellen zeker?)
Rian 2-Rail DCC NMBS TPIII
Grote Modeltreinruilbeurs Blankenberge Pasen 2016
Zaal Forum