Forum: Mikrocontroller und Digitale Elektronik I2C, Kennt sich hier jemand aus, bitte?


von Stefan R. (Firma: HTL-Donaustadt) (stefanhtl)


Angehängte Dateien:

Lesenswert?

Erstmal wünsche ich euch einen allen einen schönen guten morgen.

Ich gehe auf die HTL Donaustadt im 22. Bezirk und besuche gerade den 
letzten Jahrgang, und habe ein paar Schwierigkeiten in den technischen 
Fächern und leider auch bei unserem Jahresprojekt, was ich noch mit zwei 
anderen Schülern mache. Es handelt sich eig. um eine Uhr, die eig. ein 
Countdown ist.

Naja kommen wir mal zur Sache,

aufjedenfall meine Aufgabe ist es:

Eine RTC-Schaltung zu bauen, die auch schon fertig ist, habe da eine 
schöne Schaltung aus dem Datenblatt gefunden und sie gebaut, war auch 
nicht so leicht da ich leider einen SMD- RTC habe, den ISL 12029, aber 
mein Problem liegt jetzt darin das mit einem Evaluationboard über I2C zu 
verbinden, habe mich schon durch mehrere Seiten durchgelesen, also ich 
verstehe einmal was es ist, und worum es geht, nur fehlt mir ein 
Programm zur Initialisierung, der Lehrer meinte zu mir ich soll 
Beispielprogramme aus dem Internet finden, die ich leider nicht finde.

Könnte mir jemand bitte helfen, oder mir paar Tipps geben, denn ich 
hänge gerade sehr an diesem Punkt leider.

(Ich habe auch die Schaltung einmal gezeichnet und auch im Anhang dazu 
gegeben, die ich gebaut habe, die mit den Widerständen stimmt).


Lg Stefan und danke das ihr gelesen habt.

von chick (Gast)


Lesenswert?

Such beim Hersteller des verwendeten Prozessors nach Beispielprogrammen. 
Da gibts normal immer alles, I2C, UART, A/D und was die Chips noch so 
alles können.

Hier gibts sicher auch Lösungen dafür, aber selbstständiges Denken 
Deinerseits wäre wohl Deiner Ausbildung eher angemessen.

von mex (Gast)


Lesenswert?

i2c master oder slave suchen bei google oder hier im forum, da findest 
du einige c programme, ti hat auch beispiele, die anderen HErsteller 
denke ich auch.

Die eigentliche Portierung auf deine Anwendung kostet dann Zeit und ist 
je nach deinen Erfahrungen mehr oder weniger einfach.

Such dir erstmal die Codes zusammen und versuchs damit, wenn du dann 
konkrete Fragen hast hilft man dir sicher gerne.
Viele GRüße.

von Stefan R. (Firma: HTL-Donaustadt) (stefanhtl)


Lesenswert?

Das heißt, z.b auf dem Datenblatt von dem RTC meint ihr?

Lg Stefan

von Jörg S. (joerg-s)


Lesenswert?

Erst mal brauchst du auf deinem Master (Mikrocontroller?) eine I2C 
Schnittstelle.
Wenn du den am laufen hast, kann man sich die RTC anschauen und sehen 
was man da alles rein schreiben und lesen muss.

von Stefan (Gast)


Lesenswert?


von Stefan R. (Firma: HTL-Donaustadt) (stefanhtl)


Lesenswert?

Ich muss es ja mit einem Evaluationboard verbinden, mit so einem

http://www.pollin.de/shop/dt/MTY5OTgxOTk-/Bausaetze_Module/Bausaetze/ATMEL_Evaluations_Board_Version_2_0_1_Bausatz.html

und da befinden sich die i2C Anschlüße, und ich soll jetzt ein Programm 
finden(schreiben) bei dem genau die Pins angesprochen werden, das ich es 
gleich dort verbinden kann.

Nur leider suche ich vergeblich.

Lg

von Stefan R. (Firma: HTL-Donaustadt) (stefanhtl)


Lesenswert?

Der Lehrer meint auf der Schaltung die ich habe, muss ich eig nichts 
mehr verändern nur noch das Initialisierungsprogramm suchen und dann mit 
den richtigen Pins verbinden.

Lg Stefan

von XXX (Gast)


Lesenswert?

Hallo

Wo schließt du denn diese Schaltung an? Da fehlt doch noch der
entscheidende Teil mit I2C-Anschluß, über das du den RTC auslesen
kannst. Ganz zu schweigen von einer Anzeigeeinrichtung, sonst
macht das ganze doch keinen Sinn.

Gruß
Joachim

von Karl H. (kbuchegg)


Lesenswert?

Stefan R. schrieb:

> und da befinden sich die i2C Anschlüße, und ich soll jetzt ein Programm
> finden(schreiben) bei dem genau die Pins angesprochen werden, das ich es
> gleich dort verbinden kann.
>
> Nur leider suche ich vergeblich.

Dir wurden doch jetzt schon ein paar Links genannt, die auf fertige 
Software-bibliotheken verweisen, die den I2C Teil übernehmen! Zb. die 
Fleury Lib.

Hinweis: Bei Atmel heißt das ganze aus rechtlichen Gründen TWI (Two Wire 
Interface). Ist aber genau das gleiche.

Jetzt musst du nur noch mit dem Datenblatt feststellen, was du über I2C 
dem Baustein schicken musst, damit er etwas bestimmtes macht.


Sollen wir Händchen halten kommen?

von Herbert (Gast)


Lesenswert?

Hallo Stefan,

damit dir hier irgendjemand weiterhelfen kann mußt du noch
mit einigen Informationen herausrücken:

1. Welcher Prozessor (das Pollin-Board ist für 8 verschiedene
   angegeben, wenn pin-kompartiebel noch mehr)?

2. Wie schon von Joachim angesprochen: Wie soll die Auswertung
   erfolgen (einfache Anzeige mit LED, Uhrzeit auf
   Display, Übetragung auf einen PC, etc.)?

3. Wie soll die Uhrzeit eingestellt werden (Tasten, vom PC)?

4. Welche Programmiersprache kannst/willst du verwenden?

5. Läuft bei dir schon eine Programmierumgebung und hast du
   schon erste Testprogramme auf deinem Board zum Laufen
   gebracht?

Habe sicher noch einiges vergessen.

Durch die Vielzahl der Möglichkeiten wirst du auch kein
fertiges Programm (weder hier noch zum Herunterladen) bekommen.
Das ist kein Projekt das ein Anfänger in einer Stunde erledigen
kann. Du wirst dich wohl bei einigen Themen noch etwas einlesen
müssen (Datenblätter, I2c, Programmierung). Das kann und will
dier hier keiner abnehmen.

Wenn du dann konkrete Hilfe bei einigen Punkten brauchst,
gibt es hier gute Leute die dir gerne helfen.

Bin selbst noch Anfänger. Weiß wie schwer das am Anfang ist
und daß es einige Zeit dauert bis man erste brauchbare Ergebnisse
erhält.

Lg Herbert

von Karl H. (kbuchegg)


Lesenswert?

> Durch die Vielzahl der Möglichkeiten wirst du auch kein
> fertiges Programm (weder hier noch zum Herunterladen) bekommen.

Vor allen Dingen wird er hier kein fertiges Programm bekommen, weil es 
sich bei der Arbeit um seine Jahresarbeit handelt, deren Note und 
QUalität direkt in sein Maturazeugnis (Abitur) eingeht. Es handelt sich 
bei einer HTL um eine technische Schule, im vorliegenden Fall für 
Elektrotechnik/Elektronik oder Informatik. Wenn ihm hier jemand die 
Arbeit macht, dann geht er sich in einem halben Jahr vorstellen und sein 
zukünftiger Chef stellt ihn ein, weil in seinem Zeugnis steht, dass er 
diesen Aufgabenbereich eigntlich beherrscht. Da steht nicht: 
vorgeschriebene Projektarbeit nur durch Mithilfe eines Forums gelöst.

Und mit so jemandem will ich ehrlich gesagt nicht zusmmenarbeiten 
müssen.

> Weiß wie schwer das am Anfang ist und daß es einige Zeit dauert
> bis man erste brauchbare Ergebnisse erhält.

Er ist in der Abschlussklasse. In einem halben Jahr könnte er dein Boss 
sein. In 3 Jahren ist er ohne weitere Prüfungen berechtigt, den Titel 
"Ingenieur" zu führen.

Nur um das alles mal ins rechte Licht zu rücken.

von Stefan R. (Firma: HTL-Donaustadt) (stefanhtl)


Lesenswert?

Herbert schrieb:
> Hallo Stefan,
>
> damit dir hier irgendjemand weiterhelfen kann mußt du noch
> mit einigen Informationen herausrücken:
>
> 1. Welcher Prozessor (das Pollin-Board ist für 8 verschiedene
>    angegeben, wenn pin-kompartiebel noch mehr)?

Also wir verwenden einen Atmega 32A, wegen dem Speicherplatz
weil wir haben um die 60 LED's anzusteuern.
>
> 2. Wie schon von Joachim angesprochen: Wie soll die Auswertung
>    erfolgen (einfache Anzeige mit LED, Uhrzeit auf
>    Display, Übetragung auf einen PC, etc.)?
>

Also es ist so unser Projekt soll in Form einer Pyramide sein,
und auf auf 3 von den 4 Seiten sollen jeweils 20 LED's kreisförmig
angeordnet sein.
Beim Diplomprojekt sollen wir dann eine Verbindung zum Pc herstellen 
können, also das ist noch nicht wichtig.
> 3. Wie soll die Uhrzeit eingestellt werden (Tasten, vom PC)?

die Uhr soll über + und - Tasten eingestellt werden können, außerdem 
gibt es
Start,
Stopp,
Reset,
und Pause

>
> 4. Welche Programmiersprache kannst/willst du verwenden?

Wir programmieren im AVR-Studio falls ihr das kennt.
>
> 5. Läuft bei dir schon eine Programmierumgebung und hast du
>    schon erste Testprogramme auf deinem Board zum Laufen
>    gebracht?

Ja erste Testprogramme habe ich schon. z.b kann ich 4 LED's ansteuern 
also das nach jeder Sekunde eine mehr leuchtet und bei 4 beginnt es 
wieder von 0.
umgekehrt kann ich das auch, sprich von 4 auf 0.



Habe sicher noch einiges vergessen.
>
> Durch die Vielzahl der Möglichkeiten wirst du auch kein
> fertiges Programm (weder hier noch zum Herunterladen) bekommen.
> Das ist kein Projekt das ein Anfänger in einer Stunde erledigen
> kann. Du wirst dich wohl bei einigen Themen noch etwas einlesen
> müssen (Datenblätter, I2c, Programmierung). Das kann und will
> dier hier keiner abnehmen.
>
> Wenn du dann konkrete Hilfe bei einigen Punkten brauchst,
> gibt es hier gute Leute die dir gerne helfen.
>
> Bin selbst noch Anfänger. Weiß wie schwer das am Anfang ist
> und daß es einige Zeit dauert bis man erste brauchbare Ergebnisse
> erhält.
>
> Lg Herbert

Ich brauche keine fertigen Programme, ihr helft mir schon wenn ihr mir 
Tipps gebt, wie ich weiter machen könnte, in Schritten, das wäre schon 
super.

Lg Stefan

von Clemens M. (panko)


Lesenswert?

Um mit i2c (twi) vertraut zu werden, bietet sich m.M.n. immer noch ein 
eeprom am ehesten an. Zumal quasi -alles- an Informationen im Netz 
darauf hingestrickt ist.

Würde dir raten entweder eine lib wie oben gepostet zu verwenden, sprich 
ans laufen zu bringen, oder anhand des Datenblattes das Ganze selbst zu 
schreiben. z.B. indem zu versucht ein Byte in irgendein eeprom zu 
schreiben und wieder zu lesen.
Wenn du mit den i2c Routinen klarkommst, wäre es ratsam, sich das 
Datenblatt der rtc durchzulesen, denn dort musst du zum setzen und 
auslesen mit Sicherheit ein Datenformat beachten. Eben wie sich der 
Master und die Uhr unterhalten wollen. Das dann mit dem i2c Treiber 
erledigen....

Und wenn weitere Probleme kommen hier posten.

P.S. Die i2c Pins auf andere i/o zu legen würde nur einen bit bang 
Treiber benötigen. Ich meine von Peter Danegger waren dazu Sourcen im 
Forum unterwegs. Da könntest du auch nach suchen, falls es eben nicht 
das twi Modul vom Atmel sein soll oder darf.

von Clemens M. (panko)


Lesenswert?

P.P.S.

Wenn du die Fleury lib angehst, versuche doch auch einfach, ob du die 
device id der Uhr lesen kannst.

Was vielleicht ein dummer Fehler werden könte ist es, das WEL, RWEL zu 
setzen. Muss vorm schreiben im statusregister gesetzt werden.
Aber dererlei kannst du hier auch bestimmt noch fragen, wenn i2c lesen 
funktioniert.
Den eeprom Teil der Uhr (die beiden haben halt einfach andere Adressen) 
zum probieren hast du ja auch.

von Herbert (Gast)


Lesenswert?

@ Karl Heinz

Karl Heinz Buchegger schrieb:
> Es handelt sich
> bei einer HTL um eine technische Schule, im vorliegenden Fall für
> Elektrotechnik/Elektronik oder Informatik.

Weiß was eine HTL ist, bin wie Stefan aus Wien.

Karl Heinz Buchegger schrieb:
> Vor allen Dingen wird er hier kein fertiges Programm bekommen, weil es
> sich bei der Arbeit um seine Jahresarbeit handelt, deren Note und
> QUalität direkt in sein Maturazeugnis (Abitur) eingeht.

Du hast natürlich vollkommen Recht das man ihm hier nicht, bis
zum letzten Detail, alles vorkauen kann. Aber einige
Ratschläge, wie man ein Projekt angeht, sollten erlaubt sein.
Man lernt ja nicht nur in der Schule. Das meiste kommt ja erst
viel später dazu (Praxis, Kurse, Gespräche, Internet-Beitäge,
Bücher, Datenblätter, etc. und eben auch ein Forum wie dieses).

Karl Heinz Buchegger schrieb:
> dann geht er sich in einem halben Jahr vorstellen und sein
> zukünftiger Chef stellt ihn ein, weil in seinem Zeugnis steht, dass er
> diesen Aufgabenbereich eigntlich beherrscht.

Jeder Chef, dessen einziges Einstellungskritärium ein Zeugnis ist,
ist selbst schuld.

Karl Heinz Buchegger schrieb:
> In einem halben Jahr könnte er dein Boss
> sein.

Nicht sehr wahrscheinlich, habe beruflich nichts mit
Elektronik zu tun.

Lg Herbert

von Jörg S. (joerg-s)


Lesenswert?

Clemens M. schrieb:
> Um mit i2c (twi) vertraut zu werden, bietet sich m.M.n. immer noch ein
> eeprom am ehesten an.
Ich würde her ein I/O Baustein + LEDs empfehlen. Dann hat man die 
direkte optische Rückmeldung wenn was geklappt an.

von Stefan R. (Firma: HTL-Donaustadt) (stefanhtl)


Lesenswert?

Ich danke euch für eure nette Hilfe, ich hätte auch schon ein 
Beispielprogramm gefunden, leider für einen RTC DS 1307 und nicht für 
meinen ISL 12029, hier ist das Programm:

#include "Wire.h"
#define DS1307_I2C_ADDRESS 0x68


byte decToBcd(byte val){return ( (val/10*16) + (val%10) );}
byte bcdToDec(byte val){return ( (val/16*10) + (val%16) );}

void setDateDs1307(byte second, byte minute, byte hour,byte dayOfWeek, 
byte dayOfMonth, byte month, byte year)
{
  Wire.beginTransmission(DS1307_I2C_ADDRESS);
  Wire.send(0);
  Wire.send(decToBcd(second));
  Wire.send(decToBcd(minute));
  Wire.send(decToBcd(hour));
  Wire.send(decToBcd(dayOfWeek));
  Wire.send(decToBcd(dayOfMonth));
  Wire.send(decToBcd(month));
  Wire.send(decToBcd(year));
  Wire.send(0x10);
  Wire.endTransmission();
}


void getDateDs1307(byte *second,byte *minute,byte *hour,byte 
*dayOfWeek,byte *dayOfMonth,byte *month,byte *year)
{
  Wire.beginTransmission(DS1307_I2C_ADDRESS);
  Wire.send(0);
  Wire.endTransmission();
  Wire.requestFrom(DS1307_I2C_ADDRESS, 7);

  *second     = bcdToDec(Wire.receive() & 0x7f);
  *minute     = bcdToDec(Wire.receive());
  *hour       = bcdToDec(Wire.receive() & 0x3f);
  *dayOfWeek  = bcdToDec(Wire.receive());
  *dayOfMonth = bcdToDec(Wire.receive());
  *month      = bcdToDec(Wire.receive());
  *year       = bcdToDec(Wire.receive());
}

void setup()
{
  byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
  Wire.begin();
  Serial.begin(9600);
  second = 0;
  minute = 02;
  hour = 13;
  dayOfWeek = 7;
  dayOfMonth = 22;
  month = 5;
  year = 10;
  setDateDs1307(second, minute, hour, dayOfWeek, dayOfMonth, month, 
year);
}

void loop()
{
  byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
  getDateDs1307(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, 
&month, &year);

}


Jetzt wäre nur noch die Aufgabe dies für meinen RTC umzuschreiben, ich 
habe mir auch schon eine Nachhilfe geholt, die auch recht viel Geld 
kostet, die Nachhilfe meint auch dieses Programm wäre auf meines 
umzuschreiben nur brauchen wir diesen Wert 0x68, der ganz oben im 
Programm steht für meinen RTC, wir haben auch eine längere Zeit zusammen 
gesucht nur leider nicht gefunden.

Kennt diesen Wert vl jemand von euch, oder wisst ihr was ich für meinen 
RTC alles ändern müsste? und ob ich dieses Programm auch verwenden kann, 
obwohl ich eine I2C-Schnittstelle machen muss.

Ich würde euch sehr sehr sehr danken wenn ihr mir Tipps geben könnt, den 
mit den oberen Bibliotheken komme ich nicht weiter.

Lg Stefan

von Stefan R. (Firma: HTL-Donaustadt) (stefanhtl)


Lesenswert?

Und noch eine Frage kann man das überhaupt mit meinem RTC schaffen? Denn 
ich habe ja mehrere Seiten über I²C gelesen und meistens habe ich nur 
den entdeckt DS1307, was meint ihr? Und bitte beim oberen Beitrag mir zu 
helfen wenn ihr könnt.

Lg stefan

von Stefan R. (Firma: HTL-Donaustadt) (stefanhtl)


Lesenswert?

Hier wäre das Datenblatt für meinen RTC, ISL 12029

http://www.intersil.com/data/fn/fn6206.pdf

von spess53 (Gast)


Lesenswert?

Hi

>die Nachhilfe meint auch dieses Programm wäre auf meines
>umzuschreiben nur brauchen wir diesen Wert 0x68, der ganz oben im
>Programm steht für meinen RTC, wir haben auch eine längere Zeit zusammen
>gesucht nur leider nicht gefunden.

Findest du unter 'Device Addressing', Datenblatt S.18:

 0xAE für den EEPROM und 0xDE für die RTC.

MfG Spess

von Stefan R. (Firma: HTL-Donaustadt) (stefanhtl)


Lesenswert?

Es ist wirklich unglaublich wichtig, denn in 6 Wochen muss die Aufgabe 
fertig sein. Und ich habe wirklich Angst es nicht zu schaffen.

von Stefan R. (Firma: HTL-Donaustadt) (stefanhtl)


Lesenswert?

spess53 schrieb:
> Hi
>
>>die Nachhilfe meint auch dieses Programm wäre auf meines
>>umzuschreiben nur brauchen wir diesen Wert 0x68, der ganz oben im
>>Programm steht für meinen RTC, wir haben auch eine längere Zeit zusammen
>>gesucht nur leider nicht gefunden.
>
> Findest du unter 'Device Addressing', Datenblatt S.18:
>
>  0xAE für den EEPROM und 0xDE für die RTC.
>
> MfG Spess


Ok Super DANKE, d.h. statt wie im oberen Programm 0x68 brauche ich bei 
mir 0xDE oder?

Lg

von Stefan R. (Firma: HTL-Donaustadt) (stefanhtl)


Lesenswert?

> Findest du unter 'Device Addressing', Datenblatt S.18:
>
>  0xAE für den EEPROM und 0xDE für die RTC.
>
> MfG Spess


noch eine Frage meinst du vl S.19 weil Device Addressing, ist bei meinem 
Datenblatt für den RTC ISL12029 
http://www.intersil.com/data/fn/fn6206.pdf

Lg

von spess53 (Gast)


Lesenswert?

Hi

>Ok Super DANKE, d.h. statt wie im oberen Programm 0x68 brauche ich bei
>mir 0xDE oder?

Ja. Beachte aber, das im Bit0 angegeben wird, ob es sich um einen 
Schreib- oder Lesezugriff handelt.

>noch eine Frage meinst du vl S.19 weil Device Addressing, ist bei meinem
>Datenblatt für den RTC ISL12029
>http://www.intersil.com/data/fn/fn6206.pdf

Ja. Bei dem Datenblatt ist es auf S.19.

MfG Spess

von Stefan R. (Firma: HTL-Donaustadt) (stefanhtl)


Lesenswert?

spess53 schrieb:
> Hi
>
>>Ok Super DANKE, d.h. statt wie im oberen Programm 0x68 brauche ich bei
>>mir 0xDE oder?
>
> Ja. Beachte aber, das im Bit0 angegeben wird, ob es sich um einen
> Schreib- oder Lesezugriff handelt.
>
>>noch eine Frage meinst du vl S.19 weil Device Addressing, ist bei meinem
>>Datenblatt für den RTC ISL12029
>>http://www.intersil.com/data/fn/fn6206.pdf
>
> Ja. Bei dem Datenblatt ist es auf S.19.
>
> MfG Spess

Ok ich danke dir, meinst du das das Datenblatt einen Fehler hat oder 
wie?, und noch eine klitzekleine Frage, ob vielleicht noch einen kurzen 
Blick auf das obere Programm werfen kannst, ob ich dieses dann auch für 
meinen RTC verwenden kann und auch wenn ich I2C verwende, also wenn ich 
dann 0xDE schreibe statt 0x64.
oder brauche ich dafür 
http://homepage.hispeed.ch/peterfleury/group__pfleury__ic2master.html


auf jedenfall danke ich dir wirklich danke

von spess53 (Gast)


Lesenswert?

Hi

>Ok ich danke dir, meinst du das das Datenblatt einen Fehler hat oder
>wie?

Nein. Ich hatte wahrscheinlich ein älteres Datenblatt.

>und noch eine klitzekleine Frage, ob vielleicht noch einen kurzen
>Blick auf das obere Programm werfen kannst, ob ich dieses dann auch für
>meinen RTC verwenden kann und auch wenn ich I2C verwende, also wenn ich
>dann 0xDE schreibe statt 0x64.

Nicht ganz. Beim ISL12029 werden die Register mit 2 Byte adressiert. In 
dem Programm nur mit einem. Das

 Wire.send(0x10);

scheint auch spezifisch zu sein. Also nur mit einer anderen 
Deviceadresse ist es nicht getan.

>oder brauche ich dafür
>http://homepage.hispeed.ch/peterfleury/group__pfle...

Ich benutze zwar kein C, aber diese Bibliothek sieht mir, nach kurzem 
Überfliegen, strukturierter aus.

MfG Spess

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.