From: Marq R. <mar...@ya...> - 2008-01-22 02:12:57
|
I am trying to control 6 different servos based on feedback from an IMU and have servos 3A-C up and working. When I use servos 1A-C the robositx powers down and resets so I assume that I am initializing the ports or timers wrong and was wondering if you guys would take a look. -------------------------------------------------------------------------------------------------------------- const char *i2cDevName = "/dev/i2c-0"; int i2cDev; int gI2cAddr = 0x0B; int ch1 = 0x86;// register address for OCR3A int ch2 = 0x84;// register address for OCR3B int ch3 = 0x82;// register address for OCR3C int ch4 = 0x2A;// register address for OCR1A int ch5 = 0x28;// register address for OCR1B int ch6 = 0x78;// register address for OCR1C if (( i2cDev = open( i2cDevName, O_RDWR )) < 0 ) { LogError( "Error opening '%s': %s\n", i2cDevName, strerror( errno )); exit( 1 ); } I2cSetSlaveAddress( i2cDev, gI2cAddr, I2C_USE_CRC ); /*# Set COM mode to 2. This causes the OCR pin to fall when the timer # reaches the value stored in the OCR register and causes the OCR pin # to rise when the counter gets reset to zero. # # Use a divide by 8 prescalar, which gives a 2MHz clock which will # overflow every 32.7 msec, which is suitable for driving R/C servos*/ //Setup timer 1 I2C_IO_WriteReg8( i2cDev, 0x2F, 0xAA ); //REG_IO8("TCCR1A", 0x2F) I2C_IO_WriteReg8( i2cDev, 0x2E, 0x1A ); //REG_IO8("TCCR1B", 0x2E) I2C_IO_WriteReg16( i2cDev, 0x26, 4000 ); //REG_IO8("ICR1", 0x26) I2C_IO_WriteReg16( i2cDev, 0x2C, 0 ); //REG_IO8("TCNT1", 0x2C) //Setup timer 3 I2C_IO_WriteReg8( i2cDev, 0x8B, 0xAA ); //REG_IO8("TCCR3A", 0x8B) I2C_IO_WriteReg8( i2cDev, 0x8A, 0x1A ); //REG_IO8("TCCR3B", 0x8A) I2C_IO_WriteReg16( i2cDev, 0x80, 4000 ); //REG_IO8("ICR3", 0x80) I2C_IO_WriteReg16( i2cDev, 0x88, 0 ); //REG_IO8("TCNT3", 0x88) //Move servos to home position I2C_IO_WriteReg16( i2cDev, ch1, servo1*2 );//ch1= throtle I2C_IO_WriteReg16( i2cDev, ch2, servo2*2 );//ch2= roll left I2C_IO_WriteReg16( i2cDev, ch3, servo3*2 );//ch3= pitch I2C_IO_WriteReg16( i2cDev, ch4, servo4*2 );//ch4= yaw I2C_IO_WriteReg16( i2cDev, ch5, servo5*2 );//ch5= switch I2C_IO_WriteReg16( i2cDev, ch6, servo6*2 );//ch6= roll right //Set DDR registers for ports B and E I2C_IO_SetGPIODir( i2cDev, 0x18, 224, 224 ); //REG_IO8("PORTB",0x18),224 = pins 5,6, and 7 are output I2C_IO_SetGPIODir( i2cDev, 0x18, 56 , 56 ); //REG_IO8("PORTE",0x03),56 = pins 3,4, and 5 are output ---------------------------------------------------------------------------------------------------------------------------------------------------- thanks for your help -Marq -- View this message in context: http://www.nabble.com/Problems-getting-servos-1A-C-working-tp15011216p15011216.html Sent from the Gumstix mailing list archive at Nabble.com. |
From: Ryan R. <rjr...@uc...> - 2008-01-22 03:13:38
|
Just a suggestion, but I'm doing something similar with a Pololu servo controller board. It'll run 8 servos off of a serial port and is compatible with RS-232 and TTL level. It's also smaller and lighter than a robostix. I wrote code to set everything up and control the servos on a gumstix if you're interested. Ryan > > I am trying to control 6 different servos based on feedback from an IMU > and > have servos 3A-C up and working. When I use servos 1A-C the robositx > powers > down and resets so I assume that I am initializing the ports or timers > wrong > and was wondering if you guys would take a look. > ------------------------------------------------------------------------ -------------------------------------- > const char *i2cDevName = "/dev/i2c-0"; > int i2cDev; > int gI2cAddr = 0x0B; > > int ch1 = 0x86;// register address for OCR3A > int ch2 = 0x84;// register address for OCR3B > int ch3 = 0x82;// register address for OCR3C > int ch4 = 0x2A;// register address for OCR1A > int ch5 = 0x28;// register address for OCR1B > int ch6 = 0x78;// register address for OCR1C > > if (( i2cDev = open( i2cDevName, O_RDWR )) < 0 ) > { > LogError( "Error opening '%s': %s\n", i2cDevName, strerror( > errno > )); > exit( 1 ); > } > > I2cSetSlaveAddress( i2cDev, gI2cAddr, I2C_USE_CRC ); > > /*# Set COM mode to 2. This causes the OCR pin to fall when the timer > # reaches the value stored in the OCR register and causes the OCR pin > # to rise when the counter gets reset to zero. > # > # Use a divide by 8 prescalar, which gives a 2MHz clock which will > # overflow every 32.7 msec, which is suitable for driving R/C servos*/ > //Setup timer 1 > I2C_IO_WriteReg8( i2cDev, 0x2F, 0xAA ); //REG_IO8("TCCR1A", 0x2F) > I2C_IO_WriteReg8( i2cDev, 0x2E, 0x1A ); //REG_IO8("TCCR1B", 0x2E) > I2C_IO_WriteReg16( i2cDev, 0x26, 4000 ); //REG_IO8("ICR1", 0x26) > I2C_IO_WriteReg16( i2cDev, 0x2C, 0 ); //REG_IO8("TCNT1", 0x2C) > //Setup timer 3 > I2C_IO_WriteReg8( i2cDev, 0x8B, 0xAA ); //REG_IO8("TCCR3A", 0x8B) > I2C_IO_WriteReg8( i2cDev, 0x8A, 0x1A ); //REG_IO8("TCCR3B", 0x8A) > I2C_IO_WriteReg16( i2cDev, 0x80, 4000 ); //REG_IO8("ICR3", 0x80) > I2C_IO_WriteReg16( i2cDev, 0x88, 0 ); //REG_IO8("TCNT3", 0x88) > //Move servos to home position > I2C_IO_WriteReg16( i2cDev, ch1, servo1*2 );//ch1= throtle > I2C_IO_WriteReg16( i2cDev, ch2, servo2*2 );//ch2= roll left > I2C_IO_WriteReg16( i2cDev, ch3, servo3*2 );//ch3= pitch > I2C_IO_WriteReg16( i2cDev, ch4, servo4*2 );//ch4= yaw > I2C_IO_WriteReg16( i2cDev, ch5, servo5*2 );//ch5= switch > I2C_IO_WriteReg16( i2cDev, ch6, servo6*2 );//ch6= roll right > //Set DDR registers for ports B and E > I2C_IO_SetGPIODir( i2cDev, 0x18, 224, 224 ); > //REG_IO8("PORTB",0x18),224 > = pins 5,6, and 7 are output > I2C_IO_SetGPIODir( i2cDev, 0x18, 56 , 56 ); //REG_IO8 ("PORTE",0x03),56 > = > pins 3,4, and 5 are output > ------------------------------------------------------------------------ -------------------------------------------------------------------------- -- > > thanks for your help > -Marq > -- > View this message in context: > http://www.nabble.com/Problems-getting-servos-1A-C-working- tp15011216p15011216.html > Sent from the Gumstix mailing list archive at Nabble.com. > > > ------------------------------------------------------------------------ - > This SF.net email is sponsored by: Microsoft > Defy all challenges. Microsoft(R) Visual Studio 2008. > http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/ > _______________________________________________ > gumstix-users mailing list > gum...@li... > https://lists.sourceforge.net/lists/listinfo/gumstix-users > |
From: Marq R. <mar...@ya...> - 2008-01-23 14:37:51
|
Ryan and Dave, Thanks for the suggestions and help. The robostix is working great so far and I am using all of the UARTS on the gumstix that I have access to so it would be hard for me to hook up the Pololu board but thanks for the suggestions! -Marq -- View this message in context: http://www.nabble.com/Problems-getting-servos-1A-C-working-tp15011216p15042916.html Sent from the Gumstix mailing list archive at Nabble.com. |
From: Dave H. <dhy...@gm...> - 2008-01-22 03:16:14
|
Hi Marq, On Jan 21, 2008 6:13 PM, Marq Rasmussen <mar...@ya...> wrote: > > I am trying to control 6 different servos based on feedback from an IMU and > have servos 3A-C up and working. When I use servos 1A-C the robositx powers > down and resets so I assume that I am initializing the ports or timers wrong > and was wondering if you guys would take a look. > -------------------------------------------------------------------------------------------------------------- > const char *i2cDevName = "/dev/i2c-0"; > int i2cDev; > int gI2cAddr = 0x0B; > > int ch1 = 0x86;// register address for OCR3A > int ch2 = 0x84;// register address for OCR3B > int ch3 = 0x82;// register address for OCR3C > int ch4 = 0x2A;// register address for OCR1A > int ch5 = 0x28;// register address for OCR1B > int ch6 = 0x78;// register address for OCR1C The addresses for OCR1A and OCR1B are off by 0x20. i2c-io uses REG_IO8 and REG_MEM8 macros. REG_IO8 adds 20 to the register passed in. There are similar problems with the TCCR1A/B/C registers. The comments for the TCCR3 registers are also wrong (they say REG_IO8, but they're really REG_MEM8) -- Dave Hylands Vancouver, BC, Canada http://www.DaveHylands.com/ |
From: Marq R. <mar...@ya...> - 2008-01-23 22:28:28
|
Dave, I was hoping fixing the addresses was going to fix my problems but it it still there. Would you take a look and see if you can see any problems? --------------------------------------------------------------------------------------------------------------------------- uint8_t ch1 = 0x86;// register address for OCR3A uint8_t ch2 = 0x84;// register address for OCR3B uint8_t ch3 = 0x82;// register address for OCR3C uint8_t ch4 = 0x4A;// register address for OCR1A uint8_t ch5 = 0x48;// register address for OCR1B uint8_t ch6 = 0x78;// register address for OCR1C //Home PWM values for each servo on the heli double servo1 = 0; double servo2 = 1280; double servo3 = 1700; double servo4 = 1500; double servo5 = 1100; double servo6 = 1690; if (( i2cDev = open( i2cDevName, O_RDWR )) < 0 ) { LogError( "Error opening '%s': %s\n", i2cDevName, strerror( errno )); exit( 1 ); } I2cSetSlaveAddress( i2cDev, gI2cAddr, I2C_USE_CRC ); /*# Set COM mode to 2. This causes the OCR pin to fall when the timer # reaches the value stored in the OCR register and causes the OCR pin # to rise when the counter gets reset to zero. # # Use a divide by 8 prescalar, which gives a 2MHz clock which will # overflow every 32.7 msec, which is suitable for driving R/C servos*/ //Setup timer 1 I2C_IO_WriteReg8( i2cDev, 0x4F, 0xAA ); //REG_IO8("TCCR1A",0x4F) I2C_IO_WriteReg8( i2cDev, 0x4E, 0x1A ); //REG_IO8("TCCR1B",0x4E) I2C_IO_WriteReg16( i2cDev, 0x46, 4000 ); //REG_IO16("ICR1",0x46) I2C_IO_WriteReg16( i2cDev, 0x4C, 0 ); //REG_IO16("TCNT1",0x4C) //Setup timer 3 I2C_IO_WriteReg8( i2cDev, 0x8B, 0xAA ); //REG_MEM8("TCCR3A",0x8B) I2C_IO_WriteReg8( i2cDev, 0x8A, 0x1A ); //REG_MEM8("TCCR3B",0x8A) I2C_IO_WriteReg16( i2cDev, 0x80, 4000 ); //REG_MEM16("ICR3",0x80) I2C_IO_WriteReg16( i2cDev, 0x88, 0 ); //REG_MEM16("TCNT3",0x88) //Move servos to home position I2C_IO_WriteReg16( i2cDev, ch1, servo1*2 );//ch1= throttle I2C_IO_WriteReg16( i2cDev, ch2, servo2*2 );//ch2= roll left I2C_IO_WriteReg16( i2cDev, ch3, servo3*2 );//ch3= pitch I2C_IO_WriteReg16( i2cDev, ch4, servo4*2 );//ch4= yaw I2C_IO_WriteReg16( i2cDev, ch5, servo5*2 );//ch5= switch I2C_IO_WriteReg16( i2cDev, ch6, servo6*2 );//ch6= roll right //Set DDR registers for ports B and E I2C_IO_SetGPIODir( i2cDev, 0x38, 224, 224 ); //REG_IO8("PORTB",0x38),224 = pins 5,6, and 7 are output I2C_IO_SetGPIODir( i2cDev, 0x23, 56 , 56 ); //REG_IO8("PORTE",0x23),56 = pins 3,4, and 5 are output while(1) { angles=read_3dm(rs232,accelgain,gyrogain,angles); servo2 = -11.4*angles.roll + 1316; servo6 = -12*angles.roll + 1711; printf("servo left %f\n", servo2); printf("servo right %f\n", servo6); I2C_IO_WriteReg16( i2cDev, ch2, (uint16_t)(servo2*2) ); I2C_IO_WriteReg16( i2cDev, ch6, (uint16_t)(servo6*2) ); printf("roll %f\n",angles.roll); printf("pitch %f\n",angles.pitch); printf("yaw %f\n",angles.yaw); } -- View this message in context: http://www.nabble.com/Problems-getting-servos-1A-C-working-tp15011216p15054256.html Sent from the Gumstix mailing list archive at Nabble.com. |
From: Dave H. <dhy...@gm...> - 2008-01-23 22:58:48
|
Hi Marq, > I2C_IO_WriteReg16( i2cDev, 0x46, 4000 ); //REG_IO16("ICR1",0x46) This should be 40000, not 4000. > I2C_IO_WriteReg16( i2cDev, 0x80, 4000 ); //REG_MEM16("ICR3",0x80) Same here. -- Dave Hylands Vancouver, BC, Canada http://www.DaveHylands.com/ |
From: Marq R. <mar...@ya...> - 2008-01-23 23:18:15
|
That made the sevos move much smoother, thanks I would have never seen that. Do you see anything else wrong with timer 1 setup? I can still only control servos 3A-C -Marq Dave Hylands wrote: > > Hi Marq, > >> I2C_IO_WriteReg16( i2cDev, 0x46, 4000 ); //REG_IO16("ICR1",0x46) > > This should be 40000, not 4000. > >> I2C_IO_WriteReg16( i2cDev, 0x80, 4000 ); //REG_MEM16("ICR3",0x80) > > Same here. > > -- > Dave Hylands > Vancouver, BC, Canada > http://www.DaveHylands.com/ > > ------------------------------------------------------------------------- > This SF.net email is sponsored by: Microsoft > Defy all challenges. Microsoft(R) Visual Studio 2008. > http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/ > _______________________________________________ > gumstix-users mailing list > gum...@li... > https://lists.sourceforge.net/lists/listinfo/gumstix-users > > -- View this message in context: http://www.nabble.com/Problems-getting-servos-1A-C-working-tp15011216p15055249.html Sent from the Gumstix mailing list archive at Nabble.com. |
From: Dave H. <dhy...@gm...> - 2008-01-24 16:06:06
|
Hi Marq, On Jan 23, 2008 3:18 PM, Marq Rasmussen <mar...@ya...> wrote: > > That made the sevos move much smoother, thanks I would have never seen that. > > Do you see anything else wrong with timer 1 setup? I can still only control > servos 3A-C I tried your code, with a few changes to get it to compile (I didn't have the read_3DM routine), and it seems to work fine. Have you tried the servo script? It works with the i2c-io program and allows you to set servo positions from the command line. If the servo script doesn't work, then you may have a hardware issue of some sort. Are you sure you're plugged into the correct spot? 1C is the spot furthest from the corner of the board. -- Dave Hylands Vancouver, BC, Canada http://www.DaveHylands.com/ |
From: Marq R. <mar...@ya...> - 2008-01-24 18:55:47
|
Dave, If I initialize timer 1 with the command "servo 0x0b init 1" and then run my program "./IMU_control" the servos work properly. If I do not initialize timer 1, servos 1A-C move randomly and are not controllable. I have gone through the ATMega 128 manual and checked all of the registers that I am setting up and also tried setting the DDR's with different values but have not been able to set timer 1 up properly. Here is my code that initializes timer 1: --------------------------------------------------------------------------------------------- //Setup timer 1 I2C_IO_WriteReg8( i2cDev, 0x4F, 0xAA ); //REG_IO8("TCCR1A",0x4F) I2C_IO_WriteReg8( i2cDev, 0x4E, 0x1A ); //REG_IO8("TCCR1B",0x4E) I2C_IO_WriteReg16( i2cDev, 0x46, 40000 ); //REG_IO16("ICR1", 0x46) I2C_IO_WriteReg16( i2cDev, 0x4C, 0 ); //REG_IO16("TCNT1",0x4C) //Set DDR registers for ports B I2C_IO_SetGPIODir( i2cDev, 0x38,(uint8_t)224,(uint8_t)224 ); //REG_IO8("PORTB",0x38),224 = pins 5,6, and 7 are output for timer 1 ----------------------------------------------------------------------------------------- Am I setting the DDR up correctly? -> 1110 0000 = 224? I have also tried setting it with the value -> 0111 0000 = 112, but had no luck. Thanks for all of your help -Marq Dave Hylands wrote: > > Hi Marq, > > On Jan 23, 2008 3:18 PM, Marq Rasmussen <mar...@ya...> wrote: >> >> That made the sevos move much smoother, thanks I would have never seen >> that. >> >> Do you see anything else wrong with timer 1 setup? I can still only >> control >> servos 3A-C > > I tried your code, with a few changes to get it to compile (I didn't > have the read_3DM routine), and it seems to work fine. > > Have you tried the servo script? It works with the i2c-io program and > allows you to set servo positions from the command line. If the servo > script doesn't work, then you may have a hardware issue of some sort. > > Are you sure you're plugged into the correct spot? 1C is the spot > furthest from the corner of the board. > > -- > Dave Hylands > Vancouver, BC, Canada > http://www.DaveHylands.com/ > > ------------------------------------------------------------------------- > This SF.net email is sponsored by: Microsoft > Defy all challenges. Microsoft(R) Visual Studio 2008. > http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/ > _______________________________________________ > gumstix-users mailing list > gum...@li... > https://lists.sourceforge.net/lists/listinfo/gumstix-users > > -- View this message in context: http://www.nabble.com/Problems-getting-servos-1A-C-working-tp15011216p15072214.html Sent from the Gumstix mailing list archive at Nabble.com. |
From: Dave H. <dhy...@gm...> - 2008-01-24 19:03:19
|
Hi Marq, > If I initialize timer 1 with the command "servo 0x0b init 1" and then run my > program "./IMU_control" the servos work properly. If I do not initialize > timer 1, servos 1A-C move randomly and are not controllable. I have gone > through the ATMega 128 manual and checked all of the registers that I am > setting up and also tried setting the DDR's with different values but have > not been able to set timer 1 up properly. > > Here is my code that initializes timer 1: > --------------------------------------------------------------------------------------------- > //Setup timer 1 > I2C_IO_WriteReg8( i2cDev, 0x4F, 0xAA ); //REG_IO8("TCCR1A",0x4F) > I2C_IO_WriteReg8( i2cDev, 0x4E, 0x1A ); //REG_IO8("TCCR1B",0x4E) > I2C_IO_WriteReg16( i2cDev, 0x46, 40000 ); //REG_IO16("ICR1", 0x46) > I2C_IO_WriteReg16( i2cDev, 0x4C, 0 ); //REG_IO16("TCNT1",0x4C) > //Set DDR registers for ports B > I2C_IO_SetGPIODir( i2cDev, 0x38,(uint8_t)224,(uint8_t)224 ); > //REG_IO8("PORTB",0x38),224 = pins 5,6, and 7 are output for timer 1 > ----------------------------------------------------------------------------------------- > Am I setting the DDR up correctly? -> 1110 0000 = 224? > I have also tried setting it with the value -> 0111 0000 = 112, but had no > luck. Ahhhh. You're setting 0x38, which is the PORTB register. You want to be setting 0x37, which is the DDRB register. Similarly for the E port. 0x22 is the DDRE register, and 0x23 is the PORTE register. You want to be setting the DDRE register. -- Dave Hylands Vancouver, BC, Canada http://www.DaveHylands.com/ |
From: Marq R. <mar...@ya...> - 2008-01-24 23:50:42
|
Dave, I have resolved my problem down to these lines of code: (after changing the registers to 0x37 and 0x22) --------------------------------------------------------------------------------------------------- //Set DDR registers for ports B and E I2C_IO_SetGPIODir( i2cDev, 0x37, (uint16_t)47216,(uint16_t)47216 ); //REG_IO8("DDRB",0x37),224 = pins 5,6, and 7 are output for timer 1 I2C_IO_SetGPIODir( i2cDev, 0x22,(uint16_t)47216,(uint16_t)47216 ); //REG_IO8("DDRE",0x22),56 = pins 3,4, and 5 are output for timer 3 ---------------------------------------------------------------------------------------------------- when I first boot up the gumstix and load the i2c-io program on the robostix I went through each DDR register for ports B and E with the "getdir" command and found the following: e(1,2,6,7) = in e(3,4,5) = out b(1,2,3,5,6,7) = in b.4 = out After I have ran my program I get the same result, meaning that the above lines of code are NOT doing nothing. When I run the command "setdir" in verbose mode I am returned the following message: i2c-io --verbose 0x0b setdir b.5 out Port B.5 dir set to 47216 This is the reason that I am trying to set the DDR's to the value 47216 in the above code. What is the correct way to setup the DDR's on the robositx using the "I2C_IO_SetGPIODir" command? Once I have set ports b.5,6,7 to outputs using command line "setdir" my code works perfect and I can control all 6 servos. Thanks Dave -Marq Dave Hylands wrote: > > Hi Marq, > >> If I initialize timer 1 with the command "servo 0x0b init 1" and then run >> my >> program "./IMU_control" the servos work properly. If I do not initialize >> timer 1, servos 1A-C move randomly and are not controllable. I have gone >> through the ATMega 128 manual and checked all of the registers that I am >> setting up and also tried setting the DDR's with different values but >> have >> not been able to set timer 1 up properly. >> >> Here is my code that initializes timer 1: >> --------------------------------------------------------------------------------------------- >> //Setup timer 1 >> I2C_IO_WriteReg8( i2cDev, 0x4F, 0xAA ); //REG_IO8("TCCR1A",0x4F) >> I2C_IO_WriteReg8( i2cDev, 0x4E, 0x1A ); //REG_IO8("TCCR1B",0x4E) >> I2C_IO_WriteReg16( i2cDev, 0x46, 40000 ); //REG_IO16("ICR1", 0x46) >> I2C_IO_WriteReg16( i2cDev, 0x4C, 0 ); //REG_IO16("TCNT1",0x4C) >> //Set DDR registers for ports B >> I2C_IO_SetGPIODir( i2cDev, 0x38,(uint8_t)224,(uint8_t)224 ); >> //REG_IO8("PORTB",0x38),224 = pins 5,6, and 7 are output for timer 1 >> ----------------------------------------------------------------------------------------- >> Am I setting the DDR up correctly? -> 1110 0000 = 224? >> I have also tried setting it with the value -> 0111 0000 = 112, but had >> no >> luck. > > Ahhhh. > > You're setting 0x38, which is the PORTB register. You want to be > setting 0x37, which is the DDRB register. > > Similarly for the E port. 0x22 is the DDRE register, and 0x23 is the > PORTE register. You want to be setting the DDRE register. > > -- > Dave Hylands > Vancouver, BC, Canada > http://www.DaveHylands.com/ > > ------------------------------------------------------------------------- > This SF.net email is sponsored by: Microsoft > Defy all challenges. Microsoft(R) Visual Studio 2008. > http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/ > _______________________________________________ > gumstix-users mailing list > gum...@li... > https://lists.sourceforge.net/lists/listinfo/gumstix-users > > -- View this message in context: http://www.nabble.com/Problems-getting-servos-1A-C-working-tp15011216p15078050.html Sent from the Gumstix mailing list archive at Nabble.com. |
From: Dave H. <dhy...@gm...> - 2008-01-25 03:51:30
|
Hi Marq, On Jan 24, 2008 3:50 PM, Marq Rasmussen <mar...@ya...> wrote: > > Dave, > > I have resolved my problem down to these lines of code: (after changing the > registers to 0x37 and 0x22) > --------------------------------------------------------------------------------------------------- > //Set DDR registers for ports B and E > I2C_IO_SetGPIODir( i2cDev, 0x37, (uint16_t)47216,(uint16_t)47216 ); > //REG_IO8("DDRB",0x37),224 = pins 5,6, and 7 are output for timer 1 > I2C_IO_SetGPIODir( i2cDev, 0x22,(uint16_t)47216,(uint16_t)47216 ); > //REG_IO8("DDRE",0x22),56 = pins 3,4, and 5 are output for timer 3 Doh. OK. you're calling the SetGPIODir function, put the paramers you're passing are for the I2C_IO_WriteReg8 function. Fooled me too. To set B.5, B.6, and B.7 to output, the parameters are like this: I2C_IO_SetGPIODir( i2cDev, portNum, pinMask, pinVal ) portNum should be 1 for Port B. pinMask should be 0xE0 (or 224) pinVal should be 0xE0 (or 224) So try: I2C_IO_SetGPIODir( i2cDev, 1, 0xE0, 0xE0 ); portNum should be 4 for Port E. So try I2C_IO_SetGPIODir( i2cDev, 4, 0x38, 0x38 ); for Port E, pins 3, 4, 5. -- Dave Hylands Vancouver, BC, Canada http://www.DaveHylands.com/ |
From: Marq R. <mar...@ya...> - 2008-01-25 19:09:25
|
Dave, You rock!!!!!!! Thanks for your help -Marq Dave Hylands wrote: > > Hi Marq, > > On Jan 24, 2008 3:50 PM, Marq Rasmussen <mar...@ya...> wrote: >> >> Dave, >> >> I have resolved my problem down to these lines of code: (after changing >> the >> registers to 0x37 and 0x22) >> --------------------------------------------------------------------------------------------------- >> //Set DDR registers for ports B and E >> I2C_IO_SetGPIODir( i2cDev, 0x37, (uint16_t)47216,(uint16_t)47216 ); >> //REG_IO8("DDRB",0x37),224 = pins 5,6, and 7 are output for timer 1 >> I2C_IO_SetGPIODir( i2cDev, 0x22,(uint16_t)47216,(uint16_t)47216 ); >> //REG_IO8("DDRE",0x22),56 = pins 3,4, and 5 are output for timer 3 > > Doh. > > OK. you're calling the SetGPIODir function, put the paramers you're > passing are for the I2C_IO_WriteReg8 function. Fooled me too. > > To set B.5, B.6, and B.7 to output, the parameters are like this: > > I2C_IO_SetGPIODir( i2cDev, portNum, pinMask, pinVal ) > > portNum should be 1 for Port B. > pinMask should be 0xE0 (or 224) > pinVal should be 0xE0 (or 224) > > So try: > > I2C_IO_SetGPIODir( i2cDev, 1, 0xE0, 0xE0 ); > > portNum should be 4 for Port E. > > So try > > I2C_IO_SetGPIODir( i2cDev, 4, 0x38, 0x38 ); > > for Port E, pins 3, 4, 5. > > -- > Dave Hylands > Vancouver, BC, Canada > http://www.DaveHylands.com/ > > ------------------------------------------------------------------------- > This SF.net email is sponsored by: Microsoft > Defy all challenges. Microsoft(R) Visual Studio 2008. > http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/ > _______________________________________________ > gumstix-users mailing list > gum...@li... > https://lists.sourceforge.net/lists/listinfo/gumstix-users > > -- View this message in context: http://www.nabble.com/Problems-getting-servos-1A-C-working-tp15011216p15094731.html Sent from the Gumstix mailing list archive at Nabble.com. |