PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : I2C



doolitle15
14.03.2006, 19:32
Hallo ich habe mir einen ds1621 gekauft und möchte ihn nun in einen pic einlesn und über rs232 ausgeben!! ich habe schon vieles ausprobiert aba ich schaffe es einfach nicht!! kann mir bitte jemand helfen!!
ich habe beim DS1621 a0 a1 a2 auf masse gelegt (adresse 0x90)
habe dieses programm ausprobiert aba es funktioniert nicht!!

mfg doolitle

#include<16F873.h>
#use delay (clock=4000000)
#use RS232(baud=9600,xmit=PIN_C6,rcv=PIN_C7)
#use i2c(master, sda=PIN_C4, scl=PIN_C3)
#include<stdlib.h>


void main (void)
{

int8 temp;
while(TRUE)
{
i2c_start();
i2c_write(0x90);
temp=i2c_read();
i2c_stop();
printf("Temperatur= %u°C",temp);
}
}

ruediw
14.03.2006, 22:49
Hast Du schon mal die Suchen-Funktion in diesem Forum ausprobiert ?

stowoda
15.03.2006, 09:11
Hey, doolitle15!

Der Quellcode ist zu knapp um daraus etwas näheres über Deine Algorithmen zu erfahren.
Wie funktionieren Deine Funktionen im einzelnen?

Ich programmiere die dinger (PIC) zwar in Assembler aber wenn ich mir Dein Programm ansehe
und annehme, dass "temp=i2c_read(); " nur vom Sensor Liest und Ihn nicht vorher addressiert
um ihm erstmal zu sagen ob gelesen oder geschrieben werden soll, dann kann das so nicht funktionieren.

Was klappt denn nicht?
Kannst den Fehler eingrenzen?
Hast versucht zu debuggen, zB. mit einer LED an einem freien Pin?

Poste doch mal mehr von Deinem Quelltext oder beschreibe Deine Algorithmen.


Ansonsten gibt es hier so einiges über das I2C:

http://microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1490&filterID=392

oder hier:

www.sprut.de

oder an zahlreichen anderen Seiten..


Gruß

doolitle15
15.03.2006, 10:00
naja es ist so ich kenn mich auch noch nicht so gut aus mit i2c! es ist das erste mal das ich diese funktion nutze!!
ich habe aba schon verstanden das man eine adresse vergeben muss(DS1621 : a0 a1 a1 auf masse --> Adresse 0x90)
ich will eigentlich nur das mein pic die temperatur werte einliest und sie über rs232 am pc ausgibt!!
mein programm hab ich mehr oder weniger von einem pdf file über C-programmierung kopiert!! aba es funktioniert nicht!!
was hab ich falsch gemacht??
kennt wer eine gute seite wo c-programmierung in pics gut beschriebn ist?
wer ist eigentlich der master und slave?? (pic oder DS1621)

ich danke für jeden rat!!

mfg doolitle

stowoda
15.03.2006, 10:14
Also der master ist der PIC, er erzeug ja auch den Takt mit dem die Daten rein oder rausgehen.
I2C ist von Phillips entwickelt worden, ich meine es gäbe eine BUS-Spezifikation von dieser firma.
Musst mal im Netz suchen.

Ausserdem gibt es auf www.microchip.com ein i2c.tutorial,
es erklärt den kern der Sache ziemlich jut!

Zu PIC und C fällt mir im moment http://www.fernando-heitor.de/ ein.
Kenne die seite jedoch nicht gut da ich mit PIC und C nichts zu tun hab.

Gruß u. viel Erfolg!

Fritzli
15.03.2006, 10:37
Hallo

Ok, du scheinst den PCM (o.ae.) von CCS zu verwenden. Der hat I2C als library drin, die sollten normalerweise funktionieren.

Aber um eine Temperatur auszulesen musst Du schon ein bisschen mehr machen (z.B. Commandbyte, Zweite START-Bed, etc).
Hast Du ins Datenblatt geschaut? Dort stehts im Detail drin.
Die #use i2c ist glaub auch nicht ganz vollstaendig (habe jetzt aber grad kein Manual da)

Ich weiss jetzt grad nicht auswendig, aber der Compiler hat ev. einen Treiber fuer den Chip dabei (der ist ja ziemlich std). Schau mal in den Include oder Example Verzeichnissen.

Such sonst mal im Internet nach PCM und dem Tempsensor, da sollte was zu finden sein.

Gruess
Fritzli

djdune
16.03.2006, 20:47
Ob das jetzt ein Zufall ist, dass gerade ein Klassenkollege diesen IC mit dem gleichen Pic verwendet... egal

http://www.pic-c.com/forum/old/messages/7.html
Hier hat jemand eine auslese Routine dafür geschrieben