Go Down

Topic: Sketch von Uno auf Attiny85 (Read 1 time) previous topic - next topic

Micha81

Jul 26, 2013, 08:01 am Last Edit: Jul 26, 2013, 09:04 am by uwefed Reason: 1
Guten morgen...
Ich bin noch ganz frisch in dieser Sache und habe da mal die frage wie ich einen Sketch der auf dem Uno läuft auf einen Attiny85 bekomme?!
Es soll die Temperatur vom LM35DZ ausgelesen werden und wenn die angegebene Temperatur erreicht wird betätigt der Servo die Lüftungsklappe im Wintergarten.
So weit so gut...
Nun dachte ich mir das ich ja nicht so viel Speicherplatz brauche und ein Attiny85 reicht und zudem noch billiger ist. Also habe ich mir die Datei für den Attiny geladen und den Blinksketch getestet...funzt...
Dann wollte ich den eigentlichen Sketch aufspielen und bekam folgende Fehlermeldung:
Temperatur_auslesen_LM35_ATTINY85.ino: In function 'void setup()':
Temperatur_auslesen_LM35_ATTINY85:15: error: 'Serial' was not declared in this scope
als Fehler wird mir der Befehl "Serial.begin(9600)" angezeigt aber diesen brauche ich doch damit der wert vom Sensor ausgelesen wird oder nicht?
Hab die ganze Nacht vor dem Pc gesessen und Google gequält aber ich stehe im moment echt auf dem Schlauch...
Hier mal mein Code der auf dem Uno läuft:

Code: [Select]
//Temperaturregelung Wintergarten//

#include <Servo.h>
Servo servo1;


float tempC;
int tempPin = 2; // Temperatursonsor an analog Pin 0 bei Arduino | bei ATTINY85 an pin 2
int ledPin = 0; // LED an Pin 13 bei Arduino | bei ATTINY85 an pin 0
int pos = 0; // Servoposition

// Setup

void setup()
{
Serial.begin(9600); // öffnet den Serialport zur Comunikation mit dem Sensor
pinMode(ledPin, OUTPUT);
servo1.attach(5);
}


void loop()
{
tempC = analogRead(tempPin); // liest den Temperaturpin aus
tempC = (5.0*tempC*100.0)/1024.0;
Serial.println((byte)tempC);
 if (tempC >26)  // wenn die Temp über 26 C ist leuchtet die led
 {
   pos = 180; // Servo öffnet
  digitalWrite(ledPin, HIGH);
  servo1.write(pos);
 }
 else
 {
   pos = 0; // Servo schließt
   digitalWrite(ledPin, LOW);
   servo1.write(pos);
 }
 delay(1000);
}


würde mich sehr freuen wenn mir hier geholfen wird und bitte... zerlegt mich nicht gleich...ich bin noch ganz frisch :-D

MfG Micha

markbee

#1
Jul 26, 2013, 08:09 am Last Edit: Jul 26, 2013, 08:16 am by markbee Reason: 1
Der ATtiny85 hat kein HardwareSerial/ UART. Das geht aber z.B. mit der SoftwareSerial-Bibliothek.
XBee blog: http://lookmanowire.blogspot.com/

Eisebaer

hi,

so ziemlich alles, was auf dem 328er geht, kannst Du auch auf dem tiny machen. aber:
viel schwieriger, aufwändiger, sch.-sucherei, ärger, wenige tutorials usw. warum sollte man sich das antun?
zahl einen euro mehr und nimm den atmega8 oder gleich den 328.

das, meiner meinung nach, ärgerlichere daran ist, daß es keinen mega mit weniger beinchen gibt, oft braucht man ja kaum was...

gruß stefan

Micha81

#3
Jul 26, 2013, 10:43 am Last Edit: Jul 26, 2013, 10:45 am by Micha81 Reason: 1
@Admin
Sorry habe das mit dem Code usw eben erst gelesen.


@ Eisbar
da muss ich dir zustimmen und ich bin echt am überlegen ob ich nicht bei dem 328er bleibe worauf mein code ja läuft. Warum ist das kleine Ding so verdammt umständlich?!?
Hab mir extra ein nettes Shield gebastelt um den 85er zu programmieren...



Habe mein Code nochmal überarbeitet und jetzt motzt die IDE über den Servo  :0

Code: [Select]
//Temperaturregelung Wintergarten//


#include <SoftwareSerial.h>
const int rx=3;
const int tx=1;
SoftwareSerial mySerial(rx, tx);

#include <Servo.h>
Servo servo1;


float tempC;
const int tempPin = 2; // Temperatursonsor an analog Pin 0 bei Arduino | bei ATTINY85 an pin 2
const int ledPin = 0; // LED an Pin 13 bei Arduino | bei ATTINY85 an pin 0
int pos = 0; // Servoposition

// Setup

void setup()
{
 pinMode(rx,INPUT);
 pinMode(tx,OUTPUT);
mySerial.begin(9600); // öffnet den Serialport zur Comunikation mit dem Sensor
pinMode(ledPin, OUTPUT);
servo1.attach(5);
}


void loop()
{
tempC = analogRead(tempPin); // liest den Temperaturpin aus
tempC = (5.0*tempC*100.0)/1024.0;
mySerial.println((byte)tempC);
 if (tempC >26)  // wenn die Temp über 26 C ist leuchtet die led
 {
  pos = 180; // Servo öffnet
  digitalWrite(ledPin, HIGH); // Led an
  servo1.write(pos);
 }
 else
 {
   pos = 0; // Servo schließt
   digitalWrite(ledPin, LOW); // Led aus
   servo1.write(pos);
 }
 delay(1000);
}


Die Fehlermeldungen lauten nun:
Code: [Select]
D:\Program Files (x86)\Arduino\libraries\Servo\Servo.cpp: In function 'void __vector_3()':
D:\Program Files (x86)\Arduino\libraries\Servo\Servo.cpp:105: error: cannot convert 'volatile uint8_t*' to 'volatile uint16_t*' for argument '2' to 'void handle_interrupts(timer16_Sequence_t, volatile uint16_t*, volatile uint16_t*)'
D:\Program Files (x86)\Arduino\libraries\Servo\Servo.cpp: In function 'void initISR(timer16_Sequence_t)':
D:\Program Files (x86)\Arduino\libraries\Servo\Servo.cpp:151: error: 'TCCR1A' was not declared in this scope
D:\Program Files (x86)\Arduino\libraries\Servo\Servo.cpp:152: error: 'TCCR1B' was not declared in this scope
D:\Program Files (x86)\Arduino\libraries\Servo\Servo.cpp:159: error: 'TIFR1' was not declared in this scope
D:\Program Files (x86)\Arduino\libraries\Servo\Servo.cpp:160: error: 'TIMSK1' was not declared in this scope

Eisebaer

hi,

hast Du auch nicht vergessen, in der IDE wieder auf UNO zu stellen?

gruß stefan

gloob

#5
Jul 26, 2013, 10:58 am Last Edit: Jul 26, 2013, 11:01 am by gloob Reason: 1
1. setze den pinMode auch für den Temperatur Pin
2. entferne alles was Serial betrifft, der wird nicht benötigt für den Temperatursensir, der hängt nur an Pin 2 mehr nicht
3. Versuch noch eine Hysteresekurve einzubauen damit der servo bei 27,9 und 28,0 nicht immer hin und her springt
http://www.panoduino.de

Micha81

@Eisbaer
warum auf uno umstellen? ich will es doch auf dem Attiny haben...da muss doch die IDE auf Attiny stehen...

@gloob
Punkt1=erledigt
Punkt2=ich dachte das ich den rx/tx brauche weil der Attiny keinen HardwareSerial hat?!?
Punkt3= :smiley-eek:?!?

gloob

Du brauchst überhaupt keinen serial weder Hardware noch software
http://www.panoduino.de

Micha81

ok...hab das alles gelöscht...die IDE steht auf attiny85 und die Fehlermeldungen sind die gleichen

Eisebaer

hi,

Quote
@Eisbaer
warum auf uno umstellen? ich will es doch auf dem Attiny haben...da muss doch die IDE auf Attiny stehen...


sorry, nach Deinem post dachte ich, Du nimmst jetzt doch den 328er.

gruß stefan

Micha81

@Eisbaer
kein Problem  ;)
das kleine Sch...ding (Attiny85) hat mich die ganze Nacht wachgehalten und da kann ich nicht so einfach aufhören außer er beschreitet eine balistische Flugbahn durch das offene Fenster was aber nicht mehr all zu lange dauert! :0

Gelegenheitsbastler

Ich kann meine IDE nicht auf den Attiny85 umstellen. Daher habe ich es mal auf "Uno" stehen lassen und deinen oben stehenden Sketch kompiliert. Da kam keine Fehlermeldung.

Frank
Anfänger, der sich am Mega versucht. (Wegen Pin-Mangel bin ich vom Uno auf den Mega umgestiegen) Aktuelles Projekt: http://mfc-wittgenstein.

Micha81

@Gelegenheitsbastler
Moin...
das ist richtig. wenn ich meine auf Uno umstelle ist die Fehlermeldung bei mir auch weg.

@ALL
Hiermit melde ich das der Attiny sich soeben mit dem Pflaster im Hof verbunden hat und ich wie von Eisbaer empfohlen wieder auf nen 328er gehe.
Ich bedanke mich bei euch für eure Tipps und bin mir sicher das ich bald mal wieder eine Frage haben werde :D

Gelegenheitsbastler

Na das nenne ich mal konsequent ;)

Du könntest den 328er im Arduino fertig machen, rausnehmen und mit Minimalbestückung ohne Arduino-Board laufen lassen. Aber ich denke das weisst du schon längst.

Frank
Anfänger, der sich am Mega versucht. (Wegen Pin-Mangel bin ich vom Uno auf den Mega umgestiegen) Aktuelles Projekt: http://mfc-wittgenstein.

Micha81

endweder so oder ich mache mir dann an den standalone noch stiftleisten das ich ihn dort auch programmieren kann.
werde ihn dann so aufbauen
http://arduino.cc/en/Main/Standalone

Go Up