AVR Ports und Pins Verständnisfrage

Gast #4288046
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
#4288062
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.
Gast #4288102
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.
Gast #4288115
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.
#4288808
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.
Gast #4288889
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?
Gast #4288892
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.
#4289511
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren