maartenbakker
Golden Member
www.elba-elektro.nl | "The mind is a funny thing. Sometimes it needs a good whack on the side of the head to jar things loose."
Kennelijk gaat het om een uitzondering en gaat het niet om RC5 of RC6... Aswo zegt dat er van de MDV435 en ADV436 geen onderdelen zijn, en bij de afstandsbediening expliciet "NIET LEVERBAAR, GEEN VERVANGER BEKEND".
Dan kom je toch uit bij mijn vorige opmerking. Ze hebben geen moeite gedaan omdat TCL er zelf al een standaard afstandsbediening voor had.
Je zult het dus waarschijnlijk onder het merk TCL moeten zoeken.
Opzich bestaan ze wel, zie bijvoorbeeld https://afstandsbediening.nl/contents/nl/p5181_Afstandsbediening_Arist…
Als hij inderdaad gelijk is aan de ab voor de de ADV440, dat heeft Philips hem ook ooit geleverd onder nummer 9965 100 13838 maar niet meer leverbaar tenzij iemand nog voorraad heeft. Deze spelers zijn uit de nadagen van het gebruik van de submerken. Aristona is nog kort als Magnavox geleverd en daarna werden alle merken behalve Philips uitgefaseerd.
[Bericht gewijzigd door maartenbakker op (10%)]
Ondertussen ben ik wat aan het kijken naar Arduino sketches om IR-codes uit te zenden. Ik vond er wel wat, de meeste zijn wel gebaseerd op NEC protocol.
Ik heb nog geen sketch kunnen vinden die alle RC6-codes met adressen uitzendt.
Wellicht toch zelf iets maken met een PIC. Het blijft immers hobbywerk.
Ontvangen heb ik al een keer gedaan.
Moet ik als ik een IR signaal ga zenden zelf voor de modulatie zorgen?
Uit die Arduino libraries haal ik dat niet zo gauw.
maartenbakker
Golden Member
www.elba-elektro.nl | "The mind is a funny thing. Sometimes it needs a good whack on the side of the head to jar things loose."
Het is vrijwel zeker geen RC6, dus dat is geen ramp. Kan zomaar NEC protocol zijn of gewoon wat de Chinees-van-de-dag bedacht heeft.
Als ik een Chinees met gevoel voor humor was, zou ik RC4 of RECS80 pakken... Is het toch nog Philipsgerelateerd 
Ik denk dat de Arduino ook gewoon moduleert, anders zou je er niet zo heel veel aan hebben.
[Bericht gewijzigd door maartenbakker op (21%)]
Op 17 november 2023 12:14:06 schreef maartenbakker:
Het is vrijwel zeker geen RC6, dus dat is geen ramp. Kan zomaar NEC protocol zijn of gewoon wat de Chinees-van-de-dag bedacht heeft.Als ik een Chinees met gevoel voor humor was, zou ik RC4 of RECS80 pakken... Is het toch nog Philipsgerelateerd
Ik denk dat de Arduino ook gewoon moduleert, anders zou je er niet zo heel veel aan hebben.
Omdat ik dat Arduino toch altijd wel lastig vind (is niet echt mijn ding), wilde ik het in MikroBasic proberen te maken (zie het ook maar als een les).
Is wel lastig om voorbeelden te vinden, het wordt nl niet zo heel veel gebruikt.
Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Als je niet weet welk protocol, dan wordt dat heel lastig, er zijn er tientallen...
Normaal leer je zo'n DIY AB in met de originele AB, maar dat gaat nu niet natuurlijk... 
Ik ben alweer ietsjes verder: het lijkt er op dat het het NEC protocol is.
Ik had nl nog een andere DVD speler, van het merk Time (nooit van gehoord).
Als ik deze afstandsbediening gebruik, die door de Arduino receiver als NEC protocol wordt herkend, blijkt dat wanneer ik de toetst Open/Close van die AB gebruik, de Aristona DVD speler aan gaat!
Het commando wordt gelezen als adres: 0x00 en commando 0x16
Dat zou betekenen dat het zoeken zich kan beperken tot het NEC protocol.
Is het dan te doen om een programmaatje te maken dat alle commando's genereert en te kijken wat er wanneer gebeurt?
Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Op 17 november 2023 13:05:26 schreef Arco:
Ik zal eens kijken, NEC is nogal anders...[bijlage]
Het ontvangen van NEC codes had ik al eens gedaan met een ander project (sterrenhemel). Daarmee kon ik functies in het programma aansturen.
Ik heb alleen geen ervaring met het versturen van IR signalen. Je moet zelf de modulatie regelen, vermoedelijk met PWM.
Ik heb al wel lopen grasduinen in het Arduino gebeuren, een programmaatje gevonden dat NEC uitzendt, maar geen idee wat er gebeurt. Ik krijg de vinger er niet achter met die libraries, .h files etc.
MikroBasic werkt daarentegen veel mooier. Ik heb alleen geen voorbeeld om mee te beginnen om IR te zenden.
Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Er staat wat code op Libstock: https://libstock.mikroe.com/projects/view/602/nec-ir-protocol-encoder-…
Ik heb er even naar gekeken.
Het ene is een Decoder. Wat ik moet hebben is het omgekeerde.
De Encoder ook bekeken, maar begrijp niet wat daar gebeurt. De processor in 'bootloader mode'?
Ik zie ook niet wat deze aan output genereert; het gebruikt een analoge poort als input en LATC in zijn geheel als output.
Wat die analoge poort doet zie ik niet. Wat zou daar aan moeten hangen?
Het gebruikt een PIC18F14K50. Die heb ik niet, maar zal vast wel zijn om te toveren naar een 16F1847 o.i.d.
Los nog van het feit dat er dan dingen moeten worden opgelost die de 1847 niet kent, zoals RABIE_Bit, RABIF_Bit, HIS_Disable(), etc...
Verder weinig gedocumenteerd.
maartenbakker
Golden Member
www.elba-elektro.nl | "The mind is a funny thing. Sometimes it needs a good whack on the side of the head to jar things loose."
Encoden is wat tijdskritischer wellicht. Bij decoden kun je op het ontvangermoduletje leunen om de draaggolf er af te strippen.
Het zou zomaar kunnen dat die Time speler ofwel dezelfde chipset gebruikt/gekloond van hetzelfde referentie-ontwerp, ofwel door TCL geproduceerd is.
Op 18 november 2023 00:35:38 schreef maartenbakker:
Encoden is wat tijdskritischer wellicht. Bij decoden kun je op het ontvangermoduletje leunen om de draaggolf er af te strippen.Het zou zomaar kunnen dat die Time speler ofwel dezelfde chipset gebruikt/gekloond van hetzelfde referentie-ontwerp, ofwel door TCL geproduceerd is.
Het wordt wel een beetje off-topic (forgive me), het gaat uiteindelijk om de TV waarop ik Oude DVD's wil laten zien.
Ik kan natuurlijk gewoon op MP een goedkope DVD ophalen met AB voor een symbolisch bedrag.
Maar.. het is wel leuk om even mee te spelen met die Afstandsbediening.
Het is net het oplossen van een puzzel.
Ik heb een C-programma om code te zenden bijna zover in MikroBasic vertaald.
Dat gaat met een PIC 12F1822.
In het programma hebben ze een "#include <12F1822.h>". Waar haal ik zo'n .h vandaan?
Verder weet ik niet wat hiervan de bedoeling is
for(i = 0; i < 32; i++){
' // If bit is 1 send 560us pulse and 1680us space
' if(bit_test(number, 31 - i)){
' pwm_on();
' delay_us(560);
' pwm_off();
' delay_us(1680);
-
-
-
Het gaat me om if(bit_test(number, 31 - i)).
Wat bedoelen ze hier nu?
KGE
Golden Member
Op 18 november 2023 11:34:01 schreef Bavelt:
Het gaat me om if(bit_test(number, 31 - i)).
Wat bedoelen ze hier nu?
number is de 32 bits code die je wilt versturen.
De for lus telt met i van 0 tot en met 31 en met 31-i dus van het hoogste bit naar het laagste bit.
Afhankelijk van het resultaat van de functie bit_test(number, bit ) wordt de PWM uitgang aan- of uit gezet met een bijbehorende tijdsduur.
Dank, ik snap nu wat er moet gebeuren.
Ik heb nu het onderstaande programma ervan gemaakt:
'****************************************************************************************************
Program PWM_18857
'Send IR Codes, NEC protocol
'Button: PortA.0, Pin2
'Output IR-Transimtter LATC.1, Pin 13
'PWM Carrier: 38 Khz
'****************************************************************************************************
Dim i1 As Byte
'****************************************************************************************************
Sub Procedure Send_Signal (Dim Number As LongWord) Sending codes
'****************************************************************************************************
PWM1_Remappable_START()
Delay_Ms(9)
PWM1_Remappable_STOP()
Delay_Us(4500)
For i1 = 0 To 31
If (Number.(31 - i1)) = 1 Then
PWM1_Remappable_START()
Delay_Us(560)
PWM1_Remappable_STOP()
Delay_Us(1680)
Else
PWM1_Remappable_START()
Delay_Us(560)
PWM1_Remappable_STOP()
Delay_Us(560)
End If
Next i1
PWM1_Remappable_START()
Delay_Us(560)
PWM1_Remappable_STOP()
Delay_Us(560)
End Sub
Main:
ANSELA = %00000000
ANSELC = %00000000
TRISA = %00000001
TRISC = %00000000
CCP1CON = %10000000 'Enable CCP1
RC2PPS = 0x09 'Map C.2 To CCP1 Pin 13
PWM1_Remappable_Init(38000)
PWM1_Remappable_SET_Duty(50)
PWM1_Start()
While True
While PORTA.0 = 0
send_signal(0x40BF00FF)
delay_ms(500)
Wend
Wend
end.
Als ik deze uitvoer en op de button druk (PortA.0), dan zegt de ontvanger dat hij dit binnenkrijgt:
Protocol=NEC Address=0x2 Command=0x0 Raw-Data=0xFF00FD02 32 bits LSB first
Send with: IrSender.sendNEC(0x2, 0x0, <numberOfRepeats>);
Maar ik stuurde weg: 0x40BF00FF
Daar gaat dus iets nog niet goed...
Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Na zenden van een code moet er wel minimaal 108ms zitten tussen begin van 2 pulstreinen, en je mag de code maar 1 keer zenden...
(daarna moet je de 'repeat' code zenden: puls 9ms, pauze 2.25ms, stopbit 0.56ms)
Dan zou het dit worden?
'****************************************************************************************************
Program PWM_18857
'Send IR Codes, NEC protocol
'Button: PortA.0, Pin2
'Output IR-Transimtter LATC.1, Pin 13
'PWM Carrier: 38 Khz
'****************************************************************************************************
Dim i1 As Byte
'****************************************************************************************************
Sub Procedure Send_Signal (Dim Number As LongWord) 'Sending codes
'****************************************************************************************************
PWM1_Remappable_START()
Delay_Ms(9)
PWM1_Remappable_STOP()
Delay_Us(4500)
For i1 = 0 To 31
If (Number.(31 - i1)) = 1 Then
PWM1_Remappable_START()
Delay_Us(560)
PWM1_Remappable_STOP()
Delay_Us(1680)
Else
PWM1_Remappable_START()
Delay_Us(560)
PWM1_Remappable_STOP()
Delay_Us(560)
End If
Next i1
PWM1_Remappable_START()
Delay_ms(9)
PWM1_Remappable_STOP()
Delay_us(2250)
PWM1_Remappable_START()
Delay_Us(560)
PWM1_Remappable_STOP()
End Sub
Main:
ANSELA = %00000000
ANSELC = %00000000
TRISA = %00000001
TRISC = %00000000
CCP1CON = %10000000 'Enable CCP1
RC2PPS = 0x09 'Map C.2 To CCP1 Pin 13
PWM1_Remappable_Init(38000)
PWM1_Remappable_SET_Duty(50)
PWM1_Start()
While True
While PORTA.0 = 0
send_signal(0x40BF00FF)
delay_ms(500)
Wend
Wend
end.
Maar dit resulteert in een 'unknown Protocol':
Protocol=UNKNOWN 35 bits (incl. gap and start) received
Received noise or an unknown (or not yet enabled) protocol
rawData[70]:
-3276750
+9000,-4450
+ 550,- 650 + 550,- 600 + 500,- 600 + 550,- 600
+ 600,-1650 + 550,- 600 + 550,-1700 + 600,-1650
+ 600,-1650 + 600,-1650 + 600,-1650 + 600,-1650
+ 600,- 550 + 600,- 500 + 650,- 500 + 600,- 550
+ 600,- 500 + 600,- 550 + 600,- 500 + 650,- 500
+ 600,-1650 + 600,-1600 + 650,-1650 + 550,-1650
+ 600,-1650 + 550,-1650 + 650,-1600 + 600,-1600
+8950,-2200 + 600
Sum: 79300
Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Die 'repeat' code moet je niet altijd zenden, maar alleen zolang de toets ingedrukt is...
(en ook met inachtneming van de 108ms tussen 2 pulstreinen)
[Bericht gewijzigd door Arco op (26%)]
Op 19 november 2023 23:05:41 schreef Arco:
Die 'repeat' code moet je niet altijd zenden, maar alleen zolang de toets ingedrukt is...
(en ook met inachtneming van de 108ms tussen 2 pulstreinen)
Ik ben al een eind verder. Het regende vandaag, dus had ik de tijd om het eens goed te bekijken.
Het lastige is nl dat de LSB van de string vooraan staat.
Dat is steeds oppassen. En daarbij is de byte na adres/commando steeds het geinverteerde van zijn voorganger. Daarmee kan je dan eventueel verificaties uitvoeren als je dat wilt.
Zo is de code voor adres 0x0 en Commando 0x15: 00FFA857
Als je het binair uittekent klopt het.
Die 180ms tussen puls treinen had ik al, in het programma heb ik dat zelfs op 500ms gezet.
Het werken met delays levert daarbij niet echt de nauwkeurige waardes op. Ik heb de output met een logic Analyzer in kaart gebracht.
Wellicht beter om met timer interrupt te gaan werken.
En ik bedacht om het aanzetten van PWM niet met PWM_Start() en PWM_Stop() te doen, maar de PWM altijd te laten lopen en via een EN-constructie met een andere poort het signaal aan of uit te zetten.
Gevoelsmatig leek dat me beter omdat ik niet weet wat er allemaal in de Start en Stop gebeurt. Als daar tijdrovende dingen gebeuren zou dat het tijdschema wellicht ook kunnen beïnvloeden.
Maar ik weet niet of ik dit juist heb...
Is het zo dat het adres van het NEC protocol het apparaat aangeeft?
Dus als de DVD speler reageert op 0x0, dan blijven alle commando's binnen dat adres naar dat device gaan?
Of kan één specifiek apparaat meerdere adressen hebben?
Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Het adres hoort bij een type apparaat, er zal van NEC ook wel ergens een lijst zijn. (bijv. receiver 0x00, tv 0x01, enz)
Dat is dan mooi.
Nu heb ik wel iets raars, zal vast wel over iets heen kijken.
ik heb een MikroBasic programmaatje gemaakt, die na een druk op een knop (PORTA.0) een string uitzendt. Na iedere druk wil ik het commando met 1 ophogen.
Maar hij blijft steeds hetzelfde uitzenden, ondanks de opgehoogde waarde.
Wat gaat hier nu fout?
'****************************************************************************************************
Program PWM_18857
'Send IR Codes, NEC protocol
'Prcoessor: PIC18F18857
'Button: PortA.0, Pin 2
'Output IR-Transimtter LATC.1, Pin 13
'PWM Carrier: 38 Khz
'****************************************************************************************************
Dim i1 As Byte
Dim j1 As Byte
Dim Number As Longword
Dim Inverted As LongWord
Dim Address_IR As Byte
Dim Command_IR As Byte
'****************************************************************************************************
Sub Procedure Invert_Number () 'Format Address and Command in LongWord to Send
'****************************************************************************************************
For j1 = 0 to 7
Inverted.j1 = Not Command_IR.(7-j1)
Inverted.(j1+8) = Command_Ir.(7-j1)
Inverted.(j1+16) = Not Address_IR.(7-j1)
Inverted.(j1+24) = Address_IR.(7-j1)
Next j1
End Sub
'****************************************************************************************************
Sub Procedure Send_Signal (Dim Number As LongWord) 'Sending codes
'****************************************************************************************************
PWM1_Remappable_START()
Delay_Ms(9)
PWM1_Remappable_STOP()
Delay_Us(4500)
For i1 = 0 To 31
If (Number.(31 - i1)) = 1 Then
PWM1_Remappable_START()
Delay_Us(560)
PWM1_Remappable_STOP()
Delay_Us(1680)
Else
PWM1_Remappable_START()
Delay_Us(560)
PWM1_Remappable_STOP()
Delay_Us(560)
End If
Next i1
PWM1_Remappable_START()
Delay_Us(560)
PWM1_Remappable_STOP()
Delay_Us(560)
End Sub
Main:
ANSELA = %00000000
ANSELC = %00000000
TRISA = %00000001
TRISC = %00000000
OSCFRQ = %00000110 '32 Mhz Internal
CCP1CON = %10000000 'Enable CCP1
RC2PPS = 0x09 'Map C.2 To CCP1 Pin 13
PWM1_Remappable_Init(38000)
PWM1_Remappable_SET_Duty(50)
Address_IR = 0x00
Command_IR = 0x22
While True
If PortA.0 = 0 Then
Inc(Command_IR)
Invert_Number()
Send_Signal(Inverted)
Delay_Ms(1500)
End If
Wend
end.
Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Lijkt me dat zou moeten werken...
Als je een duty-cycle 50/50 wilt, moetje bij Set_Duty wel 127 opgeven, niet 50...
Edit: Opgelost.
De WDT stond niet op disabled...
Daarom rebootte de Processor continu. Vandaar steeds dezelfde startwaarden...
[Bericht gewijzigd door Bavelt op (45%)]
Ik kom nu inderdaad verder.
Ik heb al een aantal codes waar de DVD speler op reageert, zoals Aan-uit, Lade open, Play, Stop, etc.
Ik heb nog geen lijst kunnen vinden waar de codes opstaan. Dat zal zeker wel niet standaard zijn.
Ik heb een mini NEC-afstandsbediening uit een ander project. Wat ik dus zou kunnen doen is de codes daarvan per knop uitlezen en de juiste terugsturen.
Heel grappig.
Ondertussen doet de oude TV het gewoon heel goed. Beetje schipperen met contrast en helderheid, beetje gordijnen wat dicht.
De nostalgische avond wordt al ingepland... 
[Bericht gewijzigd door Bavelt op (100%)]
Ik heb een aantal doorzichtige IR_LED's.
Als ik echter een willekeurige afstandsbediening pak en die richt op de camera van en smartphone, dan zie je de led vrolijk knipperen bij iedere toets.
Maar die van mij in de schakeling geeft een héél vaag lichtje, ergens in de verte. Ik moet het ding ook erg dichtbij de receiver leggen, wil hij reageren.
Het is via een transistor geschakeld:
De weerstand naar de basis heb ik al teruggebracht naar 1k5, de serieweerstand met de LED naar - vooruit - 12 Ohm.
Toch lijkt het op een mindere lichtopbrengst.
Zit daar zoveel verschil in dit soort IR-LED's?