Hallo zusammen Übe nun schon ein Weilchen und finde die Lösung nicht. Bin eben noch Anfänger - aber nicht mehr lange ;-) Vorgeschichte: Habe ein Temp.Sensor DS18B20 welchen ich mit einem ATmega2560 problemlos lesen kann. Nun möchte ich das selbe mit einem ATxmega256A3BU machen. Mein Problem sind die Definitionen der PORT's bzw. PIN's die beiden den beiden Prozessoren unterschiedlich sind. Unten sind beide Definitionen eine geht die andere nicht. Vielen Dank schon mal. Liebe Grüsse marki
1 | //*********************************************
|
2 | // Definition für ATxmega256A3BU
|
3 | // Sensor an PORTE-PIN1
|
4 | // (Das funktioniert NICHT - ist wohl falsch)
|
5 | //*********************************************
|
6 | #ifndef W1_PIN
|
7 | #define W1_PIN PIN1_bm // pin1 on Port E
|
8 | #define W1_IN PORTE_IN
|
9 | #define W1_OUT PORTE_OUT // port
|
10 | #define W1_DDR PORTE_DIR // port direction register
|
11 | #endif
|
12 | |
13 | |
14 | //*********************************************
|
15 | // Definition für ATmega2560
|
16 | // Sensor an PORTG-PIN0
|
17 | // (Das funktioniert prima)
|
18 | //*********************************************
|
19 | #ifndef W1_PIN
|
20 | #define W1_PIN PG0 // pin0 on Port G
|
21 | #define W1_IN PING
|
22 | #define W1_OUT PORTG // port
|
23 | #define W1_DDR DDRG // port direction register
|
24 | #endif
|
25 | |
26 | |
27 | |
28 | //---------------------------------------------
|
29 | // Funktion wo die Definitionen gebraucht werden
|
30 | // Reset one wire sensor
|
31 | bit w1_reset(void) |
32 | {
|
33 | bit error; // var def. |
34 | |
35 | W1_OUT &= ~(1<<W1_PIN); // W1_PIN -> 0b 0000 0001 |
36 | W1_DDR |= 1<<W1_PIN; |
37 | delay_us(480); // 480 us |
38 | W1_DDR &= ~(1<<W1_PIN); |
39 | delay_us(66); |
40 | error = W1_IN & (1<<W1_PIN); // no presence detect |
41 | delay_us(480 - 66); |
42 | if( (W1_IN & (1<<W1_PIN)) == 0) // short circuit |
43 | error = 1; |
44 | return error; // return error state |
45 | }
|