Waar zijn we nu mee bezig ? Microcontrollers

Gestart door ToThePoint, 13 januari 2012, 10:27:28 AM

PeterC

#660
Nog een beetje verder zitten 'spelen' met de Loconet decoder en plots kwam de vraag: hoe zit dat met de bandbreedte van dat netwerk?  Is het inderdaad 'een retourtje naar het stenen tijdperk'?  Zoekingen op het net leveren geen resultaten op.  Blijkbaar is iedereen daar gerust in dat het netwerk voldoende bandbreedte heeft... 

...Ik helaas niet...

...Meten is weten!

Testobject: mijn eigen testbaantje met zes locomotieven aktief, een twintigtal wissels, een tiental seinen en tig terugmelders (veel te veel en ze worden allen uitgelezen).
Meting: via onderstaande Loconet interface en een geheugenscoop (Fluke 123)


Afbeelding geleend bij http://electronics.stackexchange.com




Het Loconet signaal is idle wanneer het signaal hoog is.  Het zijn die 'idle' momenten die me interesseren en hoe meer er zijn, hoe meer 'eigen' communicatie ik tijdens die 'idle' momenten kan opzetten.

Meetresultaten:

1. Centrale is opgestart en Loconet is idle.  Na een 12 tal seconden begint de treinbesturingssoftware de treinen automatisch te laten rijden (het ganse scoopbeeld geeft 50 seconden weer - 5s/verdeling):



2. Een beetje meer in detail gaan kijken (5 seconden meting - 500ms/verdeling) en we zien duidelijk dat er ruim voldoende 'idle-time' is:



Telkens wanneer op de afbeelding het signaal 'laag' gaat, is dat een ganse Loconet pulstrein die passeert (16KHz signalen zijn op die resolutie niet meer te zien en worden samengevat getoond in slechts één enkele negatieve puls).

Overtuigd door de meetresultaten kan ik nu verder 'spelen'...




Ondertussen heb ik ook al ontdekt dat ik, om de lichtsterkte van de leds te kunnen regelen, geen van de 'beperkte' MM adressen hoef te gebruiken.  Loconet kan ook de ganse reeks 'grote' adressen aan (en zelfs mijn oude IB ook) zodat ik nu de lichtsterkte regel via (default) adres 1111 (DCC - 28 stappen).  Met een klik op de programmeerknop is dat adres in een mum van tijd aan te passen.


Groetjes, Peter


PeterC

Mijn versie van een LocoNet start/stop schakeling werkt.  De schakeling op gaatjesprint opgebouwd.  Morgen (als de tijd het toelaat - ik moet nog werken) het knopje vervangen door een kleine panic-button en beide leds vervangen door een RGB versie (smd 5050) zodat de print onder de baan kan worden gemonteerd en met de leds en panic-button duidelijk in het zicht.



Voeding komt uit het LocoNet signaal.  Na het opstarten van de processor knipperen de rode en groene leds eventjes en daarna wordt de status van de centrale weergegeven.  De eigenlijke LocoNet interface zelf heb ik kunnen vereenvoudigen tot 4 weerstanden en een simpele NPN.

Het werkt en ikke blij   :)



Groetjes, Peter


Geert

Geen interne klok gebruikt zie ik. 

Dit is wel een zeer eenvoudige interface.

Ik krijg ook al zin om het loconet verder uit te pluizen  ;)

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

PeterC

Citaat van: Geert op 20 december 2014, 19:32:01 PM
Geen interne klok gebruikt zie ik. 

Met een 20MHz kristalleke kan ik de interne klok (via PLL) opdrijven tot 48MHz  en....heb.....ik.....heel.....wat.....tijd....om....mijn......programmaatje.....uit....te.....voeren....  ;)

Citaat van: Geert op 20 december 2014, 19:32:01 PM
Ik krijg ook al zin om het loconet verder uit te pluizen  ;)

Doen!

Mijn opgedane kennis (en veel tijd) wil ik gerust delen!

Groetjes, Peter


Geert

Leuk om je kennis te delen.

Kan handig zijn om mijn S88 naar S88N adapter ooit te vervangen met een Locobus adapter.






Dezelfde adapter kan gewoon in twee gezaagd worden




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

PeterC

Citaat van: Geert op 20 december 2014, 20:03:19 PM
...Kan handig zijn om mijn S88 naar S88N adapter ooit te vervangen met een Locobus adapter...

Een simpele en goedkope oplossing is ook te koop  ;)
Groetjes, Peter


conducteur

#666
Eindelijk nog eens, tussen de examens door beetje kunnen programmeren... was (op schoolwerk na) een hele tijd geleden... Heb met het vak Embedded Systems nu dit semester al heel wat bijgeleerd...


Zo'n jaar geleden heb ik, met de nodige hulp van Peter een LCD terminal in elkaar gestoken. (via een protocol kon je bytes naar het ding sturen, en die werden dan op het lcd weergegeven, of je kon ook commando's doorsturen voor de cursor te verplaatsen enzo)
(zie http://www.treinbaanrian.be/html/16f887_6_Serial_tekst_commando.htm)

(nog met de LCD uit WOI, ligt hier ergens nog in het schof)

Tijd voor V2.0 : dit keer met een CNC gefreesd printje (ontwerpje is bijna klaar in EAGLE), en in een doosje (dat is toch de bedoeling),  uitbreiding met rotary encoder aan RB0 (interrupt) en RA4 (eventueel pulsen tellen met timer0), lcd achtergrondverlichting met pwm... Het aantal knopjes is wel maar 4 geworden (plus de rotary encoder, plus de knop in die encoder)...

Nog een zwak punt dat ik moet zien op te lossen: de 4 aderige kabel (RX, TX, 5V & GND) was gewoon gesoldeerd op dat stukje gaatjesprint, maar die aders breken soms af... Degelijke connector nodig, maar weet nog niet goed welke.


µC: ben begonnen met 16f628a omdat ik er nog enkele heb liggen, hoop dat die voldoet.
Rian 2-Rail DCC NMBS TPIII
Grote Modeltreinruilbeurs Blankenberge Pasen 2016
Zaal Forum

Gerolf

Groeten uit "Marche-en-Bières"   ** Modelspoor is plezant **   TPIII-H0-DC-Zelfbouw

PeterC

Citaat van: conducteur op 21 december 2014, 23:48:32 PM
...(nog met de LCD uit WOI, ligt hier ergens nog in het schof)...
Stevig spul hé en met al die herdenkingen stevig wat geld waard voor souvenierjagers  ;D ;D ;D

Succes!
Groetjes, Peter


conducteur

Voor 100€ mag je die terug hebben, Peter ;D 


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

raf

'****************************************************************
'*  Name    : kleine epw micro.BAS                              *
'*  Author  : [raf janssens]                                    *
'*                                                              *
'*  Date    : 22-12-2014                                         *
'*  Version : 1.4                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************
Device 12F629               ; processor type 12F628

Xtal 4                     

Config INTRC_OSC_NOCLKOUT,_  ; Interne oscilator aan
       WDT_OFF,_             ; WatchDog Timer uit
       PWRTE_ON,_            ; Power-up Timer Enable aan
       MCLRE_ON,_            ; Externe Master Reset Enable aan
       BODEN_OFF,_           ; Brown Out Detectie Enable uit
     
       CP_ON                 ; Code Protection aan

All_Digital TRUE             ; Alle poorten digitaal

Symbol sw1  = GPIO.2      ; ingang van vorige pic
Symbol sw2  = GPIO.3       ; detect inloop spoor
Symbol sw3 =   GPIO.4          ;detect stop spoor
Symbol poort2 = GPIO.0       ;uitgang naar volgende pic
Symbol poort1 = GPIO.1        ;uitgang pwm

Dim waarde  As Word          ; Variabele waarde pwm
Dim test As Byte
Clear                        ; Wis alle ram geheugen
GPIO.1 = 0                  ;pwmlaag maken (invers pwm)
DelayMS 500                  ; Stabilisering 0.5_sec

             

         ;543210            ; Hulpregel Poort 
  GPIO = %000000            ; Zet poortgpio laag
TRISIO = %111100          ; Poort gpio 2345 als ingang
test = 0
start:                       ; Begin start
If sw1   = 1 And test = 0 Then GoTo stoppen        ;als voorliggend is rood dan stoppen
If sw1 = 0 And test = 1 Then GoTo rijden           ;als voorliggend is groen dan door rijden
   
GoTo start

stoppen:
         
     test =1                      ;test om niet altijd naar hier te springen
     
     For waarde = 0 To 255
        DelayMS 5
        While sw3 = 1 :Wend
        If waarde > 250 Then waarde = 255

        PWM GPIO.1, waarde, 1      ;Stuur 1 puls met pulsbreedte 'waarde', naar PORTA.1
   
    Next
        PWM GPIO.1,255 ,1
                       ;trein op het inloopspoor poort uitgang hoog maken
        While sw2 = 1 And sw3 = 1 :Wend
        poort2 = 1                 ;trein op het inloopspoor poort uitgang hoog maken
        While sw3 = 1 :Wend     ;    zolang er geen trein is op het inloopspoor poort uit laag houden
       
     GoTo start
rijden:

     test = 0                   ; test om niet altijd naar hier te springen
     For waarde = 255 To 0    Step - 2
       DelayMS  20
       If waarde < 5 Then waarde = 0
       PWM GPIO.1, waarde, 1 
     Next 
    PWM GPIO.1,0 ,1
                 
         While sw2 = 0 :Wend
         While sw3 = 0 :Wend   ;zolang stop en inloop bezet is uitgang hoog houden
         
       poort2 = 0                       ;stop en inloop leeg dan poort uitgang laag maken
    GoTo start

ik zit in de knoei en geraak er niet uit
toggle ik poort 2 dan werkt alles perfect maar toggle is riskant om te gebruiken omdat deze alleen maar de status van de poort omkeert ongeacht wat de status is
ik gebruikt liever poort2 =0 of poort2 = 1
dit is belangrijk daar dit de bezet melding is naar het achterliggende signaal
loopt dit fout dan gebeuren der ongelukken
iemand een idee wat ik verkeerd doen

gr raf
If I make mistakes in "spelling"
Remember it's the pen, that's bad
Don't lay the blame on me.

conducteur

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

PeterC

Raf, waar de fout zit is moeilijk te achterhalen omdat je programma niet gestructureerd is (van 'Goto's' krimpt mijn maag ineen)...

Gooi die 'goto's' weg en steek structuur in je programma en het zal voor iedereen veel duidelijker worden (ook voor jou om de fout te vinden).

vb (ik weet niet of de basic syntax juist is, maar het gaat hem om de structuur):

while(1)  ;main-loop
  if(situatie1)then
     gosub situatie1
  else
     if(situatie2)then
        gosub situatie2
     end if
  end if
end while

sub situatie1
   ...
end sub

sub situatie2
   ...
end sub


;)
Groetjes, Peter


conducteur

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

raf

hoe zo niet gestructureerd???
een deel is kijken of er een loco in het voorliggende blok zit

das tussen start en goto start

dan het blok stoppen wat heel de zaak afhandelt wat het stoppen aan gaat als het vorige blok bezet is
nadat dit is afgelopen gaat het programma terug naar start om te kijken of het voorliggende blok leeg is


is dit leeg dan gaat het naar rijden waar de loco terug optrekt en het achterliggende blok vrij geeft als alle wagons uit de twee blokken zijn.

veel meer structuur kun je in zo een programma niet duwen hé
hier speelt tijd geen rol want de langzame factor is het trein stel welk de blokken moet verlaten en hoe langer de trein hoe langer het duurt
dus snelheid speelt geen rol

while wend of until is in deze situatie niet echt het probleem
er zitten maar 5 goto's in verwerkt en ik zie niet hoe je dit meer kunt stroomlijnen
sorry maar mijn basic is van een 40 jaar gelden en dan waren de andere syntaxen nog niet bruikbaar of aanwezig in de basic interpreter


gr raf
If I make mistakes in "spelling"
Remember it's the pen, that's bad
Don't lay the blame on me.