PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : I2C



Dominik009
12.12.2009, 13:23
hallo
ich habe mal ne frage:
ich habe 2 cotroller die ich via i2c verbinden möchte.
nun habe ich ka wie ich das machen soll.
ich möchte das ein cotroller ein signal sendet und der andere controller darauf reagiert (einen port auf hig schalet) kan mir da wer nen bascom code geben pls.

stefan_Z
12.12.2009, 18:28
http://avrhelp.mcselec.com/ -> Index -> alle Artikel mit "I2C" im Namen...
Einer ist Master, der andere Slave...

Dominik009
12.12.2009, 18:43
das ist ja alles auf englisch.
gibt es de nicht wsa auf deutsch?
oder kan mir wer die codes posten?

stefan_Z
12.12.2009, 19:21
so ist das mit technischen Dokumentationen.. sie sind meist auf Englisch!
Zumindest die zu Bascom.

An sich machste nix anderes als I2Csend und I2Cread - und dann verarbeiten.

Dominik009
12.12.2009, 19:38
ja,
nur das veraarbeiten und empfnagen verstehe ich nicht.
gibt es ne gute doka auf german???

Jaecko
12.12.2009, 20:16
Wird dir auch nichts helfen, da die Befehle dafür trotzdem englisch sind. Hier im RN-Wissen sind doch auch Beispiele für I2C und Bascom.

Dominik009
12.12.2009, 20:24
das bacombefehle englisch sind weis ihc.
(bin ja nicht blöd).
es geht mir nur darum fas z.b. ein fertiger code auf deutsch BESCHRIEBEN wird,
also der befel ist dafür und der sendet das und das.... .

High Light
13.12.2009, 10:48
Hallo,

mit den selben Problemen kämpfe ich auch.
Aber ich habe bis jetzt auch keine Schritt für Schritterklärung
auf Deutsch gefunden, die jeder versteht.

Auch nicht hier im Forum :-(

Schade dass sich keiner die Mühe macht, so ein
"einfachs Programm" für uns zuschreiben.
Die jenigen die sich damit auskennen verweisen
immer aus Englische Erklärungen.^^

Hoffentlich liest dass hier jemand der sich begnadigt uns
zu helfen. Bitte!!!

Gruß High Light

Dominik009
13.12.2009, 11:05
jo,
ich habe mir vorgenommen wen ich das versttehe einen artikel für totale anfänger in rn-wissen zu stellen.
kan mir nicht jemand so nen einfachen code schreiben pls

021aet04
13.12.2009, 11:07
Ich finde auch, dass man nur die englischen Anleitungen/Datenblätter braucht. Einiges kann man sich mit dem "normalen Schulenglisch" zusammenreimen. Wenn man so wirklich nicht weiterkommt gibt es auch noch Onlineübersetzer (z.B. von Google) auch wenn das dann kein perfektes Englisch ist. Soweit es Englisch ist geht es noch, in der Firma in der ich arbeite sind die Pläne teilweiße auf dänisch mit dänischen Fachbegriffen, die man auch nicht mit Google übersetzten kann. Mit solchen Plänen Fehler suchen ist nicht ganz einfach. Teilweiße sind in den Plänen für das gleiche verschiedene Wörter.
Als Beispiel: Biextruder (Zweitextruder) => Biextruder
Hauptextruder => Sprojte

MfG Hannes

Bammel
13.12.2009, 11:16
hallo, ich habe es in griff bekommen. es gibt sehr schöne dokus auf deutsch! nur muss man dafür dann doch ein wenig geld bezahlen.

in dem buch von ulli sommer - roboter selbst bauen. gibt es ein wunderbar beschreibenes program! dieses buch ist im generrellen programmieren von roboter echt super! ich hbas 3mal durchgelesen.

anbei hänge ich mal aus gnade den code mit an. Falls dies vom urheber nciht gewünscht sein sollte bitte löschen!

PS.: aber um wirklich in der robotik weiter zu kommen, kommt man ums english nicht herrum. ich "kann" auch nur das schulenglisch aber im zusammenhang versteht man das auch. wnen man das wirklich verstehen will gehts!

Dominik009
13.12.2009, 13:40
erstmal danke für den code.
es ist nur so:
wen ich die beispiele auf deutsch (meie muttersprache) nicht verstehe wie soll das dam mit englisch gehen ;D.
der code sieht komplieziert aus, ich werfr ihn aber mal durchgehen.
Aber erstmal zum code von meinem master:
der sieht bisher so aus:


$regfile = "M32def.dat"
$crystal = 16000000
$baud = 9600

$lib "i2c_twi.lbx"

Config Twi = 400000

I2CStart !
TWCR = &B00000100 ' nur TWEN setzen
Const Pcf_write = ??????????????????? ' Slaveadresse

' Startausgabe
Print
Print "I2C-TWI Demo mit PCF 8574"
Print

Do
I2cstart
I2cwbyte Pcf_write
[I2cwbyte ????????????????????
I2cstop

Print Err ' Err = 0 -> kein Fehler !

Loop

End

an 2stellen wo ich die fragezeichenhingemacht habe weis ich nicht was da hinkommt.
wie ist im normalfall die adresse von meinem 2ten controller?
das prgramm oben kommt wen es fertig ist auf mein rncontro.
ich bitte um hilfe

Jaecko
13.12.2009, 13:54
Die Adresse vom Slave-Controller ist frei wählbar in 2er-Schritten von 2 bis 254. (0 sollte für General Call freigehalten werden).
Welche du dem Slave gibst, ist deine Entscheidung.

Wenns ein fertiger IC ist (in dem Fall wohl ein PCF 8574) steht dessen Slave-ID im Datenblatt.

Dominik009
13.12.2009, 16:54
ne ne,
es ist ein mega32.
das mit dem PCF 8574 ist ein fehler, ich sehe es gerade
ich mache schnnell nen neue code und poste ihn euch.
die slave adresse kan ich dan also an meinem 2ten controler einstellen gut gut.

also hier der neue code:


$regfile = "M32def.dat"
$crystal = 16000000
$baud = 9600

$lib "i2c_twi.lbx"

Config Twi = 400000

I2CStart !
TWCR = &B00000100 ' nur TWEN setzen
Const Mega_write = 2 ' Slaveadresse

' Startausgabe
Print
Print "I2C-Test mit Mega32"
Print

Do
I2cstart
I2cwbyte Mega_write
[I2cwbyte ????????????????????
I2cstop

Print Err ' Err = 0 -> kein Fehler !

Loop

End

kan ich im rot markierten was beleiebiges (z.b.100) einsetzen?
das müsste doch normal das sein wsa gesendet wird?

gruß
Dominik

Dominik009
15.12.2009, 16:25
kan mir den keiner helfen :(

guenter1604
15.12.2009, 17:18
Hallo Dominik,

es ist nicht so, daß dir keiner helfen will. Aber wenn du nach dem Sinn des Lebens fragst, wirst du als Antwort immer nur 42 erhalten ;-)
Soll heisen: I2C ist komplex. Es gibt Master, Slaves und Multimaster. Alle können senden und empfangen. Je nach Kombination ergeben sich unterschiedliche Codes.
Starte mal hier:

http://www.rn-wissen.de/index.php/TWI_Praxis

Günter

Jaecko
15.12.2009, 17:49
Bei den roten ? kommt das rein, was gesendet werden soll. Aber was weisst halt nur du bzw. hängt von deinem Protokoll ab, was der Slave haben will.

Yossarian
15.12.2009, 20:09
Hallo

(meie muttersprache)

Den Eindruck habe ich nicht...
Mit freundlichen Grüßen
Benno

Dominik009
15.12.2009, 20:44
@ Yossarin : Echt tolles Kommentar hat mir sehr weitergeholfen
die rechtschreibfehler liegen an meiner neuen tastatur,
so ein billigteil
@ Jaecko: Danke für die info.
als kann ich da z.b. 100 reitippen und beim slave im code einstelle das er hundert haben will?

gruß
Dominik

guenter1604
15.12.2009, 21:21
Hallo Dominik,

ein bisschen mehr Sorgfalt beim Tippen macht es einfacher deine Fragen zu verstehen.

jawendu da100reitippst komm das so bei slavean

Also der Master bereitet mit I2CSTART den Bus darauf vor, daß er jetzt was senden will. Dann sendet er die Adresse des Slaves, den er ansprechen will: I2cwbyte Mega_write. Jetzt kann man solange Daten an den Slave schicken, bis alles gesendet ist, oder der Slave die Schnauze voll hat.

Günter

Jaecko
15.12.2009, 22:13
Wichtig halt: Der Slave muss jedes Byte mit ACK quittieren, ausser er hat (Zitat) "Die Schnauze voll", dann ein NAK senden.

Dominik009
16.12.2009, 07:24
ok,
also geht der code von mir oben für meien master wen ich bei den fragezeichen 100 einsätze.
jetzt muss ich mir über einen code für den slave gedanken machen.
gruß
Dominik

PicNick
16.12.2009, 08:36
Eigentlich OT:
Spekulation über die Muttersprache haben in den letzen Jahren einen üblen Geruch bekommen.
Sowas sollten wir bleiben lassen.

Ausserdem: Die Tastatur-Explosionen, die in unserem Forum so zu finden sind, zeigen, dass wir da alle irgendwie im Glashaus sitzen. Also: Steine schön liegen lassen.

guenter1604
16.12.2009, 08:46
Hallo Robert,

ich bitte um Entschuldigung, daß ich ein bisschen grob war.
Es ist aber unbestritten, daß der Eine oder Andere wegklickt und sich nicht die Mühe macht eine Frage aus lauter Rechtschreibfehlern zu entziffern und zu antworten, wenn der Fragesteller sich auch nicht die Mühe macht wenigstens ein paar Wörter groß zu schreiben um die Lesbarkeit zu erhöhen.

Günter

PicNick
16.12.2009, 08:55
Hi Günter, allein die Tatsache, dass du dich angesprochen fühlst, zeigt, dass ich dir bitter Unrecht getan habe.
Die schweren Fälle wackeln da mit keiner Borste

Tscha, die Kunst des Schreibens hat in den letzten Jahre etwas gelitten.

Dominik009
16.12.2009, 10:36
ganz ruigh.
In den Foren wo ich normal bin ist Groß und kleinschreibung kein thema sry

Dominik009
16.12.2009, 10:45
hallo
ich habe folgenden code gefunden:


TWI-slave test
' zum simulieren eines PCF8574

$regfile = "m32def.dat" ' the used chip
$crystal = 16000000 ' frequency used
' $baud = 9600 ' keine baud rate angeben !

Config Portd = Output ' kompletter PortD als Ausgang

Dim Twi_control As Byte ' Controlregister lokale kopie
Dim Twi_status As Byte
Dim Twi_data As Byte

Dim Neuesbyte As Byte ' Bytemerker

Declare Sub Twi_init_slave

Twi_data = 0
Call Twi_init_slave ' TWI aktivieren

' alle LEDs ein
Portd = 0

' Hauptschleife
Do
' hier könnte ihr Code stehen


' Merker zurücksetzen
Neuesbyte = 0

' schauen ob TWINT gesetzt ist
Twi_control = Twcr And &H80 ' Bit7 von Controlregister

If Twi_control = &H80 Then
Twi_status = Twsr And &HF8 ' Status

' wurde ein Byte geschickt
If Twi_status = &H80 Or Twi_status = &H88 Then
Twi_data = Twdr ' neue Daten merken
Neuesbyte = 1 ' merken das ein neues Byte da ist
End If

' TWINT muss immer gelöscht werden, damit es auf dem Bus weiter geht
Twcr = &B11000100 ' TWINT löschen, erzeugt ACK
End If

' wenn ein neues Byte gekommen ist, dieses an PortD ausgeben
If Neuesbyte <> 0 Then
Portd = Twi_data ' Daten auf PortD ausgeben
End If

Loop

End


' Unterprogramme


' TWI als slave aktivieren
Sub Twi_init_slave
Twsr = 0 ' status und Prescaler auf 0
Twdr = &HFF ' default
Twar = 2 ' Slaveadresse setzen
Twcr = &B01000100 ' TWI aktivieren, ACK einschalten

End Sub

kan ich den verwenden?
kann mir wer sagen wie ich den konfigurieren muss?

guenter1604
16.12.2009, 10:55
Dominik, jetzt hast du mich neugierig gemacht:


In den Foren wo ich normal bin ist Groß und kleinschreibung kein thema sry

Aber mal wieder zum Thema:

In meinem voll krassem Projekt habe ich einen I2C-Slave programmiert, der auf Anforderung des Masters Bytes verschickt:

http://www.gerold-online.de/cms/wheelie/mein-wheelie/gearsensoren.html

Günter

oberallgeier
16.12.2009, 11:05
... Tscha, die Kunst des Schreibens hat in den letzten Jahre etwas gelitten ...Das sieht man ja immer wieder, leider.

Was mich total wundert: wer in der üblichen Umgangssprache im Forum keinen Satz mit weniger als 2, 3, 4 Rechtschreibfehlern hinkriegt und dauernd irgendwie verballhornte Sprachfetzen hinwirft - wie kann der dann einen fehlerfreien Code schreiben? Ok, Fehler können passieren, da sagt ja keiner was: mal daneben getippt, geträumt, von den Tasten abgerutscht, nicht richtig firm im Blindschreiben und so - da jammert niemand.

Ich weiß nicht, ob die Leute, die so - sagen wir ruhig - so schlampig schreiben, auch so unartikuliert sprechen. Glaub ich nicht - denn da steht man ja nicht als Anonymus den anderen gegenüber. Ich glaube auch nicht wirklich, dass die Kunst des Schreibens gelitten hat - eher manchmal das Benehmen andern gegenüber. Und wer gern zeigt, dass er so ka von schrb hat, sry, knn doch pls in den forn blbn - wo das akzeptiert wird. Dort ist er bestimmt besser aufgehoben.

Dominik009
16.12.2009, 11:14
ich werde mir mal den code von günter ansehen.
oberallgeier,
bitte zurück zum thema ok?

PicNick
16.12.2009, 11:24
Der code sollte eigentlich verwendbar sein

So würde ich es probieren, zusammengefasst auf das wesentliche:


$regfile = "m32def.dat" ' the used chip
$crystal = 16000000 ' frequency used

Config Portd = Output ' kompletter PortD als Ausgang

Dim Twi_control As Byte ' Controlregister lokale kopie
Dim Twi_status As Byte

Twsr = 0 ' status und Prescaler auf 0
Twar = &H70 ' z.B. Slaveadresse PCF
Twcr = &B01000100 ' TWI aktivieren, ACK einschalten

Portd = 0 ' alle LEDs auf grundstellung

Do
Twi_control = Twcr And &H80
If Twi_control = &H80 Then
Twi_status = Twsr And &HF8
If Twi_status = &H80 Or Twi_status = &H88 Then
Portd = Twdr ' Daten an das Port ausgeben
End If
Twcr = &B11000100 ' TWINT löschen, erzeugt ACK
End If
Loop

End


Anm: Bei der Slave Adresse ist nur wichtig, dass der Master die gleiche verwendet (logo)

---- OR Twi_status = &H88 kann eigentlich entfallen, da du ja immer ACK sendest.

Versuchs mal

guenter1604
16.12.2009, 11:24
Dominik, folgender Vorschlag:

Du liest dir sorgfältig die Artikel durch, die im Artikelbereich zum Thema I2C und TWI stehen. Bei konkreten Fragen zu bestimmten Textpassagen kriegst du konkrete Antworten. Es ist UNBEDINGT erforderlich, daß du den Ablauf des I2C Protokolls kennst und kapierst, sonst helfen dir auch 100 Codeschnipsel nicht weiter.
Danach erarbeiten wir hier Schritt für Schritt die Kommunikation.
Wenn der Groschen gefallen ist, wirst du feststellen, daß du keine Codeschnipsel mehr brauchst. ;-)

Günter

Dominik009
16.12.2009, 12:24
ok,ich habe halt bisehr immer einen fertigen code genommen und daran gearbeitet und rumprobiert.
ich werdem mir die artikel nun mal durchlesen.

Dominik009
16.12.2009, 12:31
ich habe mal fragen:
im artikel I2C steht folgender code:
I2C Start
I2C Send Write-Address
I2C Send Argument
I2C Start oder Repeated Start
I2C Send Read-Address
I2C Read Data
....
I2C Stopp oder Release Bus

das müsste dan doch wen ich nun verstehe so heißen wen ich was senden will:

I2C start
I2C 2 (adresse vom slave)
I2C Send 128 (das was gesendet werden soll
I2C stop

aber weiter unten steht das so:
i2c_init
i2c_start
i2c_sendebyte(slaveid)
i2c_sendebyte(wert1)
i2c_sendebyte(wert2)
i2c_stop

das müsste dan doch so heißen:
i2c_init
i2c_start
i2c_sendebyte 2
i2c_sendebyte 128
i2c_stop

was ist nun richtig??

guenter1604
16.12.2009, 12:57
Beides! Das eine sind Bascom Highlevelbefehle (in Bascom schon eingebaut), das andere selbstgestrickte Funktionen.
I2CSend = Befehl von Bascom
i2c_sendebyte(slaveid) = Funktionsaufruf einer selbst gebauten Funktion!

Die Funktion oder Sub i2c_sendebyte() müsste irgendwo im Code zu finden sein.

Beachte auch die Unterschiede zwischen Hardware- und Software-I2C!

Günter

Dominik009
16.12.2009, 13:56
was für unterschiede wo weren die erläutert??
also ist das so korrekt:
I2C start
I2C 2 (adresse vom slave)
I2C Send 128 (das was gesendet werden soll
I2C stop

guenter1604
16.12.2009, 14:45
was für unterschiede wo weren die erläutert??
http://www.rn-wissen.de/index.php/Bascom_I2C_Master

also ist das so korrekt:
I2C start
Ja, hier startet der I2C-Master die Kommunikation

I2C 2 (adresse vom slave)
Fast, I2Csend 2!
Hier schickt er die Meldung in den Bus, welcher Slave daß jetzt gefälligst zu antworten hat. Bei der Vergabe von Slaveadressen das folgende beachten:
http://www.rn-wissen.de/index.php/I2C#Reservierte_Adressen

I2C Send 128 (das was gesendet werden soll
I2C stop

und schon hat der I2C-Master ein Byte verschickt.

Günter[/url]

Bammel
16.12.2009, 15:00
so anbei. den code den du "gefunden" hast habe ich dir hier bereit gestellt. aber passt schon!!!

passt zu dem was mir etliche thread vermitteln "kein bock etwas selbst zu erarbeiten"



zu dem tipp problem ich kenn das zu gut man will zwar antworten aber das dann auch möglichst schnell abbacken. so passiert es mir sehr oft. ich tippe und tippe, das dann auchnoch zu schnell, und dann ist der text meist unlesbar. meistens kontrollier ich dann noch gegen. aber auf groß und kleinschreibung achte ich erlich gesagt auch kaum bis garnicht. bin ich ganz erlich zu bequem für und bin in rechtschreibung auch nicht der pro. ist eher vieles außwendig gelernt.

Dominik009
16.12.2009, 15:03
ah ok thx.
ich möchte es nun per software I2C machen.
hier mal ein code:

$regfile = "M32def.dat"
$crystal = 16000000
$baud = 9600

Config Scl = Portb.0 (Port für Scl)
Config Sda = Portb.1 (Port für Sda)

' Config I2cdelay = 10
I2cinit

Do
wait 2
I2C start
I2C Send 2 (adresse vom slave)
I2C Send 10 (das was gesendet werden soll)
I2C stop

wait 5

I2C start
I2C Send 2 (adresse vom slave)
I2C Send 20 (das was gesendet werden soll)
I2C stop

Loop

End


ist der code korrect?
das rot markierte habe ich irgenwo gelesen.
kan man das weglassen?
wen nein, wofür ist es gedacht?
würde mich über weiter hilfe tips und infos freuen

gruß
Dominik

P.S.:
Mist ich habe schon wieder nicht auf meine Groß und Kleinschreibung geachtet #-o
Sorry [-o<

guenter1604
16.12.2009, 15:33
So Dominik,

jetzt zum nächsten Schritt:

Config hört sich doch schwer nach Bascom-Befehl an. Also schauen wir mal nach:
http://avrhelp.mcselec.com/config_i2cdelay.htm

Tatsächlich!

By default a value of 5 is used. This will give a 200 kHZ clock.

When you specify 10, 10 uS will be used resulting in a 100 KHz clock.
Wie würdest du den Satz übersetzen?

Dann weiter mit I2Cinit:

http://avrhelp.mcselec.com/i2cinit.htm

Was folgerst du aus den Anmerkungen zu dem Befehl?

Du siehst, anhand der Bascomhilfe kannst du die Fragen selbst beantworten. Besser noch, du kannst dich überall darauf berufen! Wenn also jemand mal was anderes behauptet kannst du ihn mit einem Zitat aus der Bascomhilfe in die Knie zwingen. Das ist doch cool, oder?

Genauso siehts bei der Hardware mit den Atmel-Datasheet des jeweiligen ATMegas aus. Was da steht ist Gesetz! Wer also der voll konkrete Checker sein will, guckt ins Datasheet!

Gruß Günter

Dominik009
16.12.2009, 15:48
also,
aus der bascom hilfe lese ich das man mit dem befehl die pins (scl und sda) zurücksetzen kann.
also unnötig da sie schon beim starzten richtig sind,
oder?
so nun zum config.....
damit wird der takt festgelegt.
er ist standartmässif auf 200KHZ also 5.
ich nehme an man könnte auch diesen befehl weglassen,
oder?

Dominik009
16.12.2009, 15:53
hier mal der neue code:

$regfile = "M32def.dat"
$crystal = 16000000
$baud = 9600

Config Scl = Portb.0 (Port für Scl)
Config Sda = Portb.1 (Port für Sda)


Do
wait 2
I2C start
I2C Send 2 (adresse vom slave)
I2C Send 10 (das was gesendet werden soll)
I2C stop
Print Err
wait 5

I2C start
I2C Send 2 (adresse vom slave)
I2C Send 20 (das was gesendet werden soll)
I2C stop
Print Err
Loop

End

guenter1604
16.12.2009, 17:22
Hallo Dominik,

was macht Print Err ?

Günter

Dominik009
16.12.2009, 17:47
Hi Günter
ich nehme also mal an das meine deutungen aus dem englisch oben richtig waren.
Mit Print ERR kann nach jedem gesendeten Byte abgefragt werden, ob es mit ACK quittiert wurde (=0), oder nicht (=1).
Das steht genau hier:
http://www.rn-wissen.de/index.php/Bascom_I2C_Master

Gruß
Dominik

guenter1604
16.12.2009, 18:09
Hallo Dominik,

jetzt noch ein Tipp:

Nimm jetzt erstmal ein I2C-IC als Slave und steuere es mit deinem neuen Code an. Danach kannst du dir sicher sein, daß dein Mastercode auch richtig läuft. Danach kannst du dich auf den Slave stürzen.

http://www.rn-wissen.de/index.php/I2C_Chip-%C3%9Cbersicht

Günter

Dominik009
16.12.2009, 18:13
Hallo
Ich brauche aber einen Code um ihn auf den Slave zu spilenen.

Kanst du mir da einen geben?

Dominik

guenter1604
16.12.2009, 18:58
Die ICs sind alles fertige I2C-Sklaven, die nur noch auf Anweisungen warten. Welche Befehle sie erwarten, findest du, wie solls auch anders sein, im Datasheet des ICs.
Hier wird zum Beispiel ein PCA8574 angesteuert:

http://www.rn-wissen.de/index.php/Bascom_I2C_Master

Du solltest unbedingt erst einen dieser fertigen Sklaven einsetzen, den du immer als Referenz nehmen kannst um den Master zu testen.

Ich meine zu wissen, daß es da zahlreiche Erweiterungsplatinen für die Roboternetz-Platine gibt...

Günter

Dominik009
16.12.2009, 19:25
oh,
ich wollte eigentlich nen 2ten mega als slave nehmen.
solche ics habe ich nämlich leider nicht da.
Geht das auch oder muss ich so ein ic bestellen?

guenter1604
16.12.2009, 21:07
Folgendes Problem,

wir stricken einen Slave zusammen und schalten ein....
Es tut nicht :-(
Warum tuts nicht?
Liegts am Master oder am Slave?

Aber du kannst es ja einmal versuchen.
Wir haben einen Master der sendet. Was brauchen wir als Gegenstück?

http://www.rn-wissen.de/index.php/TWI_Praxis

Günter

Jaecko
17.12.2009, 12:14
Es tut nicht :-(
Warum tuts nicht?
Liegts am Master oder am Slave?


Hier gibts noch ne schöne Gemeinheit:
Es kann die Hardware dazwischen auch sein.
Z.B. werden (zumindest bei mir) immer wieder gern die Pullups vergessen...

guenter1604
17.12.2009, 12:30
Hallo Jaecko,

deswegen ist es schön eine kleine I2C Zusatzplatine zu haben, auf der außer den Pullups noch ein paar LEDs drauf sind. So hat man immer einen kleinen I2C-Tester zur Hand ;-)

Mir gehts da wie dir, auf Anhieb gehts nie. Auch wenns nur wieder mal vergessene Fusebits sind ;-)

Günter

Dominik009
17.12.2009, 14:37
braucht man auch pullubs?
ich werde mir dan mal ne i2c platine löten,
nur wie.
naja irgenein ic suchen und ein paar 5mm leds draufknallen und dan
habe fertig ;D

Gruß
Dominik

Bammel
17.12.2009, 15:01
die pullup's sind dringend erforderlich ansonsten tut sich aus dem bus nichts! habe ich gestern erst gehabt das ich die dinger vergessen haben dabei hab ich dann eine stunde dran rumgefummelt bis mir die erleuchtung kam.

als test-slave-ic könnte ich dir den PCF8574 empfehlen ist eine I2C-porterweiterung

guenter1604
17.12.2009, 15:04
Hallo Dominik,

welch ein herber Rückschlag.

Allein die Eingabe des Stichwortes PCA8574 in das Suchenfeld im Artikelbereich führt zu einem Artikel über eine Relaiskarte, die nicht nur einen Schaltplan mit allem pipapo enthält, sondern auch noch die Ansteuersoftware.
http://www.rn-wissen.de/index.php/RN-Relais
Also daraus solltest du jetzt was zimmern können.

Falls du doch gleich den Slave bauen willst, nochmal die Frage: was für einen brauchen wir?

Günter

High Light
17.12.2009, 19:17
Kurze Zwischenfrage, diese Pullup's muss ich doch über die
Fusebits setzen oder?
Oder gibt es dafür auch ne Quellcodezeile?
Hat dass dann Auswirkungen auf die anderen Ports?

Und meine letzte Frage, brauche ich dies bei Software und Hardware-I2C?

Gruß High Light

Bammel
17.12.2009, 20:15
dei pullups werden hardware seitig eingebaut! egal ob soft oder hard I2C

einfach nen 2,2k widerstand jeweils zwischen bus leitung und vcc

Dominik009
17.12.2009, 20:45
hallo
das ich baue mir jetzt ein i2c board.
die sachen bestellei ch bei reichelt.
weis wer ob die ferien haben?
gruß
Dominik

guenter1604
17.12.2009, 21:03
Hallo Dominik,

mach langsam mit dem bestellen, erstmal überlegen was wir brauchen...

Was hast du für ein Board im Einsatz?

Dominik009
18.12.2009, 12:51
also ich habe momentan eine rncontrol.
Sonst halt
-isp dougle
-rs232 kabel
-steckplatine
-Ein paar AVRs
- sonstiger schnickschnack

ich will das board auf lochraster aufbeuen und mache mir einnen plan.
Befor ich etwas bestelle melde ich mich nochmal.

guenter1604
18.12.2009, 14:13
RN-Control hört sich gut an!
Im Artikelbereich habe ich ein Foto gefunden. Wenn ich das richtig interprätiere hat das Ding eine 10pol. Wanne mit +5V, Masse SDA und SCL.
Auch sind die Pullups drauf (R13 und R14).
Also brauchen wir die passenden Stecker, ein bisschen Flachbandleitung dazu und eine Lochrasterplatine. Da die Versorgung dann vom RN-Control kommt, brauchen wir nichts weiter als nen 100nF zwischen den Versorgungs-Pins am PCA8574. Jetzt noch ein paar hübsche LEDs mit Vorwiderständen.
Jetzt wieder 2 Fragen:
-Kann man die LEDs über die Vorwiderstände direkt an den PCA8574 hängen?
-Welchen Wert müssen die Widerstände haben?

Günter

Jaecko
18.12.2009, 15:17
Nach Datenblatt des ICs würd ich einfach Low-Current-LEDs + 2,5k-Widerstand ("einfache" Berechnung) verwenden. Bei 8 LEDs sind das dann grob 16mA, packt der leicht.

Dominik009
18.12.2009, 17:15
Hallo
Jo die RN-Control ist super.
da ist ein 10 Polliger Wannenstecker wo neben SDA SCL auch Batteriespannung drübergehen.
Da ich als Batteriespannung 12V verwendde dürfte das auch passen.
ich habe mir überlegt ein board mit dem PCF8574P und dem UDN2981AN zu machen.
Die ersten enwürfe sind fertig.
Ich poste sie Euch bald.

Dominik

Dominik009
18.12.2009, 17:31
Hier ist ein Bild von meinem Aufbau.

guenter1604
18.12.2009, 18:19
Hallo Dominik,

so wie Jaecko es gemacht hat läufts:
Erstmal ins Datenblatt des ICs schauen. Da findest du die maximalen Ausgangsströme, den gesamten Maximalstrom des IC und DIE MAXIMALE BETRIEBSSPANNUNG von 6V!!!
Selbst beim Vorwiderstand für die LEDs. Schau dir bei Reichelt das Datenblatt der LEDs an, die du bestellen willst. Dort stehen Ströme und Spannungen.
Du siehst, auch wenn ich so schlau schreibe, es ist meistens nur ein rauslesen von Werten aus dem Datenblatt. Manchmal gibts beim IC-Hersteller auch sogenannte Applicationnotes, die weitergehende Infos enthalten. Manchmal komplette Außenbeschaltungen für das IC.
Welchen Zweck haben die 3 3er-Steckkontakte links auf deiner Lochrasterplatine?

Günter

Dominik009
18.12.2009, 18:29
Hallo
Also Mit der Platine oben möchte ich realis ansteuern.
Die kontakte links unten sollen für jumper sein.
mit ihnen ändert man die slave adresse.
als vorlage habe ich mir das rn-relais board genommen,
was aber nichtmehr erhätlich ist.
Über den 3 3er Kontakten ist die I2C Buchse.
Darüber sind noch kontakte für 2 weiter jumper mit denen man die spannungsquelle wählen kann.
(5V/Bat-Spüannung aus I2C/Externe spannung)
oben ist noch ein stabi mit 2 kondensatoren.
Und dan die beiden ICS.
Du sagtest das eine kann nur 6V sicher?
ich werde nun mal im datenplatt schauen.
Habe nämlich in erinnerung das es 7V sind.

Dominik

Dominik009
18.12.2009, 18:47
Hallo
Habe mich vertan.
Der Stai liefert doch nur 6Volt.
Damit werde ich alles ansteuern.
Mache jetzt mal bei meinem schaltplan weiter.

guenter1604
18.12.2009, 19:18
Hallo Dominik,

6V ist absolute Oberkante bei dem IC. Mehr wie 5V würde ich ihm nicht zumuten. Für erste Tests würde die Versorgung deines RN-Control reichen. Ebenso 2-3 LEDs am Ausgang und natürlich die Jumper für die Slaveadresse. Das macht deine Platine übersichtlicher. Du kannst sie später ja noch erweitern, wenns mal läuft.

Günter

Dominik009
18.12.2009, 20:08
hallo
ich werde mal sehen.
also meinst du ehr 5V?
gut.
Ich werde mal sehen.
Ich habe momentan für die schaltung sehr viele teile da.
ein IC und mehere relais.
naja ich schaue mal.

Dominik

guenter1604
18.12.2009, 20:17
also meinst du ehr 5V?

Ich meine garnix. Aber schau mal in das Datasheet des ICs:
http://www.nxp.com/documents/data_sheet/PCF8574.pdf

Da steht auf Seite 14:

Limiting Values 7V
also ab 7V stirbt das Ding

DC Characteristics 6V
also 6V ist die Obergrenze des Betriebsbereichs.

Günter

Dominik009
18.12.2009, 20:46
ja ok.
ich weis das datenblatt.
ich werde ihn dan mit 5V betreiben.
gruß
Dominik

Jaecko
18.12.2009, 21:16
Würd schon deshalb bei 5V bleiben, damit alle anderen Geräte am I2C-Bus überleben. Atmels "mögen" z.B. nur max. 5,5V. Bei >6V wird die Lebensdauer doch merklich sinken.

Dominik009
18.12.2009, 21:39
jo,
ich brauche halt nur zusätzlich 5V da ich relais schalten will die 6Volt brauchen.
Die 5 für das IC nehme ich dan auch vom i2c

Dominik009
19.12.2009, 12:19
Hallo.
Ich habe noch eine iddde.
Eine Diode nimmt doch 0,7V weg.
Wen ich dan 2 hintereinanderschalte lägen am ic nur 4,6V an.
Laut DATENBLATT brauucht der min 2,5V und max 6V also liege ich mit 4,6 eigentlich gut.
ich idiot habe eben den schaltplan gelöscht.
werde nen neuen machen

Dominik

Dominik009
19.12.2009, 13:07
Hallo
Hm, warum hat er das den autozensiert?
habe mich doch nur selbst beschimpft #-o
Also ich habe hier mal das neue platinenlayout angehängt.

Gruß
Dominik

P.S.: ich werde die schaltung so erst zum testen verwenden.
wen alles läuft werde ich ein weiteres ic einsetzen und verschieden relais damit schalten.
Zum test werde ich dan am ic die passenden leitungen abgreifen und sie auf eine steckplatine führen und da dan Leds mit wiederständen draufmachen.
Die buchsen kan ich nämlich drauflassen und LEDs mit Wiederstand müsste ich auslöten.

Dominik009
19.12.2009, 16:49
kan nicht mal einer von euch drübergucken???
gruß
Dominik

Dominik009
20.12.2009, 15:34
da mein layout ja keiner überpfrüft hänge ich mal einen schaltplan an.
Vieleicht ist es euch so lieber.

repi64
24.12.2009, 13:00
Was soll das für ein IC sein, welches demnächst stirbt? PCF8574?
Wass sollen die beiden Dioden in sperrrichtung an dem Massepin?
Die IO Pinns liegen immer noch an 6V.
Wenn Dioden dann an +Ub und diese reduzierte Spannung auch für deine IOs verwenden.
Ich würde dir eher direkt zu einem 7805 raten.
Deine 6V Relais (wo sind diese im Plan???) werden auch bei 5V anziehen oder diese an die Spg. vor dem 7805 hängen.

Dominik009
24.12.2009, 13:20
hallo
also die relais kommen noch.
ich habe erstmal am ic ist das PCF8574.
wen die realais auch bei 5V schalten nehme ich einen 5V stabi und lasse die dioden weg.
Danke für dein kommentar.
Mir fällt auf das ich am i2c gnd vergessen habe.
ändere ich noch.
ich melde mich nach den weinachtstagen weider.
habe momentan viel stres und kaum zeit für meine avrs.

gruß
Dominik