PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Mega32 und I²C



nico_hann
26.05.2006, 15:02
Hallo,
ich möchte jetzt so langsam, nachdem ich mir ein mini-Mega32 Board gebastelt hab, was auch super läuft, auf den I²C Bus gehen.
Ich wollte gerne dann einen Temperatur-Fühler an den I²C anschliessen.
Ich dachte da so an denn DS1621. Der hat ja die Pinns SDA & SCL. Die müssten doch dann an die entsprechenden Pinns am Mega32 also PortC.0 & PortC.1? GND und VDD sind klar. A0-A2 sind dann für die Adressierung zuständig? Also muss ich den entweder auf 0V oder +5V legen mit Widerständen? Und wenn ich jetzt einen weiteren Temperatur fühler anschliessen möchte wie mache ich das dann? auch an PortC.0 & PortC.1 halt nur mit einer anderen Belegung der A0-A2 am Temperaturfühler? Also kann ich doch dann z.B beim ersten Fühler A0=0;A1=0;A2=0; beim zweiten dann A0=0;A1=0;A2=1; oder? Und wie läuft das dann wenn ich andere x-beliebige I²C's anschliessen möchte? Kann ich das dann auch so mit der Adressierung machen?
Und kann ich die SDA & SCL Ports am Mega32 auf z.B auf PortA.0 & PortA.1 legen, in BASCOM? Geght das mit Config SDA = PortA.0?
Ich weiss Fragen über Fragen. Aber ich hoffe dass ihr mir helfen könnt.
Und Danke jetzt schon einmal.


MfG
Nico

darwin.nuernberg
26.05.2006, 15:21
Also eigentlich ist das I2C einfach wenn man's mal kapiert hat.

Wichtig und erster Stolperstein ist erst mal das die Datenleitungen SCL und SDA mit jeweils einem 10k Widerstand als Pullup nach VCC gelegt werden. Sonst kannst Du suchen bis Du schwarz wirst.

Normalerweise sind die Adressleitungen auch mit einem 10k Pullup erst mal auf HI unnd werden dann z.B. mit einem Jumper oder DIP-Switch auf Masse geschaltet (der 10k WIderstand verhindert einen Kurzschluss der VCC nach Masse)

Die Adressierung welche man einstellt ist meist eine von zweien, die zweite ist für lesen oder Schreiben verantworltich.

Welche was ist leis bitte im Datenblatt nach.

Ich hab mal was mit dem PCF8574 gemacht,
ist ähnlich schau Dir die Anleitung einfach mal an.
https://www.roboternetz.de/phpBB2/zeigebeitrag.php?t=5862

Gehe erst mal ganz locker an die Sache ran,
Wenn Du nicht gerade VCC und GND Vertauscht, kannst Du nicht viel Falsch machen. Komplexere Bausteine sind natürlich mit Vorsicht zu behandeln (z.B. TMC222 Schrittmotortreiber).

Das Datenblatt sollte man auf jeden Fall zumindest überfliegen, wenn das schon zu verworren und mit speziellen Komandos beschrieben ist, sollte man etwas genauer lesen.



Es können mehrererererere I2C an die gleiche Leitung angeschaltet werden, wichtig ist nur dass jedes IC seine eigene, eindeutige Adresse hat.

nico_hann
26.05.2006, 15:46
Hi,
also so:
Sorry für das schöne Bild made in Paint. Aber Heute hats irgendwie meinen HDD Wechsel-Rahmen zerbröselt. HDD is noch OK aber den IDE->USB Konverter hats irgendwie nen bissl verflüssigt :-). UNd auf der HDD is mein SChlatplan-Proggi.


http://e-nicmar.de/grafik.jpg

MfG
Nico


--------------------------------------------------------
PS: Mal was zum grübeln (nicht zum Thema): http://e-nicmar.de/stoiber.mp3
Frage: Was will er uns sagen?

uwegw
26.05.2006, 16:14
genau andersrum! So wie du es gezeichnet hast, würdest du die beiden Leitungen nach VCC kurzschließen.

So ists richtig:


VCC
+
|
|
'---o---
| |
| |
.-. .-.
| | | |
| | | |
'-' '-'
.-------. | |
| | | --| .------.
| | | | | |
| |--------------------|------------------| |
| | | | |
| | --| | |
| | | | |
| |---------------------------------------| |
| | | |
| | | |
| | '------'
'-------'
(created by AACircuit v1.28.5 beta 02/06/05 www.tech-chat.de) <<praktisch für nen kleinen Schaltplan zwischendurch

nico_hann
26.05.2006, 19:33
Huch. Oki.
War wohl noch nen bissl geschockt wegen meiner externen HDD. So was hätte ich von einem knapp 40€ teuren externen HDD Gehäuse nicht erwartet....

Bernhard667
27.05.2006, 09:05
Hallo,

ja so sind die Pullups zu beschalten.
An SCL SDA kannst Du nun parallel weitere Slaves anschliesen.
Slave IC´s haben eine interne Basisadresse (steht im Datenblatt).
Wenn der Slave IC noch Adressleitungen hat, dann kannst Du Ihn noch auf der Basisadresse verschieben. Damit kannst Du mehrere IC von der gleichen Sorte an einen I2C Bus hängen. Diese A0, A1,.. brauchen keine Widerstände. Einfach hart auf Masse oder Vcc legen.
Andere IC´s, z.Bsp der PCF8583 haben eine andere Basisadresse. Damit solltest Du dann alle Adresskonflikte lösen können.
Reicht das immer noch nicht, kannst Du einen (oder mehrere) I2C Busse aufbauen. Nachdem der AVR aber nur einen Hardware I2C hat, mußt Du die in Software bedienen.
Ob das Bascom schon beinhaltet, weis ich nicht.
Peter Fleury hat dazu Bibliotheken (in C oder wars in Asm).

Bernhard

nico_hann
27.05.2006, 20:20
Hi,
also ich hab da jetzt mal ein Layout für erstellt. Ich hoffe es ist alles richtig, weil irgendwie steh ich heute etwas "neben" mir.....
Ich möchte das ganze dann nämlich auf eine Platine ätzen. Was mit meinem mega-mini-Board dann demnächst auch passieren soll.
Eigendlich wollt ich das ganz klassisch machen, schön mit WireWrap. Aber irgendwie find ich die Spitze für meine WW-Pistole nicht mehr..... :-(

http://e-nicmar.de/board.png


MfG & Danke
Nico

CowZ
27.05.2006, 22:09
Die Address-Leitungen hast du jetzt aber nicht beschaltet...

Und zu genau denen habe ich noch eine Verständnisfrage:
Ich habe jetzt einen 3-Pin Male-Header geplant, um das um Jumpern zu können. Links liegt +5V und rechts GND, in der Mitte der Address-Pin des ICs.

1.) In meiner Anordnung benötige ich dann doch keine 10k, oder?
2.) Deine Anordnung sieht nur einen 2-Pin Male-Header vor, oder? +5V liegen dann über 10k immer "an" und GND kann (ohne R) zugeschaltet werden, oder?

3.) Welche Variante ist vorzuziehen? (Bei deiner Variante fließen ja pro Pin 0,5mA, ist zwar wenig, aber immerhin..)

Gruß, CowZ

nico_hann
27.05.2006, 22:29
Hi,
also ich hoffe ich versteh dich richtig und meine antwort stimmt auch so, wenn nicht, bitte verbessern!!! Denn ich beschäftige mich noch nicht so lange mit I2C, genauer erst seit ca. 3-4 Tagen und da hab ich hat nur im Netz gesurft und ein bissl gelesen und zu verstehen versucht....
Also die A-Leitungen hab ich erstmal nich beschaltet weils mir vorläufig nur um die Grund-Schaltung ging. Die 10K liegen ja zwischen den Datenleitungen und +5V und müssen da, egal wie die A-Leitungen beschaltet sind bleiben.
Ich werde dann auch noch eine Jumper-Möglichkeit einbauen.
Hier mal ein Plan den ich im Netz gefunden habe. Da hast du auch ne Jumper-Technik für die A-Leitungen....

http://www.avrprojects.net/images/ds1621_thermo_sch.gif


MfG
Nico

CowZ
27.05.2006, 22:32
Ja, genauso wie auf diesem Plan ausm I-Net meinte ich meine Version (1.)

Die Address-Pins solltest du imho schon beschalten (notfalls einfach nach Masse legen), da der IC sonst womöglich eine unklare Adresse hat, da der IC eben nicht eindeutig weis, ob da jetzt Vcc oder GND anliegen soll.

Gruß, CowZ

nico_hann
27.05.2006, 22:37
Das ist mir klar. Ich hätte die schon nach Masse verbunden. hab die nur erstmal offen gelassen....ich war mir auch noch nicht so ganz sicher welches System ich zum einstellen der Adressen nehme...Jumper, DIP's oder so was in der Art

CowZ
28.05.2006, 10:15
Ok :)

trotzdem: Hat jemand Antworten auf meine 3 Fragen von oben?

linux_80
28.05.2006, 11:47
Hallo,
wollte nur losweden das die Pullups nur einmal am I2C vorkommen sollten, nicht pro Teilnehmer.
Nicht das mehrere solcher Module nach obigen Muster gebaut werden sollten.