Waar zijn we nu mee bezig ? Microcontrollers

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

PeterC

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


raf

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 
If I make mistakes in "spelling"
Remember it's the pen, that's bad
Don't lay the blame on me.

Havoc

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.
Met vakantie voor onbepaalde duur.

raf

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

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

raf

#694
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 
If I make mistakes in "spelling"
Remember it's the pen, that's bad
Don't lay the blame on me.

raf

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
If I make mistakes in "spelling"
Remember it's the pen, that's bad
Don't lay the blame on me.

conducteur

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

doomslu

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 *

raf

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
If I make mistakes in "spelling"
Remember it's the pen, that's bad
Don't lay the blame on me.

PeterC

Citaat van: raf op 24 december 2014, 13:00:25 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

::) ::) ::)


Citaat van: raf op 24 december 2014, 13:00:25 PM
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


raf

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


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

PeterC

Citaat van: raf op 24 december 2014, 13:27:22 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


Havoc

Citaat van: conducteur 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...

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...
Met vakantie voor onbepaalde duur.

raf

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
If I make mistakes in "spelling"
Remember it's the pen, that's bad
Don't lay the blame on me.

raf

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
If I make mistakes in "spelling"
Remember it's the pen, that's bad
Don't lay the blame on me.