PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Fragen zu I2C in Bascom



NeroII
10.01.2010, 17:46
Hallo,

ich bin Anfänger in Bascom und habe mich deshalb als erstes durch die RN-Wissen-Hilfe gefressen. Dabei sind mir einige Dinge aufgefallen, die mir unklar sind.

1. Im Vergleich von "Software I2C" mit "Hardware TWI" ist mir aufgefallen, dass, wenn man "Hardware TWI" wählt, die Clock-Frequenz durch "Config Twi = xxxxxx" aussucht, jedoch dies bei der Nutzung von "Software I2C" nicht geschieht. Wie wird das dort gemacht? Verwendet Bascom da Clock-Stretching oder ist es der Standardwert 100kHz? Wenn ja wie kann man den ändern?

2. Ich wüsste gerne einen Schätzwert für die Zeit, die für das Senden und Empfangen von jeweils einem Byte, bei Standard-Clock-Frequenz von 100kHz benötigt wird. Bisher benutze ich das Handyboard und dafür werden ungefähr 40ms benötigt. Unter anderem, weil das so lange ist, möchte ich zu AVRs wechseln.

3. Generell zu Bascom, ich habe gelesen, dass man nur eine Rechenoperation pro Zeile ausrechnen kann. Geht soetwas wirklich nicht:
"a = b^2 + 2 * 4" ?

Viele Grüße
Cornelius

TomEdl
10.01.2010, 18:32
Hallo!



3. Generell zu Bascom, ich habe gelesen, dass man nur eine Rechenoperation pro Zeile ausrechnen kann. Geht soetwas wirklich nicht:
"a = b^2 + 2 * 4" ?

Ich kann dir nur zu dieser Frage eine Antwort geben, da ich mit I2C noch nichts zu tun gehabt habe.

Leider gehen solche Rechenoperationen, wie du sie gepostet hast, wirklich nicht. Es ist lediglich eine Operation pro Zeile erlaubt.



a = b * b
a = b + 8

Ich habe "2*4" bereits multipliziert, besser wäre es, für den fixen Wert von 8 eine Konstante zu benutzen.

Grüße
Thomas

Jaecko
10.01.2010, 19:20
Die Zeitdauer kannst du dir ja berechnen. Du hast ja die Clock-Frequenz und damit auch, wie viele Bits pro Sekunde gesendet werden.
Adress-Byte + Datenbyte + 2x ACK/NAK + Start + Stop = 20 Bit.
Ich komm da auf 0,2ms bei 100kHz.

kelevra
21.05.2011, 15:09
Pardon, sind es nicht 29 bits?

ein Paket-Rahmen:
Start(1) + Slave_add(7) + R/W(1) + A(1) + Data(8) + A(1) + DATA(8) + NACK(1) + Stop (1)

dann je nach Datenrate: 100 kBit/s < 400 kBit/s < 3,5 MBit/s
Sprich theoretische Dauer eines Zyklus für ein Datenbyte:

Standard-mode: 29/100000 = 0,290 ms
Fast-mode: 29/400000 = 0,0725 ms
High-Speed-mode: 29/3400000 = 0,008529 ms

Weiss eigentlich jemand wo der High-speed-mode eingesetzt wird?

mat-sche
22.05.2011, 12:23
Der High Speed - Mode ist abhängig von der Hardware, diese bestimmt die Geschwindigkeit der Schnittstelle.
Bei kurzer Betrachtung zum Datasheet eines ATmega 644p kann ich lesen, dass das TWI-Hardwarenterface nur mit max. 400kHz läuft.
Wie es mit einer soft-i2c Version ausschaut weiß ich leider nicht.

PicNick
23.05.2011, 07:59
Ad Frage 1)
bei der Hardware I2C schreibt man die Speed in ein IO-register (TWI), bei der Soft-I2C definiert man ein Symbol, dass das Bascom in die Wait-Schleifen einarbeitet. Das geht naturgemäss nicht so 1:1 (kHz->param) , daher die einstelligen Config-werte bei Software-TWI