SoftwareSerial.h mit ATTiny45/85/84

OP #4499249
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
Gast #4500018
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.
OP #4500102
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
Angehängte Dateien:

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren