Auteur Topic: Waar zijn we nu mee bezig ? Microcontrollers  (gelezen 250150 keer)

Offline PeterC

  • Forumlid
  • Berichten: 3.355
    • JAL pagina
  • Voornaam: Peter
Re: Waar zijn we nu mee bezig ? Microcontrollers
« Reactie #690 Gepost op: 23 december 2014, 15:06:39 pm »
Raf, werkt je code nu?

Nu al die "Goto's" weg zijn, is de code leesbaar.

Ik ben zo vrij geweest om nog wat ruwe kantjes van je structuur te veranderen:

'****************************************************************
'*  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 poort_A
  GPIO = %000000             ; Zet poort_A laag
TRISIO = %111100             ; Poort_A als ingang
 test = 0
 
;start: -> vervangen door een 'oneindige' lus - label is dan niet meer nodig
While(1=1)
;als het vorige sein groen is doe dan niets
While sw1 = 1
Wend         

For waarde = 0 To 255
DelayMS 5
       
While sw3 = 1
Wend
       
If waarde > 250 Then
waarde = 255

;Stuur 5 pulsen met pulsbreedte 'Duty', naar PORTA.1
PWM GPIO.1, waarde, 1         
Next
       
PWM GPIO.1,255 ,1
        ;trein op het inloopspoor poort uitgang hoog maken
While (sw2 = 1 And sw3 = 1)
Wend
     
;trein op het inloopspoor poort uitgang hoog maken
poort2 = 1                 
     
;zolang er geen trein is op het inloopspoor poort uit laag houden
While sw3 = 1
Wend

        ;als vorige sein rood is doe dan niets
While sw1 = 0
Wend

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
     
;zolang stop en inloop bezet is uitgang hoog houden
While sw3 = 0
Wend

;stop en inloop leeg dan poort uitgang laag maken
poort2 = 0
Wend
Groetjes, Peter


Offline raf

  • Forumlid
  • Berichten: 4.496
  • Voornaam: raf
Re: Waar zijn we nu mee bezig ? Microcontrollers
« Reactie #691 Gepost op: 23 december 2014, 15:52:58 pm »
der zaten in je verandering enkele fouten

while [1=1) werkt niet de () zijn er teveel aan

If waarde > 250 Then
         waarde = 255

dit moet 1 regel zijn

While (sw2 = 1 And sw3 = 1)

hier weer de () teveel
nu nog testen of het werkt in simulatie
gr raf 

Offline Havoc

  • Forumlid
  • Berichten: 6.275
  • Voornaam: Johan
Re: Waar zijn we nu mee bezig ? Microcontrollers
« Reactie #692 Gepost op: 23 december 2014, 23:10:02 pm »
Niet direct microcontrollers maar ik heb deze week mijn C terug afgestoft. Zal meer dan een stofvod voor nodig zijn na 25 jaar vrees ik. Eerder een slijpschijf met korrel 40. De compile errors vlogen rond de oren. Maar het begint stilaan terug te komen.

Moet nu eens uitzoeken hoe het zit om de code te splitsen over verschillende files en hoe een ide te gebruiken zoals het moet. Nooit veel meer geleerd dan simpele programma's. En dan nog in assembler, pascal en fortran. Vang daar maar eens iets mee aan.
Expert in non-working solutions.

Offline raf

  • Forumlid
  • Berichten: 4.496
  • Voornaam: raf
Re: Waar zijn we nu mee bezig ? Microcontrollers
« Reactie #693 Gepost op: 24 december 2014, 08:19:01 am »
na 25 moet dat nog lukken
basic na 40 jaar lukte ook nog aardig maar ja het is terug boekje opendoen of de syntax op internet nog eens na lezen


Offline raf

  • Forumlid
  • Berichten: 4.496
  • Voornaam: raf
Re: Waar zijn we nu mee bezig ? Microcontrollers
« Reactie #694 Gepost op: 24 december 2014, 11:07:21 am »
weer een progje aangepast met veel moeite eigenlijk maar het is wel eenvoudiger geworden maar of het gaat werken ??
de bedoeling is dat ik deze pic stuur met een handkastje
4 knoppen zijn ter beschikking
optrek laat de trein versnellen tot max (0)
rem laat de trein afremmen tot stop (256)
klinkt raar maar dat komt door dat ik pnp fets gebruik ik stuur namelijk met de plus en de massa dient als detectie dus kon ik niet gebruiken

omschakel dient om een hogere spanning te geven om de loco's van vooruit naar achteruit te laten rijden
ik moet zien of ik dit via de pwm zou kunnen doen en dus altijd op 20 volt zou kunnen rijden
dit zou de schakeling  vergemakkelijken

nood is de nood stop en zet dus beide uitgangen op 256 dus stop
al de schakelaar worden met de massa gestuurd dus ik kan over 5 draden alles mooi sturen
vanaf het overname spoor zou dus alles na de overname via deze knopjes het rangeer terrein bestuurt worden
ik wil ook nog iets zelf doen dus alleen de rinbaan gaat op automaat de rest manueel
hier de code
'****************************************************************
'*  Name    : handsturing                                      *
'*  Author  : [select VIEW...EDITOR OPTIONS]                    *
'*  Notice  : Copyright (c) 2014 [select VIEW...EDITOR OPTIONS] *
'*          : All Rights Reserved                               *
'*  Date    : 24/12/14                                       *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************
Device 16F628A               ; 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
       LVP_OFF,_             ; Low-Voltage Programming uit
       CP_ON                 ; Code Protection aan
 
All_Digital TRUE             ; Alle poorten digitaal
 
Symbol optrek  = PORTA.0       ; oprtekken
Symbol rem  = PORTA.1       ; afremmen
Symbol schakel =PORTA.2          ;schakelen voor/achter
Symbol  nood = PORTA.3       ;alles direct stop
Symbol hoog = PORTA.4        ;uitgang omschakeling

 
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 = %00000000            ; Poort_B als uitgang
 
        ;76543210            ; Hulpregel Poort poort_A
PORTA = %00000000            ; Zet poort_A laag
TRISA = %11111111            ; Poort_A als ingang

While 1=1

 If rem = 0 And waarde < 256 Then waarde = waarde +1   Else waarde = 256
 If optrek  = 0 And waarde > 0 Then waarde = waarde - 1 Else  waarde = 0
 If  schakel = 0 Then waarde = 256
  If schakel = 0 Then hoog = 0
  If schakel = 1 Then hoog = 256
 If nood = 0 Then waarde = 256
 If nood = 0 Then hoog = 256
 HPWM 1,waarde,2000                   
Wend
 

gr raf 

Offline raf

  • Forumlid
  • Berichten: 4.496
  • Voornaam: raf
Re: Waar zijn we nu mee bezig ? Microcontrollers
« Reactie #695 Gepost op: 24 december 2014, 11:51:00 am »
dit werkt dus zo niet nu dus terug opnieuw beginnen van 0 af aan
de pwm werkt verkeerd als ik de echte pwm gebruik zou deze geinverteerd moeten zijn maar dat is dus niet zo
dus ????
effe terug vanaf nul en dan kijken wat er verkeerd is gegaan

gr raf

Offline conducteur

  • Forumlid
  • Berichten: 6.018
  • As a finishing touch, God created the dutch!
    • http://www.treinbaanrian.be
  • Voornaam: Rian
Re: Waar zijn we nu mee bezig ? Microcontrollers
« Reactie #696 Gepost op: 24 december 2014, 12:29:03 pm »
Ik vind die syntax van die Basic zo moeilijk te volgen... geen idee of er nog zijn die dezelfde mening hebben...


IF-statement
JAL (Just Another Language)
if (variabele=168) then
;actions here
else
;actions here
end if
ANSI C
if (expression)  {
Block of statements;
}
else {
Block of statements;
}
While
JAL:
while (test=true) loop
;statements here
end loop
C
while(test=true){
;statements here
}
is toch veel eenvoudiger te volgen?
Rian 2-Rail DCC NMBS TPIII
Grote Modeltreinruilbeurs Blankenberge Pasen 2016
Zaal Forum

Online doomslu

  • Administrator
  • Forumlid
  • Berichten: 12.127
  • Voornaam: Luc
Re: Waar zijn we nu mee bezig ? Microcontrollers
« Reactie #697 Gepost op: 24 december 2014, 12:54:34 pm »
Dat is toch allemaal ongeveer hetzelfde? Ik zie geen probleem... (Ik ben dan ook nog van den ouden stempel en grootgebracht met Basic  ;)).
luc    * MODEL RAILROADING IS FUN *

Offline raf

  • Forumlid
  • Berichten: 4.496
  • Voornaam: raf
Re: Waar zijn we nu mee bezig ? Microcontrollers
« Reactie #698 Gepost op: 24 december 2014, 13:00:25 pm »
opnieuw begonnen en nu werkt het wel

Device 16F628A                ;Gebruik een 16F628A type
Config INTRC_OSC_NOCLKOUT, WDT_OFF, PWRTE_ON, LVP_OFF, MCLRE_OFF
All_Digital TRUE              ;Alle ingangen digitaal

;Poortnamen
 Dim motor As Byte
Symbol optrekken = PORTA.0
Symbol afremmen = PORTA.1
Symbol noodstop = PORTA.3
Symbol schakel = PORTA.2
Symbol schak = PORTB.0
;        76543210
PORTB = %10111111
TRISB = %00000000
PORTA = %10111111
TRISA = %10111111             ;Maak van PORTA.6 een uitgang
Dim Duty As Byte

Clear                         ;Wis alle RAM geheugen
Duty = 255
schak = 1
DelayMS 300
;Hoofdprogramma
While 1 = 1
 If optrekken = 0 Then Duty = Duty +1
 If afremmen = 0 Then Duty = Duty -1
 If noodstop = 0 Then Duty = 255
 If schakel = 0 Then Duty = 255
 If schakel = 0 Then schak = 0
 If schakel = 1 Then schak = 1
 If Duty < 3 Then Duty = 20                 
  If Duty > 253 Then Duty = 254
    PWM PORTA.6, Duty, 5       
Wend                         

End

wat die jal aan gaat is er eigenlijk niet veel verschil dan basic
bij basic is het if zo


IF ToetsHoger = LAAG AND Snelheid < 255 THEN INC Snelheid

in jal zou het dus dit worden
IF ToetsHoger = LAAG
    AND Snelheid < 255
     THEN INC Snelheid


je zet dus alles achter elkaar in plaats van bij jal alles onder elkaar
ik vind het bij basic beter leesbaar dan bij jal

maar ja 40 jaar geleden groot getrokken met basic dus dat zit er in geworteld
commedore basic da was een ander soort wat je niet wil weten
gr raf

Offline PeterC

  • Forumlid
  • Berichten: 3.355
    • JAL pagina
  • Voornaam: Peter
Re: Waar zijn we nu mee bezig ? Microcontrollers
« Reactie #699 Gepost op: 24 december 2014, 13:14:11 pm »
je zet dus alles achter elkaar in plaats van bij jal alles onder elkaar
ik vind het bij basic beter leesbaar dan bij jal

Bij één instructie is dat voor jou misschien beter leesbaar maar bij meerdere?

if situatie1 = iets then situatie2 = iets_anders : situatie3 = nog_iets_anders : situatie4 = iets_anders : .... : situatie_elvendertig = weer_iets_anders

 ::) ::) ::)


in jal zou het dus dit worden
IF ToetsHoger = LAAG
    AND Snelheid < 255
     THEN INC Snelheid

je zet dus alles achter elkaar in plaats van bij jal alles onder elkaar
ik vind het bij basic beter leesbaar dan bij jal

Neen je zet niet ALLES op een andere regel, een vergelijking ga je niet splitsen (tenzij je je code wil afdrukken en je vergelijking veel te lang wordt):

if((toets_hoger == laag) & (snelheid < 255))then
   inc(snelheid)
end if

Het is te vergelijken met leestekens in een tekst: die zijn er ook om die tekst duidelijker leesbaar te maken...
Groetjes, Peter


Offline raf

  • Forumlid
  • Berichten: 4.496
  • Voornaam: raf
Re: Waar zijn we nu mee bezig ? Microcontrollers
« Reactie #700 Gepost op: 24 december 2014, 13:27:22 pm »
hoi peter

ja daarin heb je dus wel gelijk maar voorlopig heb ik dat probleem nog niet

je hand tekening vind ik wel tof maar heb je een word of een byte voor je dim sheep gebruikt want anders ben je beperkt tot 256 schapen en als je dan nog niet slaapt heb je een probleem LOL
dan lig je heel de nacht te woelen

gr raf en nu hop naar het volgende programma
de ledjes onder de peron overkapping laten aan flikkeren



Offline PeterC

  • Forumlid
  • Berichten: 3.355
    • JAL pagina
  • Voornaam: Peter
Re: Waar zijn we nu mee bezig ? Microcontrollers
« Reactie #701 Gepost op: 24 december 2014, 13:47:09 pm »
je hand tekening vind ik wel tof maar heb je een word of een byte voor je dim sheep gebruikt want anders ben je beperkt tot 256 schapen en als je dan nog niet slaapt heb je een probleem LOL
dan lig je heel de nacht te woelen

Op drie regeltjes 'handtekening' kan je niet veel kwijt.  Vandaar (uitzondering!) dat ik alles op één regeltje heb geplaatst ;) .

Soms is het een 2 bit variabele, andere keren is dat soms een long word  ;D

Groetjes, Peter


Offline Havoc

  • Forumlid
  • Berichten: 6.275
  • Voornaam: Johan
Re: Waar zijn we nu mee bezig ? Microcontrollers
« Reactie #702 Gepost op: 24 december 2014, 13:55:46 pm »
Ik vind die syntax van die Basic zo moeilijk te volgen... geen idee of er nog zijn die dezelfde mening hebben...

ANSI C
if (expression)  {
Block of statements;
}
else {
Block of statements;
}

Je vergeet:
exp1 ? exp2 : exp3;

waar exp1/2/3 elk verschillende statements kunnen zijn. Ook heel leesbaar...
Expert in non-working solutions.

Offline raf

  • Forumlid
  • Berichten: 4.496
  • Voornaam: raf
Re: Waar zijn we nu mee bezig ? Microcontrollers
« Reactie #703 Gepost op: 24 december 2014, 13:59:04 pm »
da word dan in basic

select case expr
case value X
statement(s) to execute
case value Y
statement(s) to execute
case value Z
statement(s) to execute
case else
statement(s) to execute
end select

Offline raf

  • Forumlid
  • Berichten: 4.496
  • Voornaam: raf
Re: Waar zijn we nu mee bezig ? Microcontrollers
« Reactie #704 Gepost op: 24 december 2014, 14:03:49 pm »
zo ook een vraagje van een moeder aan een computer nerd

wil je voor me eventjes naar de winkel gaan

ja

haal een pak melk

en als ze eieren hebben breng er dan 6 mee

ok

komt die man terug en wat heeft die bij

6 pakken melk want ze hadden eieren

gr raf