Hallo, Nach ein paar Monaten ohne Erfolg komme ich jetzt zu meinem 2. Versuch. Ich will die Temperatur aus einem LM75 auslesen. Software: AVR Studio 4.13 (GCC) Hardware: ATMega 8 Programmausschnitt:
1 | #define LM75_write 144
|
2 | #define LM75_read 145
|
3 | #define FAKTOR 44
|
4 | #define TEILER 0
|
5 | |
6 | void init (unsigned char faktor, unsigned char teiler) |
7 | {
|
8 | TWBR = faktor; |
9 | TWSR = teiler; |
10 | }
|
11 | |
12 | unsigned char empf (unsigned char adres) |
13 | {
|
14 | unsigned char daten; //hilfsvariable |
15 | TWCR = (1<<TWINT) | (1<<TWSTA) | (1<<TWEN); //startbedingung |
16 | loop_until_bit_is_set(TWCR, TWINT); //warte bis fertig |
17 | |
18 | TWDR = adres; //adresse |
19 | TWCR = (1<<TWINT) | (1<<TWEN); //senden |
20 | loop_until_bit_is_set(TWCR, TWINT); //warten bis fertig |
21 | |
22 | TWCR = (1<<TWINT) | (1<<TWEN); //empfang starten |
23 | loop_until_bit_is_set(TWCR, TWINT); //warte bis fertig |
24 | |
25 | daten = TWDR; //daten abholen |
26 | TWCR = (1<<TWINT) | (1<<TWEA) | (1<<TWEN); //ack impuls senden |
27 | loop_until_bit_is_set(TWCR, TWINT); //warte bis fertig |
28 | |
29 | TWCR = (1<<TWINT) | (1<<TWSTO) | (1<<TWEN); //stoppbedingung |
30 | return daten; |
31 | }
|
32 | |
33 | init(FAKTOR,TEILER); |
34 | |
35 | wert1 = empf(LM75_read); |
36 | wert2 = empf(LM75_read); |
Die Werte lasse ich mir direkt von einem LCD anzeigen. leider sind beide Werte immer gleich (ca. 247) und Schwanken nur leicht