Waar fIRFound staat maakt niet uit: zolang die '1' blijft doet de IR ontvangst niets...
Dit topic is gesloten
Special Member
Waar fIRFound staat maakt niet uit: zolang die '1' blijft doet de IR ontvangst niets...
Golden 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...
Golden 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...
Special Member
Is inderdaad veel beter. Heel dun zachtboard is ook een gammele boel, je kunt het zonder moeite zo in stukken breken. (als ontbijtkoek... )
Golden 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?)
Golden 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?
Special Member
Wat is (een) DS30? (ik kom op een horloge uit...)
Golden 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
Golden 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.
Special Member
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 maandag 7 december 2020 11:33:13 (17%)
Golden 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'?
Special Member
Nee,
Er moet iets anders mis zijn. Ik gebruik het zo (en ook sBit) al heel erg lang en heb nooit problemen...
Golden 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
Special Member
Er zal wel iets anders mis zijn, want dit werkt altijd. (misschien ergens een vergeten flags=0 ?)
Golden 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..
Special Member
Je initialiseert wel alle variabelen bij opstart voor zover nodig? (waarde in ram locaties is random bij opstarten)
Overleden
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/
Golden 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...
Special Member
Moet PortB.4 niet LatB.4 zijn? (output)
Golden 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')
Golden 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)?
Special Member
Zoals gezegd: in gebruik dit al 10 jaar zo en nooit enig probleem. Dus er moet wat anders niet kloppen.
Golden 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:
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..
Golden 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?)
Special Member
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)
Dit topic is gesloten