mikrocontroller.net

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


Autor: Frank S. (hobbyist)
Datum:

Bewertung
0 lesenswert
nicht 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?
#include <SoftwareSerial.h>

void setup() {                
  Serial.begin(9600); 
}
void loop() {
  Serial.println("HUHU");    //schreibe nach seriell
  delay(1000);               // eine Sekunde waten
  Serial.println(12345);     //schreibe nach seriell
  delay(1000);               // eine Sekunde waten
}


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

Autor: Sascha W. (sascha-w)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Frank S. (hobbyist)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ach so geht das. Danke für den Link. Hier das bisherige Ergebnis:
#include <SoftwareSerial.h>

SoftwareSerial mySerial(0,4);

void setup() {                
  mySerial.begin(9600); 
}
void loop() {
  mySerial.println("HUHU");    //schreibe nach seriell
  delay(1000);               // eine Sekunde waten
  mySerial.println(12345);     //schreibe nach seriell
  delay(1000);               // eine Sekunde waten
}

Autor: Sascha W. (sascha-w)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
gehts denn so?

Sascha

Autor: Frank S. (hobbyist)
Datum:

Bewertung
0 lesenswert
nicht 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
Autor: Sascha W. (sascha-w)
Datum:

Bewertung
0 lesenswert
nicht 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

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

Bewertung
0 lesenswert
nicht 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. ;-)

Autor: Frank S. (hobbyist)
Datum:

Bewertung
0 lesenswert
nicht 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:
#include <SoftwareSerial.h>

const int PortAnalogIn    = A1;    // Dies ist der analoge Eingang PIN7
const int PortAnalogOut   = A2;    // Dies ist der analoge Ausgang PIN3
const int PortDigitalOut  = 0;    // Dies ist der digitale Ausgang PIN5

const int ValueLow        = 698;   // Dies ist der Wert, ab dem Low  erkannt wird, Wertebereich 0 bis 1023
const int ValueHigh       = 699;   // Dies ist der Wert, ab dem High erkannt wird, Wertebereich 0 bis 1023

const int TimeOutLow      = 0;     // Dies ist die Wartezeit für Low in Millisekunden
const int TimeOutHigh     = 400;  // Dies ist die Wartezeit für High, ebenfalls in Millisekunden

SoftwareSerial mySerial(1, A3);
.
.
.


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

Frank

Autor: nicht gast (Gast)
Datum:

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

Nein, das nennt sich eigentlich programmieren.

Autor: Frank S. (hobbyist)
Datum:

Bewertung
0 lesenswert
nicht 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:
void setup()
{
   pinMode (PortAnalogOut,  OUTPUT);
   pinMode (PortDigitalOut, OUTPUT);
   
   mySerial.begin   (9600);
   mySerial.println ("Werte");
}

void loop() 
{
   int nAnalogValue = analogRead (PortAnalogIn);
   mySerial.print   ("Neuer Wert : ");
   mySerial.print   (nAnalogValue);
   mySerial.println ("!");
   
   if (nAnalogValue < ValueLow)
   {
      analogWrite  (PortAnalogOut,  960);
      digitalWrite (PortDigitalOut, HIGH);
      
      delay (TimeOutLow);
   }
   
   if (nAnalogValue > ValueHigh)
   {
      analogWrite  (PortAnalogOut,  255);
      digitalWrite (PortDigitalOut, LOW);
      
      delay (TimeOutHigh);
   }   
   delay (300);
}

Autor: nicht gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Matthias S. (Firma: matzetronics) (mschoeldgen)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Frank S. (hobbyist)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Sascha W. (sascha-w)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Frank S. (hobbyist)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Kusi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.