Hi!
Ich nutze momentan das RN-Control mit dem atmega32. Ich versuche die Temperatur aus einem LM75A mittels I2C auszulesen und diese dann per RS232 an meinen PC zu übertragen. Und das alles in C-Code.
Dummerweise klappt schon das Auslesen des LM75A nicht so wie es soll, aber fangen wir mal von vorne an:
Erstmal zur Verkabelung:
Ich habe den 5 Volt-Ausgang des RN-Control an den VCC-Eingang vom LM75A gesteckt. Weiterhin hängen an diesem 5Volt-Ausgang parallel 2 10kOhm Widerstände. Hinter diesen Widerständen hängt jeweils die SDA-Leitung(bzw. SCL) vom LM75A und die vom atmega32.
Der Aufbau entspricht eigentlich fast 1zu1 diesem hier: http://www.ermicro.com/blog/?p=744
Wenn es an der Verkabelung liegen sollten, kann ich auch gerne noch ein Foto nachreichen.
Zur Ansteuerung im Quellcode nutze ich die Libs von Peter Fleury, die ja auch schon öfter im Forum genannt wurden. Die sollten ja ganz normal funktionieren. Ich habe den Port auch extra auf Port C und Pin 1 (SDA) und Pin 0 (SCL) in seinen Dateien umgestellt.
Hier mal der Quellcode:
Code:
unsigned char MSByte;
unsigned char LSByte;
double temp;
char s[255];
init_USART();
i2c_init();
sendUSART("Hallo Welt!!");
while(1) {
if (i2c_start((0x48)+I2C_READ)) sendUSART("Fehler!");
else {
MSByte = i2c_read(1); //höherwertige Bits
LSByte = i2c_read(0);
//temp = calcTemp(MSByte, LSByte); //soll später die Temp in °C rein
//itoa(temp,s,10);
sendUSART("Die aktuelle Temperatur lautet: ");
//sendUSART(s);
sendUSART(MSByte);
sendUSART((char) 13); //New Line!
}
sleep_ms(2000); //eine ziemlich ungenaue Sleep Funktion, aber hauptsache es gibt ne kleine Pause zwischen den einzelnen connect-Versuchen
}
Die Adresse ist ja laut Datenblatt vom LM75A: 1001ABC, wobei A,B und C beliebig beschaltbar sind. Ich habe A,B,C gar nicht angeschlossen, also gilt A=0,B=0,C=0 => Die Adresse ist 1001000, was Hexadezimal eine 48 sein sollte.
(Ich hab die Anschlüsse A,B und C auch mal direkt auf Masse gezogen, auch ohne Erfolg)
Bisher sehe ich eigentlich keinen Fehler, sofern ich nicht irgendwo irgendwelche Anschlüsse verwechselt habe. Der einzige Unterschied ist, dass überall 4.7k Widerstände verwendet werden und ich hier 10k Widerstände habe, was aber doch nicht das Problem sein sollte, oder?
Die Ausgabe ist nun über RS232 immer "Fehler", d.h. es kommt erst gar keine Verbindung zum LM75A zustande - ist die Adresse evt. falsch?
Dass die Ausgabe von MSByte später eigentlich keinen Sinn macht, ist mir klar. Jedoch wollte ich erstmal irgendeine ("vernünftige") Ausgabe haben, bevor ich anfange die konkrete Temperatur zu berechnen.
Hat jemand eine Idee woran es liegen könnte?
Gruß
Pille
Lesezeichen