Hallo, sorry wegen der Überschrift - aber ich weiß echt nicht, wie ich's kurz formulieren soll...
In den Compiler-Settings lassen sich ja Controllerbeine für drei Kommunikationsschnittstellen vorgeben (Defaults), und zwar für 1wire, den SPI-Bus und I²C.
Meine Frage bezieht sich auf den I²C.
Man kann also dort Defaults für SDA und SCL treffen.
Diese Voreinstellung kann im Programm durch "Config SDA= xxx.y" bzw "Config SCL=aaa.b" überschrieben werden.
Meine Vermutung war jetzt, daß dadurch "irgendwo" entsprechende Compiler-Konstanten generiert werden auf die "irgendwie" zugegriffen werden kann. Wo und Wie?
Ich bin dem Hinweis auf "I2CINIT" gefolgt, und dort der i2c.lib .
In dieser Bibliothek werden diverse Compilerkonstanten verwendet:
Aber unklar ist, wo diese Konstanten angelegt werden.
Jedenfalls läßt sich folgendes Programm korrekt simulieren:
CodeBox BascomAVR
Diese i2c-lib muß nicht per direktive eingebunden werden, die _i2cinit auch nicht deklariert werden.
Daraufhin habe ich eine eigene "Bibliothek" mit folgendem Inhalt "geschrieben" (bzw aus der i2c-lib folgendes "kopiert"):
CodeBox BascomAVR
Und mein Programm dann geändert:
CodeBox BascomAVR
Irgendjemand 'ne Erklärung?
Grundsätzlich könnte man so also 'ne eigene Bibliothek erstellen, die zB das USI (siehe mein anderer Thread) nutzt, sich aber unter Bascom mit den konventionellen TWI-Instruktionen initialisieren, und weitgehend auch verwenden läßt (die i2c.lib scheint nur Master-Instruktionen zu besitzen)
LotadaC
In den Compiler-Settings lassen sich ja Controllerbeine für drei Kommunikationsschnittstellen vorgeben (Defaults), und zwar für 1wire, den SPI-Bus und I²C.
Meine Frage bezieht sich auf den I²C.
Man kann also dort Defaults für SDA und SCL treffen.
Diese Voreinstellung kann im Programm durch "Config SDA= xxx.y" bzw "Config SCL=aaa.b" überschrieben werden.
Meine Vermutung war jetzt, daß dadurch "irgendwo" entsprechende Compiler-Konstanten generiert werden auf die "irgendwie" zugegriffen werden kann. Wo und Wie?
Ich bin dem Hinweis auf "I2CINIT" gefolgt, und dort der i2c.lib .
In dieser Bibliothek werden diverse Compilerkonstanten verwendet:
- _sdaPORT
- _sdaDDR
- _sdaPIN
- _sclPORT
- _sclDDR
- _sclPIN
- _SCL
- _SDA
Aber unklar ist, wo diese Konstanten angelegt werden.
Jedenfalls läßt sich folgendes Programm korrekt simulieren:
CodeBox BascomAVR
$regfile = "attiny4313.dat" $crystal = 8000000 Config Sda = Portb.5 I2cinit sbi _sdaport, _sda End 'end programSBI setzt dann wie erwartet B5.
Diese i2c-lib muß nicht per direktive eingebunden werden, die _i2cinit auch nicht deklariert werden.
Daraufhin habe ich eine eigene "Bibliothek" mit folgendem Inhalt "geschrieben" (bzw aus der i2c-lib folgendes "kopiert"):
CodeBox BascomAVR
[_I2C] _I2C: _i2c_init: Ret [end]Also nur zwei Label und ein Return.
Und mein Programm dann geändert:
CodeBox BascomAVR
$regfile = "attiny4313.dat" $crystal = 8000000 $lib "meinelib.lib" Config Sda = Portb.5 I2cinit sbi _sdaport, _sda End 'end programAuch hier sind die Konstanten verwendbar, es wird auch nur die leere Subroutine (statt der Routinen der vorherigen Bibliothek) erzeugt.
Irgendjemand 'ne Erklärung?
Grundsätzlich könnte man so also 'ne eigene Bibliothek erstellen, die zB das USI (siehe mein anderer Thread) nutzt, sich aber unter Bascom mit den konventionellen TWI-Instruktionen initialisieren, und weitgehend auch verwenden läßt (die i2c.lib scheint nur Master-Instruktionen zu besitzen)
LotadaC