Keefep

AVR TX pin Pulled Low

11 posts in this topic

I cannot get the AVR to control the TX pin. I want to use the serial out
but no data is being sent out TX. In the Loop section, I get the OK on
the monitor, and have the LED blinking, but pin 1 (TX) does not toggle.

What might I be missing?


Thanks you for your help...


Keith


#include <Wire.h>
#include <Adafruit_SI5351.h>
#define circuit blank

Adafruit_SI5351 clockgen = Adafruit_SI5351();

/**************************************************************************/
/*
     Arduino setup function (automatically called at startup)
*/
/**************************************************************************/
/*
   Blink
   Turns on an LED on for one second, then off for one second, repeatedly.

   This example code is in the public domain.
  */

// Pin 13 has an LED connected on most Arduino boards.
// give it a name:
int led = 13;
int tx = 1;
void setup(void)
{
     // initialize the digital pin as an output.
   pinMode(led, OUTPUT);

   Serial.begin(9600);
   Serial.println("Si5351 Clockgen Test"); Serial.println("");


   /* Initialise the sensor */
   if (clockgen.begin() != ERROR_NONE)
   {
     /* There was a problem detecting the IC ... check your connections */
     Serial.print("Ooops, no Si5351 detected ... Check your wiring or
I2C ADDR!");
     while(1);
   }
   Serial.println("OK!");

   /* INTEGER ONLY MODE --> most accurate output */
   /* Setup PLLA to integer only mode @ 900MHz (must be 600..900MHz) */
   /* Set Multisynth 0 to 112.5MHz using integer only mode (div by 4/6/8) */
   /* 25MHz * 36 = 900 MHz, then 900 MHz / 8 = 112.5 MHz */
   Serial.println("Set PLLA to 900MHz");
   clockgen.setupPLLInt(SI5351_PLL_A, 36);
   Serial.println("Set Output #0 to 112.5MHz");
   clockgen.setupMultisynthInt(0, SI5351_PLL_A, SI5351_MULTISYNTH_DIV_8);

   /* FRACTIONAL MODE --> More flexible but introduce clock jitter */
   /* Setup PLLB to fractional mode @616.66667MHz (XTAL * 24 + 2/3) */
   /* Setup Multisynth 1 to 13.55311MHz (PLLB/45.5) */
   clockgen.setupPLL(SI5351_PLL_B, 24, 2, 3);
   Serial.println("Set Output #1 to 13.553115MHz");
   clockgen.setupMultisynth(1, SI5351_PLL_B, 45, 1, 2);

   /* Multisynth 2 is not yet used and won't be enabled, but can be */
   /* Use PLLB @ 616.66667MHz, then divide by 900 -> 685.185 KHz */
   /* then divide by 64 for 10.706 KHz */
   /* configured using either PLL in either integer or fractional mode */

   Serial.println("Set Output #2 to 10.706 KHz");
   clockgen.setupMultisynth(2, SI5351_PLL_B, 900, 0, 1);
   clockgen.setupRdiv(2, SI5351_R_DIV_64);

   /* Enable the clocks */
   clockgen.enableOutputs(true);
}

/**************************************************************************/
/*
     Arduino loop function, called once 'setup' is complete (your own code
     should go here)
*/
/**************************************************************************/
void loop(void)
{
   digitalWrite(led, HIGH);   // turn the LED on (HIGH is the voltage level)
   delay(100);               // wait for a second
   digitalWrite(led, LOW);    // turn the LED off by making the voltage LOW
   delay(900);               // wait for a second

   digitalWrite(tx, HIGH);   // turn the LED on (HIGH is the voltage level)
   delay(1000);               // wait for a second
   digitalWrite(tx, LOW);    // turn the LED off by making the voltage LOW
   delay(1000);               // wait for a second

   Serial.println("OK!");
}

Share this post


Link to post
Share on other sites

I've been able to get the pins 2-13 to toggle by loading the AVR via the ISP connection from the FPGA, however, the TX and SCK, SDA pins are working correctly. Any suggestions? 

Share this post


Link to post
Share on other sites

I removed the bootloader and replaced it on the AVR. Using the "The Offical Papilio Duo Pinout Diagram" I did not see the I2C pins and defaulted to use F7, F6 then to B1, B3. Looking at the silk screen on the Papilio Duo, I used D0 (SCK), D1(SDA), the I2C device began being programmed/working. Still, I have no Serial Output.

Share this post


Link to post
Share on other sites

Are you able to run the Arduino Blink sketch by itself on pin 1?

Jack.

Share this post


Link to post
Share on other sites

I removed the bootloader and replaced it on the AVR. Using the "The Offical Papilio Duo Pinout Diagram" I did not see the I2C pins and defaulted to use F7, F6 then to B1, B3. Looking at the silk screen on the Papilio Duo, I used D0 (SCK), D1(SDA), the I2C device began being programmed/working. Still I have no Serial Output.

 

Blink will toggle Pin 1 (Tx)

Share this post


Link to post
Share on other sites

So then that means it has to be something in your sketch that is causing the problem...

Share this post


Link to post
Share on other sites

I agree, The IDE may not be handeling the Serial hardware correctly...

 

Share this post


Link to post
Share on other sites

Following text from the Arduino page, "The Arduino Leonardo board uses Serial1 to communicate via TTL (5V) serial on pins 0 (RX) and 1 (TX). Serial is reserved for USB CDC communication. For more information, refer to the Leonardo getting started page and hardware page. "

 

I replaced Serial with Serial1 and the Tx pin began sending the serial data.

Share this post


Link to post
Share on other sites

Ahh, man! I'm sorry I didn't catch that one right away. :( I was thinking more from a hardware perspective as to what could be blocking the communication and never thought about the bigger picture...

Glad you got that figured out.

Jack.

Share this post


Link to post
Share on other sites

All good. Thank you for your help, key was to stop looking at hardware.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now