Go Down

Topic: SoftwareSerial bei ATtiny (Read 3127 times) previous topic - next topic

laemmen

Hey,

ich experimentiere ja schon länger mit der seriellen Kommunikation bei ATtinys und habe mir nun einen externen Crystal mit 16MHz besorgt, weil der interne Takt ziemlich ungenau ist und der TinyTuner bei mir nichts bewirkt hat... Soweit funktioniert alles wunderbar und taktgenau mit dem Crystal, den ich an PB3 & PB4 mit zwei Kerkos gesetzt habe. Nun möchte ich SoftwareSerial benutzen um einen RFID-Reader auszulesen. Jedoch lässt sich der Example-Sketch nicht kompilieren... Hier der Code mit Fehlermeldung:

Code: [Select]
#include <SoftwareSerial.h>

SoftwareSerial mySerial(0, 1); // RX, TX

void setup()  
{
 // set the data rate for the SoftwareSerial port
 mySerial.begin(9600);
 mySerial.println("Hello, world?");
}

void loop() // run over and over
{
 if (mySerial.available())
   Serial.write(mySerial.read());
 if (Serial.available())
   mySerial.write(Serial.read());
}


Code: [Select]

In file included from SoftwareSerialExample.ino:1:
/Applications/Arduino.app/Contents/Resources/Java/libraries/SoftwareSerial/SoftwareSerial.h:92: error: conflicting return type specified for 'virtual size_t SoftwareSerial::write(uint8_t)'
/Users/***/sketchbook/hardware/tiny/cores/tiny/Print.h:71: error:   overriding 'virtual void Print::write(uint8_t)'


Wenn unter Board ein beliebiges Arduino ausgewählt ist funktioniert die Kompilierung, aber nicht bei den Tiny-Cores. Jemand ne Idee warum?

Viele Grüße
Dennis

Bernd

Hallo,

welchen Tiny nutzt du?

mit welcher Erweiterung arbeitest du?

Hat dein Tiny eine echte serielle Schnittstelle? Da du Serial nutzt.

Bernd

laemmen

Hi Bernd,

ich nutze den 85' und die Arduino-Tiny Library, sowie einige alternative Libraries, die unter dem Link gelistet sind. Für den 85' nutze ich aber nur die Arduino-Tiny Lirbray (ATtiny85 @ 16MHz, external crystal, 4.3 V BOD). PB3 und PB4 sind, wie gesagt, mit dem Crystal belegt, daher wollte ich die Pins 0/1 für RX/TX nutzen, wobei ich eigentlich nur Daten vom RFID-Reader empfangen will - ob der Tiny eine "echte Schnittstelle" hat kann ich leider nicht sagen... Was sagt dir denn die Fehlermeldung?

Viele Grüße
Dennis

pylon

Lade die aktuelle Version der Tiny-Library herunter, Du scheinst eine alte Version einzusetzen. In der aktuellen Version kommt die Zeile

Code: [Select]
virtual void Print::write(uint8_t);

nicht mehr vor.

laemmen

#4
Jun 11, 2013, 03:46 pm Last Edit: Jun 11, 2013, 03:56 pm by laemmen Reason: 1

Lade die aktuelle Version der Tiny-Library herunter, Du scheinst eine alte Version einzusetzen. In der aktuellen Version kommt die Zeile

Code: [Select]
virtual void Print::write(uint8_t);

nicht mehr vor.


hmm komisch, habe sie mir direkt unter dem o.g. Link runtergeladen (Version 0100-0017). Ich suche nochmal ob es eine aktuellere Version gibt

EDIT: habe versehentlich die boards.txt nicht überschrieben - jetzt funktionierts!

laemmen

okay jetzt habe ich den Code drauf, aber es kommen nur komische Zeichen (ÿÿ...) im Serial Monitor an  :~

Code: [Select]
#include <SoftwareSerial.h>

SoftwareSerial mySerial(1, 0); // RX, TX

void setup()  
{
 mySerial.begin(9600);
}

void loop()
{
mySerial.println("Hello World");
}


Wiring:
Tiny Pin 0 -> Arduino Pin 0 RX
Tiny Pin 1 -> Arduino Pin 1 TX

Baudrate auf 9600

Irgendwas vergessen oder falsch??  :smiley-fat:

Viele Grüße
Dennis

pylon

ÿ ist gleich 255 oder -1 im integer-Kontext, somit schreibst Du wahrscheinlich Zeichen raus, obwohl gar nichts angekommen ist. Welchen Sketch verwendest Du auf dem Arduino?

laemmen

#7
Jun 11, 2013, 05:16 pm Last Edit: Jun 11, 2013, 05:38 pm by laemmen Reason: 1
Auf dem Arduino läuft der ArduinoISP-Sketch mit dem ich die Tinys programmiere - was sollte denn optimalerweise laufen?

EDIT: habe den gleichen Sketch nur ohne Ausgabe in der loop(); auf das Arduino geladen und es funktioniert nun.

#include <SoftwareSerial.h>

SoftwareSerial mySerial(1, 0); // RX, TX

void setup()  {  mySerial.begin(9600);}

void loop(){}

FATAL_ERROR

Hallo!
Habe in etwa das gleiche Problem: möchte ATtiny 45 bei 5V @16MHz extern dazubringen über SoftwareSerial zu kommunizieren (Senden & Empfangen) und bin auf der Suche auf diesem Thread gestoßen. Meine Fragen:

1. Was bringt es dir, dass deine Funk. "loop()" leer ist? Was heißt "... es funktioniert nun"? Was macht dein Code Nützliches? (bezüglich:
Quote
"EDIT: habe den gleichen Sketch nur ohne Ausgabe in der loop(); auf das Arduino geladen und es funktioniert nun."
)

2. Welche Kondensatoren hast du an den Quarz angeschlossen? Etwa 22pF?

3. Ich empfange immer Leer- und Euro-Zeichen. Während Kompilieren und hochladen gab es weder "Warnings" noch "Errors" (in Verbose Log Mode), woran könnte das liegen?

Ich verwende Arduino UNO R3  als Programmierer ("Arduino as ISP") , IDE 1.6.5 sowie die in IDE integrierte ATtiny Einstellungen (ATtiny45, External 16MHz).

Danke im Voraus für jede Hilfe.

PS: Alle anderen Programme (die keine SoftwareSerial benötigen) lassen sich ohne Probleme auf ATTiny 45 heraufladen und laufen lassen.

Go Up