|
|
|
![]() |
|
|||||||
|
||||||||
![]() |
|
|
Thread Tools | Rate Thread | Display Modes |
|
|
|
#1
|
||||
|
||||
|
2006 CMUcam2 Code
As was mentioned during the kick-off, we have new-and-improved, country fresh CMUcam2 code this year. There are two versions available: The "bells and whistles" version contains interactive menu code that allows you to change, on-the-fly, the camera calibration and tracking parameters and save the configuration to EEPROM. And we also have the "streamlined" no nonsense version for the minimalist crowd. Both versions can be found here: http://kevin.org/frc. If you have questions or spot a bug in the code or documentation, please post it in this forum.
-Kevin Last edited by Kevin Watson : 07-01-2006 at 14:07. |
|
#2
|
|||
|
|||
|
Re: 2006 CMUcam2 Code
do you use the ifi loader to download the code to the cam via to the frc controller?
|
|
#3
|
||||
|
||||
|
Re: 2006 CMUcam2 Code
You don't download the program to the camera.
You basically give it a string of commands and it responds. You could hook it to a PC and run it with Hyperterm if you wanted. ![]() |
|
#4
|
||||
|
||||
|
Re: 2006 CMUcam2 Code
Quote:
|
|
#5
|
||||
|
||||
|
Re: 2006 CMUcam2 Code
If you recently downloaded the camera code, you may have noticed that it doesn't work. No, you're not going crazy, the code on my website was broken because the last time I built the code I forgot to change the baud rate on serial port two to the same baud rate the camera expects. To fix my gaff, open up serial_ports.c, and change line 450 to this: "SPBRG2 = BAUD_115200" and Line 452 to: "TXSTA2bits.BRGH = 1". Sorry 'bout the hassle and yes, Kevin is a doofus.
-Kevin |
|
#6
|
||||
|
||||
|
Re: 2006 CMUcam2 Code
Quote:
|
|
#7
|
||||
|
||||
|
Re: 2006 CMUcam2 Code
Quote:
-Kevin |
|
#8
|
|||
|
|||
|
Re: 2006 CMUcam2 Code
This is a diff between the two versions I had available in my repo, so that I could patch my current working sources. I don't gaurantee it working, but it is a straight up diff between the old and the new:
Code:
diff -urNp -x *FRC* -x .svn* -x *.lkr -x *.hex ./../FIRST/tags/FRC-StandardCode-2006-[Kevin_Watson Camera]/ifi_utilities.c ./ifi_utilities.c
--- ./../FIRST/tags/FRC-StandardCode-2006-[Kevin_Watson Camera]/ifi_utilities.c Thu Jan 12 05:56:02 2006
+++ ./ifi_utilities.c Wed Jan 4 16:33:12 2006
@@ -27,7 +27,6 @@
int ifi_packet_num1 = 0;
int ifi_last_packet1 = 0;
-char ifi_printfBufr[80];
unsigned char *ptr;
unsigned char ifi_count;
unsigned char ifi_analog_channels;
@@ -88,33 +87,6 @@ void PrintWord(unsigned int odata)
TXREG = 13; /* add a carriage return */
Wait4TXEmpty();
}
-
-
-/*******************************************************************************
-* FUNCTION NAME: PrintString
-* PURPOSE: Prints a string to the serial port.
-* CALLED FROM: anywhere
-* ARGUMENTS: none
-* Argument Type IO Description
-* -------- ------------- -- -----------
-* bufr pointer I word of data to be transmitted
-* RETURNS: void
-*******************************************************************************/
-void PrintString(char *bufr)
-{
- static int len,I;
-
- strcpypgm2ram (ifi_printfBufr,(rom char *) bufr); /*Move from flash to ram*/
- len = (int) strlen((const char *)ifi_printfBufr);
- if (len > 80) len = 80;
-
- for (I=0;I<len;I++)
- {
- TXREG = ifi_printfBufr[i];
- Wait4TXEmpty();
- }
-}
-
/*******************************************************************************
* FUNCTION NAME: DisplayBufr
diff -urNp -x *FRC* -x .svn* -x *.lkr -x *.hex ./../FIRST/tags/FRC-StandardCode-2006-[Kevin_Watson Camera]/ifi_utilities.h ./ifi_utilities.h
--- ./../FIRST/tags/FRC-StandardCode-2006-[Kevin_Watson Camera]/ifi_utilities.h Thu Jan 12 05:56:02 2006
+++ ./ifi_utilities.h Wed Jan 4 16:33:46 2006
@@ -74,7 +74,6 @@ void Generate_Pwms(unsigned char pwm_1,u
void Wait4TXEmpty(void);
void PrintByte(unsigned char odata);
void PrintWord(unsigned int odata);
-void PrintString(char *bufr);
void DisplayBufr(unsigned char *bufr);
void PacketNum_Check(void);
void Initialize_Serial_Comms (void);
diff -urNp -x *FRC* -x .svn* -x *.lkr -x *.hex ./../FIRST/tags/FRC-StandardCode-2006-[Kevin_Watson Camera]/readme.txt ./readme.txt
--- ./../FIRST/tags/FRC-StandardCode-2006-[Kevin_Watson Camera]/readme.txt Wed Dec 31 19:00:00 1969
+++ ./readme.txt Mon Oct 10 14:26:42 2005
@@ -0,0 +1,65 @@
+This directory contains the default code for the Innovation First 2006 Full-size Robot Controller.
+
+To compile this code you must have Microchip's MPLAB IDE (v7.2) with their C18 compiler (v2.4) installed on your system.
+
+If you wish to restore your Full-size Robot Controller to the default functionality as shipped from the factory, use the IFI Loader application to download the FRC_default.hex file to your Robot Controller.
+
+CAUTION: Do not relocate this FrcCode directory very deep in your directory tree. This is because the Microchip compiler has a 64 character path/filename limit. We suggest placing it in a directory named C:\mcc18\Projects\
+
+Notes:
+Use FRC_library.lib (default) if you plan to use the Generate_Pwms() function. This uses Timer0 to synchronize any PWM outputs generated by the User processor to make sure they avoid any SPI interrupts.
+If you want to use Timer0 yourself, then you can replace FRC_library.lib with FRC_alltimers.lib in the project.
+
+
+www.InnovationFirst.com
+10/10/2005
+- Added a checksum to the breaker panel packet
+- now using <stdio.h>, compiler needs -nw=2066 to suppress warnings (under project->build options->project->MPLAB C18->Use Alternate Settings)
+- Note: when using a 'printf' use a '\r' rather than a '\n' with the C18 compiler (v2.4 or later)
+
+11/12/2004
+- Added user_SerialDrv.c - device driver for the uart
+- Added code to handle packets from the breaker panel
+
+2/26/2004
+- ifi_aliases.h
+ Changed "competition_mode" alias to "disabled_mode" to be more accurate.
+ Added comment explaining that this bit is 1 when the RC is disabled.
+- ifi_default.h
+ Corrected comment regarding "disabled" bit. This bit is 1 when disabled.
+
+2/24/2004
+- user_routines_fast.c
+ Added interrupt enable check to interrupt service routine to ensure that disabled interrupts are not serviced.
+ Also all PWM and Relay outputs are initialized to neutral when entering Autonomous. This fixes a problem where the last PWM values are remembered and stuck throughout Autonomous mode when switching from Disabled to Autonomous.
+- ifi_aliases.h
+ Added aliases for the CCP pins (PWM OUTPUTS 13-16).
+ These can be used as digital outputs (not inputs) when properly configured.
+- README.txt (this file)
+ Added recommended directory for code placement.
+
+
+2/18/2004
+- ifi_aliases.h
+ Swapped relayX_fwd and relayX_rev aliases.
+ Added a note that the REV/FWD labels on the Robot Controller are incorrect.
+- FRC_default.hex
+ Recompiled to reflect the correct relay behavior (swapped FWD/REV).
+
+2/10/2004
+- user_routines_fast.c
+ Added Generate_Pwms() function call to User_Autonomous_Code.
+- 18f8520user.lkr
+ Removed debug section of program memory. Now User code can go all the way up to 0x7FFF.
+- FRC_library.lib and FRC_alltimers.lib
+ Now configure TTL Serial Port (USART2) RX2 pin as an input by default.
+
+1/29/2004
+- user_routines.c
+ Corrected Limit Switch section by removing NOT (!) from inputs.
+- ifi_aliases.h
+ Corrected User_Byte1 and User_Byte2 aliases.
+ Added TTL Serial Port aliases.
+
+1/8/2004
+- Initial Release
diff -urNp -x *FRC* -x .svn* -x *.lkr -x *.hex ./../FIRST/tags/FRC-StandardCode-2006-[Kevin_Watson Camera]/serial_ports.c ./serial_ports.c
--- ./../FIRST/tags/FRC-StandardCode-2006-[Kevin_Watson Camera]/serial_ports.c Thu Jan 12 05:56:02 2006
+++ ./serial_ports.c Wed Jan 11 22:10:44 2006
@@ -4,7 +4,7 @@
*
* VERSION: 0.4 (Beta)
*
-* DATE: 05-Jan-2006
+* DATE: 10-Jan-2006
*
* AUTHOR: R. Kevin Watson
* kevinw@jpl.nasa.gov
@@ -144,6 +144,8 @@
* 05-Feb-2005 0.3 RKW - Added _user_putc() interface to C18's new output
* stream capabilities. Updated documentation.
* 05-Jan-2006 0.4 RKW - Partial port to 18F8722. Updated documentation.
+* 10-Jan-2006 0.4 RKW - Modified the #pragma interruptlow line to also
+* save the .tmpdata section.
*
*******************************************************************************/
#include <p18f8722.h>
diff -urNp -x *FRC* -x .svn* -x *.lkr -x *.hex ./../FIRST/tags/FRC-StandardCode-2006-[Kevin_Watson Camera]/serial_ports.h ./serial_ports.h
--- ./../FIRST/tags/FRC-StandardCode-2006-[Kevin_Watson Camera]/serial_ports.h Thu Jan 12 05:56:02 2006
+++ ./serial_ports.h Tue Jan 10 21:22:08 2006
@@ -4,7 +4,7 @@
*
* VERSION: 0.4 (Beta)
*
-* DATE: 05-Jan-2006
+* DATE: 10-Jan-2006
*
* AUTHOR: R. Kevin Watson
* kevinw@jpl.nasa.gov
@@ -29,6 +29,8 @@
* 05-Feb-2005 0.3 RKW - Added _user_putc() interface to C18's new output
* stream capabilities. Updated documentation.
* 05-Jan-2006 0.4 RKW - Partial port to 18F8722. Updated documentation.
+* 10-Jan-2006 0.4 RKW - Modified the #pragma interruptlow line to also
+* save the .tmpdata section.
*
*******************************************************************************/
#ifndef _SERIAL_PORTS_H
diff -urNp -x *FRC* -x .svn* -x *.lkr -x *.hex ./../FIRST/tags/FRC-StandardCode-2006-[Kevin_Watson Camera]/serial_ports_readme.txt ./serial_ports_readme.txt
--- ./../FIRST/tags/FRC-StandardCode-2006-[Kevin_Watson Camera]/serial_ports_readme.txt Thu Jan 12 05:56:02 2006
+++ ./serial_ports_readme.txt Tue Jan 10 21:17:20 2006
@@ -16,9 +16,10 @@ on-board serial ports. This software is
designed to work with the output stream functions included
with Microchip's C18 C compiler version 2.4
-The source code in serial_ports.c/.h will work with the
-Robovation (A/K/A EDU-RC) robot controller and the FIRST
-Robotics robot controller without modification.
+This source code will work with the PIC18F8520-based FIRST
+Robotics robot controller, the PIC18F8722-based FIRST Robotics
+robot controller, and the Robovation (A/K/A EDU-RC) robot
+controller.
Because you can now easily receive data from another computer,
you can interact with your nifty IFI robot controller in real-
@@ -137,7 +138,7 @@ correctly:
1a) FRC-RC: As this software is intended to replace IFI's
serial port driver, the call to Serial_Driver_Initialize()
in user_routines.c / User_Initialization() should be
- removed or commented out. In addition, all references to
+ removed or commented out. In addition, all references to
"user_Serialdrv.c" and "user_Serialdrv.h" must be removed
from the project and all project source files.
@@ -211,7 +212,7 @@ correctly:
This serial port driver can send output stream data to either
of the serial ports by setting the value of the global variable
stdout_serial_port before calling output stream functions like
-printf(). Setting the value to "SERIAL_PORT_ONE" will send the
+printf(). Setting the value to "SERIAL_PORT_ONE" will send the
output to serial port one. Likewise, setting the value to
"SERIAL_PORT_TWO" will send the output to serial port two.
Setting the value to "NUL" will send the output to the null
diff -urNp -x *FRC* -x .svn* -x *.lkr -x *.hex ./../FIRST/tags/FRC-StandardCode-2006-[Kevin_Watson Camera]/user_routines_fast.c ./user_routines_fast.c
--- ./../FIRST/tags/FRC-StandardCode-2006-[Kevin_Watson Camera]/user_routines_fast.c Thu Jan 12 05:56:02 2006
+++ ./user_routines_fast.c Tue Jan 10 21:47:04 2006
@@ -55,7 +55,7 @@ void InterruptVectorLow (void)
* RETURNS: void
*******************************************************************************/
#pragma code
-#pragma interruptlow InterruptHandlerLow save=PROD /* You may want to save additional symbols. */
+#pragma interruptlow InterruptHandlerLow save=PROD,section(".tmpdata")
void InterruptHandlerLow ()
{
|
|
#9
|
||||
|
||||
|
Quote:
![]() |
|
#10
|
|||
|
|||
|
Re: 2006 CMUcam2 Code
We at team 533 are seeing two distinct intermittent startup error conditions that are unique to the frc_camera_s code. (haven't spent much time with the bells-and-whistles version). These are problems that do not occur with the IFI default code. The camera code we are using is the 1/11/2006 10:45 PM date stamp.
When the RC starts up correctly (about 90% of the time), the camera handler and servo tracker work perfectly. With the default_routine() call uncommented, we are also able to control other PWM putputs from the joysticks, etc. The other 10% of the time we get one of two kinds of errors. The first error is the "Code Error", similar to that reported by team 1216. The Code error only occurs at power-up, not after hitting a reset. When we see a Code Error, a robot reset clears the error. The second error, far more disturbing than the "Code Error" condition, is one in which there is no code error but the data the user uP receives from the master is corrupted - for example Joystick 1 X and Y data fields are reversed. The disturbing thing about this condition is that everything looks normal on the RC LED's so we would not know the problem is happening until the match starts. Also, the RC does not recover from this case by pressing the reset button. Only cycling power (and waiting another 5 seconds if the backup battery is connected) clears the problem. I disabled Tracking_Info_Terminal(), Camera_Handler() and Servo_Track() in Process_Data_From_Master_uP() and still get the startup errors. I spoke to Tom Watson at IFI and he said that if we can't duplicate this with the IFI default code then it must be something in the camera code. Any help would be appreciated. Thanks in advance. |
|
#11
|
||||||
|
||||||
|
Re: 2006 CMUcam2 Code
You mention that the joystick x and y are inverted. Did you determine by checking the joystick x/y values and/or motor PWM variables via the dashboard or terminal window, or are you determining this because the robot is acting funny?
On Tuesday we discovered that PWMs 13,14,15, and 16 (i.e. the bit-banged PWMs) do not work with the default camera code. The interrupts in the camera code occasionally stretch the pulse widths causing the robot to jump around a bit. |
|
#12
|
|||
|
|||
|
Re: 2006 CMUcam2 Code
The X and Y values were reversed, not inverted. I was using the "example printf" line in the default code that sends out p1_y, pi_x, p1_trig, and p1_top to the serial port for diagnostic purposes. In the fault condition, the X and Y values are reversed and I am getting garbage for p1_trig and p1_top as well, causing their associated relay outputs to go crazy.
|
|
#13
|
||||
|
||||
|
Re: 2006 CMUcam2 Code
Quote:
-Kevin |
|
#14
|
|||||
|
|||||
|
Re: 2006 CMUcam2 Code
It sounds like the problem is with communication, and most of that is handled by the master processor. Reloading the master processor firmware is worth a try.
|
|
#15
|
|||
|
|||
|
Re: 2006 CMUcam2 Code
Thanks - I'll give 'er a try and let you know what happens.
Quote:
|
![]() |
| Thread Tools | |
| Display Modes | Rate This Thread |
|
|
Similar Threads
|
||||
| Thread | Thread Starter | Forum | Replies | Last Post |
| Out of the Box Camera Code | russell | Programming | 9 | 21-10-2009 05:28 |
| CMUCam2 code (FRC and EDU?) | Amber | Programming | 0 | 15-02-2005 22:23 |
| Team THRUST - Kevin's Code and Camera Code Combine | Chris_Elston | Programming | 3 | 31-01-2005 22:28 |
| CMUCam2 Camera Code - Are important parts commented out? | Mr. Lim | Programming | 4 | 14-01-2005 12:11 |
| heres the code. y this not working | omega | Programming | 16 | 31-03-2004 15:18 |