Sterrenhemel

Waar fIRFound staat maakt niet uit: zolang die '1' blijft doet de IR ontvangst niets...

Arco - "Simplicity is a prerequisite for reliability" - hard en software ontwikkeling: www.arcovox.com
Bavelt

Special Member

Op 30 november 2020 15:52:31 schreef Arco:
Waar fIRFound staat maakt niet uit: zolang die '1' blijft doet de IR ontvangst niets...

Klopt. En omdat hij wellicht niet op 0 werd gezet (omdat dat pas na allerlei routines kwam met delay's etc klopt het dat de IR dan niets doet.

Ik had alleen gedacht bij het starten komt hij vanzelf weer op 0 vanwege Flags = 0.
Maar alah..
Het oogt nu weer redelijk stabiel...

Man is still the most extraordinary computer of all. JF Kennedy
Bavelt

Special Member

Net even bij de houtwinkel geweest. Men gaf aan dat het veel beter is om 4mm MDF te gebruiken. Geen zachtboard.
Dus hier nu maar eens mee proberen...

Man is still the most extraordinary computer of all. JF Kennedy

Is inderdaad veel beter. Heel dun zachtboard is ook een gammele boel, je kunt het zonder moeite zo in stukken breken. (als ontbijtkoek... ;) )

Arco - "Simplicity is a prerequisite for reliability" - hard en software ontwikkeling: www.arcovox.com
Bavelt

Special Member

Nou, dan nu me maar eens gaan storten op een mmanier om het programma te kunnen aanpassen op afstand. Want het ding hangt aan het plafond. Niet handig om steeds het trapje uit de schuur te halen voor een wijziging...
En een lange kabel naar beneden is ook niet echt een goed gezicht.

Zo dat kunnen mbv een andere Pic (en dan wederom met IR?)

Man is still the most extraordinary computer of all. JF Kennedy
Bavelt

Special Member

Ik wil me eens verdiepen in hoe een PIC draadloos te programmeren.
Ik las al over het gebruik van DS30 als een 'bootloader'.

Maar wellicht is dit al achterhaald? Waar kan ik nu het beste beginnen?

Man is still the most extraordinary computer of all. JF Kennedy

Wat is (een) DS30? (ik kom op een horloge uit...)

Arco - "Simplicity is a prerequisite for reliability" - hard en software ontwikkeling: www.arcovox.com
Bavelt

Special Member

Op 6 december 2020 19:26:18 schreef Arco:
Wat is (een) DS30? (ik kom op een horloge uit...)

Ik zag het in een oud topic op dit forum

http://www.knutselaar.eu/WP/ds30-bootloader/

Man is still the most extraordinary computer of all. JF Kennedy
Bavelt

Special Member

Ik zit nog steeds een beetje met een ietwat onbetrouwbare IR-funcie. Dan doet-ie het wel, dan weer niet.

Nu stuit ik op het volgende:

Als ik de flags zo definieer, dan gaat het goed:

pic basic code:


 fIRFound     As Bit
 fPrev        As Bit

Bij deze niet:

pic basic code:

    
    Flags        As Byte
       fPrev      As sBit  At Flags.0
       fIRFound   As sBit  At Flags.1

Zit er een verschil in beide varianten? Het lijkt er nl een beetje op dat de de sBit iets wegschrijft in de PIC wat hij vasthoudt. Maar ik weet dat niet zeker.

Man is still the most extraordinary computer of all. JF Kennedy

Volgens mij is er geen verschil, alleen kun je met bit niet bepalen waar (in welk byte) het bit ergens komt (dat doet de compiler en dat is lastig)
Beide schrijven naar ram, dus er wordt niets 'vastgehouden'

[Bericht gewijzigd door Arco op 7 december 2020 11:33:13 (17%)]

Arco - "Simplicity is a prerequisite for reliability" - hard en software ontwikkeling: www.arcovox.com
Bavelt

Special Member

Toch moet er iets raars zitten.
Ik kan het nl reproduceren.

Kan het wellicht zitten in

pic basic code:

Flags = 0  

?

Ik ga er dan vanuit dat alle bits in het byte op '0' komen te staan...

Of is Flags wellicht een 'reserved word'?

Man is still the most extraordinary computer of all. JF Kennedy

Nee,

Er moet iets anders mis zijn. Ik gebruik het zo (en ook sBit) al heel erg lang en heb nooit problemen...

Arco - "Simplicity is a prerequisite for reliability" - hard en software ontwikkeling: www.arcovox.com
Bavelt

Special Member

Tja..

Ik heb ze nu zo genoemd, nu gaat het wel goed (voor hoe lang het duurt... ;()

pic basic code:


FlagsA       As Byte
  fOnOff     As sBit  At FlagsA.0
  fFast      As sBit  At FlagsA.1

 FlagsB      As Byte
  fHeaven    As sBit  At FlagsB.0
  fFade      As sBit  At FlagsB.1
  fInc       As sBit  At FlagsB.2
  fTwinkle   As sBit  At FlagsB.3
  fOrion     As sBit  At FlagsB.4
  fUrsa      As sBit  At FlagsB.5
  fOr_Ur     As sBit  At FlagsB.6
  fOr_Sh     As sBit  At FlagsB.7
Man is still the most extraordinary computer of all. JF Kennedy

Er zal wel iets anders mis zijn, want dit werkt altijd. (misschien ergens een vergeten flags=0 ?)

Arco - "Simplicity is a prerequisite for reliability" - hard en software ontwikkeling: www.arcovox.com
Bavelt

Special Member

Op 7 december 2020 14:46:22 schreef Arco:
Er zal wel iets anders mis zijn, want dit werkt altijd. (misschien ergens een vergeten flags=0 ?)

Ja, ik zat al te zoeken naar iets dergelijks.

Het vreemde is nl dat wanneer de IR het niet doet (de rest werkt altijd wel), óok na resetten het geheel niet werkt. Spanning er af, even wachten, ook niet.

Ik moet het programma dan compileren (met een wijziging aan flags, of een ledje laten branden, o.i.d. om te onderzoeken hoe ver het programma komt en dan 'jáah, nu doet-ie het weer'...)
Vandaar dat ik dacht dat er 'iets' is wat de Pic onthoudt. Ik heb het verschijnsel ook wel eens gemerkt na het aansluiten van een externe voeding.

In de Report is te zien dat de PIC lang niet vol zit en overal gemoeg 'free space' heeft, in de ROM en RAM.

Wat nog een mogelijkheid zou kunnen zijn, is dat wellicht de TSOP (zit toch ook een chip in?) iets raars doet. Stel dat-ie om een of andere manier na inschakelen van de voeding geen goede string stuurt. Dan krijg je natuurlijk ook dit verschijnsel...
Ik weet alleen niet of dat kan en of dat wel eens voorkomt..

Man is still the most extraordinary computer of all. JF Kennedy

Je initialiseert wel alle variabelen bij opstart voor zover nodig? (waarde in ram locaties is random bij opstarten)

Arco - "Simplicity is a prerequisite for reliability" - hard en software ontwikkeling: www.arcovox.com
Shiptronic

Golden Member

Op 1 december 2020 00:27:34 schreef Bavelt:
Nou, dan nu me maar eens gaan storten op een mmanier om het programma te kunnen aanpassen op afstand. Want het ding hangt aan het plafond. Niet handig om steeds het trapje uit de schuur te halen voor een wijziging...
En een lange kabel naar beneden is ook niet echt een goed gezicht.

Zo dat kunnen mbv een andere Pic (en dan wederom met IR?)

Is een ESP dan niet handiger? kost niks en kan je via de WiFi bereiken.

Voorbeeld: https://www.youtube.com/watch?v=HSplKnpMWMU&ab_channel=electronicG…

programeren: https://randomnerdtutorials.com/esp32-over-the-air-ota-programming/

Wie de vraag stelt, zal met het antwoord moeten leren leven.
Bavelt

Special Member

Op 7 december 2020 19:33:24 schreef Arco:
Je initialiseert wel alle variabelen bij opstart voor zover nodig? (waarde in ram locaties is random bij opstarten)

Jazeker. Ik geef alle variabele een startwaarde.

Ik heb wel gezien dat de TRISB niet helemaal goed stond:

pic basic code:

'SPI for MAX7219:
'ClockPin at PortB.4     Pin 10
'Latch    at PortB.3     Pin 9
'Data     at PortB.2     Pin 8

De TSOP zit op B.0

Er stond:

pic basic code:

 TRISB      = %00000101

Maar moet volgens mij zijn:

pic basic code:

 TRISB      = %00000001

M.a.w. de datapin stond op input. Maar ik weet niet of dat van invloed is. Ik heb begrepen dat zodra je iets wegschrijft de pin automatisch output wordt...

Man is still the most extraordinary computer of all. JF Kennedy

Moet PortB.4 niet LatB.4 zijn? (output)

Arco - "Simplicity is a prerequisite for reliability" - hard en software ontwikkeling: www.arcovox.com
Bavelt

Special Member

Op 7 december 2020 23:16:35 schreef Arco:
Moet PortB.4 niet LatB.4 zijn? (output)

ja, dat had ik ook opgenomen:

pic basic code:


Dim ClockPin     As sbit at LATB.4        'pin 10
    Latch        As sbit at LATB.3        'pin 9
    Datapin      As sbit at LATB.2        'pin 8

(in commentaarregel staat idd 'Port')

Man is still the most extraordinary computer of all. JF Kennedy
Bavelt

Special Member

En toch,... en toch...

Is er iets met dat sBit aan de hand.

Als ik dit doe gaat het steeds goed:

pic basic code:


    fIRFound     As Bit
    fPrev        As Bit
    fSw1         As Bit
    fOnOff       As Bit
    fFast        As Bit
    fHeaven      As Bit
    fFade        As Bit
    fInc         As Bit
    fTwinkle     As Bit
    fOrion       As Bit
    fUrsa        As Bit
    fOr_Ur       As Bit
    fOr_Sh       As Bit
	
	---
	---
	---
	
'========================================================================================
Sub Procedure Clear_Flags()                                  'Clear All Flags
'========================================================================================
 fOnOff   = 0
 fFast    = 0
 fHeaven  = 0
 fFade    = 0
 fInc     = 0
 fTwinkle = 0
 fOrion   = 0
 fUrsa    = 0
 fOr_Ur   = 0
 fOr_Sh   = 0
End Sub

Maar hier gaat het vrijwel altijd mis (of heel even goed maar na opnieuw spanning er op weer mis. De IR reageert nergens meer op)

pic basic code:


FlagsB       As Byte
  fHeaven    As sBit  At FlagsB.0
  fFade      As sBit  At FlagsB.1
--- etc

FlagsB = 0

Tock wellicht iets met de uc (PIC16F1847)?

Man is still the most extraordinary computer of all. JF Kennedy

Zoals gezegd: in gebruik dit al 10 jaar zo en nooit enig probleem. Dus er moet wat anders niet kloppen.

Arco - "Simplicity is a prerequisite for reliability" - hard en software ontwikkeling: www.arcovox.com
Bavelt

Special Member

Op 7 december 2020 14:46:22 schreef Arco:
Er zal wel iets anders mis zijn, want dit werkt altijd. (misschien ergens een vergeten flags=0 ?)

Ik denk dat ik het gevonden heb: :P

pic basic code:

IRIn = NOT PORTB.0                                        'Signal is Inverted
     If fIRFound = 0 Then                                     '
       If IrIn = 1 Then                                       'Input high?
        If fPrev = 0 Then                                     'Low to high?
           If (HiCnt = TIMEOUT) OR (LoCnt = TIMEOUT) Then     'If timeouts, Then
            Cnt = 0                                           'start of new code
            HiCnt = 0                                         '
            LoCnt = 0
          End If                                      

De flag fPrev werd niet op 0 gezet! Dat kan een boel verklaren, met name de ene keer wel de andere keer niet.

Als deze flag niet wordt gezet is de waarde onbepaald. Staat hij op 1, dan heb ik nooit low to high....

Dus inderdaad Arco, een vergeten flag...Heb ik 20 keer overheen gekeken.. 8)7

Man is still the most extraordinary computer of all. JF Kennedy
Bavelt

Special Member

Ik heb:

pic basic code:

FlagsA       As Byte
      fIRFound   As sBit  At FlagsA.0
      fPrev      As sBit  At FlagsA.1
      fSw1       As sBit  At FlagsA.2
      fFast      As sBit  At FlagsA.3
      fFade      As sBit  At FlagsA.4
      fInc       As sBit  At FlagsA.5
      fOnOff     As sBit  At FlagsA.6

Nu had ik de volgende constructie bedacht voor het afvragen van Flags:

pic basic code:


Select Case FlagsA
 Case fFast
   ---
 Case fFade
   -- 
   etc
   ---

End Select

Het lijkt te werken, maar mag dit zo? (of is het ongebruikelijk?)

Man is still the most extraordinary computer of all. JF Kennedy

Dat mag wel, maar doet waarschijnlijk niet wat jij verwacht. Wat er gebeurt is:

- Case fFast wordt alleen uitgevoerd (als resultaat OK is) als GEEN van de andere flags geset is (anders klopt de Case niet meer.)
- Er wordt sowieso altijd maar 1 case uitgevoerd: de eerste die OK is. (daarna wordt de Select Case verlaten)

Arco - "Simplicity is a prerequisite for reliability" - hard en software ontwikkeling: www.arcovox.com