CCS C Software and Maintenance Offers
FAQFAQ   FAQForum Help   FAQOfficial CCS Support   SearchSearch  RegisterRegister 

ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

CCS does not monitor this forum on a regular basis.

Please do not post bug reports on this forum. Send them to CCS Technical Support

PIC16F1825 Data Signal Modulator - UPDATED see below

 
Post new topic   Reply to topic    CCS Forum Index -> General CCS C Discussion
View previous topic :: View next topic  
Author Message
jgschmidt



Joined: 03 Dec 2008
Posts: 184
Location: Gresham, OR USA

View user's profile Send private message Send e-mail Visit poster's website

PIC16F1825 Data Signal Modulator - UPDATED see below
PostPosted: Tue Apr 16, 2013 5:47 pm     Reply with quote

Hi,

I need to do some 38KHz carrier IR signalling and was bemoaning the need for another part just to AND the carrier and data. However, I was re-reading the data sheet for the PIC16F1825/1829 part and noticed the Data Signal Modulator (DSM) (Section 23), so perhaps not anymore...

I checked my CCS (PCWHD 4.135) help file and found a DSM section in the functional overviews. However, there is no page in the manual for the referenced setup_dsm() function.

So my questions are:

1) does anyone know where to find the detailed documentation for setup_dsm()?

2) I'm no EE and don't totally understand the data sheet - is the DSM suitable for sending serial data via IR? I'd then like to receive it via a typical 38khz IR receiver connected to the RX pin of another PIC. My hardwired connection works fine but I ultimately can not have a physical connection. My transmission distance is on the order of centimeters.

3) Does anyone who may have done this have any recommendations? (fastest data rate, recommended DSM settings, etc.)

Thanks in advance for any help.
_________________
Jürgen
www.jgscraft.com


Last edited by jgschmidt on Wed Apr 17, 2013 1:46 pm; edited 1 time in total
dyeatman



Joined: 06 Sep 2003
Posts: 1934
Location: Norman, OK

View user's profile Send private message

PostPosted: Tue Apr 16, 2013 6:09 pm     Reply with quote

Setup_dsm is covered in the PCD manual, page 63, and includes a pretty
good description of how it works (not as good as the data sheet though).
All the usage is also covered. Looks like OOK might be what you need.

Quote:
The Data Signal Modulator (DSM) allows the user to mix a digital
data stream (the “modulator signal”) with a carrier signal to produce a
modulated output. Both the carrier and the modulator signals are supplied
to the DSM module, either internally from the output of a peripheral, or
externally through an input pin.

The modulated output signal is generated by performing a logical AND
operation of both the carrier and modulator signals and then it is provided
to the MDOUT pin.

Using this method, the DSM can generate the following types of key modulation schemes:

- Frequency Shift Keying (FSK)
- Phase Shift Keying (PSK)
- On-Off Keying (OOK)

_________________
Google and Forum Search are some of your best tools!!!!
jgschmidt



Joined: 03 Dec 2008
Posts: 184
Location: Gresham, OR USA

View user's profile Send private message Send e-mail Visit poster's website

PostPosted: Tue Apr 16, 2013 8:47 pm     Reply with quote

Thanks, that helps a little.

Looks like I'm out of luck, however, because I get "Unidentified identifier -- setup_dsm" when I try to use the function with the 16F1825.

When I check the Devices files there are 6 24FJxGAx devices that have DSM_ entries.

Sigh!

In my searching I came across the following:

http://www.rentron.com/Micro-Bot/IR_Serial.htm

which is a pretty sneaky solution! I'll give that a try.

Cheers,
_________________
Jürgen
www.jgscraft.com
dyeatman



Joined: 06 Sep 2003
Posts: 1934
Location: Norman, OK

View user's profile Send private message

Setup_dsm()
PostPosted: Tue Apr 16, 2013 9:01 pm     Reply with quote

You don't have to use the setup_dsm(). You can access the registers
directly. It looks pretty straightforward. If I had one of them I would
give it a shot. I'll get one on order to play with.
_________________
Google and Forum Search are some of your best tools!!!!
jgschmidt



Joined: 03 Dec 2008
Posts: 184
Location: Gresham, OR USA

View user's profile Send private message Send e-mail Visit poster's website

PostPosted: Wed Apr 17, 2013 8:43 am     Reply with quote

Oops! Duh! Forgot about that. Thanks for the reminder. I'll set up my #bytes and #bits and see how it goes.

Cheers,
_________________
Jürgen
www.jgscraft.com
jgschmidt



Joined: 03 Dec 2008
Posts: 184
Location: Gresham, OR USA

View user's profile Send private message Send e-mail Visit poster's website

PostPosted: Wed Apr 17, 2013 1:52 pm     Reply with quote

For anyone interested here is some sample code that successfully demonstrates the Data Signal Modulator ( DSM ) of the PIC16F1825.

Code:

#case
// 1825DSMTest.c  Data Signal Modulation Test
//
// 16F1825/1829
// - All ports support internal weak pullups
// - 25mA sink/source on I/O pins
//
// Target:       
// Hardware:     
// Compiler:      CCS PCWH 4.135
// Programmer:    PICkit2
// Dependencies:  None
//
// 2013.04.17 - Jurgen G Schmidt www.jgscraft.com
//
//    + VDD - 1   14 - VSS -
// OSC1/RA5 - 2   13 - RA0/DAT
// OSC2/RA4 - 3   12 - RA1/CLK
// MCLR/RA3 - 4   11 - RA2/CCP3
// CCP1/RC5 - 5   10 - RC0/SCL/SCK
//   TX/RC4 - 6    9 - RC1/SDA/SDI/CCP4
// CCP2/RC3 - 7    8 - RC2/    SDO
//
//-----------------------------------------------------------------------------
#include <16f1825.h>

#FUSES INTRC_IO      //Internal RC Osc, no output
#FUSES NOWDT         //No Watch Dog Timer
#FUSES NOPUT         //No Power Up Timer
#FUSES NOMCLR        //Engages weak pullup
#FUSES NOBROWNOUT    //No brownout reset
//#FUSES CLKOUT        //Check FOSC/4 on pin 3 - should be .125us

#use delay(internal=32M)

//-----------------------------------------------------------------------------
//------ DSM Register Definitions

#byte MDCON    = 0x39C     //--Modulation control register--
#bit  MDEN     = MDCON.7      // DSM Enable 1=on
#bit  MDOE     = MDCON.6      // MDOUT Pin enable 1=on
#bit  MDSLR    = MDCON.5      // slew rate limiting enabled 1=on
#bit  MDOPOL   = MDCON.4      // output polarity 1=signal is inverted
#bit  MDOUT    = MDCON.3      // current value of MDOUT pin
#bit  MDBIT    = MDCON.0      // 1= Modulator uses high carrier source

#byte MDSRC    = 0x39D     //--Modulation source control register--
#bit  MDMSODIS = MDSRC.7      // 1= disable output signal driving peripheral out pin
#bit  MDMS3    = MDSRC.3      // Modulation source
#bit  MDMS2    = MDSRC.2      // 0000 = MDBIT of MDCON
#bit  MDMS1    = MDSRC.1      // 0001 = MDMIN port pin
#bit  MDMS0    = MDSRC.0      // 1010 = EUSART TX output

#byte MDCARH   = 0x39F     //--Modulation high carrier control register--
#bit  MDCHODIS = MDCARH.7     // 1= disable output signal driving peripheral out pin
#bit  MDCHPOL  = MDCARH.6     // output polarity 1=signal is inverted
#bit  MDCHSYNC = MDCARH.5     // Modulator high carrier synchronization 1=on
#bit  MDCH3    = MDCARH.3     // Data high carrier selection bits
#bit  MDCH2    = MDCARH.2     // 0000 = Vss
#bit  MDCH1    = MDCARH.1     // 0100 = CCP1
#bit  MDCH0    = MDCARH.0     // 0001 = MDCIN1 port pin (C2 / pin 8)
                              // set to: 10100100

#byte MDCARL   = 0x39E     //--Modulation low carrier control register--
#bit  MDCLODIS = MDCARL.7     // 1= disable output signal driving peripheral out pin
#bit  MDCLPOL  = MDCARL.6     // output polarity 1=signal is inverted
#bit  MDCLSYNC = MDCARL.5     // Modulator low carrier synchronization 1=on
#bit  MDCL3    = MDCARL.3     // Data low carrier selection bits
#bit  MDCL2    = MDCARL.2     // 0000 = Vss
#bit  MDCL1    = MDCARL.1     // 0100 = CCP1
#bit  MDCL0    = MDCARL.0     // 0001 = MDCIN1 port pin (C2 / pin 8)
                              // set to: 0b10100000

// Test 1 - use MDMIN pin (pin 7) to toggle carrier output on MDOUT (pin 6)  WORKS!!!!!
//
// MDCON  = 0b11000001;    // DSM enable, MDOUT enable, no slew, not inverted, modulator uses high carrier source
// MDSRC  = 0b10000001;    // disable peripheral, data from MDMIN pin (so we can see triggering on OSCOPE)
// MDCARH = 0b10100100;    // disable peripheral, not inverted, synced, data high = CCP1 (38khz carrier)
// MDCARL = 0b10100000;    // disable peripheral, not inverted, synced, data low = Vss
//

//-----------------------------------------------------------------------------

void main()
{
   setup_adc_ports( NO_ANALOGS);

   setup_timer_2(T2_DIV_BY_1, 210, 1 );           
   setup_ccp1( CCP_PWM );           
   set_pwm1_duty( 422L );       // 38khz square wave output - 50% duty           

   MDCON  = 0b11000001;    // DSM enable, MDOUT enable, no slew, not inverted, modulator uses high carrier source
   MDSRC  = 0b10000001;    // disable peripheral, data from MDMIN pin (so we can see triggering on OSCOPE)
   MDCARH = 0b10100100;    // disable peripheral, not inverted, synced, data high = CCP1 (38khz carrier)
   MDCARL = 0b10100000;    // disable peripheral, not inverted, synced, data low = Vss

   
   //------ Big Loop ------
   while( TRUE )
   {
      delay_ms( 1 );
      output_toggle( PIN_C0 );   // generate signal for oscilloscope to measure loop time
   }//------ end of big loop
}
//-----------------------------------------------------------------------------
//------ end of 1825DSMTest.c ------


Happy coding!
_________________
Jürgen
www.jgscraft.com
dyeatman



Joined: 06 Sep 2003
Posts: 1934
Location: Norman, OK

View user's profile Send private message

PostPosted: Wed Apr 17, 2013 3:41 pm     Reply with quote

Outstanding! Great job!

How about adding a version of this to the code library?
_________________
Google and Forum Search are some of your best tools!!!!
jgschmidt



Joined: 03 Dec 2008
Posts: 184
Location: Gresham, OR USA

View user's profile Send private message Send e-mail Visit poster's website

PostPosted: Wed Apr 17, 2013 5:05 pm     Reply with quote

I intend to. I want to verify some of the other features, particularly the UART connection. Coming soon...
_________________
Jürgen
www.jgscraft.com
dyeatman



Joined: 06 Sep 2003
Posts: 1934
Location: Norman, OK

View user's profile Send private message

PostPosted: Sat Apr 20, 2013 4:03 pm     Reply with quote

JGScmidt,
CCS support just replied with the following:
Quote:
We currently only have built-in functions for the DSM module in the
PCD compiler. We are planning on adding support for it to the PCM and PCH
compiler in the next few weeks.

_________________
Google and Forum Search are some of your best tools!!!!
asmboy



Joined: 20 Nov 2007
Posts: 2128
Location: albany ny

View user's profile Send private message AIM Address

PostPosted: Sun Apr 21, 2013 9:12 am     Reply with quote

now ifMicrochip had a data DEMODULATOR integrated for NRZ signals
THAT would be a real accompishment


and lots of cheap 433 mhz data connect systems could be better supported too
jgschmidt



Joined: 03 Dec 2008
Posts: 184
Location: Gresham, OR USA

View user's profile Send private message Send e-mail Visit poster's website

PostPosted: Fri Apr 26, 2013 8:30 pm     Reply with quote

Thanks, dyeatman, for finding that. Working with the CCS compiler for 15 years I know how quickly that can actually happen.

IR send/receive code using the DSM has been posted in the library.

I'd like to know what other chips have the DSM but unfortunately Microchip does not list this feature in their part finder. (Sigh)

My thanks to anyone who adds part numbers having the DSM to this post.

Cheers,
_________________
Jürgen
www.jgscraft.com
PCM programmer



Joined: 06 Sep 2003
Posts: 21708

View user's profile Send private message

PostPosted: Fri Apr 26, 2013 8:44 pm     Reply with quote

Do a Google search for this:
Quote:
site:microchip.com -forums "data signal modulator" "data sheet" type:pdf
jgschmidt



Joined: 03 Dec 2008
Posts: 184
Location: Gresham, OR USA

View user's profile Send private message Send e-mail Visit poster's website

PICs with DSM (Data Signal Modulator)
PostPosted: Sat Apr 27, 2013 10:16 am     Reply with quote

Thanks. That added one more to the list, which now stands at:
    12F18xx and 16F18xx
    18LFxxK80
    18F97J94 family
    24FJ64/128GA306/308/310 <- supported by PCD 4.135

_________________
Jürgen
www.jgscraft.com
Gabriel



Joined: 03 Aug 2009
Posts: 1067
Location: Panama

View user's profile Send private message

PostPosted: Tue Apr 30, 2013 7:28 am     Reply with quote

I was having the same problem of having to add an extra part....

i never got to test my solution, but i thought of using the comparator module as an AND gate.....

you would still need a few resistors but thats easier than adding a whole 14 pin AND gate chip or transistors...

.. i know its late in the thread but someone might find it useful...

G.
_________________
CCS PCM 5.078 & CCS PCH 5.093
Display posts from previous:   
Post new topic   Reply to topic    CCS Forum Index -> General CCS C Discussion All times are GMT - 6 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group