Forum: Mikrocontroller und Digitale Elektronik AVR Ports und Pins Verständnisfrage


von hape kerkeling (Gast)


Lesenswert?

Hallo ich habe eine Anfängerfrage bzgl. PORTS und PINS bei AVR 
Controllern. Soweit ich das verstehe haben ja PORTB, PORTC und PORTD 
jeweils mehrere Pins. Wenn ich jetzt also auf einem bestimmten I/O 
Ausgang eine digitale 1 ausgeben will muss ich schauen in welchem Port 
der Pin liegt, welche Stelle (gemessen an den beinhaltenden Pins) er hat 
und wenn es jetzt nur als Beispiel der 3 Pin von PORTB ist muss ich ins 
DDRB b00000100 schreiben, stimmt das? Wenn ich jetzt den 5 Pin von PORTB 
logisch 1 machen will, muss ich 00010000 anlegen. Jetzt sehe ich aber 
auf einer Grafik das z.B PORTC auf dem Atmega328 nur 7 Pins hat, alle 
anderen 8, deswegen bin ich mir irgendwie nicht mehr ganz sicher ob 
meine bisherige Überlegung stimmt.

fg

von hape kerkeling (Gast)


Angehängte Dateien:

Lesenswert?

Vergessen, hier die Grafik

von Max H. (hartl192)


Lesenswert?

hape kerkeling schrieb:
> deswegen bin ich mir irgendwie nicht mehr ganz sicher ob
> meine bisherige Überlegung stimmt.
Das stimmt schon so. PORTC hat einfach einen Pin weniger weil dafür im 
28-Pin Gehäuse kein Platz mehr war, sonst ist er ein Port wie jeder 
andere.

von Timmo H. (masterfx)


Lesenswert?

Jeder Port hat ein DDR, PORT und PIN Register. Ein Port hat immer 8 
Pins/8-Bit (auch wenn diese nicht nach außen verdrahtet sind). Das DDR 
ist zum einstellen der "Richtung", daher Ein- oder Ausgang. Das 
Port-Register setzt einen Ausgangs-Port/Pin oder wenn es ein Eingang ist 
aktiviert er den Pullup. Das Pin-Register ist zum einlesen eines 
Eingangs gedacht. Wenn es Pin7 Hardwäremäßig nicht gibt passiert außen 
eben nichts.

von Stefan (Gast)


Lesenswert?

Du fängst mit Null an zu zählen.
PORTB3 ist dann b00001000.

von Amateur (Gast)


Lesenswert?

Schmeiß mal 'ne Pupille aufs AVR-Tutorial (link oben links):
https://www.mikrocontroller.net/articles/AVR-Tutorial
Vieles, was Grundsätzlich ist, wird da angesprochen.

von Klaus (Gast)


Lesenswert?

Aber was hat denn Deine "Überlegung" mit der Anzahl Bits der Ports zu 
tun?
(Abgesehen davon, das sie, damit die "Überlegung" stimmt, mindestens ein 
Bit haben müssen).

von hape_kerkeling (Gast)


Lesenswert?

Danke Max, Timmo und Stefan

@Klaus Muss ich jetzt aber nicht erklären, oder?

@Amateur Dein Name passt, genau das Tutorial lese ich nämlich

von Klaus (Gast)


Lesenswert?

hape_kerkeling schrieb:

> @Klaus Muss ich jetzt aber nicht erklären, oder?

Das "muss" ich nicht beantworten, oder? :-)

Aber ich dachte wirklich, dass der Versuch meine Frage zu beantworten 
Dir hilft. Ich ziehe sie hiermit und mit Bedauern zurück.

von Hp M. (nachtmix)


Lesenswert?

hape kerkeling schrieb:
> muss ich ins
> DDRB b00000100 schreiben

Vorsicht!
DDR ist nicht der Port, sondern das DataDirectionRegister eines Ports.
Da wird also nur festgelegt, welche Pins Input und welche Output sein 
sollen, nicht aber der Inhalt des Ports.

von Wolfgang (Gast)


Lesenswert?

hape kerkeling schrieb:
> irgendwie nicht mehr ganz sicher ob meine bisherige Überlegung stimmt

Ganz einfach wird es, wenn du ins Datenblatt vom ATmega328 guckst. Im 
Kapitel 1 findest du alle Ports mit den verfügbaren Pins aufgelistet. 
Fig.2.1 ist noch mal ein Block Diagramm, ebenfalls mit den Port-Breiten.
Im Kapitel 14.2 siehst du ausführlich, wie die Steuerbits eines 
einzelnen Port-Pins zusammenwirken.

von hape_kerkeling (Gast)


Lesenswert?

@Klaus entschuldigung angenommen. Nein Spass tut mir leid du hast recht 
aber ich dachte mit "wenn es jetzt nur als Beispiel der 3 Pin von PORTB 
ist muss ich ins DDRB b00000100 schreiben, stimmt das?" habe ich 
gezeigt, das ich e schon etwas dazu gelesen habe. War blöd weil deine 
Antwort war ja gut.

@Hm P Danke

@Wolfgang Danke, stimmt ganz vergessen obwohl ich das glaub ich schon 
2mal gelesen habe. Von da hatte ich auch meine Überlegung bzw mein 
"Wissen" nur hat mich die Anzahl der Pins irgendwie verwirrt, weil ich 
mich nicht erinnern konnte gelesen zu haben das PORTB nur 7 hat.

von Ulrich F. (Gast)


Lesenswert?

hape_kerkeling schrieb:
> "wenn es jetzt nur als Beispiel der 3 Pin von PORTB
> ist muss ich ins DDRB b00000100 schreiben, stimmt das?"
Nein!
Nicht b00000100, sondern b00001000

von hape_kerkeling (Gast)


Lesenswert?

Hat Stefan bereits geschrieben. Danke trotzdem.

von hape_kerkeling (Gast)


Lesenswert?

Wieso sind die Ports überhaupt so komisch aufgeteilt? Ich lese immer nur 
"Das ist ein Geheimnis von Atmel" aber anscheinend ist ja Platzmangel 
als Grund bekannt.

von hape_kerkeling (Gast)


Lesenswert?

Oder ist damit der Platz auf der Leiterplatine gemeint?

von Timmo H. (masterfx)


Lesenswert?

Und damit man sich nicht mit den Pin-Nummern vertut und es gleichzeitig 
leserlicher ist, nimmt man die DDx0-7, PINx0-7 bzw. Px0-7
z.B.
DDRD |= (1<<DDD0) | (1<<DDD0)....; //PD0 oder PIND0 geht natürlich auch

von Peter R. (pnu)


Lesenswert?

Na, aufpassen: das ist wie mit der Nummerierung von Jahrhunderten
Das erste Jahrhundert enthält die Zahlen Null bis 99 und keine 1 
vornedran.
Das zweite hat die Nummern 100 bis 199. Das zwanzigste die Anfangszahl 
19xx. (Das haben wir gerade hinter uns.)

Der erste Pin eines Ports hat die Nummer 0, der dritte also die Nummer 2
die Zahl der Pins ist 8, aber die Nummerierung geht von 0 bis 7

mit 0b 0000 0100 wird der dritte Pin angesteuert, mit dem sbi-Befehl 
heißt es aber sbi portb,2

Abstrakt ausgedrückt. Die Nummerierung schließt die Null mit ein.

: Bearbeitet durch User
von c-hater (Gast)


Lesenswert?

hape_kerkeling schrieb:

> Wieso sind die Ports überhaupt so komisch aufgeteilt?

Die einfachste Antwort ist: Weil es sich halt so ergeben hat.

Tiefergehende Antworten würden dir nix nützen, weil da zu wenig von der 
Sache verstehst, um sie würdigen zu können.

Und, viel wichtiger, sie würden dir auch in keiner Weise helfen. Du 
müßtest trotzdem mit dem umgehen, was ist, wie es ist.

> Ich lese immer nur
> "Das ist ein Geheimnis von Atmel"

Wo willst du das gelesen haben?

> aber anscheinend ist ja Platzmangel
> als Grund bekannt.

Wo willst du das gelesen haben?

von Klaus (Gast)


Lesenswert?

pnu schrieb:

> Das erste Jahrhundert enthält die Zahlen Null bis 99 ...

Die Absicht ist gut, nur das Beispiel schlecht gewählt. Es gibt nämlich 
kein Jahr Null. Die Zählung beginnt mit dem Jahr 1, des ersten 
Jahrhunderts.

Siehe Wikipedia.

von Jo (Gast)


Lesenswert?

c-hater schrieb:
> Tiefergehende Antworten würden dir nix nützen, weil da zu wenig von der
> Sache verstehst, um sie würdigen zu können.
Mich würde es interessieren...

von Peter R. (pnu)


Lesenswert?

hape_kerkeling schrieb:
> Wieso sind die Ports überhaupt so komisch aufgeteilt? Ich lese immer nur
> "Das ist ein Geheimnis von Atmel" aber anscheinend ist ja Platzmangel
> als Grund bekannt.

für jeden Pin benötigt man eine Kontaktierungs/Bondungsfläche auf dem 
Chip, die die Größe von vielen hunderten Transistoren verbraucht.

Zuerst werden die Teile des Kontrollers (CPU, EEPROM,RAM..Peripherie)auf 
dem Chip so angeordnet, dass möglichst kurze Busse dazwischen entstehen.

Erst danach kann man die Verbindungen zu den außen liegenden 
Kontaktierungsflächen entwerfen. Da hat man dann schon relativ wenig 
Freiheit.

Wenn man dann noch die Masse- und VCC-Anschlüsse mit möglichst kurzen 
Verbindungen legen muss, bleibt nur noch wenig Freiheit für die 
Zuweisungen an die einzelnen Bondungsflächen.

Da kein Hersteller gerne die Details des Chip-Entwurfs offenlegt, kann 
man bedingt von Geheimhaltung reden, muss aber doch berücksichtigen, 
dass für den Anwender diese Einzelheiten unwichtig sind, solange er sich 
mit dem einaml veröffentlichen Zustand zufrieden gibt.

Such Dir doch im net ein paar Fotos von Kontrollerchips heraus. Da 
siehst Du, wie eng die einzelnen Funktionsgruppen gepackt sind und wie 
groß in Vergleich dazu die Bondungsflecken sind. und wie schwierig es 
ist, die Verbindungen zwischen den Funktionsgruppen herzustellen.

Selbstverständlich versuchen die Hersteller, die Pins so zu legen, dass 
der Leiterplattenentwurf einigermaßen einfach sein kann. Aber je nach 
Gehäuse (DIL, SMD,ball-grid...) ) oder Beschaltung (mit, ohne Quarz, 
AD-Wandler usw.) wäre eine andre Anordnung optimal. Das so zu machen 
geht aber einfach nicht.

: Bearbeitet durch User
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.