Hallo zusammen, ich habe folgendes Anliegen:
Ich möchte ein Relais mithilfe eines RTC-Moduls und eines ATtiny ansteuern, dafür hab ich einen Code im Internet gefunden, den ich für mich adaptiert habe. Dieser ist für Arduino ausgelegt wo er auch einwandfrei funktioniert.
Da ich aber einen ATtiny45 benutzen möchte, hab ich für I2C die TinyWireM lib installiert. Jedoch bekomme ich dann beim Hochladen auf den ATtiny folgende Fehlermeldung:
Bewaesserungssteuerung:5:13: error: 'SDA' was not declared in this scope
DS3231 rtc(SDA,SCL);
^~~
Bewaesserungssteuerung:5:17: error: 'SCL' was not declared in this scope
DS3231 rtc(SDA,SCL);
^~~
C:\Users\user\Documents\Arduino\Bewaesserungssteuerung\Bewaesserungssteuerung.ino:5:17: note: suggested alternative: 'SPL'
DS3231 rtc(SDA,SCL);
^~~
SPL
exit status 1
'SDA' was not declared in this scope
die TinyWire Lib hat nichts mit dem Tiny in ATtiny zu tun. Nur so wie kleine Wire Lib. Dir fehlt das Core Package für deinen fremden Controller in der IDE. Das kannst du mittels Boards Manager der IDE nachinstallieren. ATtinyCore Package
Lesen und machen, ist alles beschrieben inkl. Pinout usw.
Dann solltest Du sparsam mit dem Speicher sein. Das Lesen von drei Registern geht auch ohne Bibliothek.
Um die Zeit der RTC überprüfen zu können, verwende ich SoftwareSerial, was ich mit dem UNO, der als Programmiergerät dient, verbunden habe. Durch eine angepaßte ArduinoISP.ino werden die Ausgaben des ATtiny auf dem seriellen Monitor der IDE angezeigt. Mit der Option DEBUG kann man das einschalten.
Getestet mit ATtiny85, kompiliert aber auch für ATtiny45:
Ich habe das mal probiert, in Kombination mit dem ATtinyCore Package von @Doc_Arduino, aber beim Hochladen kommt immer die Fehlermeldung "arduino programmer is not responding".
Als Programmer verwende ich UNO as ISP
Und die Fehlermeldung ist folgende:
In file included from c:\users\lukas\appdata\local\arduino15\packages\arduino\tools\avr-gcc\7.3.0-atmel3.6.1-arduino7\avr\include\avr\io.h:99:0,
from c:\users\lukas\appdata\local\arduino15\packages\arduino\tools\avr-gcc\7.3.0-atmel3.6.1-arduino7\avr\include\avr\pgmspace.h:90,
from C:\Users\lukas\AppData\Local\Arduino15\packages\ATTinyCore\hardware\avr\1.5.2\cores\tiny/Arduino.h:9,
from C:\Users\lukas\Documents\Arduino\libraries\DS3231\DS3231.h:26,
from C:\Users\lukas\Documents\Arduino\libraries\DS3231\DS3231.cpp:22:
C:\Users\lukas\Documents\Arduino\libraries\DS3231\hardware/avr/HW_AVR.h: In member function 'void DS3231::begin()':
C:\Users\lukas\Documents\Arduino\libraries\DS3231\hardware/avr/HW_AVR.h:12:7: error: 'TWSR' was not declared in this scope
cbi(TWSR, TWPS0);
^
C:\Users\lukas\Documents\Arduino\libraries\DS3231\hardware/avr/HW_AVR.h:12:3: note: in expansion of macro 'cbi'
cbi(TWSR, TWPS0);
^~~
C:\Users\lukas\Documents\Arduino\libraries\DS3231\hardware/avr/HW_AVR.h:12:7: note: suggested alternative: 'ACSR'
cbi(TWSR, TWPS0);
^
C:\Users\lukas\Documents\Arduino\libraries\DS3231\hardware/avr/HW_AVR.h:12:3: note: in expansion of macro 'cbi'
cbi(TWSR, TWPS0);
^~~
C:\Users\lukas\Documents\Arduino\libraries\DS3231\hardware/avr/HW_AVR.h:12:13: error: 'TWPS0' was not declared in this scope
cbi(TWSR, TWPS0);
^
C:\Users\lukas\Documents\Arduino\libraries\DS3231\hardware/avr/HW_AVR.h:12:3: note: in expansion of macro 'cbi'
cbi(TWSR, TWPS0);
^~~
C:\Users\lukas\Documents\Arduino\libraries\DS3231\hardware/avr/HW_AVR.h:12:13: note: suggested alternative: 'ADPS0'
cbi(TWSR, TWPS0);
^
C:\Users\lukas\Documents\Arduino\libraries\DS3231\hardware/avr/HW_AVR.h:12:3: note: in expansion of macro 'cbi'
cbi(TWSR, TWPS0);
^~~
C:\Users\lukas\Documents\Arduino\libraries\DS3231\hardware/avr/HW_AVR.h:13:13: error: 'TWPS1' was not declared in this scope
cbi(TWSR, TWPS1);
^
C:\Users\lukas\Documents\Arduino\libraries\DS3231\hardware/avr/HW_AVR.h:13:3: note: in expansion of macro 'cbi'
cbi(TWSR, TWPS1);
^~~
C:\Users\lukas\Documents\Arduino\libraries\DS3231\hardware/avr/HW_AVR.h:13:13: note: suggested alternative: 'ADPS1'
cbi(TWSR, TWPS1);
^
C:\Users\lukas\Documents\Arduino\libraries\DS3231\hardware/avr/HW_AVR.h:13:3: note: in expansion of macro 'cbi'
cbi(TWSR, TWPS1);
^~~
In file included from C:\Users\lukas\Documents\Arduino\libraries\DS3231\DS3231.cpp:26:0:
C:\Users\lukas\Documents\Arduino\libraries\DS3231\hardware/avr/HW_AVR.h:14:3: error: 'TWBR' was not declared in this scope
TWBR = ((F_CPU / TWI_FREQ) - 16) / 2;
^~~~
C:\Users\lukas\Documents\Arduino\libraries\DS3231\hardware/avr/HW_AVR.h:14:3: note: suggested alternative: 'TIFR'
TWBR = ((F_CPU / TWI_FREQ) - 16) / 2;
^~~~
TIFR
C:\Users\lukas\Documents\Arduino\libraries\DS3231\hardware/avr/HW_AVR.h:17:3: error: 'TWCR' was not declared in this scope
TWCR = _BV(TWEN) | _BV(TWIE)/* | _BV(TWEA)*/;
^~~~
C:\Users\lukas\Documents\Arduino\libraries\DS3231\hardware/avr/HW_AVR.h:17:3: note: suggested alternative: 'EECR'
TWCR = _BV(TWEN) | _BV(TWIE)/* | _BV(TWEA)*/;
^~~~
EECR
In file included from c:\users\lukas\appdata\local\arduino15\packages\arduino\tools\avr-gcc\7.3.0-atmel3.6.1-arduino7\avr\include\avr\io.h:99:0,
from c:\users\lukas\appdata\local\arduino15\packages\arduino\tools\avr-gcc\7.3.0-atmel3.6.1-arduino7\avr\include\avr\pgmspace.h:90,
from C:\Users\lukas\AppData\Local\Arduino15\packages\ATTinyCore\hardware\avr\1.5.2\cores\tiny/Arduino.h:9,
from C:\Users\lukas\Documents\Arduino\libraries\DS3231\DS3231.h:26,
from C:\Users\lukas\Documents\Arduino\libraries\DS3231\DS3231.cpp:22:
C:\Users\lukas\Documents\Arduino\libraries\DS3231\hardware/avr/HW_AVR.h:17:14: error: 'TWEN' was not declared in this scope
TWCR = _BV(TWEN) | _BV(TWIE)/* | _BV(TWEA)*/;
^
C:\Users\lukas\Documents\Arduino\libraries\DS3231\hardware/avr/HW_AVR.h:17:14: note: suggested alternative: 'ADEN'
C:\Users\lukas\Documents\Arduino\libraries\DS3231\hardware/avr/HW_AVR.h:17:26: error: 'TWIE' was not declared in this scope
TWCR = _BV(TWEN) | _BV(TWIE)/* | _BV(TWEA)*/;
^
C:\Users\lukas\Documents\Arduino\libraries\DS3231\hardware/avr/HW_AVR.h:17:26: note: suggested alternative: 'ACIE'
In file included from C:\Users\lukas\Documents\Arduino\libraries\DS3231\DS3231.cpp:26:0:
C:\Users\lukas\Documents\Arduino\libraries\DS3231\hardware/avr/HW_AVR.h: In member function 'void DS3231::_burstRead()':
C:\Users\lukas\Documents\Arduino\libraries\DS3231\hardware/avr/HW_AVR.h:31:3: error: 'TWCR' was not declared in this scope
TWCR = _BV(TWEN) | _BV(TWEA) | _BV(TWINT) | _BV(TWSTA); // Send START
^~~~
C:\Users\lukas\Documents\Arduino\libraries\DS3231\hardware/avr/HW_AVR.h:31:3: note: suggested alternative: 'EECR'
TWCR = _BV(TWEN) | _BV(TWEA) | _BV(TWINT) | _BV(TWSTA); // Send START
^~~~
EECR
In file included from c:\users\lukas\appdata\local\arduino15\packages\arduino\tools\avr-gcc\7.3.0-atmel3.6.1-arduino7\avr\include\avr\io.h:99:0,
from c:\users\lukas\appdata\local\arduino15\packages\arduino\tools\avr-gcc\7.3.0-atmel3.6.1-arduino7\avr\include\avr\pgmspace.h:90,
from C:\Users\lukas\AppData\Local\Arduino15\packages\ATTinyCore\hardware\avr\1.5.2\cores\tiny/Arduino.h:9,
from C:\Users\lukas\Documents\Arduino\libraries\DS3231\DS3231.h:26,
from C:\Users\lukas\Documents\Arduino\libraries\DS3231\DS3231.cpp:22:
C:\Users\lukas\Documents\Arduino\libraries\DS3231\hardware/avr/HW_AVR.h:31:14: error: 'TWEN' was not declared in this scope
TWCR = _BV(TWEN) | _BV(TWEA) | _BV(TWINT) | _BV(TWSTA); // Send START
^
C:\Users\lukas\Documents\Arduino\libraries\DS3231\hardware/avr/HW_AVR.h:31:14: note: suggested alternative: 'ADEN'
C:\Users\lukas\Documents\Arduino\libraries\DS3231\hardware/avr/HW_AVR.h:31:26: error: 'TWEA' was not declared in this scope
TWCR = _BV(TWEN) | _BV(TWEA) | _BV(TWINT) | _BV(TWSTA); // Send START
^
C:\Users\lukas\Documents\Arduino\libraries\DS3231\hardware/avr/HW_AVR.h:31:38: error: 'TWINT' was not declared in this scope
TWCR = _BV(TWEN) | _BV(TWEA) | _BV(TWINT) | _BV(TWSTA); // Send START
^
C:\Users\lukas\Documents\Arduino\libraries\DS3231\hardware/avr/HW_AVR.h:31:51: error: 'TWSTA' was not declared in this scope
TWCR = _BV(TWEN) | _BV(TWEA) | _BV(TWINT) | _BV(TWSTA); // Send START
^
In file included from C:\Users\lukas\Documents\Arduino\libraries\DS3231\DS3231.cpp:26:0:
C:\Users\lukas\Documents\Arduino\libraries\DS3231\hardware/avr/HW_AVR.h:33:3: error: 'TWDR' was not declared in this scope
TWDR = DS3231_ADDR_W;
^~~~
C:\Users\lukas\Documents\Arduino\libraries\DS3231\hardware/avr/HW_AVR.h:33:3: note: suggested alternative: 'DWDR'
TWDR = DS3231_ADDR_W;
^~~~
DWDR
In file included from c:\users\lukas\appdata\local\arduino15\packages\arduino\tools\avr-gcc\7.3.0-atmel3.6.1-arduino7\avr\include\avr\io.h:99:0,
from c:\users\lukas\appdata\local\arduino15\packages\arduino\tools\avr-gcc\7.3.0-atmel3.6.1-arduino7\avr\include\avr\pgmspace.h:90,
from C:\Users\lukas\AppData\Local\Arduino15\packages\ATTinyCore\hardware\avr\1.5.2\cores\tiny/Arduino.h:9,
from C:\Users\lukas\Documents\Arduino\libraries\DS3231\DS3231.h:26,
from C:\Users\lukas\Documents\Arduino\libraries\DS3231\DS3231.cpp:22:
C:\Users\lukas\Documents\Arduino\libraries\DS3231\hardware/avr/HW_AVR.h:55:38: error: 'TWSTO' was not declared in this scope
TWCR = _BV(TWEN)| _BV(TWINT) | _BV(TWSTO); // Send STOP
^
In file included from C:\Users\lukas\Documents\Arduino\libraries\DS3231\DS3231.cpp:26:0:
C:\Users\lukas\Documents\Arduino\libraries\DS3231\hardware/avr/HW_AVR.h: In member function 'uint8_t DS3231::_readRegister(uint8_t)':
C:\Users\lukas\Documents\Arduino\libraries\DS3231\hardware/avr/HW_AVR.h:85:3: error: 'TWCR' was not declared in this scope
TWCR = _BV(TWEN) | _BV(TWEA) | _BV(TWINT) | _BV(TWSTA); // Send START
^~~~
C:\Users\lukas\Documents\Arduino\libraries\DS3231\hardware/avr/HW_AVR.h:85:3: note: suggested alternative: 'EECR'
TWCR = _BV(TWEN) | _BV(TWEA) | _BV(TWINT) | _BV(TWSTA); // Send START
^~~~
EECR
In file included from c:\users\lukas\appdata\local\arduino15\packages\arduino\tools\avr-gcc\7.3.0-atmel3.6.1-arduino7\avr\include\avr\io.h:99:0,
from c:\users\lukas\appdata\local\arduino15\packages\arduino\tools\avr-gcc\7.3.0-atmel3.6.1-arduino7\avr\include\avr\pgmspace.h:90,
from C:\Users\lukas\AppData\Local\Arduino15\packages\ATTinyCore\hardware\avr\1.5.2\cores\tiny/Arduino.h:9,
from C:\Users\lukas\Documents\Arduino\libraries\DS3231\DS3231.h:26,
from C:\Users\lukas\Documents\Arduino\libraries\DS3231\DS3231.cpp:22:
C:\Users\lukas\Documents\Arduino\libraries\DS3231\hardware/avr/HW_AVR.h:85:14: error: 'TWEN' was not declared in this scope
TWCR = _BV(TWEN) | _BV(TWEA) | _BV(TWINT) | _BV(TWSTA); // Send START
^
C:\Users\lukas\Documents\Arduino\libraries\DS3231\hardware/avr/HW_AVR.h:85:14: note: suggested alternative: 'ADEN'
C:\Users\lukas\Documents\Arduino\libraries\DS3231\hardware/avr/HW_AVR.h:85:26: error: 'TWEA' was not declared in this scope
TWCR = _BV(TWEN) | _BV(TWEA) | _BV(TWINT) | _BV(TWSTA); // Send START
^
C:\Users\lukas\Documents\Arduino\libraries\DS3231\hardware/avr/HW_AVR.h:85:38: error: 'TWINT' was not declared in this scope
TWCR = _BV(TWEN) | _BV(TWEA) | _BV(TWINT) | _BV(TWSTA); // Send START
^
C:\Users\lukas\Documents\Arduino\libraries\DS3231\hardware/avr/HW_AVR.h:85:51: error: 'TWSTA' was not declared in this scope
TWCR = _BV(TWEN) | _BV(TWEA) | _BV(TWINT) | _BV(TWSTA); // Send START
^
In file included from C:\Users\lukas\Documents\Arduino\libraries\DS3231\DS3231.cpp:26:0:
C:\Users\lukas\Documents\Arduino\libraries\DS3231\hardware/avr/HW_AVR.h:87:3: error: 'TWDR' was not declared in this scope
TWDR = DS3231_ADDR_W;
^~~~
C:\Users\lukas\Documents\Arduino\libraries\DS3231\hardware/avr/HW_AVR.h:87:3: note: suggested alternative: 'DWDR'
TWDR = DS3231_ADDR_W;
^~~~
DWDR
In file included from c:\users\lukas\appdata\local\arduino15\packages\arduino\tools\avr-gcc\7.3.0-atmel3.6.1-arduino7\avr\include\avr\io.h:99:0,
from c:\users\lukas\appdata\local\arduino15\packages\arduino\tools\avr-gcc\7.3.0-atmel3.6.1-arduino7\avr\include\avr\pgmspace.h:90,
from C:\Users\lukas\AppData\Local\Arduino15\packages\ATTinyCore\hardware\avr\1.5.2\cores\tiny/Arduino.h:9,
from C:\Users\lukas\Documents\Arduino\libraries\DS3231\DS3231.h:26,
from C:\Users\lukas\Documents\Arduino\libraries\DS3231\DS3231.cpp:22:
C:\Users\lukas\Documents\Arduino\libraries\DS3231\hardware/avr/HW_AVR.h:106:38: error: 'TWSTO' was not declared in this scope
TWCR = _BV(TWEN)| _BV(TWINT) | _BV(TWSTO); // Send STOP
^
In file included from C:\Users\lukas\Documents\Arduino\libraries\DS3231\DS3231.cpp:26:0:
C:\Users\lukas\Documents\Arduino\libraries\DS3231\hardware/avr/HW_AVR.h: In member function 'void DS3231::_writeRegister(uint8_t, uint8_t)':
C:\Users\lukas\Documents\Arduino\libraries\DS3231\hardware/avr/HW_AVR.h:128:3: error: 'TWCR' was not declared in this scope
TWCR = _BV(TWEN) | _BV(TWEA) | _BV(TWINT) | _BV(TWSTA); // Send START
^~~~
C:\Users\lukas\Documents\Arduino\libraries\DS3231\hardware/avr/HW_AVR.h:128:3: note: suggested alternative: 'EECR'
TWCR = _BV(TWEN) | _BV(TWEA) | _BV(TWINT) | _BV(TWSTA); // Send START
^~~~
EECR
In file included from c:\users\lukas\appdata\local\arduino15\packages\arduino\tools\avr-gcc\7.3.0-atmel3.6.1-arduino7\avr\include\avr\io.h:99:0,
from c:\users\lukas\appdata\local\arduino15\packages\arduino\tools\avr-gcc\7.3.0-atmel3.6.1-arduino7\avr\include\avr\pgmspace.h:90,
from C:\Users\lukas\AppData\Local\Arduino15\packages\ATTinyCore\hardware\avr\1.5.2\cores\tiny/Arduino.h:9,
from C:\Users\lukas\Documents\Arduino\libraries\DS3231\DS3231.h:26,
from C:\Users\lukas\Documents\Arduino\libraries\DS3231\DS3231.cpp:22:
C:\Users\lukas\Documents\Arduino\libraries\DS3231\hardware/avr/HW_AVR.h:128:14: error: 'TWEN' was not declared in this scope
TWCR = _BV(TWEN) | _BV(TWEA) | _BV(TWINT) | _BV(TWSTA); // Send START
^
C:\Users\lukas\Documents\Arduino\libraries\DS3231\hardware/avr/HW_AVR.h:128:14: note: suggested alternative: 'ADEN'
C:\Users\lukas\Documents\Arduino\libraries\DS3231\hardware/avr/HW_AVR.h:128:26: error: 'TWEA' was not declared in this scope
TWCR = _BV(TWEN) | _BV(TWEA) | _BV(TWINT) | _BV(TWSTA); // Send START
^
C:\Users\lukas\Documents\Arduino\libraries\DS3231\hardware/avr/HW_AVR.h:128:38: error: 'TWINT' was not declared in this scope
TWCR = _BV(TWEN) | _BV(TWEA) | _BV(TWINT) | _BV(TWSTA); // Send START
^
C:\Users\lukas\Documents\Arduino\libraries\DS3231\hardware/avr/HW_AVR.h:128:51: error: 'TWSTA' was not declared in this scope
TWCR = _BV(TWEN) | _BV(TWEA) | _BV(TWINT) | _BV(TWSTA); // Send START
^
In file included from C:\Users\lukas\Documents\Arduino\libraries\DS3231\DS3231.cpp:26:0:
C:\Users\lukas\Documents\Arduino\libraries\DS3231\hardware/avr/HW_AVR.h:130:3: error: 'TWDR' was not declared in this scope
TWDR = DS3231_ADDR_W;
^~~~
C:\Users\lukas\Documents\Arduino\libraries\DS3231\hardware/avr/HW_AVR.h:130:3: note: suggested alternative: 'DWDR'
TWDR = DS3231_ADDR_W;
^~~~
DWDR
In file included from c:\users\lukas\appdata\local\arduino15\packages\arduino\tools\avr-gcc\7.3.0-atmel3.6.1-arduino7\avr\include\avr\io.h:99:0,
from c:\users\lukas\appdata\local\arduino15\packages\arduino\tools\avr-gcc\7.3.0-atmel3.6.1-arduino7\avr\include\avr\pgmspace.h:90,
from C:\Users\lukas\AppData\Local\Arduino15\packages\ATTinyCore\hardware\avr\1.5.2\cores\tiny/Arduino.h:9,
from C:\Users\lukas\Documents\Arduino\libraries\DS3231\DS3231.h:26,
from C:\Users\lukas\Documents\Arduino\libraries\DS3231\DS3231.cpp:22:
C:\Users\lukas\Documents\Arduino\libraries\DS3231\hardware/avr/HW_AVR.h:140:38: error: 'TWSTO' was not declared in this scope
TWCR = _BV(TWEN)| _BV(TWINT) | _BV(TWSTO); // Send STOP
^
exit status 1
Fehler beim Kompilieren für das Board ATtiny25/45/85 (No bootloader).```
Mit hoher Wahrscheinlichkeit nicht, aber man kann die DS3231 problemlos ohne DS3231-Lib, nur mit I2C, nutzen. Der Code stand auch schon mehrmals hier im Forum.
ich befürchte deine Libs unterstützen solche Controller wie den ATtiny45 nicht. Der hat keine "normale" I2C Einheit. Der eine Universal Serial Unit. Das heißt u.a. die verwendeten Register gibt es schlicht weg nicht. Mach es wie agmue zeigt direkt. Das installierte Core Package brauchste trotzdem, richtig einstellen im Menü musste das auch.
Schaust Du hier
Folge dem Link für I2C. Schau, wie die DS dort angebunden ist.
Die 1307 ist auf den Zeitregistern mit der 3231 gleich. - Datenblätter lesen.
Ich verwende auch öfter ATtinys, häufig ATtiny45 und 85. Hab bisher aber noch nie ein I2C Device daran angeschlossen.
Diesen Thread hab ich zum Anlass genommen das mal auszuprobieren und eine RTC mit einem ATtiny45 auszulesen.
Nachtrag:
Die RTC (DS3231) habe ich zuvor mal auf aktuelle Werte gestellt (der Einfachheit wegen war da ein UNO beteiligt).
Die Seriellen Ausgaben des ATtiny wurden (ebenfalls) mit einem UNO "aufgefangen" und am Seriellen Monitor ausgegeben.
Die Ausgabe war z.B. so:
2022-5-22 21:12:55 DOW: SU
2022-5-22 21:12:56 DOW: SU
2022-5-22 21:12:57 DOW: SU
2022-5-22 21:12:58 DOW: SU
2022-5-22 21:12:59 DOW: SU
2022-5-22 21:13:00 DOW: SU
2022-5-22 21:13:01 DOW: SU
um die Funktionalität habe ich mir nie Sorgen gemacht, wenn man das passende Core Package und die Standard Wire Lib verwendet, denn das Core Package stellt Wire angepasst zur Verfügung. Die Lib vom TO funktioniert nicht, weil sie an Wire vorbei direkte Registernamen verwendet. Will man innerhalb Arduino kompatibel bleiben muss man die Standard Wire verwenden. Nur der Core Package Schreiber muss für die Anpassungen unter der Haube Sorgen.
2022-5-23 11:25:29 DOW: MO
2022-5-23 11:25:30 DOW: MO
2022-5-23 11:25:31 DOW: MO
2022-5-23 11:25:32 DOW: MO
2022-5-23 11:25:33 DOW: MO
2022-5-23 11:25:34 DOW: MO
2022-5-23 11:25:35 DOW: MO
2022-5-23 11:25:36 DOW: MO
Baudrate verringern oder Takt von 1 MHz auf 8 MHz raufsetzen könnte helfen.
Die kurze deutsche Variante mit führenden Nullen benötigt mehr Speicher, zu viel für den ATtiny45, aber eventuell für einen ATtiny85 aufwärts interessant: