rimco
Digitaal - Mijn ding :P
ik ben aan het nadenken over communicatie van 2 pics over een infra rood verbinding, Manchester Encoding volgens het RC5 protocol.
ik ben nu volgens de gegevens van:
http://www.xs4all.nl/~sbp/knowledge/ir/rc5.htm
aan de slag gegaan.
alleen ik weet nog niet zeker of dit gaat werken, ik heb nog geen nieuwe onderdelen, dus ik kan nog niet testen
zoals er in de code bij staat wilde ik gebruik maken van een TSOP. dit is het decoding gedeelte.
Dit is wat uit mijn brein is gerold, misschien nog wat standaard fouten, dus Ik zou graag wat tips of opmerkingen over de code willen krijgen, ik weet ook niet zeker of de code het bij zou kunnen houden qua snelheid.
Waar ik dus tot nu toe heb over nagedacht:
'************************************************************************
'* Name : IR Test Manchester RC5.BAS *
'* Author : Rimco B *
'* Notice : Copyright (c) 2006 Rimco B *
'* : All Rights Reserved *
'* Date : 2-5-2006 *
'* Version : 1.0 *
'* Notes : Ontvang script voor RC5 met een TSOP 2 start, 1 toggle, *
'* : 5 address en 6 command bits met Manchester Encoding *
'************************************************************************
@ DEVICE PIC16F628,INTRC_OSC
@ DEVICE PIC16F628,MCLR_OFF
@ DEVICE PIC16F628,BOD_OFF
@ DEVICE PIC16F628,LVP_OFF
@ DEVICE PIC16F628,CPD_OFF
@ DEVICE PIC16F628,PROTECT_OFF
@ DEVICE PIC16F628,PWRT_ON
@ DEVICE PIC16F628,WDT_OFF
DEFINE OSC 4 ' 4 MHz
CMCON = %00000111 ' comparators off
TRISA = %00101100 ' nog ongebruikt
TRISB = %00001110 ' ook nog niet gedaan
OPTION_REG.7 = 0 ' pull-ups uit
TijdTijd var word ' synchronisatie
eenvierdeBittijd var word
drievierdeBittijd var word
Bittijd var word
i var byte ' tellertje
Datta var BIT[6] ' LSB to MSB
databyte var byte ' bits naar byte
Adress var BIT[6] ' LSB to MSB
adress[0] = 1 ' local adres
adress[2] = 1 ' local adres
adress[4] = 1 ' local adres
loop:
if porta.1 then loop ' lijn blijft hoog zonder ontvangst bij TSOP's
' we zijn hier op de helft v/d 1e bit
rctime porta.1, 0, eenvierdebittijd ' wacht op einde 1e bit in 10us stapjes
eenvierdebittijd = eenvierdebittijd * 5 ' 1/4 van een bit in us
drievierdeBittijd = eenvierdeBittijd * 3 ' 3/4 van een bit in us
bittijd = (eenvierdebittijd * 4) ' een bit in us
pauseus eenvierdebittijd ' ga tot 1/4 v/d 2e bit
rctime porta.1, porta.1, tijdtijd ' wacht op een flank in de 2e bit voor sync
If tijdtijd = 0 or porta.1 then loop' geen flank gezien en de 2e helft van de 2e bit moet laag zijn
pauseus drievierdebittijd ' ga naar 1/4 v/d 3e bit
rctime porta.1, porta.1, tijdtijd ' wacht op een flank in de 3e bit
If tijdtijd = 0 then loop ' geen flank gezien
' toggle bit niet gebruikt
pauseus drievierdebittijd ' ga naar 1/4 v/d 4e bit
For i = 4 to 0 step -1 ' haal adres bits op
rctime porta.1, porta.1, tijdtijd ' wacht op een flank in de 4/5/6/7/8e bit
If tijdtijd = 0 then loop ' geen flank gezien
datta[i] = porta.1 ' sla elke bit op
pauseus drievierdebittijd ' ga naar 1/4 v/d 5/6/7/8/9e bit
next
if adress <> datta then loop ' stop als adres niet klopt
For i = 5 to 0 step -1
rctime porta.1, porta.1, tijdtijd ' wacht op een flank in de 9/10/11/12/13/14e bit
If tijdtijd = 0 then loop ' geen flank gezien
datta[i] = porta.1 ' sla elke bit op
pauseus drievierdebittijd ' ga naar 1/4 v/d 10/11/12/13/14(/15)e bit
next
' maak een byte van de bits
databyte.0 = datta[0]
databyte.1 = datta[1]
databyte.2 = datta[2]
databyte.3 = datta[3]
databyte.4 = datta[4]
databyte.5 = datta[5]
' nog geen verwerking
END
BvD,
Rimco
rimco
Digitaal - Mijn ding :P
Nog een vraagje:
welke IR led is het sterkste? eentje met een hoge mW/sr?
[Bericht gewijzigd door rimco op ]
Hunter
Damn the torpedoes, full speed ahead!
Hoe wordt er tussen de twee PICs gecommuniceerd, bits, bytes, RC5 commandos?
Als het om bytes gaat kan je het protocol beter aanpassen, 2 startbits, 8 databits, en eventueel een paritybit.
rimco
Digitaal - Mijn ding :P
het gaat om gewone ascii tekens (tot 64) in losse bytes,
ik maak wel andere nummers voor de tekens, maar gaat wel passen, 26 kleine, 26 hoofdletters, en 10 cijfers.
ik had eerst zelf een beetje aangepast met 8 databits met parity,
maar ik ben maar overgegaan op het standaard RC5 omdat ik dan zeker ben dat ik geen andere apparaten zal storen als ik adresses goed kies.
en er zijn 2 start bits, zoals het orginele RC5 ook heeft, de eerste is om de bitlengte te kalibreren.
bit1 en bit2 zijn de startbits
bit3 is toggle bit, zal ik misschien wel als parity of extra commando bit gaan gebruiken
bit4-8 zijn address bits
bit9-14 zijn de commando bits
ik wilde eigenlijk wat informatie over de snelheid die het aan kan, standaard bitlengte bij RC5 is 1,778ms.
P.S. de data en address bits moet ik volgens mij nog inverten, maar daar had ik even geen tijd voor om uit te zoeken