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 support@ccsinfo.com

CCS With OpenLog Device

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



Joined: 26 May 2007
Posts: 14

View user's profile Send private message

CCS With OpenLog Device
PostPosted: Tue Sep 23, 2014 7:32 pm     Reply with quote

I'm hoping someone can help me out with an issue I'm having. I purchased an OpenLog module for a process control/data recording project I've been playing around with. I can create files and log, to files, without any problems. The issue I'm having is reading data from the chip. I can see data being transferred on my o-scope; however, it's showing up as gibberish in the debug console (CCS V4.125).

Below is a code snippet. I've also tried using the RDA interrupt without any luck (it's been a few years since I've done anything with microcontrollers so my chances of incorrect implementation are pretty good).

Any help would be greatly appreciated.

Code:

#include <18F4550.h>
#device ICD=TRUE
#device adc=16

#FUSES NOWDT                    //No Watch Dog Timer
#FUSES WDT128                   //Watch Dog Timer uses 1:128 Postscale
#FUSES PLL5                     //Divide By 5(20MHz oscillator input)
#FUSES CPUDIV1                  //No System Clock Postscaler
#FUSES HSPLL                    //High Speed Crystal/Resonator with PLL enabled
#FUSES NOBROWNOUT               //No brownout reset
#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOXINST                  //Extended set extension and Indexed Addressing mode disabled (Legacy mode)
#FUSES DEBUG


#use delay(clock=48000000)
#USE I2C(MASTER, SCL=PIN_B0, SDA=PIN_B1, FORCE_SW, SLOW)
#USE SPI (MASTER, CLK=PIN_D6, DI=PIN_D7, /*ENABLE=PIN_D5,*/ MODE=0, BITS=16)

#use rs232(debugger, RCV=PIN_B3, XMIT=PIN_B3,STREAM=MONITOR)
#use rs232(baud=9600,parity=N,xmit=PIN_D0,rcv=PIN_D2, FORCE_SW, bits=8, STREAM=logger)

//gets the OpenLog device out of auto log mode
fputc(26, logger);
   fputc(26, logger);
   fputc(26, logger);
   delay_ms(200);     

   //fprintf(logger, "new test3.csv\r\n"); //works fine
   //fprintf(logger, "append test33.csv\r"); //works fine
   
   c = 'r';
   count=0;
   fprintf(logger, "size test33.csv\r"); //attempt to get the file size
 
   while(count<255)
   {
      if(kbhit(logger))
      {
         c = fgetc(logger);
         fprintf(MONITOR, "%c", c);
      }
      delay_ms(1);
      count++;
   }
   fprintf(MONITOR, "\n");

_________________
Eric
PCM programmer



Joined: 06 Sep 2003
Posts: 21708

View user's profile Send private message

PostPosted: Tue Sep 23, 2014 8:20 pm     Reply with quote

Read this thread about the debug monitor:
http://www.ccsinfo.com/forum/viewtopic.php?t=30627
Note that the CCS debugger routines in their IDE expect incoming
data at 2400 baud. According to that thread, you need to specify the
baud rate at 2400 for the debug monitor when using streams.

However, you have a larger problem than just configuring the debug
monitor. You have incoming data from your logger at 9600 baud.
But then, you want to re-transmit it to the CCS IDE debug monitor
which only runs at 2400 baud. So you're going to get overruns.

You're using software UARTs for both incoming and outgoing data.
Software UARTs "camp on" the i/o ports continuously while transmitting or
receiving a byte. While you're slowly sending out data to the IDE at
2400, you're missing incoming bytes. The CCS software can't handle
running two simultaneous soft UARTs. It's not designed to do it.

There are work-arounds. http://brushelectronics.com used to sell
software UART code for multiple soft UARTS running simultaneously but
I haven't seen it offered on his website for several years now.
Ttelmah posted an example of an interrupt-driven software UART in the
code library, but I think it only supports one channel. It's not hard to
make an interrupt-driven soft UART routine. I've done it too, but I've not
done multi-channels at different baudrates.
temtronic



Joined: 01 Jul 2010
Posts: 9107
Location: Greensville,Ontario

View user's profile Send private message

PostPosted: Wed Sep 24, 2014 5:15 am     Reply with quote

Another solution is to use a PIC with two hardware UARTs. Since you're not using the USB peripheral of the 4550, I'd suggest using the 46K22 or any PIC with hardware UARTS. It allows you to have 2 serial channels with proper interrupts, buffers, etc. that can easily run at 115k200.

Just another way to go.

and yes, I have a tube full of 4550s on my bench collecting dust.


jay
peer9802



Joined: 26 May 2007
Posts: 14

View user's profile Send private message

PostPosted: Wed Sep 24, 2014 7:29 pm     Reply with quote

Thanks for the help!

I was using the UART pins for something else on my demo board so I took that device off and connected the OpenLog. I also removed the code which prints to the debug monitor and now display on a LCD.

Below is a snippet of my current code. I seem to be getting the correct response after I enter the three "26" commands but not after the "size" command. My file size is 5874 bytes (according to Matlab) though the returned string is "si" which does not seem to jive.

Any ideas?

Code:


#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7, bits=8, STREAM=logger )

 char data[10];
   count=0;
   memset(data, 0x00, 10);
   fputc(26, logger);
   fputc(26, logger);
   fputc(26, logger);
   ii=0 ;
    while(ii<65000)
   {
      if(kbhit())
     {
         c = getc();
         data[i] = c;
         i++;
      }
      delay_us(1);
      ii++;
   }
    lcd_putc("\f");
    lcd_gotoxy(1,1);
    printf(lcd_putc, "r=%s", data);
    delay_ms(2000);

   //fprintf(logger, "new test3.csv\r\n");
   //fprintf(logger, "append test33.csv\r");
 
   c = 'r';
   count=0;
   memset(data, 0x00, 10);
   fprintf(logger, "size test33.csv\r");
   delay_ms(100);
   ii=0;
   i=0;
   while(ii<65000)
   {
      if(kbhit())
     {
         c = getc();
         data[i] = c;
         //fprintf(MONITOR, "%c", c);
         i++;
      }
      delay_us(1);
      ii++;
   }
    lcd_putc("\f");
    lcd_gotoxy(1,1);
    for(i=0;i<5;i++)
    {
      printf(lcd_putc, "%d", data[i]);
    }

_________________
Eric
PCM programmer



Joined: 06 Sep 2003
Posts: 21708

View user's profile Send private message

PostPosted: Wed Sep 24, 2014 10:10 pm     Reply with quote

Code:
fputc(26, logger);
   ii=0 ;
    while(ii<65000)
   {
      if(kbhit())
     {
         c = getc();
         data[i] = c;
         i++;
      }
      delay_us(1);
      ii++;
   }

Where's the declaration of 'ii' ? Where is 'i' ever initialized to 0 ?


Quote:
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7, bits=8, STREAM=logger )

The line above is missing the ERRORS parameter.
temtronic



Joined: 01 Jul 2010
Posts: 9107
Location: Greensville,Ontario

View user's profile Send private message

PostPosted: Thu Sep 25, 2014 3:49 pm     Reply with quote

One possible concern I have is that the OpenLog device is really a 3 V device and probably won't work with a 5V PIC.
While the datasheet says 3-12 V, there's an onboard 3V regulator for the micro and sd card.

something to consider ?

jay
peer9802



Joined: 26 May 2007
Posts: 14

View user's profile Send private message

PostPosted: Thu Sep 25, 2014 6:07 pm     Reply with quote

Quote:
Where's the declaration of 'ii' ? Where is 'i' ever initialized to 0 ?


They are both just above the code I copied (i is also=0 above the second code block). ii is uint16.

Quote:
One possible concern I have is that the OpenLog device is really a 3 V device and probably won't work with a 5V PIC.
While the datasheet says 3-12 V, there's an onboard 3V regulator for the micro and sd card.


OpenLog is not documented extremely well so these are the things I'm trying to find out from people exerienced with this device. I wanted simple data logging and this device does that well. Reading from it is a bonus.
_________________
Eric
PCM programmer



Joined: 06 Sep 2003
Posts: 21708

View user's profile Send private message

PostPosted: Thu Sep 25, 2014 8:13 pm     Reply with quote

The Openlog actually has its own tech support group. The issue of
not receiving a full response from Openlog is covered in the following
support post. See the reply by nseidle in the following thread:
https://github.com/sparkfun/OpenLog/issues/158
It explains how to modify your code to get the full response.

Here are their support archives:
https://github.com/sparkfun/OpenLog/issues?q=is%3Aopen+sort%3Aupdated-desc
To see old issues, click on the "174 closed" link.
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