PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Frequenz CPU und I²C-Bus



ehenkes
24.07.2007, 23:33
Aus den RP6 Beschreibungen und RN-Wissen:

Das neue Erweiterungssystem des RP6 basiert auf dem 400kBit/s schnellen seriellen I²C Bus

Leistungsfähiger Atmel ATMEGA32 8-Bit Mikrocontroller Geschwindigkeit 8 MIPS ... bei 8MHz Takt

Die Werte von TWBR gehen von theoretisch 0 bis 255. Laut Atmel soll der Wert aber mind. 10 Betragen, da es sonst zu Problemen bei der Übertragung kommen kann.
Es gilt die Formel: TWBR = (CPU-Frequenz / SCL-Frequenz -16)/2

Beim RP6:
TWBR = (8000000/400000 - 16) / 2 = 2 bei 400 kHz
TWBR = (8000000/100000 - 16) / 2 = 32 bei 100 kHz

Mit welcher Frequenz wird der I²C-Bus aktuell in der Bibliothek betrieben?
Für 400 kHz müsste man doch auf 16 MHz aufrüsten, oder übersehe ich da etwas?

linux_80
25.07.2007, 11:02
Hallo,

wenn der AVR Master ist, dann stimmt das, als Slave kann er aber bei den 400kHz mitlesen.
Ist da ein M32 drauf der mit 16MHz laufen kann, oder nur die 8MHz Version ?

Der von der Erweiterungplatine soll mit 16MHz laufen :-k

SlyD
25.07.2007, 11:57
Hallo ehenkes,



Mit welcher Frequenz wird der I²C-Bus aktuell in der Bibliothek betrieben?


Ist bei der Initialisierung als Master einstellbar - man kann die Bitrate in kBit vorgeben.

z.B. so:


I2CTWI_initMaster(50); // 50kBit
I2CTWI_initMaster(100); // 100kBit
I2CTWI_initMaster(220); // 220kBit
I2CTWI_initMaster(400); // 400kBit - für RP6-M32





Für 400 kHz müsste man doch auf 16 MHz aufrüsten, oder übersehe ich da etwas?


Das gilt nur für den Master Modus und auch nur für den Controller auf dem Mainboard. Für den Slave Modus ist das irrelevant.

Im Master Modus kann das TWI Modul nach Atmel Spezifikation so bis etwa 220 kBit betrieben werden. Im Datenblatt steht, dass es bei TWBR Werten kleiner 10 nicht ganz korrekte Ausgabewerte für die letzten Bits geben *könnte* - nicht muss.

Im Slave Modus sind die 400kBit für das TWI Modul natürlich kein Problem.

Das RP6 CONTROL M32 wird mit den maximalen 16MHz getaktet und kann daher auch gemäß der Atmel Spezifikation mit 400kBit/s senden.

Jeder andere ATMEGA Controller den man mit > 14.4MHz laufen lässt und auf den Bot draufbaut kann das natürlich ebenfalls.
Wenn man die 400kBit also *wirklich* braucht, kann man immer beliebig viele schneller getaktete Controller hinzufügen - sei es mit dem RP6-M32 Modul oder selbst zusammengelötet auf Erweiterungsmodulen.


------------------------------------------------------------------------------------

Wie ich schon oft erwähnt habe, ist der Hauptgrund den MEGA32 auf dem Mainboard mit 8MHz laufen zu lassen der Energiebedarf!

Die gesamte Elektronik des RP6 benötigt nur etwa 18mA wenn die Sensorik abgeschaltet ist, mit eingeschalteter Sensorik etwa 28mA.
(ACS, Drehgeber, Stromsensoren und die PowerON LED sind die Sachen die man an und abschalten kann. )

Da nimmt man das im Master Modus *etwas* langsamere TWI Modul gerne in Kauf! Wobei 220kBit/s auch schon sehr schnell für die typischen I2C Aufgaben sind.

MfG,
SlyD

ehenkes
25.07.2007, 16:37
Hallo SlyD, das war keine Kritik am RP6. Ich will es nur halt immer ganz genau wissen. Danke für die ausführliche Information. Energiebedarf ist mir persönlich z.B. egal, da ich immer ein zweites geladenes Akku-Set bereit halte, denn Akkus werden gemäß Murphy's Law im ungünstigsten Moment leer, egal, wie lange diese vorher gelaufen sind. ;-)

SlyD
25.07.2007, 19:51
> Ich will es nur halt immer ganz genau wissen

Deshalb habe ich auch ganz genau geantwortet ;)


> Energiebedarf ... egal .


Es macht aber schon einen Unterschied ob ein Bot 2h oder 6h läuft!
Man kann ja dann immernoch einen weiteren Satz Akkus bereithalten...

MfG,
SlyD

ehenkes
25.07.2007, 20:10
Es macht aber schon einen Unterschied ob ein Bot 2h oder 6h läuft! Da die Ladezeiten von Akkus im Bereich von 2500 mAh ca. 4 h sind, spielt dies in der Tat eine Rolle, denn dann benötigt man bei 2 h Laufzeit bereits drei Akku-Sätze im Wechsel.

SlyD
24.08.2007, 19:00
Hallo,

noch eine kleine Ergänzung zum Thema TWI Geschwindigkeit.

Ich hatte folgende Notiz im MEGA32 Datenblatt auf Seite 288 / 289 zunächst wohl übersehen:



7. The actual low period generated by the ATmega32 Two-wire Serial Interface is (1/fSCL - 2/fCK), thus the low time requirement will not be strictly met for fSCL > 308 kHz when fCK = 8 MHz. Still, ATmega32 devices connected to the bus may communicate at full speed (400 kHz) with other ATmega32 devices, as well as any other device with a proper tLOW acceptance margin.



Danach ist das nicht weiter tragisch, solange die Slaves das Timing nicht 100% exakt nach I2C Spezifikation erwarten. Nur das Timing weicht bei mehr als 300kBit/s etwas ab.

--> 400kHz Master Modus ist also Bedenkenlos möglich (hatte ich ja auch schon getestet - gab keine Probleme).

MfG,
SlyD

ehenkes
24.08.2007, 19:02
Interessant. Danke für die Info.

SpiderX47
18.10.2007, 18:23
Hey,

ich hoffe ich bin hier in diesem Forum einigermaßen richtig.
Ich habe nämlich einige Problem mit dem I2C-Bus meines RP6.
Ich habe bereits über den I2C-Bus einen PCF8574A (mit dem Beispielprogramm auf der RP6-CD) angesteuert und die Ausgänge mit LEDs beschaltet.
Die nächste Erweiterung sollte nun ein Ultraschallsensor (SRF02). Diesen habe ich nun an VDD, GND, SDA und SCL angeschlossen aber noch nichts weiter in meinem Programmm geändert. Jetzt läuft allerdings dieses Programm nicht mehr und auch kein weiteres Programm das auf den I2C-Bus zugreift.
Kann mir da vielleicht jemend helfen und mir sagen wo mein Fehler liegt?

SlyD
19.10.2007, 16:57
Hallo,

evtl. hast Du SCL und SDA vertauscht? (das kann schnell passieren!)
Oder allgemein den Sensor falschrum angeschlossen?
Oder den Mode Pin des SRF02 auf GND gelegt?

Gibt es evtl. irgendwo Lötfehler (Brücken, kalte Lötstellen o.ä.)?

Könnte auch ein Adresskonflikt sein? Bei den SRFxx Ultraschallsensoren und beim PCF8574 kann man die Adresse verändern. Beim PCF8574 über die Adresspins und beim SRF per Software.


Wie sieht Dein Programm aus? Kopier den Code doch einfach mal und poste ihn hier (in [ code ] [ / code ] Tags, bitte)!

Um herauszufinden was schief läuft wären auch Ausgaben des Programms ganz hilfreich - an wichtigen Stellen könntest Du Ausgaben über die serielle Schnittstelle einfügen um weiter einzugrenzen wo der Fehler auftritt.

MfG,
SlyD

SpiderX47
27.10.2007, 14:19
Hey SlyD!

Danke für die schnelle Antwort.
Bei nicht angeschlossenem Ultraschallsensor läuft das von uns verwendete Beispielprogramm "RP6Base_I2CMaster_01" mit dem PCF8574A einwandfrei.
Sind die Versorgungsspannung und Masse am SRF02 angeschlossen, läuft auch dann noch alles. Wenn man jetzt jedoch SDA und SCL (richtig) anschließt, läuft absolut gar nichts mehr. Sobald man sie wieder enfernt, funktionierts wieder.

Unser erste Vermutung war, dass es daran lag, dass wir keine Pullup-Widerstände eingelötet hatten. Wir haben daraufhin verschiedene Widerstandswerte im Bereich von 1,5k bis 4,7k getestet, diese führten jedoch auch nicht zur gewünschten Funktion.
Sind diese überhaupt nötig und wenn ja, welchen Wert sollten diese haben?

roboterheld
27.10.2007, 22:17
wert soll ab 4,7k bis 7k liegen. sind nötig!!!!!

cors
29.10.2007, 16:46
Moin,
danke für die Hilfe.
Spider und ich arbeiten gemeinsam an unseren RPs.
Wir haben jetzt diverse Pullupwiderstandswerte zwischen 4,7k und 7k getestet. Das bringt alles gar nix...

Es kann doch nicht sein, dass ein voll funktionsfähiges Programm, absolut versagt, blos weil an SCL und SDA noch ein weiteres peripherie-gerät hängt.
Wir haben mehr als 100 mal alle anschlüsse überprüft (auch mit durchgangsprüfern). Es ist absolut alles richtig angeschlossen.

Kann es eventuell sein, dass die Adresse 0x70h vom PCF sich automatisch ändert, wenn man ein weiteres Gerät anschließt? Sonst fällt mir nichts mehr ein...

Schöne Grüße

SlyD
29.10.2007, 17:55
Hallo ihr beiden,

postet doch mal bitte den Quellcode eures Programms!


Pullup Widerstände bringen natürlich nichts - auf dem RP6 Mainboard sind schon passende 4K7 Pullups vorhanden.


Folgendes könnte man noch probieren:
1. Den SRF02 mit +5V versorgen, aber die Busanschlüsse frei lassen. Dann mit einem Multimeter die Spannung an SCL/SDA bzw. RX/TX messen - könnte ja sein, dass der Modus vom SRF02 irgendwie falsch umgeschaltet wird und der im RS232 Modus läuft - würde das seltsame Verhalten zumindest erklären.
An den beiden Pins darf KEINE Spannung anliegen (gegen GND messen!).
Dann müsst ihr mal versuchen den Mode Pin doch zu beschalten (soll ja eigentlich für I2C Modus frei bleiben soweit ich das gelesen habe)


2. Nur den SRF02 an den Bus anschließen und den PCF davon trennen (sofern ihr einen Sockel für den PCF verwendet habt, ist das ja kein Problem. Ansonsten müsste man das fliegend verdrahten zum Testen).
Dann erstmal versuchen nur den SRF anzusteuern - gibt ja genug Beispielprogramme dafür hier im RN bzw. auch in den Beispielprogrammen vom RP6.
Danach die Adresse des SRF02 von der standard Adresse 0xE0 abändern und dann wieder den PCF zuschalten!


3. Adresse des PCF ändern - also an den Adresspins eine andere Kombination wählen. Dürfte zwar eigentlich nichts ändern, aber probiert es mal wenn die anderen beiden Dinge nichts bewirkt haben.


Hoffe das hilt euch!

MfG,
SlyD

cors
30.10.2007, 17:49
Moin Slyd,

hatte noch keine Zeit die Dinge zu probieren, aber mal vorab nochmal wegen dem Quellcode. Wie Spider schon sagte es handelt sich um das Beispielprogramm "RP6Base_I2CMaster_01". Macht also keinen großen Sinn das hier reinzuspammen, weil es sowieso jeder hat.

Ich melde mich wieder, wenn wir alles ausprobiert haben ;)

Schöne Grüße

Dirk
30.10.2007, 18:06
... es handelt sich um das Beispielprogramm "RP6Base_I2CMaster_01". Macht also keinen großen Sinn das hier reinzuspammen, weil es sowieso jeder hat.

Naja... witzig! Ihr wollt doch wohl den SRF02 zusätzlich zum PCF anschliessen. Das Prog steuert ja nur den PCF an. Da wird es doch wohl noch mehr geben, oder?
Und wenn ihr das Prog wirklich nur so, wie es ist, genommen habt, dürfte es nach korrektem Anschluß des Ultraschallmoduls keine Probleme geben. Dürfte also wohl ein Hardware-Problem sein.

Gruß Dirk

cors
31.10.2007, 09:16
Genau darum geht es...
Es ist alles richtig angeschlossen und wie schon beschrieben, läuft das programm genau dann nicht mehr, wenn man SCL und SDA am SRF02 anschließt. Sobald man die beiden wieder ablötet läuft das bsp-programm wieder (und ja - es wird dort nur der PCF angesteuert). Masse und VDD haben keinen negativen Effekt - sind also permanent auch am SRF02 angeschlossen und beeinflussen die Funktion des Programms nicht.

Es geht doch darum, dass der Ultraschallsensor zwar angeschlossen sein soll, aber obwohl er selbst dann nicht angesteuert wird, muss doch trotzdem der PCF immer noch ansteuerbar sein.

Gruß
cors

cors
05.11.2007, 14:32
Moin zusammen,
vielen Dank nochmal für die vielen Tipps.
Nach einigen Stunden "Herum-probiererei" und viel Frust und Schweiß. Haben wir den Ultraschallsensor ausgetauscht und nun läuft alles, mit den Standard-Adressen. Irgendwie hat der alte Sensor SCL und SDA gegeneinander kurzgeschlossen - oder so ähnlich.

Schade der kommt auf den Müll :D

Gruß
cors