Nieuws:

Nu in MSM 244 PRAKTIJK: Een kasteeltje uit Forex * Een diorama uit de mouw schudden: een tutorial door Evan Daes

Hoofdmenu

Analoog via PC aansturen

Gestart door raf, 21 december 2013, 09:55:11 AM

Sattrickske

OK, nu zie ik inderdaad de 'omvang' van je probleem.  Je kan inderdaad veel beter proberen je bestaande schakelingen aan te passen zodat je niet je hele baan hoeft om te bouwen.  Het moet perfect mogelijk zijn om je bestaande elektronica te interfacen met je PIC.  Kwestie van goed uit te kijken welke ingangsignalen de 'oude' elektronica verwacht en ervoor te zorgen dat je nieuwe elektronica deze netjes aflevert...

Wat je schakelen naar massa betreft (juiste term is 'sinking'), moet je eens kijken naar de datasheet van je PIC (of andere µC).  De meeste µC verkiezen inderdaad sinking boven sourcing (=schakelen naar Vdd, waarbij de µC de 'spanning' en dus ook de stroom levert).  Jouw PIC16F628A (ik gebruik 'm zelf ook, dus ken ik 'm redelijk goed) heeft source=sink=25mA per pin (met een max. van 200mA over alle poorten) (p.133 van de datasheet, electrical specifications).  Dus voor deze maakt 't niet uit of je sinking of sourcing toepast.  Beiden zijn meer dan voldoende om de meeste optocouplers mee aan te sturen, zelfs in source mode).

Als je meer stroom/spanning nodig hebt, een transistor/mosfet ipv een optocoupler en je kan verder.  Heb je er meerdere nodig zoals in jouw geval, kijk dan eens naar een ULN2003 (een simpele NPN-array).  Als ik jou was zou ik gaan voor zo'n ULN2003 ipv. optocouplers en je 'oude' elektronica rechtstreeks daarmee aansturen.

Experimenteer eerst een beetje met zo'n prototyping bordje, waarbij je zelf de 0V/5V schakelt via een stom draadje.  Da's te eenvoudigste manier om na te gaan of je schakeling kan werken met een PIC ipv. stom draadje.  Wel opletten met interne pull-ups en open drain configs van sommige PIC pinnetjes.

raf

Hallo Patrick.

Ik heb de keuze gemaakt gisteren en ga toch voor de ombouw .
het gaat veel werk zijn om alles om te solderen maar dan ben ik van de ellende vanaf.

de optrek en rem programma's zijn klaar en reeds getest en ze werken ook zoals ik het denk dat het zou moeten.
een blok bestaat bij mij uit twee gedeelten en er zijn 3 pic's voor nodig om 1 blok te sturen

een afrem pic met dit programma
Device 16F628A               ; processor type 12F629

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
       LVP_OFF,_             ; Low-Voltage Programming uit
       CP_ON                 ; Code Protection aan

ALL_DIGITAL TRUE             ; Alle poorten digitaal

Symbol sw_1  = PORTB.0       ; Sw_1 op poort B.0
Symbol sw_2  = PORTB.1       ; Sw_2 op poort B.1
Symbol SW_3  = PORTB.2        ;Sw_3 op poort B.2
Symbol frequentie = 2000     ; Frequentie pwm signaal

Declare CCP1_PIN PORTB.3     ; PWM op poort B.3

Dim waarde  As Word          ; Variabele waarde pwm

Clear                        ; Wis alle ram geheugen

DelayMS 500                  ; Stabilisering 0.5_sec

        ;76543210            ; Hulpregel Poort poort_B
PORTB = %00000000            ; Zet poort_B laag
TRISB = %00000111            ; Poort_B als uitgang  van 0-2 ingang

        ;76543210            ; Hulpregel Poort poort_A
PORTA = %00000000            ; Zet poort_A laag
TRISA = %11111111            ; Poort_A als ingang

start:                         ; Begin start
If sw_1 = 0 And sw_2 = 0 Then   ;steeds beginnen met waarde 255 max pwm
waarde =255                       
EndIf
   
    If sw_1 = 1 Then         ; Als waar dan
     Dec waarde              ; Waarde - 1
      If waarde <10 Then   ; Als waarde kleiner dan
       waarde = 10          ; Waarde is 10
      EndIf                  ; Einde als
    EndIf                    ; Einde als

    If sw_2 = 1  Then         ; Als waar dan
      waarde  =0              ; Waarde =0
        EndIf               ; Einde als
    If SW_3 = 0 Then
    waarde = 255          ;dit is de vrijgave om door te rijden
     EndIf   
    DelayMS 10               ; Pauze 0.1 sec
    HPWM 1,waarde,frequentie ; Led_1 op poort B.3 (PWM)
GoTo start                   ; Ga naar begin start

End                          ; Einde programma

dan een optrek pic
Device 16F628A               ; processor type 12F629

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
       LVP_OFF,_             ; Low-Voltage Programming uit
       CP_ON                 ; Code Protection aan

ALL_DIGITAL TRUE             ; Alle poorten digitaal

Symbol sw_1  = PORTB.0       ; Sw_1 op poort B.0
Symbol sw_2  = PORTB.1       ; Sw_2 op poort B.1
Symbol SW_3  = PORTB.2        ;Sw_3 op poort B.2   vrijgave

Declare CCP1_PIN PORTB.3     ; PWM op poort B.3

Dim waarde  As Word          ; Variabele waarde pwm

Clear                        ; Wis alle ram geheugen

DelayMS 500                  ; Stabilisering 0.5_sec

        ;76543210            ; Hulpregel Poort poort_B
PORTB = %00000000            ; Zet poort_B laag
TRISB = %00000111            ; Poort_B als uitgang

        ;76543210            ; Hulpregel Poort poort_A
PORTA = %00000000            ; Zet poort_A laag
TRISA = %11111111            ; Poort_A als ingang

start:
                        ; Begin start
If sw_1 = 0 And sw_2 = 0 Then   ;steeds beginnen met waarde 255 max pwm
waarde =0                     
EndIf
   If sw_1 = 1 Then         ; Als waar dan
     inc waarde              ; Waarde + 1
      If waarde >254 Then   ; Als waarde groter dan
       waarde = 255          ; Waarde is 255
      EndIf                  ; Einde als
      endif
    If sw_2 = 1  Then         ; Als waar dan
      waarde  =0              ; Waarde =0
        EndIf               ; Einde als
   
   
     
      If SW_3 = 0 Then
    waarde = 255          ;dit is de vrijgave om door te rijden
    endif
    DelayMS 10               ; Pauze 0.1 sec
   
    HPWM 1,waarde,2000       ; Led_1 op poort B.3 (PWM)
GoTo start                   ; Ga naar begin start

End                          ; Einde programma


en dan het signaal op zich zelf die dan wel weer de optrek module vrijgeeft.
Device 16F628A               ; processor type 12F628a               

Config INTRC_OSC_NOCLKOUT,WDT_OFF,PWRTE_ON,MCLRE_ON,BODEN_OFF,LVP_OFF,CP_ON 

ALL_DIGITAL TRUE             ; Alle poorten digitaal

Symbol vrijgave  = PORTB.0       ; Sw_1 op poort B.0 vrijgave
Symbol stationchef  = PORTB.1       ; Sw_2 op poort B.1 van stationchef
Symbol bezetmelding  = PORTB.2        ;Sw_3 op poort B.2 bezetmelder
symbol rood = porta.0
symbol groen = porta.1
symbol oranje1 = porta.2
symbol w1recht =porta.4
symbol w1rond = porta.5
symbol rijden = porta.7
dim a as bit
dim waarde as byte

Clear                        ; Wis alle ram geheugen

DelayMS 500                  ; Stabilisering 0.5_sec

        ;76543210            ; Hulpregel Poort poort_B
PORTB = %00000000            ; Zet poort_B laag
TRISB = %00000111            ; Poort_B als uitgang

        ;76543210            ; Hulpregel Poort poort_A
PORTA = %00000000            ; Zet poort_A laag
TRISA = %00000000           ; Poort_A als ingang

start:
if vrijgave = 1 or stationchef = 1 or bezetmelding = 1  then
   rood  = 1 
   groen = 0
   a = 0
endif
rijden1:
      if vrijgave = 0 and stationchef = 0 and bezetmelding = 0 then
          rood = 0
           groen =1
           goto wissel         
      endif 
        if groen = 0 then
          rijden = 0
        endif
      goto start     
  wissel:
  if stationchef = 0 and a = 0 then
      w1recht = 1
      a = 1
          delayms 400
       w1recht = 0
       delayms 800
       rijden = 1
      EndIf                  ; Einde als      endif
goto rijden1   


dit is een eenvoudig signaal dat meer 1 wissel stuurt.
de wissel word BV eerst gezet en dan is er een pauze voor het signaal op groen gaat.


Dan is er nog de station chef
Dit is eigenlijk diegene die de touwtjes in handen gaat hebben.
Hij bepaalt wie en wat er gaat gebeuren.
Ik kan kiezen tussen FIFO schakeling of RANDOM keuze.
bij fifo laat hij het station vol lopen en laat dan de eerste terug vertrekken.
bij random bepaalt hij zelf wat hij doet
het kan dus zijn dat het station vol staat of dat er geen trein te bespeuren valt aan de perrons.
dan is er nog de rangeermeester die dan weer over alles het meeste te zeggen heeft.
hij is baas van de 2 onderste sporen die hij kan benutten om trein stellen in en uit elkaar te halen.
rangeren gebeurt manueel en dan heb ik zelf dus de controle.
de stationchef blijft dan nog 3 sporen over waar hij zijn ding op kan doen.

hopelijk begrijp baar anders maak ik een grafiekje wat misschien beter te begrijpen is..
gr raf
If I make mistakes in "spelling"
Remember it's the pen, that's bad
Don't lay the blame on me.

Sattrickske

Ik denk dat ik kan volgen.  Maar, 3 PICs per blok lijkt me wat veel.

Je verliest heel veel van je IO pinnetjes aan de lichtsignalen.  En je hebt een beperking op je PIC16F628: één PWM uitgang.  Dus zo begrijp ik je keuze van 3 PIC per blok.

Maar... om de opstelling te vereenvoudigen zou ik iets anders werken en een heel blok aansturen:
- 1 PIC (misschien een iets zwaardere)
- Lichten aansturen via 74138 (3 to 8 line decoders)
- PWM zelf maken op 3 pinnetjes (ééntje voor elk blok) of één PWM voor de 3 blokken die je kan in/uitschakelen

Voor dat laatste gebruik je NAND of AND poorten met aan één kant je PWM signaal en aan de andere kant een 'chip select' signaal (telkens één IO pinnetje van de µC) en de uitgang ervan stuur je naar je schakel transistoren van elk blok.

Jouw oplossing gaat ook perfect hoor, ik bied je enkel maar een alternatieve oplossing.  Enkel met je code kan ik niet veel helpen, ik ben C gewend.  Enkel de CP_ON zou ik CP_OFF van maken, da's meer een lastpak dan wat anders...  En ook de MCLRE_ON heb je niet nodig, maar als je 'm gebruikt, moet je reset hardware wel in orde zijn (zie datasheet).

raf

Hallo Patrick

De code is reeds aangepast.
Ja beveiligen is echt wel stom.
De pic's zijn droog getest en ze werken op het test bordje.
Nu wachten tot ik de fed's en torren heb en zo een eerste blok sturing kan gaan bouwen.
De beperking zit ook in het proton light programma dat ik gebruik
50 regels is de max.
Ik wil de volledige versie aan kopen maar het ontbreekt me op het ogenblik aan "de goesting".
Als ik er drie klaar heb dan kan ik aan de programmatie van de stationchef beginnen maar daar heb ik dus wel de volledige versie voor nodig.
Ik kan alleen maar die voor het schaduw station programmeren en die voor het dubbel spoor in het zicht bare station.
Kwestie van toch een grotere pic nodig te hebben en meer programma regels
De 16F877 is er eentje met meer in/uitgangen


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

Sattrickske

Hmmm, in de PIC Basic compilers ben ik helemaal niet thuis, ik gebruik steeds C en her en der wat assembler.  Voor C heb je volledige IDE's met compiler/toolchain gratis en voor niks, maar dan moet je wel C kennen.  Hetzelfde geldt voor assembler.  De tools van Microchip zijn MPLab X (IDE) en XC8 (compiler) zijn gratis, maar hebben berperkingen: de code wordt kunstmatig vertraagd en ietwat lomper gecompileerd.  Als je betaald (200USD) vallen ze weg.  Maar voor modelbouw kan je perfect met de beperkingen van de gratis versie leven.  Als je realtime applicaties moet ontwikkelen dan gebruik je beter SDCC (open-source en dus gratis, zonder beperkingen) ipv XC8.

De PIC16F877 is een veel gebruikte µC op test en demo borden.  Ik heb er hier zo eentje liggen: een QL200; niet meteen de goedkoopste, maar verdomd handig om prototypes te maken.

Ik werk heel veel met PIC12, PIC16 en PIC18 van de Microchip familie (allemaal 8-bit) en daarnaast met ARM Cortex M4 voor 32bit applicaties.  Voor elk gamma van die processoren heb ik wel ergens een demo/prototyping bord liggen.  Daarmee kan ik op voorhand al een beetje aftasten welke processor ik uiteindelijk voor m'n project ga nodig hebben.

Geert

 Raf, kies dan een 16F887 i.p.v. Een 16F877.   Deze heeft meer vrije ingangen, meer mogelijkheden, en is bovendien zeker de helft goedkoper (Conrad)

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

raf

Hallo

Bedankt voor de info wat de kostprijs aan gaat en de ingangen.
Maar ik ga eerst op mijn eigen manier een flowchart aan maken om te kijken wat ik nodig heb.
En ja ik probeer toch zo een chart aan te maken maar ik doe dat op ruitjes papier.
Naargelang de kleuren die ik gebruik weet ik hoeveel in/uitgangen ik ga nodig hebben en daaraan bepaal ik de pic.
Ik denk maar zo "hoe het werkt is niet de zaak als het maar werkt".
Ik zal blij zijn als het pay day is LOL dan kan ik achter de fed en andere klein delen om een eerste pwm sturing op te bouwen.
En dan kijken hoe het loopt.
de eerste gaat een eenvoudige zijn omdat die gewoon een stukje baan moet gaan sturen.
trein detect door S1 dan gewoon vertragen tot X
trein detect door S2 dan terug op trekken.
Niet meer en niet minder gaat deze eerste moeten doen maar zo kan ik wel kijken of alles werkt zoals gepland.
dan manueel met schakelaar en led de ingang vrijgave en bezetmelder controleren zodat ook dit deel van het programma kan getest worden.
Elke keer er dan eentje bij komt geraakt de baan verder af gewerkt.
Het station gaat zo spoor per spoor bestukt worden tot de chef geprogrammeerd gaat worden speel ik de baas LOL.
Heb ik toch ergens iets te zeggen mijn gedacht.
If I make mistakes in "spelling"
Remember it's the pen, that's bad
Don't lay the blame on me.

raf

#37
hallo

een tijdje niet gepost maar toch bezig geweest
het programma in de 50 propton lijnen krijgen is geen optie
MB labs geeft problemen wat programmeren aan gaat want ik blijf steeds error's krijgen want ik ook doe
dan amicus 18 is weer het probleem dat die maar 1 pic kent (gratis versie) en dus juist niet die ik heb liggen mijn gedacht

hier de code
;program signaal

  Device 16F628A               ; processor type 12F629

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
       LVP_OFF,_             ; Low-Voltage Programming uit
       CP_OFF                 ; Code Protection uit


All_Digital TRUE             ; Alle poorten digitaal


Dim a As Byte

Symbol s1 = PORTB.0
Symbol s2 = PORTB.1
Symbol vrijgave = PORTB.4
Symbol frequentie = 2000
Symbol groen = PORTA.0
Symbol rood = PORTA.1
Symbol bezet = PORTA.2
Declare CCP1_Pin PORTB.3     ; PWM op poort B.3
  Dim waarde  As Word
  Clear

  DelayMS 500
  PORTB = %00000000
TRISB = %00010111

PORTA = %00000000
TRISA = %00000000
a=0

main:
If vrijgave = 0 And s1=0 And s2 = 0 Then
  GoSub vrij
  EndIf
If vrijgave = 0 And s1=0 And s2 = 0 Then
  GoSub doorijden
EndIf
  If vrijgave = 1 Then
  GoSub bezet1
  EndIf
  If vrijgave = 1 And s1 = 1 Then
   GoSub afremmen
EndIf
  If vrijgave = 0 And s1 = 1 And s2 = 1 Then
   GoSub vrij

  EndIf
   If vrijgave = 0 And s1 = 1 And s2 = 1 Then
   GoSub optrekken
  EndIf
   GoTo main
   
vrij:
rood = 0
  groen = 1
  Return

  bezet1:
  rood = 1
   groen  = 0
  Return


doorijden:
If s1 = 1 Then
bezet = 1
    EndIf
rood = 0
groen = 1
a = 255
 
Return
 
 
 
afremmen:
  bezet = 1
  waarde =255
For a = 255 To 10  Step -1
    Dec waarde
       HPWM 1,waarde,frequentie ; Led_1 op poort B.3 (PWM)
   If waarde  <11 Then waarde = 10
Next a
  Return
 
   optrekken:
   bezet = 1
   waarde = 0
   For a = 0 To 255
    Inc waarde
       HPWM 1,waarde,frequentie ; Led_1 op poort B.3 (PWM)
   If waarde = 253 Then waarde = 255
Next a
  GoTo   main
End


Misschien eerst wat uitleg.
!-----------------------!------------------------------------------------!
        S2                                                 S1                                bezet ->

De loc rijd van rechts naar links.
Bij "vrijgave" vorig signaal staat het licht op groen en bezet -> is 0 dus de trein kan het blok binnen rijden.
Bij het bedienen van S1 word bezet-> 1 dus een achter op komende loc staat voor roodlicht.
Nu zijn er twee opties.
Voorliggend blok is bezet of voor liggend blok is vrij.
Bij vrij gaat de trein naar door rijden en rijd gewoon door tot hij S1 van het volgende signaal bereikt en zet dan daar de bezet melder op bezet->.
Bij bezet vorig blok begint de trein af te remmen tot een minimum snelheid tot hij S2 bereikt.
Waar hij dan tot stilstand komt voor het rode licht.
Bij vrijgave voor liggende blok komt het signaal terug op groen en de trein begint op te trekken .en rijd door tot hij weer S1 van het voorliggende blok heeft bereikt en zo Bezet-> vrijgeeft .
Bij verlaten van S2 word het signaal toch rood en de bezet-> word vrij gegeven .


Dit is dus een gewoon signaal dat op de baan staat.
Mijn baan bestaat dus uit allemaal blokken behalve de wissel straten dit horen nergens bij.
De wissel straten worden door de station chef bestuurt die in de stations ook bepaalt wie er vertrekt.
Dit vooral in de schaduw stations die volledig op automaat draaien.
Het kleine 4 sporige station word door 1 station chef aan gestuurd want hier komen toch geen signalen te staan.
Op trekken en afremmen gebeurt ook niet de loc's stoppen gewoon op een stop sectie.
Daar word zowiezo langzaam gereden omdat je daar de treinen toch niet ziet en zo zijn ze langer onder weg .
Dus hier geen pwm sturing wat de zaak niet goedkoper maakt want ik heb toch de sturingen nodig maar de pic schakelt gewoon de fot's aan en uit zo kom ik dus met 1 pic toe voor de 4 sporen .

Kan iemand eens naar het programma kijken aub of ik iets niet goed gedaan heb of wat het zou kunnen vereenvoudigen .
Want zoals het nu is kan ik het niet testen daar proton geen HEX file aan maakt.
groeten raf
ik begin stilletjes aan de kleren te krijgen van die rommel
If I make mistakes in "spelling"
Remember it's the pen, that's bad
Don't lay the blame on me.

Gerolf

Ik zie enkele vreemde dingen in je programma:
- "optrekken" eindigt niet met een return, maar wordt wel als subroutine aangesproken
- "binnen je "main" hebben "vrij" en "doorrijden" dezelfde voorwaarde
- In je lussen laat je byte "a" en word "waarde" samen tellen.
  Ik dacht dat een for ... next ook met een word kon (en dan heb je "a" niet nodig)

... maar ik werk met AVR's en Bascom. Mogelijk zijn zulke vreemde dingen bij een Pic normaal  ::)
Groeten uit "Marche-en-Bières"   ** Modelspoor is plezant **   TPIII-H0-DC-Zelfbouw

PeterC

Citaat van: Gerolf op 06 februari 2014, 15:18:21 PM
...Mogelijk zijn zulke vreemde dingen bij een Pic normaal  ::)

@Gerolf: foei!  :) :) :)


@Raf: welke taal is dit?  Ik zie goto's en dan komt mijn haar recht.  Niet dat op mijn hoofd want dat is door de vele goto's in mijn leven al lang verdwenen - eenvoudig gezegd: gooi die goto's weg zodat je een 'leesbaar' en 'onderhoudbaar' programma krijgt.  In de meeste talen bestaat zelfs geen goto meer zodat je die ook niet meer kan ge(mis)bruiken (goto = spaghettiprogrammeren).


Groetjes, Peter


Gerolf

@ PeterC:  ;D  ;)

Naar mijn idee is dit een Basic-variant

Er staan twee goto's in de listing.
- De onderste hoort een return te zijn
- De eerste (main: .... goto main) wordt meestal vervangen door "do ... loop"
Groeten uit "Marche-en-Bières"   ** Modelspoor is plezant **   TPIII-H0-DC-Zelfbouw

PeterC

Citaat van: Gerolf op 06 februari 2014, 17:27:55 PM
@ PeterC:  ;D  ;)

Naar mijn idee is dit een Basic-variant

Er staan twee goto's in de listing.
- De onderste hoort een return te zijn
- De eerste (main: .... goto main) wordt meestal vervangen door "do ... loop"

De eerste hoort dus geen goto te zijn en kan dan al weg en de tweede vervangen door "do...loop" en dan nog de subroutines uit die "do...loop" halen en de spaghetti is weg.   ...en wordt het leesbaar.
Groetjes, Peter


Gerolf

Als een subroutine maar één keer wordt gebruikt, kan je hem inderdaad beter weg laten  ;)
Groeten uit "Marche-en-Bières"   ** Modelspoor is plezant **   TPIII-H0-DC-Zelfbouw

raf

Hallo

effe proberen uit te leggen

36 jaar geleden had ik sinclaire basic en daarvoor een z80 met machine taal programming
basic was geen probleem en daar kreeg ik in die 1 k redelijk wat programma regels in weg geschreven.
maar nu die pic basic is heel andere koek.
omdat er veel pic gerelateerde instructies zijn die ik dus niet of slecht onder de knie heb.
BV portA.5 kun je niet als uitgang gebruiken ????juist ja data sheet
de pwm zit alleen maar op poort PORTB.3
en zo zijn er nog van die zaken zoals het instellen van de fuse's en dergelijke.
dan komt het probleem van de programmers er nog eens bij.
proton vind ik lekker werken maar 50 regels en gedaan (misschien kan ik nog een licentie kopen)
micro basic maar op dat forum krijg je geen ondersteuning of haast geen meer(topic's van meer dan 2 jaar oud)
micro basic pro dan maar ??? helemaal verschillend wat instructies betreft(trekt meer op ????)
je moet een main: hebben en een end.
dan moet je main niet staan daar waar je het dacht want meestal staat dat aan het einde van je programma.
een fout welke gevonden word lijkt op dit
21 303 Identifier "Pwm_Init" was not declared signaal3.mbas
21 304 Syntax error: Expected "end" but "Pwm_Init" found signaal3.mbas
21 304 Syntax error: Expected "sub" but "(" found signaal3.mbas
21 304 Syntax error: Expected "end" but "2000" found signaal3.mbas
21 304 Syntax error: Expected "." but ")" found signaal3.mbas
0 102 Finished (with errors): 06 feb 2014, 17:39:11 signaal3.mbppi

in proton krijg je een beter syntax uitleg en krijg je ook nog te zien wat er verkeerd is gedaan.
in MBP is het zo van" zoek het maar uit "maar er is een fout

@gerolf

de eerst keer spring ik naar vrij om de signalen te schakelen
vrij:
rood = 0
  groen = 1
  Return


de tweede keer naar door rijden om het volledige blok + stop blok door te rijden
doorijden:
If s1 = 1 Then
bezet = 1
    EndIf
rood = 0
groen = 1
a = 255
   Return

Maar hier word gekeken of er een trein op S1 staat en dan word de (Bezet )1 gemaakt
dit om de vrijgave van het verlaten blok te activeren en dus het signaal aldaar op rood te zetten

wat de lussen betreft je hebt gelijk achter aan moet nog een return komen te staan
optrekken:
   bezet = 1
   waarde = 0
   For a = 0 To 255
    Inc waarde
       HPWM 1,waarde,frequentie ; Led_1 op poort B.3 (PWM)
   If waarde = 253 Then waarde = 255
Next a
  return
End


Ik had een probleem om met (a) de nummer waarde  te meten dus heb ik de inc of dec code toegevoegd waar ik dus wel de waarde van kon uitlezen zonder een probleem te verkrijgen met de teller.

@ peter
wat de gosub aan gaat
dat komt omdat ik deze routines geschreven had voor de station blokken en signalen .
het verschil tussen een gewoon signaal en het sttion is dat voor een gewoon signaal er maar 1 pic en pwm sturing gebruikt word
In het station is dit door 2 pic's gedaan met elk een pwm sturing.
De  eerste pic doet de trein af remmen tot aan S2
De tweede doet de trein terug op trekken
Als er door gereden moet worden dan staan de twee pic's dus vol open en de trein kan door rijden.
Ik heb dit zo gedaan om te kunnen rangeren bij de station's
de sturingen kunnen los gekoppeld worden (overstuurt)door de hand besturing .
Als ik op het bord een schakelaar omzet gaat bij het betreffende signaal de witte lamp branden en kan ik met de loc dus gaan rijden .
Als hij is los gekoppeld (ontkoppel rail)dan kan hij de verzorging binnen rijden .
Het doorgaande verkeer kan gewoon door gaan alleen spoor 1 en 2 zijn dan bezet.
Uit de depot kan een nieuwe loc koppelen en na het terug omzetten van de schakelaar staat de trein terug klaar voor het verkeer .
De loc die dan in het depot staat kan dan of op automaat of manueel gereden gaan worden.
dus die gosub routines zijn zo ontstaan om dat ik weet dat deze op zichzelf werken zonder problemen .

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

raf

Hallo

ik heb de goto reeds aangepast

eventjes het verschil tussen proton (welk ik beter versta)en MBP
eerst proton
Declare CCP1_Pin PORTB.3
initialisatie van de poort

HPWM 1,waarde,frequentie
hier schakel je de pwm module mee aan en uit en de stapjes door waarde te veranderen



MBP programmeren
Pwm_Init(2000)
initialisatie van de pwm poort ????? welke poort geen idee


Pwm_Start
deze regel moet er staan om de pwm te starten

Pwm_Change_Duty(a)
hier schakel je de pwm module mee aan en uit en de stapjes

  Pwm_Stop
en hier schakel je hem dus terug mee uit


gr raf

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