Hallo,
also ich habe mit jetzt einen Search-Algorithmus geschrieben wo
funktioniert, bekomme meine ganzen Dallas angezeigt.
Nur die Temperratur Berrechnung macht mir noch zu schaffen obwohl sie
bei den anderen funktioniert hatte.
1 | #define SEARCH_FIRST 0xFF // start new search
|
2 | #define PRESENCE_ERR 0xFF
|
3 | #define DATA_ERR 0xFE
|
4 | #define LAST_DEVICE 0x00 // last device found
|
5 |
|
6 | unsigned char id[8], diff;
|
7 | char s[30];
|
8 | unsigned char i;
|
9 | unsigned int temp;
|
10 |
|
11 | for( diff = SEARCH_FIRST; diff != LAST_DEVICE; )
|
12 | {
|
13 | diff = w1_rom_search( diff, id );
|
14 |
|
15 | if( diff == PRESENCE_ERR )
|
16 | {
|
17 | uart_puts( "No Sensor found" );
|
18 | break;
|
19 | }
|
20 | if( diff == DATA_ERR )
|
21 | {
|
22 | uart_puts( "Bus Error" );
|
23 | break;
|
24 | }
|
25 | if( id[0] == 0x28 || id[0] == 0x10 )
|
26 | { // temperature sensor
|
27 | uart_puts( "ID: " );
|
28 | for( i = 0; i < 8; i++ )
|
29 | {
|
30 | sprintf( s, "%02X ", id[i] );
|
31 | uart_puts( s );
|
32 | }
|
33 |
|
34 | Byte_Schreiben(Convert_T);
|
35 | _delay_ms(800);
|
36 | Bus_Reset();
|
37 | Byte_Schreiben(Match_Rom);
|
38 | for (i=0; i<8; i++)
|
39 | {
|
40 | Byte_Schreiben(id[i]);
|
41 | }
|
42 |
|
43 | Byte_Schreiben( Read_Scratchpad ); // read command
|
44 | for (int y =0; y<9; y++)
|
45 | {
|
46 | Sensordaten[y] = Byte_Lesen();
|
47 | //temp = Byte_Lesen(); // low byte
|
48 | }
|
49 | SensorID1 = (Sensordaten[2]<<4);
|
50 |
|
51 | temp = Byte_Lesen();
|
52 |
|
53 | temp |= (uint)Byte_Lesen() << 8; // high byte temp
|
54 | if( id[0] == 0x10 ) // 9 -> 12 bit
|
55 | temp <<= 3;
|
56 |
|
57 | sprintf( s, " T: %04X = ", SensorID1);
|
58 | uart_puts( s );
|
59 |
|
60 | sprintf( s, "%4d.%01døC", temp >> 4, (temp << 12) / 6553 );
|
61 | uart_puts( s );
|
62 |
|
63 | //Nur zum testen
|
64 | itoa(temp,Buffer150,10);
|
65 | uart_puts(Buffer150);
|
66 | uart_puts("\n");
|
67 | }
|
68 | }
|
Ich bekomme die ID's der Sensoren angezeigt und auch meine zwei
vergebenen bits. Nur bei der Temperratur bekomme ich nur schrott. Bei
allen zeigt er mir 4095.1084.
Ein Auslese fehler kann es normal nicht sein, ich bekomme ja mein ID's
bleibt eigentlich nur ein Rechenfehler.