PDA

View Full Version : Manchester and baud [II]



mbw123
- 23rd December 2006, 16:32
I apologize for repeatedly posting on this subject but I am continually running into problems. I am using the RX433 and TX33 modules for my project. My project essentially has four buttons that trigger four different ports on the receiving end. I am basically using a cheap version of Manchester by filling up the four extra bits within the byte (because there are only four buttons), every other "real bit" (the ones that trigger the ports). That way every other byte is at least a one. See the code below to understand what I mean. Unfortunately it does not work wirelessly. I hooked it up using a wire and it worked. Is their something wrong with my "Manchester"? Or am I messing something else up with the modules?

I appreciate any responses.

-----------------
Transmitter Code:
-----------------

define HSER_TXSTA 20h
define HSER_BAUD 4800

cmcon = 7

Current var byte
Laststate var byte
input PORTA.0
input PORTA.1
input PORTA.2
input PORTA.3
Current.0 = 1
Current.2 = 1
Current.4 = 1
Current.6 = 1

Main:

current.1 = PORTA.0
Current.3 = PORTA.1
Current.5 = PORTA.2
Current.7 = PORTA.3

if (Current <> Laststate) then
hserout [$A5,"~",Current]
Laststate = Current
endif

goto main

--------------
Receiver Code:
--------------

define HSER_CLROERR 1
define HSER_RCSTA 90h
define HSER_BAUD 4800

cmcon = 7

Current var byte
output PORTA.0
output PORTA.1
output PORTA.2
output PORTA.3
output PORTB.4
low PORTA.0
low PORTA.1
low PORTA.2
low PORTA.3
low PORTB.4

@ DEVICE PIC16F628A, MCLR_OFF
@ DEVICE PIC16F628A, WDT_OFF
@ DEVICE PIC16F628A, PROTECT_OFF
@ DEVICE PIC16F628A, BOD_OFF
@ DEVICE PIC16F628A, CPD_OFF

Main:

high PORTB.4 //this is just so I can debug whether the PIC is being "browned out" by the other components
pause 250
low PORTB.4
goto loop

loop:

Hserin 20,loop,[WAIT("~"),Current]

Current = ~ Current

PORTA.0 = Current.1
PORTA.1 = Current.3
PORTA.2 = Current.5
PORTA.3 = Current.7

goto loop

============================
Thank you.

-Mike

Ioannis
- 23rd December 2006, 16:39
if it works wired it SHOULD work wireless. If not, then something is not properly setup with the modules. Have checked with a scope?

Ioannis

mbw123
- 23rd December 2006, 18:00
"Have checked with a scope?"
No, unfortunately I don't have one. Is there any other way to check it?

skimask
- 23rd December 2006, 22:35
We've been over this before, but I'll do it again....

-----------------
Transmitter Code:
-----------------
include "modedefs.bas"
cmcon=7:current var byte:dataout var byte

'pick a serial output pin and set it to an output here ---- ouput someregister.somepin

input PORTA.0:input PORTA.1:input PORTA.2:input PORTA.3

converts var byte[15]
converts[0]=$55 : converts[1]=$56 : converts[2]=$59 : converts[3]=$5a : converts[4]=$65 : converts[5]=$66 : converts[6]=$69 : converts[7]=$6a
converts[8]=$95 : converts[9]=$96 : converts[10]=$99 : converts[11]=$9a : converts[12]=$a5 : converts[13]=$a6 : converts[14]=$a9 : converts[15]=$aa

Main:
current=porta:dataout=converts[current]

'pick your serial output pin and change it to match
serout someport.somepin , n2400 , dataout

goto main

--------------
Receiver Code:
--------------
cmcon = 7:Current var byte:datain var byte:temp var byte
output PORTA.0 : output PORTA.1 : output PORTA.2 : output PORTA.3 : low PORTA.0 : low PORTA.1 : low PORTA.2 : low PORTA.3 : low PORTB.4

'pick a serial input pin and set it to an input here ---- inut someregister.somepin

converts var byte[15]
converts[0]=$55 : converts[1]=$56 : converts[2]=$59 : converts[3]=$5a : converts[4]=$65 : converts[5]=$66 : converts[6]=$69 : converts[7]=$6a
converts[8]=$95 : converts[9]=$96 : converts[10]=$99 : converts[11]=$9a : converts[12]=$a5 : converts[13]=$a6 : converts[14]=$a9 : converts[15]=$aa

Main:

'pick your serial input pin and change it
serin someport.somepin , n2400 , datain

for temp = 0 to 15
if datain = converts[temp] then porta=temp
next temp

goto loop


All the transmit program does is send out the present position of the inputs repeatedly to the receiver in manchester format. The receiver ends up getting trained eventually, but might 'freak out' a bit for the first few cycles.

The reason why your other program didn't work is because you aren't sending the data in correct 'manchester format'. You lock bits to 1's and make others change. That won't work. The receiver won't get 'trained' right.

And I've been a bit wrong in the past. Calling it 'manchester format' is wrong....it's actually called 'bi-phase encoding', but manchester is close enough.