Forum: Mikrocontroller und Digitale Elektronik ATmega16 und Port PB2


von Ronny Schulz (Gast)


Lesenswert?

Ich habe an Port PB2, der ja auch gleichzeitig INT2 und AIN0 ist einen
DS18S20 zu hängen. Leider funktioniert der da nicht dran. An einem
anderen Port geht der aber.

Ich habe da zwar irgendwas mit internen PullUps gelesen. Aber das peile
ich irgendwie nicht. Hat jemand die Lösung für mich?

Danke!

von Fabian Braun (Gast)


Lesenswert?

Servus Ronny

Also etwas zu den internen Pull-Ups (Beispiel Anhand von PORTB):
Wenn DDRB = 0x00, also Eingang ist und PORTB = 0x00 dann hast
du einen Eingang ohne Pull-Ups. Änderst du jedoch dann PORTB auf 0xFF,
dann sind die internen Pull-Ups (100k bis 500k) aktiviert. Für den
DS1820 brauchst du dann natürlich trotzdem noch ein externen Pull-Up
weil der interne "ein bisschen" zu gross wäre.

Reicht das?

Gruss Fab

von Ronny Schulz (Gast)


Lesenswert?

Ja danke! Das hatte mich vorher nie so recht interessiert mit den
Pullups. Ich sehe auch wenig Sinn in der Funktion, da der Widerstand ja
doch etwas groß ist, wie Du gerade sagtest. Ich wollte mal Taster ohne
zusätzlichen Pullup anschließen, was natürlich mächtig daneben ging -
oder ich hatte die dummerweise garnicht aktiviert, Das würde das
Problem erklären.

Aber letztendlich hat der PB2 irgedwie eine Sonderstellung wegen dem
Analog-Komparator. Dazu sollten die internen Pullups deaktiviert sein,
so dass die Initialisierung so aussehen müsste:

DDRB &= ~(1<<PB2); /* 1-Wire auf Eingang */
PORTB &= ~(1<<PB2); /* interne PullUps deaktivieren */

Klar ist das extern der 4.7k-Widerstand als PullUp dient.
Aber dennoch funktioniert das Ganze nicht und an PA2 funktioniert es.
Das ist es, was ich nicht verstehe.

Letztendlich muss ich ja nur die 4 defines verändern und das geht
einfach nicht. Irgendwo ist das was mit dem Port nicht so, wie es sein
soll.

#define DS1820_PORT_DDR        DDRB
#define DS1820_PORT_OUT        PORTB
#define DS1820_PORT_IN        PINB
#define DS1820_BIT_1WR        PB2

von Ronny Schulz (Gast)


Lesenswert?

Toll .. wieder mal dumme Programmierfehler, die man ewig sucht. Hmm ..
alles sieht man auch nicht mit dem Debugger so richtig. :)

Also das Thema hat sich jetzt erledigt. :)

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.