Forum: Mikrocontroller und Digitale Elektronik PORT / PIN Definition


von Markus B. (up_marki)


Lesenswert?

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
}

: Bearbeitet durch User
von tsaggast (Gast)


Lesenswert?

Markus B. schrieb:
>...
> #define W1_PIN   PIN1_bm    // pin1 on Port E
> ...

PIN1_bm ist in meiner ATxmega32A4Udef.inc (falscher Typ, aber macht ja 
nichts) nicht enthalten.
_bm steht für bitmask und nicht wie das PG0 für die bitposition (_bp)
--> PIN1_bm = 0x02 und PIN1_bp = 0x01

Falls es daran nicht liegt, könnten die Fehlermeldungen weiter helfen.

von Markus B. (up_marki)


Lesenswert?

Hallo tsaggast

Danke für die Antwort.
Das dachte ich auch und habe ich auch schon probiert. Geht leider auch 
nicht.
Mit "Pin1_bm" komme ich weiter - aber noch nicht zur Lösung.
Vielleicht liegt das Problem bei mir noch wo anders als die Definition?!
Eine Compiler-Fehlermeldung gibt es nicht -> alles i.O.
Wie gesagt bin ich noch an der Grundlagenforschung von "C" und "AVR".
Gehe im Moment Schritt für Schritt weiter zu Ziel. Mann soll bekanntlich 
nicht zu grosse Schritte nehmen :-)

Falls doch noch jemand eine zündende Idee hat - würde ich mich sehr 
freuen.

Viele Grüsse
Marki

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
Noch kein Account? Hier anmelden.