SchemaTheek
 
Home Nieuws Forum Schema's Artikelen Magazine Downloads Links Shops Zoeken
 
Controle Paneel
Gebruikersnaam
Wachtwoord
  Onthoud mij
» Wachtwoord?
» Registreren
Site info
» Het Team
» Contact
» FAQ
» Leden
» Upload Archief
Stats
Totaal online: 25
25 gasten
0 leden:
Forum > Digitaal > If..Then..EndIf perikelen
Henk (NL)
Lid
Berichten: 263
Gepost op woensdag 17 December 2014 17:54:14 QuoteWijzig

Dat If Then EndIf wel eens fout gaat maakt een ieder wel eens mee.
Deze keer ben ik weer aan de beurt.
In topic Armelui's Voorversterker stuitte ik op dit probleem;

Code

' ********* Check opname Parallel I(/O)' Poort B4-B7 <<-- Tascam Output Status
Controle1:                             ' Pin 11 (Rood) + Pin 13 (Blauw)
If PORTB.5 = 0 And PORTB.7 = 0 Then    ' Record      + Play  check
      Temp = 1                           ' 
EndIf
If PORTB.4 = 0 Then                    ' Record-READY Pin 15 (Oranje)
    GoSub Tascam_Play                  ' ToDo Port D.0 ; Play
EndIf                                  ' 
Return
Controle2:                             ' Pin 11 (Rood) + Pin 13 (Blauw)
If PORTB.5 = 1 Or  PORTB.7 = 1 Then    ' Record of Play, niet actief?
If PORTB.7 = 0 Then                    ' Alleen Afspelen? Play (gewoon afspelen dus).
      Temp = 0                         ' ipv.
     GoSub Tascam_Stop                 ' ToDo PortD.1 ; Stoppen
 EndIf                                 ' 
EndIf
If PORTB.6 = 0 Then                    ' Gestopt?     Pin 12 (Grijs) Stop = Low, start recording opnieuw.
    DelayMS 400                        ' Eerst wachten totdat Stop-Relais is afgevallen, 350mSec!
   GoSub Tascam_Record                 ' ToDo Record PortD.2
     DelayMS 2500                      ' Second3 = Seconden + 3, en dan; If Second3 = Seconden Then ......
   GoSub Tascam_Play                   ' ToDo Play   PortD.0
  EndIf
Return                                  
' ***************Eind Tascam Record-Control  



Het probleem wordt veroorzaakt door DelayMS 400.
Het laatste stukje van dit Subroutine wordt niet uitgevooerd.
Plaats ik de DelayMS 400 1 positie hoger, maakt ook niet uit.
Nog verder omhoog juist boven de beide EndIf dan wordt de rest van de subroutine WEL uit gevoerd.
Dus;

Code

' ********* Check opname Parallel I(/O)' Poort B4-B7 <<-- Tascam Output Status
Controle1:                             ' Pin 11 (Rood) + Pin 13 (Blauw)
If PORTB.5 = 0 And PORTB.7 = 0 Then    ' Record      + Play  check
      Temp = 1                           ' 
EndIf
If PORTB.4 = 0 Then                    ' Record-READY Pin 15 (Oranje)
    GoSub Tascam_Play                  ' ToDo Port D.0 ; Play
EndIf                                  ' 
Return
Controle2:                             ' Pin 11 (Rood) + Pin 13 (Blauw)
If PORTB.5 = 1 Or  PORTB.7 = 1 Then    ' Record of Play, niet actief?
If PORTB.7 = 0 Then                    ' Alleen Afspelen? Play (gewoon afspelen dus).
      Temp = 0                         ' ipv.
     GoSub Tascam_Stop                 ' ToDo PortD.1 ; Stoppen
    DelayMS 400                        ' Eerst wachten totdat Stop-Relais is afgevallen, 350mSec!
 EndIf                                 ' 
EndIf
If PORTB.6 = 0 Then                    ' Gestopt?     Pin 12 (Grijs) Stop = Low, start recording opnieuw.
   GoSub Tascam_Record                 ' ToDo Record PortD.2
     DelayMS 2500                      ' Second3 = Seconden + 3, en dan; If Second3 = Seconden Then ......
   GoSub Tascam_Play                   ' ToDo Play   PortD.0
  EndIf
Return                                  
' ***************Eind Tascam Record-Control 



Dit werkt dus goed.
Wie heeft hier een verklaring voor, ik zie dit zo een twee drie niet.
Stynus
Admin
Berichten: 2830
Gepost op woensdag 17 December 2014 21:47:40 QuoteWijzig

Heb je de laatste versie van de compiler? Een paar versies geleden ook vage problemen gehad.

Kan je de subroutine waar het misgaat ook even posten?

En de fuses. Sommige pics hebben een fuse die een andere instructieset activeert waar picbasic ook niet 100% mee overweg kan. (XINST)


Met vriendelijke groet, Stynus ||| www.elektronicastynus.be
Henk (NL)
Lid
Berichten: 263
Gepost op woensdag 17 December 2014 22:03:20 QuoteWijzig

Stynus dank voor je reactie.
Het zit in deze subroutine.
De Exit oftewel Return wanwaar die wordt aangeroepen werkt gewoon.

Het zit puur in het feit waar de DelayMS 400 wordt geplaatst.

Even in het kort;

Code

If PORTB.6 = 0 Then                    ' Gestopt?     Pin 12 (Grijs) Stop = Low, start recording opnieuw.
    DelayMS 400                        ' Eerst wachten totdat Stop-Relais is afgevallen, 350mSec!
   GoSub Tascam_Record                 ' ToDo Record PortD.2
     DelayMS 2500                      ' Second3 = Seconden + 3, en dan; If Second3 = Seconden Then ......
   GoSub Tascam_Play                   ' ToDo Play   PortD.0
  EndIf
Return                                  
' ***************Eind Tascam Record-Control  



In dit stukje n.l wordt de rest van de GoSub's overgeslagen.

En wanneer de DelayMS 400 boven de beide EndIf staat dan worden de beide GoSubs WEL aabgeroepen.

Oftewel in de 1e topic het tweede source blok gaat de hele subroutine alles keurig afwerken.

 
[Bericht gewijzigd door Henk (NL) op Woensdag 17 December 2014 22:04:41]

Henk (NL)
Lid
Berichten: 263
Gepost op zaterdag 20 December 2014 11:33:07 QuoteWijzig

XINST is disabled, blijft over, de compiler moet worden geupdate.


Active Topics

» De tuin.
» Compressor Afstandsbed...
» Inrichting laadruimte ...
» Subwoofer JBL
» Show je mini projecten
» TDA7265 (Makita werfra...
» Voeding 24V 3A Stynus
» Audi
» Werkplaatsinrichting
» Subaru Outback 2016

» Meer actieve topics

Advertenties

PCBway

© 2004-2021 SchemaTheek
Laadtijd: 0.15966 sec.