|
|
|
![]() |
|
|||||||
|
||||||||
![]() |
|
|
Thread Tools | Rate Thread | Display Modes |
|
|
|
#1
|
||||
|
||||
|
Using the TTL and program port
Now I know the gut reaction of all you good, community-minded CD users is to point me to a search of the forums for this information, but I have already done that. After spending an hour or two looking on several websites, I could not find a complete explanation of how the TTL (and program) port works and how to use it. I understand the topic might be too big for a single resource to cover it, but even an introduction is lacking. Some of the things I'd like to know are
Last edited by Max Lobovsky : 06-23-2004 at 09:52 PM. |
|
#2
|
||||
|
||||
|
Re: Using the TTL port
im guessing by ttl port you mean a computers parallel port and if thts truely what you mean then here http://computer.howstuffworks.com/parallel-port.htm
Hope that helps |
|
#3
|
||||
|
||||
|
Re: Using the TTL port
I think he's talking about the TTL serial port on the EDU-RC. It should be functionally identical to a regular serial port, except with much lower voltage levels required for signalling.
|
|
#4
|
||||
|
||||
|
Re: Using the TTL port
Quote:
Last edited by Max Lobovsky : 06-23-2004 at 09:01 PM. |
|
#5
|
|||||
|
|||||
|
Re: Using the TTL port
He's talking about the TTL (Transistor-Transistor Logic) port on the 2004 Robot Controller.
The TTL port is a direct link to the User Processor in the RC and is basically a non-level-shifted version of the program port (which is RS232). Both of them can be used (with or without level-shifting) to communicate with other serial devices like CMUcams, computers, other RCs, and so forth. In short, it's another serial port. How do you use it in the progrmaming? Don't ask me. Oh, and the pinout (as copied from the Innovation FIRST RC reference guide) is From left to right, +5v, TX (transmit), RX (recieve), B (ground) Last edited by AlbertW : 06-23-2004 at 08:36 PM. Reason: adding information |
|
#6
|
|||||
|
|||||
|
Re: Using the TTL port
I can tell you more about hardware than software.
The Program port is a standard DCE RS-232 port. To my knowledge, TTL uses an almost identical format as RS-232, the difference is that it uses different voltages. The wave forms are identical, though. RS-232 is 1 = -3v to -25v; 0 = 3v to 25v. TTL is (generally) 1 = 5v; 0 = 0v. My favorite site on this is Beyond Logic, and Thier serial article. In the RCs, the Prog port is USART1 in api, the TTL is USART2. In the MCC18 Libraries Doc (C:\mcc18\doc\MPLAB-C18-Libraries.pdf), the API info can be found in section 2.10 (p. 58). There is probably more info on Microchip's web site, but that's down at the moment. |
|
#7
|
|||||
|
|||||
|
Re: Using the TTL port
Astronouth7303,
Here is the code we used to talk to a second micro that was keeping track of our position. It uses the TTL port. The documentation supplied didn't mention setting the port directio registers (See the first couple of lines in the SensorInitializePort() routine). The EDU Bot did it for you but the RC requires that you do it yourself. If you want the source files PM me and I'll email you the files. Gene F. Team 343 Metal in Motion AAARRRGGG!!! The tabs all got removed when I posted the code! If anyone needs/wants the actual source code PM me. #include "ifi_aliases.h" #include "ifi_default.h" #include "ifi_utilities.h" #include "sensors.h" #include "printf_lib.h" // Added by Gene #include <usart.h> #include "delays.h" SensorPackType Sensors; /************************************************** ***************************** * FUNCTION NAME: InitializeSensorPort * PURPOSE: Opens the serial port 2 for communicating with the scensors at * 19.2k baud, 8 bits, no parity, one stop bit, and no flow control. * CALLED FROM: user_routines.c * ARGUMENTS: none * RETURNS: void ************************************************** *****************************/ void SensorInitializePort (void) { // Set up TX pin as an output and RX as an input. TRISGbits.TRISG1 = 0; TRISGbits.TRISG2 = 1; Open2USART(USART_TX_INT_OFF & USART_RX_INT_OFF & USART_ASYNCH_MODE & USART_EIGHT_BIT & USART_CONT_RX & USART_BRGH_HIGH, 128); Delay1KTCYx( 50 ); /* Settling time */ } /* Code to read Bills device. */ /************************************************** ***************************** * FUNCTION NAME: ReadSensorPack * PURPOSE: Talks to the sensor pack to read the current data * CALLED FROM: user_routines.c * ARGUMENTS: none * RETURNS: void ************************************************** *****************************/ void SensorPackRead (void) { int i, j; RCSTA2bits.CREN = 1; // Re-enable the receiver // Send an STX to the sensor pack to tell it to send the data putc2USART(STX); // Loop for the number of characters in the sensor pack data for ( j = 0; j < 8/*sizeof(SensorPackType)*/; j++ ) { // Wait a finite amount of time for the next character to arrive. for ( i = 0; i < 2500; i++ ) if ( DataRdy2USART()) break; // If a character arrived (we didn't timeout) if ( i != 2500 ) { // Grab the next charcter from the USART and place it in our data structure Sensors.chars[j] = getc2USART(); } else { // If it failed then clear any possible errors RCSTA2bits.CREN = 0; // Disable the receiver RCSTA2bits.CREN = 1; // Re-enable the receiver printf("Rx Fail DataRdy = %d\n",(int)DataRdy2USART()); /* printf EXAMPLE */ } } RCSTA2bits.CREN = 0; // Disable the receiver // printf("x=%6d,y=%6d,pe=%6d,dd=%4d,ae=%4d\n", Sensors.LeftOdom, Sensors.RightOdom, Sensors.PosError, (int)(unsigned char)Sensors.DDCompass, (int)( char)Sensors.AngleError ); } /************************************************** ***************************** * FUNCTION NAME: ensorEnterAutoMode * PURPOSE: Puts the sensor pack into automatic mode sending the desired x * and y coordiantes. * Format of command: A<xl><xl><yl><yh> * CALLED FROM: user_routines.c * ARGUMENTS: none * RETURNS: void ************************************************** *****************************/ void SensorEnterAutoMode (int x, int y) { volatile int i; printf("x=%d y=%d\r",x,y); while (Busy2USART()); putc2USART('A'); for(i=0;i<1000;i++); while (Busy2USART()); putc2USART((char)(x & 0xff)); for(i=0;i<1000;i++); while (Busy2USART()); putc2USART((char)((x >> 8) & 0xff)); for(i=0;i<1000;i++); while (Busy2USART()); putc2USART((char)(y & 0xff)); for(i=0;i<1000;i++); while (Busy2USART()); putc2USART((char)((y >> 8) & 0xff)); for(i=0;i<1000;i++); while (Busy2USART()); putc2USART('\0'); } |
![]() |
| Thread Tools | |
| Display Modes | Rate This Thread |
|
|
Similar Threads
|
||||
| Thread | Thread Starter | Forum | Replies | Last Post |
| Having trouble with TTL port | Gene F | Programming | 12 | 02-10-2004 03:23 PM |
| TTL pins | Dave... | Control System | 3 | 02-07-2004 11:59 PM |
| Fried program slots? | Jeff Waegelin | Programming | 18 | 03-19-2003 06:08 PM |
| Dashreader.dll: A Visual Basic .NET user control to read the dashboard port | Ameya | Programming | 4 | 01-12-2003 11:40 PM |
| Change to Initializing Inputs and Outputs | Jferrante | Programming | 4 | 01-07-2003 11:36 AM |