Guten Tag, ich stehe gerade etwas ratlos einem Problem gegenüber. Es handelt sich um eine bestehende Temperatur Regelschaltung, in die ich nicht direkt eingreifen darf. Wie man auf dem Bild sehen kann, besteht die Schaltung aus einem AD51/067 (http://www.datasheetfind.com/datasheet/AD51-067ARMZ-2RL?uid=2137057) mit externen "remote sensing transistor" in einem Grafikprozessor an D+/D-. Ich muss in irgendeiner Form ein Temperatur Signal für eine parallele Regelung erhalten, darf aber nicht störend auf die vorhande Schaltung wirken. Nun würde ich gerne Wissen was machbar ist: 1) mit einem differenz ADC eines uC den externen Sensor messen. Was wäre besser, zwischen Filter und IC oder Filter und Sensor? uC wäre zB ein ATtiny25 2)Den SMbus sniffen. Wie müsste ich dann die Hardware gestalten, damit der sniffer nicht störend auf den Bus wirkt. Bzw. würde man mit einfachen mitteln auch die Temperatur Daten zuverlässig mitlesen und auswerten können? Genaue Angaben über den Bustakt etc. kann ich noch nicht machen, müsste noch gemessen werden. Hier würde wegen soft. twi auch ein attiny in frage kommen. Könnte z.B. der code von peter d. I²C sniffer als Grundlage dienen. Oder beides schlecht und einfach ein LM75 auf den Kühlkörper kleben und parallel was messen? danke schonmal Sebastian
@ Sebastian Möller (compressed) >1) mit einem differenz ADC eines uC den externen Sensor messen. Kann man machen. >Was wäre besser, zwischen Filter und IC Ja. > oder Filter und Sensor? Nein. >2)Den SMbus sniffen. Geht auch, ist ggf. robuster. >Wie müsste ich dann die Hardware gestalten, damit >der sniffer nicht störend auf den Bus wirkt. Einfache 3,3V CMOS Eingänge, wie sie jeder Logik-IC hat. >Bzw. würde man mit einfachen mitteln auch die Temperatur Daten >zuverlässig mitlesen und auswerten können? Ja. >Hier würde wegen soft. twi auch ein attiny in frage kommen. Ja. > Könnte z.B. >der code von peter d. I²C sniffer als Grundlage dienen. Möglicherweise. >Oder beides schlecht Nein. > und einfach ein LM75 auf den Kühlkörper kleben und >parallel was messen? Nö, das ist ein ganz andere Temperatur als uf dem IC, wo die Diode drinsteckt. MFG Falk
Also einfach den attiny mit sclk und sedata vom ad51 verbinden und mit VCC 3.3V betreiben? (sollten nach meinen Recherchen cmos Eingänge sein?) Ist wahrscheinlich besser, da man gleich die jeweilige Temperatur hat. Dann werde ich mich jetzt um die Software bemühen. ggf. erstmal mitloggen was auf dem Bus so gesendet wird und dann auswerten. Der LM75 war auch nur ein Notanker. danke
@ Sebastian Möller (compressed) >Also einfach den attiny mit sclk und sedata vom ad51 verbinden und mit >VCC 3.3V betreiben? (sollten nach meinen Recherchen cmos Eingänge sein?) Ja. >Ist wahrscheinlich besser, da man gleich die jeweilige Temperatur hat. Ja.
Ich brauche mal wieder Hilfe. Es wurde der I²C sniffer von Peter D. mit einem Attiny85 aufgebaut. Per UART gebe ich den Datenverkehr eines TWI auf dem PC aus. Das TWI besteht aus einem ATmega8 mit LM75 als slave. Hier der Code vom Master. (LCD Ausgabe etc. entfernt) Lib. von Peter Fleury
1 | #define F_CPU 3686400
|
2 | #include <util/delay.h> |
3 | #include <avr/io.h> |
4 | #include "twimaster.c" |
5 | #include <avr/interrupt.h> |
6 | #include <avr/io.h> |
7 | |
8 | #define TWI_ADR 0x00
|
9 | #define _TWINT 0b10000000
|
10 | #define _TWEN 0b00000100
|
11 | #define LM75_ADR 0b10010000 // 1001 ist standart und darf nicht verändert werden dann kommen A2=?, A1=?, A0=?
|
12 | #define LM75_CONFIG 0b00000001
|
13 | #define LM75_HYST 0b00000010
|
14 | #define LM75_SET 0b00000011
|
15 | #define LM75_TEMP 0b00000000
|
16 | |
17 | int ret1; |
18 | int ret2; |
19 | volatile int abfrage; |
20 | |
21 | int main(void) |
22 | {
|
23 | TCCR0 = (1<<CS00) | (1<<CS02); // Prescaler 256 |
24 | // Overflow Interrupt erlauben
|
25 | TIMSK |= (1<<TOIE0); |
26 | wait_ms(200); |
27 | i2c_init(); // initialize I2C library |
28 | while(1) |
29 | {
|
30 | if(abfrage==20) |
31 | {
|
32 | i2c_start_wait(LM75_ADR+I2C_WRITE); // set device address and write mode |
33 | i2c_write(LM75_TEMP); |
34 | i2c_rep_start(LM75_ADR+I2C_READ); // set device address and read mode |
35 | ret1 = i2c_readAck(); // read first byte from LM75 |
36 | ret2 = i2c_readNak(); // read second byte from LM75 |
37 | i2c_stop(); |
38 | }
|
39 | }
|
40 | }
|
41 | |
42 | |
43 | ISR (TIMER0_OVF_vect) |
44 | {
|
45 | abfrage++; |
46 | }
|
Code und Hardware vom TWI sollten funktionieren, zumindest bekomme ich die korrekten Werte auf einem LCD angezeigt. Hier ein Log vom sniffer:
1 | s90a00as90a00a00np |
2 | s90a00as90a10a00np |
3 | s90a00as90a04a00np |
4 | s90a00as90a00a00np |
5 | s90a00as90a00a00np |
6 | s90a00as90a00a80np |
7 | s90a00as90a00a80np |
8 | s90a00as90a00a80np |
9 | s90a00as90a00a00np |
10 | s90a00as90a00a00np |
11 | s90a00as91a00a00np |
12 | s90a00as90a00a80np |
13 | s90a00as91a00a00np |
14 | s90a00as90a10a00np |
15 | s90a00as90a10a00np |
16 | s90a00as90a10a00np |
17 | s90a00as91a01a00np |
18 | s90a00as91a04a00np |
19 | s90a00as90a00a00np |
20 | s90a00as90a00a00np |
21 | s90a00as90a04a00np |
22 | s90a00as90a10a00np |
23 | s90a00as90a00a00np |
24 | s90a00as90a01a00np |
25 | s90a00as91a04a00np |
26 | s90a00as90a00a80np |
27 | s90a00as90a00a00np |
28 | s90a00as91a01a00np |
29 | s90a00as90a11a00np |
30 | s90a00as90a19a00np |
31 | s90a00as90a18a00np |
32 | s90a00as90a10a00np |
33 | s90a00as90a10a00np |
34 | s90a00as90a11a00np |
35 | s90a00as90a10a80np |
Ich versuche das verzweifelt nachzuvollziehen. Also es fängt mit -Startsignal vom Master dann -LM75 Adresse+Read=90 -ACK LM75 -Tempregister LM75=00 -ACK LM75 -Repeat Start vom Master -LM75 Adresse+ R/W (kann ich nicht nachvollziehen warum manchmal R oder W) -Dann sollte das Datenwort vom LM75 kommen. Wo völlig unterschiedliche Werte stehen, obwohl die Temperatur während des Logs zwischen 20°und 23° lagen. -ACK Master -Dann ein weiteres Datenwort vom LM75? manchmal 0x80 oft 0x00? -NCK Master Meiner Ansicht nach müsste das aber etwas anders aussehen?
keiner eine Idee? ich lasse mir die werte parallel auf einem Display ausgeben. die 80 am Ende stehen für ,5° Alles was der Atmega8 sendet wird korrekt vom sniffer erkannt. Nur die Antworten vom LM75 sind zu 90% falsch. Ich habe schon sämtliche Baud ausprobiert. Der sniffer läuft mit 230400Baud und stellt die Zeichen korrekt dar.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.