timmie
niet met me uitspraken(of opmerkingen) eens mail me.K8048 guide
beste mensen,
kunnen jullie me helpen met het beoordelen van men code
Device 16F628A
Config HS_OSC, WDT_OFF, PWRTE_OFF, LVP_OFF, MCLRE_OFF
XTAL 4
ALL_DIGITAL TRUE
Symbol aan = 1
Symbol uit = 0
Symbol tijd = 10000
DelayMS 500
If PORTA.1 = aan Then
Cls
Print "verklikker 1"
DelayMS tijd
Cls
EndIf
If PORTA.2 = aan Then
Cls
Print "verklikker 2"
DelayMS tijd
Cls
EndIf
If PORTA.3 = aan Then
Cls
Print "verklikker 3"
DelayMS tijd
Cls
EndIf
End
uiteindelijk moethet er 8 van dit soort poorten worden aangestuurd maar het nu het materiaal niet om het uit te testen. en ik wil graag weten of het klopt wat ik nu schrijf in mijn code.
dus ik wil gwoon kritiek op men code. hij zal echt niet perfect zijn want ik ben nu 3 weken bezig met pic's dus. maar het gaat er omdat ik een splitter kan uitlezen welke verklikkers schakelt.
[Bericht gewijzigd door timmie op ]
timmie
niet met me uitspraken(of opmerkingen) eens mail me.K8048 guide
Ununoctium
I don't know how fast I'm going, but I know exactly where I am
zou het niet een beetje duidelijker zijn als je zegt :
"if porta.1 = 1 then"
en zoals je je code nu hebt, zal hij alles één keer controleren en daarna in slaap-modus gaan. Misschien een loop gebruiken?
timmie
niet met me uitspraken(of opmerkingen) eens mail me.K8048 guide
Op 29 maart 2006 16:01:30 schreef Ununoctium:
zou het niet een beetje duidelijker zijn als je zegt :"if porta.1 = 1 then"
en zoals je je code nu hebt, zal hij alles één keer controleren en daarna in slaap-modus gaan. Misschien een loop gebruiken?
dus voor men programma
while 1=1zetten? om zo de loop te houden
of stel je iets anders voor?
Ununoctium
I don't know how fast I'm going, but I know exactly where I am
inderdaad, maak er iets van à la
WHILE 1 = 1
If PORTA.1 = 1 Then
Cls
Print "verklikker 1"
DelayMS tijd
Cls
EndIf
If PORTA.2 = 1 Then
Cls
Print "verklikker 2"
DelayMS tijd
Cls
EndIf
If PORTA.3 = 1 Then
Cls
Print "verklikker 3"
DelayMS tijd
Cls
EndIf
WEND
Zo zal je µC continu de 3 poorten controleren (vergeet dan wel geen pull-down weerstanden van 10K elk) en pas reageren wanneer er een poort getriggerd wordt. Je kunt misschien een waitms invoeren vanboven als het niet nodig om heel snel iets te detecteren (bijvoorbeeld als een knop minstens 3 seconden moet worden ingedrukt)
[Bericht gewijzigd door Ununoctium op ]
timmie
niet met me uitspraken(of opmerkingen) eens mail me.K8048 guide
oke dank u hartelijk het is maar een kleine aanpassing strax eens ff er in rammen en dan wachten op men pic's :s hopelijk deze week binnen
free_electron
Silicon Member
Professioneel ElectronenTemmer - siliconvalleygarage.com - De voltooid verleden tijd van 'halfgeleider' is 'zand' ... US 8,032,693 / US 7,714,746 / US 7,355,303 / US 7,098,557 / US 6,762,632 / EP 1804159 - Real programmers write Hex into ROM
Op 29 maart 2006 16:01:30 schreef Ununoctium:
zou het niet een beetje duidelijker zijn als je zegt :"if porta.1 = 1 then"
neen! wie zegt dat 'aan' een logische 1 is ? stel dat hij later drukknoppen gaat gebruiken die een ingang laag maken als je erop duwt. dan moet je al die code gaan aanpassen!
ik doe dat ook zo. bitoperaties worden NOOIT hard gecodeerd. altijd een constante declareren ( de compiler vult dat netjes in dus dat kost je niks )
als je later ene probleem hebt dat ene polariteit van ene signaal verandert pas je gewoon op 1 plaats de definitie van de constante aan en klaar.
ik heb zo ganse bibilotheken gemaakt voor vanalles en nog wat ( lcd's , a/d , d/a , usb, timers , keyboards , scanning algoritmes, quadrature encoders, i2c )
alles verloopt met constanten definities.
al wat ik moet doen is de nodige biblotheken laden , mijn constantne definieren en klaar de boel loopt
een voorbeeldje
declare i2c_bb_sda literally 'p1.4' /* i2c sda poot */
declare i2c_bb_scl literally 'p3.4' /* i2c scl poot */
declare usb_245_data literally 'p2' /* datapoort voor ftdi245 */
declare usb_245_wr literally 'p1.2' /* write strobe voor 245 */
declare usb_245_rd literally 'p1.3' /* read strobe voor 245 */
declare usb_245_tx literally 'p1.5' /* txfull signaal van 245 */
declare usb_245_rx literally 'p1.6' /* rxempty signaal van 245 */
declare lcd_40x2_data literally 'p2' /* datapoort voor lcd , usb en lcd zitten gemuxt */
declare lcd_40x2_en literally 'p1.1' /* enable voor lcd */
declare lcd_40x2_rs literally 'p1.0' /* register select voor lcd */
declare kbd_4x4_scan literally 'p2' /* keyboard scan poort laagste 4 bit als drive */
declare kbd-4x4_sensing literally '0' /* kijk voor ene 'laag' en drive met laag */
declare kbd_4x4_sens literally 'p3' /* laagste 4 bit voor sensing */
declare flash_file(0ffh) at 0f800h /* maak ene stuk flash beschikbaar als nvram */
voila gans mijn systeem is gedefinieerd.
de compiler zal al die constanten netjes invullen en daar harde code van bakken. dat kost mij niks in execution time noch in ROM size. maar het maakt mijn leven heel makkelijk
al mijn libraries zijn op die manier gemaakt , volledig hermapbaar naar eender welke i/o pin en alle definities die met hardware in aanraking komen zijn gedefinieerd via constanten ( dus ook dingen zoals kijken wanneer ene poot hoog of laag is.
ik kan een schema en pcb layout maken en mijn code framework is in 123 geschreven. kwestie van effe de definities van in het schema in ene hoop declares te zetten en klaar.
op die manier wordt iets in elkaar boksen kinderspel.
telkens ik iets niews doe in hardware maak ik zo ene bibliotheekje aan.
Config HS_OSC
XTAL 4
gebruik je hs_osc dan is je kristal sneller dan 4 mhz bv 10mhz of 20mhz anders gebruik je een xt_osc en is je extern kristal 4mhz
kijk anders op http://www.picbasic.nl/index_picbasic_nl.htm
timmie
niet met me uitspraken(of opmerkingen) eens mail me.K8048 guide
de onderstaand kode zou dus moeten werken?
Device 16F628A
Config xt_OSC, WDT_OFF, PWRTE_OFF, LVP_OFF, MCLRE_OFF
XTAL 4
ALL_DIGITAL TRUE
Symbol tijd = 10000
DelayMS 500
While 1 = 1
If PORTA.0 = 1 Then
Cls
Print "verklikker 1"
DelayMS tijd
Cls
If PORTA.1 = 1 Then
Cls
Print "verklikker 2"
DelayMS tijd
Cls
If PORTA.2 = 1 Then
Cls
Print "verklikker 3"
DelayMS tijd
Cls
If PORTA.3 = 1 Then
Cls
Print "verklikker 4"
DelayMS tijd
Cls
If PORTA.4 = 1 Then
Cls
Print "verklikker 5"
DelayMS tijd
Cls
If PORTA.5 = 1 Then
Cls
Print "verklikker 6"
DelayMS tijd
Cls
If PORTA.6 = 1 Then
Cls
Print "verklikker 7"
DelayMS tijd
Cls
If PORTA.7 = 1 Then
Cls
Print "verklikker 8"
DelayMS tijd
Cls
EndIf
Wend
edit
code werkt dus niet want hij compileert hem niet
elke poort heeft een endif nodig maar ik heb geen regels meer over is er mssn een truukje om het op een andere manier te doen?
[Bericht gewijzigd door timmie op ]
elektron_
beetje gek
Hij heeft geen regels meer over ,

Je hebt 8 maal hetzelfde geschreven!
For N=0 To 7
If PORTA.N = 1 Then
Cls
Print "verklikker"
Print N+1
Endif
DelayMS tijd
Next
30 regels minder !
[Bericht gewijzigd door elektron_ op ]
timmie
niet met me uitspraken(of opmerkingen) eens mail me.K8048 guide
Op 29 maart 2006 22:41:12 schreef elektron_:
Hij heeft geen regels meer over ,![]()
![]()
![]()
![]()
ja lekker flauw, maar is er een oplossing?
Switching Power
Hobby, maar sample met mate. | BumbleBee plus pack | Weerstand calculator voor je PSP
Op 29 maart 2006 22:41:12 schreef elektron_:
Hij heeft geen regels meer over ,![]()
![]()
![]()
![]()
Haal na iedere DelayMS tijd de cls lijn weg
timmie
niet met me uitspraken(of opmerkingen) eens mail me.K8048 guide
Op 29 maart 2006 22:45:18 schreef Switching Power:
[...]
Haal na iedere DelayMS tijd de cls lijn weg
oke het resultaat blijft uiteindelijk het zelfde? probeerhet zo en zo maar
Switching Power
Hobby, maar sample met mate. | BumbleBee plus pack | Weerstand calculator voor je PSP
If PORTA.0 = 1 Then
Cls ;wis een leeg lcd of wis "verklikker X"
Print "verklikker X" ;print "verklikker X" over een leeg lcd
;of over "verklikker X"
DelayMS tijd
Cls
Je hoeft hem dus niet te wissen voor het schrijfen want je vervangt gewoon de tekst
Device 16F628A
Config xt_OSC, WDT_OFF, PWRTE_OFF, LVP_OFF, MCLRE_OFF
XTAL 4
ALL_DIGITAL TRUE
Symbol tijd = 10000
DelayMS 500
While 1 = 1
If PORTA.0 = 1 Then
Print At 1, 1, "verklikker 1"
DelayMS tijd
Cls
If PORTA.1 = 1 Then
Print At 1, 1, "verklikker 2"
DelayMS tijd
Cls
If PORTA.2 = 1 Then
Print At 1, 1, "verklikker 3"
DelayMS tijd
Cls
If PORTA.3 = 1 Then
Print At 1, 1, "verklikker 4"
DelayMS tijd
Cls
If PORTA.4 = 1 Then
Print At 1, 1, "verklikker 5"
DelayMS tijd
Cls
If PORTA.5 = 1 Then
Print At 1, 1, "verklikker 6"
DelayMS tijd
Cls
If PORTA.6 = 1 Then
Print At 1, 1, "verklikker 7"
DelayMS tijd
Cls
If PORTA.7 = 1 Then
Print At 1, 1, "verklikker 8"
DelayMS tijd
Cls
EndIf
Wend
timmie
niet met me uitspraken(of opmerkingen) eens mail me.K8048 guide
timmie
niet met me uitspraken(of opmerkingen) eens mail me.K8048 guide
Op 29 maart 2006 22:41:12 schreef elektron_:
Hij heeft geen regels meer over ,![]()
![]()
![]()
![]()
Je hebt 8 maal hetzelfde geschreven!
For N=0 To 7 If PORTA.N = 1 Then Cls Print "verklikker" Print N+1 Endif DelayMS tijd Next gekomen gelukkig30 regels minder !
dank u toch eens gaan proberen vandaag is men pic binnen
[Bericht gewijzigd door timmie op ]
timmie
niet met me uitspraken(of opmerkingen) eens mail me.K8048 guide
Op 29 maart 2006 22:41:12 schreef elektron_:
Hij heeft geen regels meer over ,![]()
![]()
![]()
![]()
Je hebt 8 maal hetzelfde geschreven!
For N=0 To 7 If PORTA.N = 1 Then Cls Print "verklikker" Print N+1 Endif DelayMS tijd Next30 regels minder !
is het mogelijk om in deze code de 2 printregels te combineren naar:
print "verklikker N+1"
of is dat niet mogelijk?
timmie
niet met me uitspraken(of opmerkingen) eens mail me.K8048 guide
Ununoctium
I don't know how fast I'm going, but I know exactly where I am
als je ingeeft
print "verklikker N+1"
dan krijg je dus effectief de letter "N", het teken "+" en het getal "1" te zien. Misschien dat het werkt als je iets BASIC-achtig gebruikt à la :
print "verklikker " & (N+1)
Ununoctium
I don't know how fast I'm going, but I know exactly where I am
Op 2 april 2006 11:40:33 schreef timmie:
en blijft het programma zo in loop
Wel...neen,
Je programma gaat verder tot hij een N-waarde van 7 heeft, en dan stopt hij, dus opnieuw een : when...
timmie
niet met me uitspraken(of opmerkingen) eens mail me.K8048 guide
Device 16F628A
Config XT_OSC, WDT_OFF, PWRTE_OFF, LVP_OFF, MCLRE_OFF
XTAL 4
ALL_DIGITAL TRUE
Symbol tijd = 10000
Symbol tijd2 = 5000
Symbol N = 0 To 7
DelayMS 500
Print "splitter monitor"
DelayMS tijd2
Print "alexander busio"
DelayMS tijd2
Print "made by tim g"
DelayMS tijd2
Cls
While 1 = 1
If PORTA.N = 1 Then
Cls
Print "verklikker"
DelayMS tijd
EndIf
Wend
If PORTB.0 = 1 Then
Cls
Print "BLIJF AF"
DelayMS tijd2
Cls
EndIf
End
oke deze code heb ik tot nu toe staan en deze word ook gwoon gecompileert maar hoe krijg ik nou N+1 op het scherm?
want de basic code weigert hij te compileren.
zo blijft het progje toch wel in loop he?
srry dat k zo vervelend ben maar het is niet voor mij(maar voor een neef van me) en ik heb op dit moment niet de materialen om het uit te testen.
Ununoctium
I don't know how fast I'm going, but I know exactly where I am
Je programma gaat nu de eerste regels uitvoeren, tot hij aan
While 1 = 1
If PORTA.N = 1 Then
Cls
Print "verklikker"
DelayMS tijd
EndIf
Wend
komt, daar zal hij dan bezig mee blijven, en hij zal nooit of te nimmer portb controleren.
timmie
niet met me uitspraken(of opmerkingen) eens mail me.K8048 guide
Ununoctium
I don't know how fast I'm going, but I know exactly where I am
Op 2 april 2006 16:40:37 schreef timmie:
dus ik moet het portB gedeelte ook ff voor de wend zetten als ik je goed begrijp
Klopt 
timmie
niet met me uitspraken(of opmerkingen) eens mail me.K8048 guide
Op 2 april 2006 16:45:48 schreef Ununoctium:
[...]Klopt
oke dan klopt het tot zover dan toch gelukkig
nu nog eens experimenteren met dat N+1