hallo ben pas ingestapt in de picbasic taal en heb al een aantal delen van picbasic.nl doorgenomen
Nu zou ik graag een timer maken met 2 drukknopjes
druk ik op knop 1 begint er een tijd te lopen en zodra deze tijd is verlopen word een uitgang van de pic terug laag

druk ik op knop 2 terwijl de tijd van voorgaande nog niet verlopen is wordt de uitgang onmiddellijk terug laag

dit lukt me allemaal maar met een tijd van een paar minuten(delayms)
nu zou ik die tijd een drietal uur moeten kunnen maken maar vind niet zo direkt de oplossing,ben nog maar beginner he,kan iemand me zeggen wat of hoe ik dit moet doen om dit kunnen te realiseren

groetjes elco boy

Boy,

Ik vermoed dat het met delays moelijk gaat worden ;)

Ik zou het oplossen door de timer 0 te gebruiken (bv 4 Ms)en dan op basis van een interrupt 1 seconden tellen en dan de seconden tellen todat je op 3 uur komt, en in de interupt de toetsen controlleren

Hoe nauwkeurig moet die 3 uur zijn of met andere woorden welke toepassing heb je voor ogen

succes Johan

Je kunt het met interrupts doen, maar dat is niet iets voor beginners.

Maar je kunt het ook via een delay van millisecondes doen:


Dim TMs         As Word
Dim TSec        As Byte
Dim TMin        As Byte
Dim THour       As Byte


Main_Loop:

    DelayMS 1
    Inc TMs
    If TMs  > 999 Then TMs = 0   : Inc TSec
    If TSec > 59  Then TSec = 0  : Inc TMin
    If TMin > 59  Then TMin = 0  : Inc THour
        
    If THour = 3 And TMin = 0 And TSec = 0 And TMs = 0 Then
        ; Opdracht Uitvoeren
    EndIf
GoTo Main_Loop

Deze is niet nauwkeurig omdat al die opdrachten ook tijd innemen

Op 30 oktober 2011 19:27:57 schreef tysie:
Deze is niet nauwkeurig omdat al die opdrachten ook tijd innemen

De TS vraagt volgens mij ook niet om nauwkeurigheid.

En ook is het (volgens mij) zo dat Picbasic zelf de juiste wachttijd berekend.

hallo stan ik begrijp min of meer die programmaregels
maar hoe zet ik nu bij dit programma byv. dat als s1(drukknop)porta.0,even laag is, geweest dat dan uw programma zal aftellen en de gewenste poort byv. portb.0 zolang hoog blijft tot als de teller gedaan heeft
Sorry voor de misschien domme vragen maar heb nog veel bij te leren,vooral ook dankzij jullie hulp
groetjes elco boy

Hai,

Allereerst: Domme vragen bestaan niet, domme antwoorden wel!
En ja eens hebben we het allemaal moeten leren!


Symbol S1       = PORTA.0 ; Switch Aan
Symbol S2       = PORTA.1 ; Switch Uit
Symbol Led      = PORTB.0

TRISA.0 = 1
TRISA.1 = 1
TRISB.0 = 0

Main_Loop:

    If S1 = 1 And Led = 0 Then Led = 1 ; Wanneer Led uit is en S1 is actief dan led aan!
    If S2 = 1 And Led = 1 Then Led = 0 ; wanneer Led aan is en S2 is actief dan led uit en timer stoppen
    
    DelayMS 1

    If Led = 1 Then
        Inc TMs
        If TMs  > 999 Then TMs = 0   : Inc TSec
        If TSec > 59  Then TSec = 0  : Inc TMin
        If TMin > 59  Then TMin = 0  : Inc THour
            
        If THour = 3 And TMin = 0 And TSec = 0 And TMs = 0 Then Led = 0
    Else ; Wanneer Led uit is, dan timers ressetten!
        
        TSec = 0
        TMin = 0
        THour = 0
        TMs = 0    
    EndIf     
GoTo Main_Loop

hallo terug ik heb net uw programma geladen in de lite versie van picbasic maar krijg een foutmelding bij INC Tms

enig idee waar dit aan ligt
groetjes

Ja, waarschijnlijk is de variabel TMS is niet gedimensioneerd!


Dim TMs         As Word ; <
Dim TSec        As Byte
Dim TMin        As Byte
Dim THour       As Byte

hallo stan 1
het programma loopt nu gesmeerd maar ik zou het eens willen testen als de tijd i p v 3uur nu maar eens 1 minuut zou zijn,kwestie van niet te lang te moeten wachten,ik zie de logica van de nummers,wat de tijd betreft, er niet van in,vandaar mijn vraag

alvast bedankt voor alle goede hulp,al veel geleerd op een paar avonden van u,dankuwel

sorry voor de onmiddellijke reactie,maar ik heb het doorgrond en snap het systeem

bedankt voor alle goede hulp
groetjes aan iedereen

[Bericht gewijzigd door Henry S. op (15%)]

Graag gedaan hoor!

Eigenlijk is het heel eenvoudig.

De wachttijd is 1mS (zie de DelayMS 1 in de Main_Loop)

Inc TMs Hier word steeds de TMs variabel met 1 verhoogd.

er zitten 1000x 1mS in 1 seconden.
If TMs > 999 Then TMs = 0 : Inc TSec
Wanneer TMs groter is dan 999, dan word de TMs variabel op 0 gezet.
En de seconden teller 1 opgehoogd: Inc TSec

Bovenstaande geld ook voor de andere tijds variabelen.

Maar alleen wanneer de led aan is "If Led = 1 Then"


If THour = 3 And TMin = 0 And TSec = 0 And TMs = 0 Then Led = 0

Hier word dus bepaald dat na 3 uur de led uit gaat!


If THour = 0 And TMin = 2 And TSec = 0 And TMs = 0 Then Led = 0

In bovenstaand voorbeeld word de led na 2 minuten uit gezet.

Hopelijk zo iets duidelijker!