Forum: Mikrocontroller und Digitale Elektronik Wie SoftwareSerial mit ATtiny85 nutzen?


von Frank S. (hobbyist)


Lesenswert?

Ich möchte einen ATtiny85 mit einem Arduino programmieren. Das bekomme 
ich mit den gefundenen Tutorials soweit hin. Nun würde ich aber gerne 
Daten, die über einen analogen Eingang des ATtiny85 rein kommen, im 
seriellen Monitor anzeigen lassen. Dazu muss man den ATtiny85 wohl mit 
8Mhz programmieren. Auch werde ich hin bekommen, denke ich. Aber wie 
muss das im Sketch gemacht werden?

Es sind meine ersten Versuche, mich mit dem Programmieren anzufreunden, 
nur leider komme ich da nicht weiter. Auch die Fehlermeldung bringt mich 
nicht weiter. Kann mir jemand sagen, was genau da noch fehlt?
1
#include <SoftwareSerial.h>
2
3
void setup() {                
4
  Serial.begin(9600); 
5
}
6
void loop() {
7
  Serial.println("HUHU");    //schreibe nach seriell
8
  delay(1000);               // eine Sekunde waten
9
  Serial.println(12345);     //schreibe nach seriell
10
  delay(1000);               // eine Sekunde waten
11
}

sketch_jul17b.ino: In function ‘void setup()’:
sketch_jul17b:8: error: ‘Serial’ was not declared in this scope
sketch_jul17b.ino: In function ‘void loop()’:
sketch_jul17b:11: error: ‘Serial’ was not declared in this scope

von Sascha W. (sascha-w)


Lesenswert?

Hallo,

wenn ich mir das Beispiel
http://arduino.cc/en/Tutorial/SoftwareSerialExample
So anschaue, dann wird serial wohl nur für Hardware-Ser. sein.

Sascha

von Frank S. (hobbyist)


Lesenswert?

Ach so geht das. Danke für den Link. Hier das bisherige Ergebnis:
1
#include <SoftwareSerial.h>
2
3
SoftwareSerial mySerial(0,4);
4
5
void setup() {                
6
  mySerial.begin(9600); 
7
}
8
void loop() {
9
  mySerial.println("HUHU");    //schreibe nach seriell
10
  delay(1000);               // eine Sekunde waten
11
  mySerial.println(12345);     //schreibe nach seriell
12
  delay(1000);               // eine Sekunde waten
13
}

von Sascha W. (sascha-w)


Lesenswert?

gehts denn so?

Sascha

von Frank S. (hobbyist)


Lesenswert?

Die IDE meckert nicht mehr. Ob es wirklich klappt, weiß ich erst, wenn 
der ATtiny eingetroffen ist. Er ist noch auf dem Postweg.

Aber ich habe schon die nächsten Fragen:

Welche Pins (meine Nummerierung bezieht sich auf die klassische 
Zählweise oben links 1, oben rechts 8) kann oder muss man für 
SoftwareSerial nutzen? Ich habe ein Projekt gefunden, bei dem Pin 2 als 
Rx und Pin 3 als Tx genommen wurde. Kann ich dafür auch andere Pins 
nehmen? Für mein Projekt bräuchte ich nämlich eigentlich zwei analoge 
Eingänge, aber nur einen digitalen Ausgang. Mir würde also z. B. die 
Kombination Pin 5 und Pin 3 für SoftwareSerial besser passen. Aber geht 
das überhaupt?

Leider konnte ich bisher keine Infos zu der Frage finden, wie die Ports 
genutzt werden können. Mal abgesehen von so etwas:

http://electronicavm.files.wordpress.com/2012/06/microcontroller-reference-sheet-a4.png

Frank

: Bearbeitet durch User
von Sascha W. (sascha-w)


Lesenswert?

schau mal in dem Beispiel was ich verlinkt hatte, dort ist auch eine 
Beschreibung der Bibliothek.
Wie ich das sehe kannst du als TX jeden Pin nehmen, als RX nur PINs die 
einen PinChangeInterupt unterstützen.

Sascha

von Markus W. (Firma: guloshop.de) (m-w)


Lesenswert?

Sascha Weber schrieb:
> Wie ich das sehe kannst du als TX jeden Pin nehmen, als RX nur PINs die
> einen PinChangeInterupt unterstützen.

Das können beim ATtiny85 alle Pins. Außer VCC und GND. ;-)

von Frank S. (hobbyist)


Lesenswert?

Danke für die Infos.

Ich bekomme den ATtiny85 zwar über den Arduino programmiert und das 
Oszilloskop zeigt mir an, dass alles wunschgemäß funktioniet. Aber wie 
muss ich ihn anschließen, damit ich die Daten über die serielle Konsole 
auslesen kann?

Auch habe ich noch nicht ganz verstanden, wie ich die Pins definieren 
soll. Es gibt sowohl einen digitalen Pin1 als auch einen analogen Pin1. 
Ich habe es nun so versucht, bekomme aber keine Ausgabe:
1
#include <SoftwareSerial.h>
2
3
const int PortAnalogIn    = A1;    // Dies ist der analoge Eingang PIN7
4
const int PortAnalogOut   = A2;    // Dies ist der analoge Ausgang PIN3
5
const int PortDigitalOut  = 0;    // Dies ist der digitale Ausgang PIN5
6
7
const int ValueLow        = 698;   // Dies ist der Wert, ab dem Low  erkannt wird, Wertebereich 0 bis 1023
8
const int ValueHigh       = 699;   // Dies ist der Wert, ab dem High erkannt wird, Wertebereich 0 bis 1023
9
10
const int TimeOutLow      = 0;     // Dies ist die Wartezeit für Low in Millisekunden
11
const int TimeOutHigh     = 400;  // Dies ist die Wartezeit für High, ebenfalls in Millisekunden
12
13
SoftwareSerial mySerial(1, A3);
14
.
15
.
16
.

Gibt es einen Trick, mit dem die Werte auf den seriellen Monitor kommen?

Frank

von nicht gast (Gast)


Lesenswert?

Frank Saner schrieb:
> Gibt es einen Trick, mit dem die Werte auf den seriellen Monitor kommen?

Nein, das nennt sich eigentlich programmieren.

von Frank S. (hobbyist)


Lesenswert?

Scherzkeks. Der Sketch läuft auf dem Arduino incl. Ausgabe auf dem 
seriellen Monitor problemlos. Nur die Anpassung an den ATtiny85 will 
nicht so recht laufen. Ich ging davon aus, dass es einen Fehler mit 
meiner Benennung der Pins gibt, kann ihn aber nicht finden. Hier der 
Rest des Sketches:
1
void setup()
2
{
3
   pinMode (PortAnalogOut,  OUTPUT);
4
   pinMode (PortDigitalOut, OUTPUT);
5
   
6
   mySerial.begin   (9600);
7
   mySerial.println ("Werte");
8
}
9
10
void loop() 
11
{
12
   int nAnalogValue = analogRead (PortAnalogIn);
13
   mySerial.print   ("Neuer Wert : ");
14
   mySerial.print   (nAnalogValue);
15
   mySerial.println ("!");
16
   
17
   if (nAnalogValue < ValueLow)
18
   {
19
      analogWrite  (PortAnalogOut,  960);
20
      digitalWrite (PortDigitalOut, HIGH);
21
      
22
      delay (TimeOutLow);
23
   }
24
   
25
   if (nAnalogValue > ValueHigh)
26
   {
27
      analogWrite  (PortAnalogOut,  255);
28
      digitalWrite (PortDigitalOut, LOW);
29
      
30
      delay (TimeOutHigh);
31
   }   
32
   delay (300);
33
}

von nicht gast (Gast)


Lesenswert?

Dein gesuchter Trick nennt sich Debugging. Also versuchst du den Fehler 
einzugrenzen um ihn beheben zu können. Erster Ansatzpunkt wird wohl die 
Software-serielle Schnittstelle zu sein. Versuch doch erst einmal ein 
Programm zu schreiben das etwas ausgiebt.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Wenn ich mich recht erinnere, werden die Pins in der Arduino Umgebung 
als Nummern zwischen 0 (für PORTA0) bis 31 (PORTD7) durchnummeriert 
(Vermutlich gibt es jetzt auch Erweiterungen für PORTE und höher). PORTB 
des ATTiny wären dann die Pinnummern 8(PORTB0) bis 15(PORTB7).

Ob <SoftwareSerial.h> sich auch daran hält, weiss ich aber nicht.

von Frank S. (hobbyist)


Lesenswert?

@Gast: Wenn Du den Sketch gelesen hättest, dann hättest Du gesehen, dass 
etwas ausgegeben wird.

@all: Das Problem ist gelöst. Es liegt am Arduino Uno. Es ist egal, ob 
ich den Atmel im Sockel lasse oder entnehme, Reset nach GND mit einer 
Brücke oder einem Kondensator verbinde, es kommt immer nur Datenmüll an.

Erst als ich auf die Idee kam, einen USB-TTL Adapter zu probieren, 
klappte es. Der Text sah endlich so aus, wie er soll. Laut ersten 
Messungen mit dem Oszilloskop verhalten sich die physischen Pins 3 (A2) 
und 5 (0) genau so, wie es der Sketch vorgibt. Insofern scheinen auch 
die Bezeichnung im Sketch richtig zu sein.

von Sascha W. (sascha-w)


Lesenswert?

Frank Saner schrieb:

> Erst als ich auf die Idee kam, einen USB-TTL Adapter zu probieren,
> klappte es.
und wie hast du es vorher angeschlossen?

Sascha

von Frank S. (hobbyist)


Lesenswert?

Vorher hatte ich den UNO (zwei verschiedene, um einen Hardwarefehler 
auszuschließen) angeschlossen (5V, GND und D2). Es kam zwar etwas an, 
aber das war nur eine wilde Mischung irgendwelcher Zeichen.

Erst der USB-TTL Wandler brachte Ordnung in das Zeichenchaos. Inzwischen 
habe ich testweise den Nano auch mal angeklemmt. Wieso auch immer, damit 
funktioniert es ebenfalls. Im Gegentest mit den UNOs bei exakt gleicher 
Beschaltung geht es nicht. Ein Uno ist ein "Original", der andere UNO 
und der Nano sind China-Nachbauten.

Frank

von Kusi (Gast)


Lesenswert?

Hallo zusammen.

Ja ich ich weiss, etwas spät, aber vieleicht interesiert es doch noch 
jemand.
Ich nenne es Trick 220 ;-)


Arduino               Attiny

  5V ------------------ 5V
  RX ------220ohm------ TX
  TX ------220ohm------ RX
 GND ------------------ GND

Alles klar?

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.