Forum: Mikrocontroller und Digitale Elektronik SoftwareSerial.h mit ATTiny45/85/84


von Ralphi M. (ralphi_m)


Lesenswert?

Hi all ;-)

Es gibt zwar etliche Beispiele im Netz, ATTiny85/45/84 mit der Library 
<SoftwareSerial.h> zur seriellen Ausgabe (UART) zu bewegen, leider 
funktioniert keins bei mir.
Dann kanns eigentlich nur an den eingesetzten Versionen liegen.
Ich nutze Arduino SDK 1.6.7 und zum hochladen auf den µC, einen Raspi3 
(avrdude) mit einem USB-SPI-programer:
1
#avrdude -p t84 -P /dev/ttyACM0 -c stk500v2 -U flash:w:/myprogs/avr/softseriell.ino.tiny14.hex:i

Das generieren eines hex mit 'Kompilierte Binärdatei exportieren' bietet 
nur der ATTiny-core (Boardverwalter) von
https://raw.githubusercontent.com/damellis/attiny/ide-1.6.x-boards-manager/package_damellis_attiny_index.json
an

Die Spannungsversorgung und UART kommt vom Pi3 (3,3V).
ACHTUNG: Zum deaktivieren der Ausgabe beim Start siehe:
http://kampis-elektroecke.de/?page_id=1682
muss beim Pi3 noch in der /boot/config.txt -> core_freq=250 hinzugefügt 
werden. Der UART ist dann /dev/ttyS0 !!

Beispiel aus dem Netz:
1
#include <SoftwareSerial.h>
2
//const int rx = PB3; // ATTiny45
3
//const int tx = PB1; // ATTiny45
4
// ** ATTiny84
5
const int rx = PA7; 
6
const int tx = PA3;
7
SoftwareSerial mySerial(rx, tx);
8
int i = 0;
9
char buf[12];
10
11
void setup()
12
{
13
  pinMode(rx, INPUT);
14
  pinMode(tx, OUTPUT);
15
  mySerial.begin(9600);
16
}
17
18
void loop()
19
{
20
  if (mySerial.available() > 0) {
21
    buf[i] = mySerial.read();
22
    if (int(buf[i]) == 13 || int(buf[i]) == 10 ) { //If Carriage return has been reached
23
      mySerial.println(buf);
24
      for (int x = 0; x <= 10; x++) {
25
        buf[x] = ' ';
26
      }
27
      i = 0; //start over again
28
29
    } //if enter
30
    i++;
31
  } //If mySerial.available
32
}//LOOP

Hat jemand eine Idee, warum der Tiny nix rausgibt?
VG aus LA
ralphi

von Jodel (Gast)


Lesenswert?

Ralphi M. schrieb:
> Hat jemand eine Idee, warum der Tiny nix rausgibt?

Wie hast du das ueberprueft? Bild + Schema des Aufbaus?

von Christian J. (Gast)


Lesenswert?

Ralphi M. schrieb:
> Es gibt zwar etliche Beispiele im Netz, ATTiny85/45/84 mit der Library
> <SoftwareSerial.h> zur seriellen Ausgabe (UART) zu bewegen, leider
> funktioniert keins bei mir.

Ich kann Dir definitiv sagen, dass Arduino Ver 1.5.0 an einem PC und 
Windows 7 + Diamex AVR Programmer + "TinyDebugSerial" den Attiny84 zur 
Ausgabe bewegt, so wie es soll. Allerdings mit Fehlzeichen bei 
verwendung des internen RC Osc. Die Ausgabe ist fix auf einen Pin gelegt 
und lässt sich auch nicht ändern.

Was hier steht ist meiner Erfahrung nach nicht richtig. Der Attiny84 ist 
ja auch ein 14 Pinner. Und da ist Pin 2 die Uart. Den Pin ändern hat bei 
mir nie geklappt.

http://www.ernstc.dk/arduino/tinycom.html

Ist allerdings die besagte "TinyDebugSerial"

Richtiger Core? Da gibt's mehrere..

Liegt also wohl an diesem Raspi-Dingsda, wozu das gut sein soll weiss 
ich nicht.

von Ralphi M. (ralphi_m)


Angehängte Dateien:

Lesenswert?

Hi,
danke für den Tipp mit TinyDebugSerial.h.
Hier find ich allerdings kein Beispiel, wie/ob ich auch lesen kann.
Also duplex TX/RX. Für debug brauchts eigentlich nur ne Ausgabe.

Fürs erste (zum Testen) nutz ich minicom auf dem Raspi.
Später natürlich php, Python oder C je nach Laune um Sensordaten 
einzulesen.
Ich kuck auch mit dem Oszilloskop am TX und RX, ob überhaupt was vom 
Tiny kommt. Nicht nur die Ausgabe am Terminal!

Hier noch das ausstehende Anschlussbild (mit Fritzing erstaunlich leicht 
:-)

ralphi

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.