error: 'TWSR' undeclared (first use in this function)
Momentan bin ich ja am überlegen, in meinen Terrarium Controller "Terraduino" eine Failsafe-Platine einzubauen. Dafür bin ich jetzt am experimentieren, wie man am Attiny85 (den hab ich da), I2C spricht. Ich hab mir also die "TWI/I2C library for Wiring & Arduino" zur Brust genommen, mir einen Attiny-Compatibility-Layer besorgt, den Kram zusammengehackt und dann mit dem avr-gcc versucht zu compilieren. Das kam dabei heraus:
env -P/usr/local/bin:/usr/bin - avr-gcc -g -mmcu=attiny85 \ -Wall -Wstrict-prototypes -Os -mcall-prologues -funsigned-char \ -funsigned-bitfields -fpack-struct -fshort-enums -Wundef -I. \ -I../at/tiny/cores/tiny -DARDUINO=101 \ -DF_CPU=16000000L -Os -c twi.c -o twi.o twi.c: In function 'twi_init': twi.c:80: error: 'TWSR' undeclared (first use in this function) twi.c:80: error: (Each undeclared identifier is reported only once twi.c:80: error: for each function it appears in.) twi.c:80: error: 'TWPS0' undeclared (first use in this function) twi.c:81: error: 'TWPS1' undeclared (first use in this function) twi.c:82: error: 'TWBR' undeclared (first use in this function) twi.c:90: error: 'TWCR' undeclared (first use in this function) twi.c:90: error: 'TWEN' undeclared (first use in this function) twi.c:90: error: 'TWIE' undeclared (first use in this function) twi.c:90: error: 'TWEA' undeclared (first use in this function) [..]
Tja. Und dann habe ich mich praktisch zu Tode gegoogelt. Verursacht wird das Ganze weil die entsprechenden Makros fehlen. Zunächst dachte ich, die fehlen, weil auf irgendeine magische Weise die Datei avr/iotn85.h nicht included wurde. Also hab ich sie included und bekam noch mehr komische Fehlermeldungen:
Attempt to include more than one file. Include instead of this file.
Natürlich hat das nichts gerbacht, zumal die avr/io.h bereits included war. Langer Rede, kurzer Sinn: letzlich habe ich herausgefunden, dass der Attiny85 halt keinen TWI Support hat. Somit sind die entsprechenden Macros nicht definiert und daher kamen die Fehler.
Zum Glück hat der Attiny85 aber USI Support eingebaut und dafür gibt es auch eine I2C Slave Library. Runtergeladen, Eingebunden und den avr-gcc damit gefüttert: Läuft.
Sehr schön :)