Forum: Mikrocontroller und Digitale Elektronik 1-wire-DS1820 Verständnisfrage


von newbie (Gast)


Lesenswert?

Hallo,
ich mache gerade meine ersten Gehversuche mit einem DS18S20 und bin über 
das geniale Tutorial von B.v.B gestoßen. Damit sollten eigendlich schon 
alle Fragen aus der Welt sein, jedoch verstehe ich folgende Zeilen 
nicht:

        // Port-Pin zur Realisierung des 1-Wire-Busses
        unsigned char bit DQ  @  0xb4;      // Port-Pin P3.4 = b4h
                                            // Port-Pin P4.0 = c0h

Könnte mir mal jemand genau erklären was da passiert?

Ein paar Fragen um meine Verwirrung zu erklären:
1. Wozu ist das '@' ?
2. Ist 'bit' evtl. eine Struktur?
3. Welche Adresse muss zugewiesen werden?
(falls zB an PB1 angeschlossen muss dann PORTB verwendet werden? )

von Nachdenker (Gast)


Lesenswert?

Um welchen Prozessor geht es hier?
Normalerweise hängt dieser 1Wire-Bus an "einem Port-Pin".
Bei Atmel prozi's z.B. Portb.1. Also einem von 8 möglichen bei einem 8 
Bit-prozi.

Was über diesen Port-Pin abläuft ist sowas wie eine serielle Bitfolge 
die über sogenannte Timeslots -Zeitscheiben- abgewickelt wird.

Die Busteilnehmer warten auf ein Startsignal in dem Falle 1wreset und 
erwarten dann ein Komando oder eine Deviceadresse die sich angesprochen 
fühlen sollte, also dann ein Kommando erwartet.

Du scheinst eine Bitzuweisung bei der Initialisierung mit einem Kommando 
zu verwechseln, habe ich den Eindruck. Kenne Progr-sprache C zu wenig.

von Olaf (Gast)


Lesenswert?

> Könnte mir mal jemand genau erklären was da passiert?

Das kein C sondern irgendein Herstellerdialekt. Keine Ahnung was fuer 
eine Sprache. So komisch wie das aussieht wuerde ich PIC vermuten.

Dort wird eine Variable definiert die an einer bestimmten Stelle im 
Speicher liegt. Diese Stelle ist zufaellig ein PortPin. Dann kann man 
durch beschreiben dieser Variable mit dem Pin wackeln.

Olaf

von ... (Gast)


Lesenswert?

newbie schrieb:
> B.v.B

wer ist B.v.B und welche Programmiersprache verwendet er/sie?

von ... (Gast)


Lesenswert?

newbie schrieb:
> Könnte mir mal jemand genau erklären was da passiert?

steht auf der Homepage von B.v.B. http://www.bvb.de/

von EGS_TI (Gast)


Lesenswert?

> unsigned char bit DQ  @  0xb4;

Das "unsigned char" versteh ich in diesem Kontext auch nicht.
Aber das "bit DQ @ 0xb4;" steht für eine Zuweisung der Adresse 0xb4 an 
die "Bit-Variable" DQ.

von meckerziege (Gast)


Lesenswert?

trolololoooo?

von EGS_TI (Gast)


Lesenswert?

Sieht nach cc5x/CC8E aus. Ein C-Compiler für PICs.

von BvB (Gast)


Lesenswert?

Leider alles nicht richtig !


// Port-Pin zur Realisierung des 1-Wire-Busses
        unsigned char bit DQ  @  0xb4;      // Port-Pin P3.4 = b4h
                                            // Port-Pin P4.0 = c0h


Der Prozessor ist ein 8051er (hier der AT89C51CC03er von Atmel) und die 
Sprache ist C !!
Jedoch gilt in C: die µC-spezifischen Besonderheiten z.B. beim Arbeiten 
mit SFRs und SFR-Bits sind leider nicht international genormt und jeder 
Compiler-Hesteller macht das hier anders !!

Hier: Festlegungen für den Wickenhäuser C-Compiler µC/51:
unsigned char bit ist die Def. einer Bit-Variablen, ganz genau: eines 
einzelnen Port-Pins, denn beim 8051er sind die Port-Pins 
bitadressierbar.

DQ ist der symbolische Name des Port-Pins, hier der Datenbit-Pin für den 
1-Wire-Bus und 0xb4 ist die interne Adresse dieses Port-Pins (des 
Port-Pins P3.4).
Das @-Zeichen ist die Zuweisung: Name zur Adresse.

Viele Grüße

BvB

von newbie (Gast)


Lesenswert?

okay...
ich dachte dieses Tutorial sei bekannter.

Ist '@' denn ein Operator in C? (Bildungslücke?)

Mal anders:
wenn ich den Pin den ich benutzen möchte DQ nennen möchte, und dieser 
Pin PB1 an einem ATmega48 ist. Wie säh denn dann der Code aus?

Also begriffen hab ich das so noch nicht, würde es aber gern verstehen.

von Nachdenker (Gast)


Lesenswert?

Es scheint bei diesem angesprochenen C Compiler sowas zu sein.
Du müsstest mal versuchen infos über diesen C Compiler zu bekommen um 
die Spezifikation verstehen zu können.

Nur, du scheinst also einen Programmcode erwischt zu haben, der für 
deine Verwendung mit den dich interessierenden Atmegas unpassend zu sein 
scheint.

von DB8JO (Gast)


Lesenswert?

Moin,

ich habe mir auch gerade eine 1-Wire Bibliothek für den DS18S20 
geschrieben, ich mache es so:
1
/*** Port mapping ***/
2
  /* One Wire Interface */
3
#define K_PORT_OWI    PORTD
4
#define K_DDR_OWI    DDRD
5
#define K_PIN_OWI    PIND
6
#define K_PORTPIN_OWI    3

Zugreifen kann man dann so:
1
K_PORT_OWI  |=  (1<<K_PORTPIN_OWI)  //Out high oder In mit Pull-up aktiv
2
K_PORT_OWI  &= ~(1<<K_PORTPIN_OWI)  // ^das Gegenteil
3
K_DDR_OWI   |=  (1<<K_PORTPIN_OWI)  //OWI Pin als Ausgang
4
K_DDR_OWI    &= ~(1<<K_PORTPIN_OWI)  //OWI PIN als Eingang

Man kann dafür auch Makros definieren:
1
/*** Makros ***/
2
#define OWI_high()    K_PORT_OWI  |=  (1<<K_PORTPIN_OWI)  //Out high oder In mit Pull-up aktiv
3
#define OWI_low()     K_PORT_OWI  &= ~(1<<K_PORTPIN_OWI)  // ^das Gegenteil
4
#define OWI_out()     K_DDR_OWI   |=  (1<<K_PORTPIN_OWI)  //OWI Pin als Ausgang
5
#define OWI_in()      K_DDR_OWI    &= ~(1<<K_PORTPIN_OWI)  //OWI PIN als Eingang

Gruß, Jan

von DB8JO (Gast)


Lesenswert?

Achso...
Controller: ATmega8
Compiler: AVR-GCC unter Linux, geht aber auch mit dem winavr und 
AVR-Studio

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.