SoftwareSerial with ATTiny84 using ATtiny library

Hi,

I'm flashing an ATTiny84 using my Arduino Uno and everything works except the SoftwareSerial. I'm using the 8MHz internal clock (not calibrated but low baud rates would be fine since the interface will only be used for debugging). With some baud rates, the Arduino serial interface on my Mac receives some gibberish data and with others nothing at all. The TX led on the Arduino blinks when data is being sent btw.

Here's the important part of my code:

#include <SoftwareSerial.h>
// Definitions
#define rxPin 2
#define txPin 3

byte pwm = 0;

SoftwareSerial mySerial(rxPin, txPin);

void setup() 
{
  // Pin Setup
  pwm = 0;
  mySerial.begin(9600);
}
 
void loop()
{
  /*
    calculates pwm
  */
  mySerial.print(pwm, DEC);
  mySerial.println();
  delay(1000);
}

Can anybody help? Would be greatly appreciated!

I tried the same thing with an ATTiny85 and for some reason it does only work when VCC is not connected. I haven't tried it with an 84 yet, but I guess it's not that much different. Hope that helps.

Hi,

daywalkerdha:
...low baud rates would be fine since the interface will only be used for debugging...

Then I suggest using TinyDebugSerial in the Tiny Core.

I tried the TinyDebugSerial, same problem.

MontySylver:
I tried the same thing with an ATTiny85 and for some reason it does only work when VCC is not connected. I haven't tried it with an 84 yet, but I guess it's not that much different. Hope that helps.

What do you mean by not connecting VCC? Two different power supplies for the two microcontrollers? Because at the moment the AtTiny receives power from the Arduino 5V rail.

Maybe you need the updated version mentioned in this thread:

http://arduino.cc/forum/index.php/topic,109081.15.html

I used an ATTiny85 to send serial data and an Arduino Uno to receive it. First I got some strange gibberish too until I pulled the ATTiny's VCC out by accident. Without VCC on the ATTiny it sent what I wanted, after reconnecting VCC it was gibberish again. There were no pins except Tx, Rx and GND connected.

EDIT: Don't do this, a 100nf capacitor between the signal line and GND should do the trick.

Erni:
Maybe you need the updated version mentioned in this thread:

http://arduino.cc/forum/index.php/topic,109081.15.html

I used the current version (15) which should work as well, shouldn't it? But I switched back to http://hlt.media.mit.edu/?p=1695 after it didn't work.

MontySylver:
I used an ATTiny85 to send serial data and an Arduino Uno to receive it. First I got some strange gibberish too until I pulled the ATTiny's VCC out by accident. Without VCC on the ATTiny it sent what I wanted, after reconnecting VCC it was gibberish again. There were no pins except Tx, Rx and GND connected.

Not sure how this is supposed to work without power but just to test everything I tried it as well and the AtTiny stopped transmitting after pulling out the VCC cable.

Just tried it with some more stuff connected, it seems that the whole disconnecting VCC thing only works when the ATTiny does only transmit serial data and nothing else is supposed to happen in the sketch. Reading serial data works as it should.

The Arduino must get it's power from somewhere else in your setup, otherwise it wouldn't work. Could you post a picture/schematic?

The data I'm receiving ist 0xFF every time if that helps someone to help me. I used a Processing sketch to display the actual binary data because the Arduino serial monitor only prints this character: ÿ

@Coding Badly
Now I'm using your library again.
It doesn't seem to matter if I just use the standard

Serial.begin(9600);
//and so on...

or if I use

#include <TinyDebugSerial.h>
TinyDebugSerial mySerial = TinyDebugSerial();
mySerial.begin(9600);
//and so on...

the output is always 0xFF with 2.5secs delay in between which I defined to check if it would be far off the expected value

With some baud rates, the Arduino serial interface on my Mac receives some gibberish data and with others nothing at all. The TX led on the Arduino blinks when data is being sent btw.

Are you using your Arduino as a serial converter?

daywalkerdha:
Not sure how this is supposed to work without power...

It won't.

...but just to test everything I tried it as well and the AtTiny stopped transmitting after pulling out the VCC cable.

Don't do that again. It violates the specifications (meaning it could damage the processor).

No, I'm just trying to use the Arduino board as a serial interface because I don't have a separate one. The 84's TX pin goes to the RX pin on the Arduino Uno R3 board which makes the TX led blink on the Arduino board. I also connected a 10µF cap between RESET and GND on the Arduino and leave the 4 pins used for programming the 84 connected during testing. The only thing I change during programming is disconnecting the 84's serial line temporarily.

That's what they taught me in EE :wink:

daywalkerdha:
No, I'm just trying to use the Arduino board as a serial interface because I don't have a separate one.

That is what I was trying to ask. Got it.

The 84's TX pin goes to the RX pin on the Arduino Uno R3 board which makes the TX led blink on the Arduino board.

I think that's correct.

I also connected a 10µF cap between RESET and GND on the Arduino

The Arduino processor has to be removed (not recommended) or forced into reset (recommended). Remove the 10µF capacitor. Connect a jumper between RESET and GND. (Actually, you can probably leave the capacitor in place.)

As you've discovered, the Arduino processor interferes with serial communications. In addition, unless the Arduino processor is essentially removed from the circuit, it is possible to damage one or both processors (some current limiting resistors will protect both sides).

If you are interested, I have a version of the ArduinoISP sketch that makes what you are trying to do much simpler.

I already ordered a zif-header to be able to remove the 328 easily and without damage.

What does your modified sketch do to make it simpler and would it allow me to program the external micro and still get serial data without changing the connections every time?

daywalkerdha:
What does your modified sketch do to make it simpler and would it allow me to program the external micro and still get serial data without changing the connections every time?

The sketch provides a "serial relay" which has two on-wire options... the standard TTL-serial and something I call Knock-Bang. The Knock-Bang protocol is designed specifically for debugging a tiny processor when using an Arduino as a programmer. It's more robust and faster than TTL-serial.

In either case, you don't need to fiddle with the wiring. MISO (one of the programming lines) is used for serial communications.

That sounds great, could you post the library here? I'll try the serial interface without the 328 once the zif socket arrives.

Ok, I couldn't wait for the zif socket;) Once I removed the Arduino and plugged the Serial cable into the TX(not RX as before) pin on the Arduino board, everything worked just fine! So it seems as if the Arduino blocks the communication if its inserted and your library should be able to solve my problem.

The latest version of the sketch (TinyISP) can be downloaded from here...
https://github.com/Coding-Badly/TinyISP/zipball/master

Or, the source can be browsed here...

As published, it is a drop-in replacement for the ArduinoISP sketch. Please download it and try it. At this point, the only noticeable difference should be shorter upload times. I will add more instructions later (probably tonight).