PORTA und DDRA Zusammenhang

OP #3134897
Lesenswert?

einen schönen guten Morgen!

bin ein Anfänger in Sachen Mikroprozessor und kann verschiedene 
Zusammenhänge einfach nicht komplett begreifen. Die Erklärung auf 
diversen Internet-Seiten und im Skript ist zu trocken und bringt mich 
leider auch nicht viel weiter.
Im Labor sollten wir eine Funktion zur Initialisierung der Ports 
erstellen.

als erstes kam der Befehl DDRA=0x00; wie ich verstanden haben, ist DDRA 
allgemein ein Eingang und wird nun auf 0 geschaltet (LEDs aus). Dann 
kommt ein komischer PORTA .. Der wird mit 0xff auf 1 geschaltet.
Die DDRB und PORTB werden auch auf 0xff geschaltet, also alle 1.

danach kann man anfangen mit proz. zu arbeiten.
Kann mir vielleicht jemand netterweise klar machen, wie diese komische 
DDRs und PORTs zusammenhängen?

Vielen dank im Voraus.
Gast #3134921
Lesenswert?

Dein ATmega(???) hat mehrere Ausgangsports (Port A, Port B, ...) deren 
Pins Px0 bis Px7 heißen.

Zu jedem Port gehören drei Register:
DDRx
PORTx
PINx

Jedes dieser Register ist 8 Bit breit, die Bits 1-8 im Register 
entsprechen den Pins 0-7.

Funktionen der Register:
DDR -> Datenrichtung bestimmen (0=Eingang, 1=Ausgang)
PORT -> Ausgaberegister
PIN -> Eingaberegister

Besonderheit des PORT-Registers: Seine Funktion ist vom DDR-Register 
abhängig.
Wenn DDR = 0: Aktiviert/deaktiviert interne Pull-Ups
Wenn DDR = 1: Schaltet Ausgangspin high/low

Deswegen kannst du mit dem PORT-Register auch keine Eingangssignale 
lesen, du würdest nur den Status der Pull-Ups einlesen.
Verwende also zum Einlesen das PIN-Register.

Du solltest zu dem Thema mal allgemein nach Atmega, AVR-GCC, Ports & 
Pins usw. googlen, da kommt noch einiges mehr...
Gast #3134999
Lesenswert?

Heißduscher schrieb:
> Diesen Beitrag bewerten:
>   ▲ lesenswert
>
>   ▼ nicht lesenswert
>
>
>
>       Weißt du, es gibt noch so viele andere schöne Hobbies.
> Suche dir eines davon aus!
>
> Wie wäre es mit Synchronschwimmen?

Das schlimme ist, dass es ja scheinbar kein Hobby ist, sonder er 
Elektrotechnik oder technische Informatik oder etwas ähnliches studiert, 
was die beiden kleinen Wörtchen "Skript" und "Labor" in seinem 
Anfangspost suggerieren. So besonders didaktisch wertvoll scheint das 
Skript nicht zu sein. Persönliche Erfahrung mit MCU-Technik scheint auch 
nicht vorhanden zu sein. Wieso also studiert man dann überhaupt sowas?
Jetzt hört man ja öfters, dass ein Studium einen lernfähig macht etc. 
pp. .
Alles nur Hörensagen. Also wozu braucht man noch ein Studium, wenn man 
es nicht mal mehr schafft, sich selber Informationen zu besorgen?
Gast #3135010
Lesenswert?

EGS_TI schrieb:
> So besonders didaktisch wertvoll scheint das
> Skript nicht zu sein. Persönliche Erfahrung mit MCU-Technik scheint auch
> nicht vorhanden zu sein. Wieso also studiert man dann überhaupt sowas?
> Jetzt hört man ja öfters, dass ein Studium einen lernfähig macht etc.
> pp. .
> Alles nur Hörensagen. Also wozu braucht man noch ein Studium, wenn man
> es nicht mal mehr schafft, sich selber Informationen zu besorgen?

Kann man eigentlich das Fach "mikrocontroller.net-Forum" irgendwo 
studieren?

Manche glauben das zumindest ;-)
OP #3135037
Lesenswert?

Heißduscher schrieb:
> Weißt du, es gibt noch so viele andere schöne Hobbies.
> Suche dir eines davon aus!
>
> Wie wäre es mit Synchronschwimmen?

haha)) guter Witz. Ne Synchronschwimmen ist mir schon zu schwer. 
Elektrotechnik fällt mir einfacher, vor allem, wenn man 
freundlicherweise Hilfe bekommt. Dadurch habt Ihr ja auch ein Vorteil, 
anstatt irgendwann dem Staat auf der Tasche zu liegen und Harz 4 zu 
beziehen, werde ich selbst einzahlen. Ist doch gut.
OP #3135068
Lesenswert?

also nach euren freundlichen Beiträgen konnte ich nun auch was mit dem 
Datenblatt anfangen. Nur bin ich nicht ganz sicher ob einzelne Elemente 
auch wirklich das sind, was ich vermute. Sicherheitshalber habe ich ein 
einzelnes PORT raus genommen und eingezeichnet. Wenn Ihr mal kurz einen 
Blick rein werfen würdet und Bescheid sagen, ob das wirklich so ist)
Danke!
Angehängte Dateien:
#3135088
Lesenswert?

Sascha M. schrieb:
> also nach euren freundlichen Beiträgen konnte ich nun auch was mit dem
> Datenblatt anfangen. Nur bin ich nicht ganz sicher ob einzelne Elemente
> auch wirklich das sind, was ich vermute. Sicherheitshalber habe ich ein
> einzelnes PORT raus genommen und eingezeichnet. Wenn Ihr mal kurz einen
> Blick rein werfen würdet und Bescheid sagen, ob das wirklich so ist)
> Danke!

NEEEIN.

DDR= Data Dir. Register, das stimmt und
PORT=Data Register.

Das steht sogar PORTF drin in dem Kasten. Warum sollen dann die Driver 
PORTF sein?
Du solltest mehr den Text lesen und weniger Bilder angucken.
Die Blockschaltbilder in den Datenblättern sind eher weniger informativ 
als die Texte.

gruß cyblord
Gast #3135140
Lesenswert?

Habe hier ein Datenblatt vom ATtiny48 vorliegen und dort gibt es ein 
"Lesezeichen" im Adobe Reader namens "10. I/O-Ports".
Darin findet man ab Seite 60 alle Informationen sehr gut erklärt.
Da steht alles drin. In Prosa und mit selbsterklärendem Blockschaltbild, 
falls man schonmal was von Digitaltechnik gehört hat.

Was hast du denn für eine Arbeitsweise? Wie bist du bei dem Problem 
jetzt genau vorgegangen? Und wieso ist das in eurem komischen Skript 
nicht näher beschrieben? An welcher HS studierst du?
Gast #3135184
Lesenswert?

Zu deinem Bild:

Welcher µC ist das? ATmega128?

So wie du es eingezeichnet hast stimmt es nicht.
Deine Angabe "Pins" ist korrekt, das sind die Pins zur Außenwelt 
(erkennt man daran das sie den gestrichelten Kasten verlassen).

"PORTF DRIVERS" bezeichnet die Schaltungstechnik ("Treiber") des Ports - 
sie bekommt von den DDR und PORT Registern vorgeschrieben, wie sie den 
Port genau schalten muss (z.B. Pull-Up ein oder einen Pin auf High-Pegel 
treiben).
An dieser Stelle sollten dir die drei möglichen Zustände eines solchen 
Pins wieder einfallen:
- Tri-State: Treiber hochohmig, Eingang
- High: Treiber niederohmig, Pin wird auf High-Pegel geschaltet
- Low: Treiber niederohmig, Pin wird auf Low-Pegel geschaltet

Der Kasten "DATA REGISTER" entspricht nicht zu 100% der Realität. In 
Wahrheit verstecken sich darin zwei verschiedene Datenregister:
1. PORT um Pins/Pullups zu schalten (Pfeil in Richtung PORTF DRIVERS)
2. PIN um Pins einzulesen (Pfeil in Richtung der Register)

"DATA DIR. REG." bezeichnet das DDR-Register.
Dieses Register gibt der Treiberelektronik vor, was sie jetzt mit den 
Daten aus dem PORT-Register tun soll:
DDR 1: Daten aus PORT schalten die Pins high/low --> Pins ist ein 
Ausgang
DDR 0: Daten aus PORT schalten die Pullups ein/aus --> Pin ist ein 
Eingang

Blöde Frage am Rand: An welcher Schule gibt es so grottige Skripte?!
OP #3135189
Lesenswert?

EGS_TI schrieb:

> Was hast du denn für eine Arbeitsweise? Wie bist du bei dem Problem
> jetzt genau vorgegangen? Und wieso ist das in eurem komischen Skript
> nicht näher beschrieben? An welcher HS studierst du?

also das vom Skript kapiere ich nicht. Da sind meist irgendwelche 
Abkürzungen und Diagramme. In Vorlesung verliert man so oft den Faden 
und kommt einfach nicht mit.
Ich fange damit an, dass ich die Begriffe die in Vorlesung und Labor 
fallen aufschreibe und danach separat im Internet suche. In 
Laborvorbereitung bekommt man konkrete Anweisungen, was zu machen ist 
und davon lernt man bestimmte Prozesse z.B. das Programmieren blind zu 
realisieren. Durch das Programmieren merkt man auch einiges. Da stellt 
man z.B. DDRA auf 0 und PORTA auf 1. Das heißt DDR und PORT hängen 
irgendwie zusammen. Aber wie? Nach einer langen Suche ist mir das nicht 
klarer geworden, dann bitte ich um Hilfe im Forum. Nun bin ich noch ein 
Schritt weiter, doch das ist immer noch der Anfang..)
Gast #3135204
Lesenswert?

Sascha M. schrieb:
> EGS_TI schrieb:
>
>> Was hast du denn für eine Arbeitsweise? Wie bist du bei dem Problem
>> jetzt genau vorgegangen? Und wieso ist das in eurem komischen Skript
>> nicht näher beschrieben? An welcher HS studierst du?
>
> also das vom Skript kapiere ich nicht. Da sind meist irgendwelche
> Abkürzungen und Diagramme. In Vorlesung verliert man so oft den Faden
> und kommt einfach nicht mit.
> Ich fange damit an, dass ich die Begriffe die in Vorlesung und Labor
> fallen aufschreibe und danach separat im Internet suche. In
> Laborvorbereitung bekommt man konkrete Anweisungen, was zu machen ist
> und davon lernt man bestimmte Prozesse z.B. das Programmieren blind zu
> realisieren. Durch das Programmieren merkt man auch einiges. Da stellt
> man z.B. DDRA auf 0 und PORTA auf 1. Das heißt DDR und PORT hängen
> irgendwie zusammen. Aber wie? Nach einer langen Suche ist mir das nicht
> klarer geworden, dann bitte ich um Hilfe im Forum. Nun bin ich noch ein
> Schritt weiter, doch das ist immer noch der Anfang..)

Falls das wirklich so ist, dann solltest du
- deinen Prof fragen dass es das besser erklärt oder
- deine Kommilitonen fragen, ob sies verstanden haben und dir erklären 
können oder
- die ein anderes Fach suchen

Du kannst nicht alles über Foren erfragen, dass ist auf Dauer nicht 
zielführend.

Das Thema ist sicher nix für weitergehende Vorlesungen, und wenns an 
solchen Grundlagen hapert, das wird das aus meiner Sicht nix mit dem 
(diesem) Studium.

Sorry, klingt jetzt hart, aber m.E. bist du bisher nicht in der Realität 
angekommen.
OP #3135206
Lesenswert?

Andi schrieb:
> Zu deinem Bild:
>
> Welcher µC ist das? ATmega128?
>
hey Andi, vielen vielen Dank für deine Beiträge! hat mich echt viel 
weiter gebracht! Ja das ist ein ATmega128 . das Bild hatte ich nicht vom 
Script, sondern irgendwo vom Datenblatt, doch Scripte sind für mich auch 
nicht viel verständlicher) Wenn der Prof es so erklären würde, wie Du 
jetzt gerade, bräuchte ich keine Hilfe von außen, doch meist ist das 
leider nicht der Fall ((
Noch mal vielen, herzlichen Dank!
Gruß
#3135208
Lesenswert?

Sascha M. schrieb:
> Da stellt
> man z.B. DDRA auf 0 und PORTA auf 1. Das heißt DDR und PORT hängen
> irgendwie zusammen. Aber wie?

Da schaut man ins Datenblatt und liest den Text der dort steht und dann 
weiß man es. Darum gibt es das Datenblatt. Was meinst woher die Leute 
hier das wissen? Trial & Error?

Du solltest dich weniger auf deinen Prof. verlassen und mehr selber 
recherchieren. Ein Studium ist in erster Linie immer ein Lernen für sich 
und aus verschiedenen Quellen. Die Vorlesung und das Skript sind da 
höchstens Hilfsmittel.

gruß cyblord
OP #3135212
Lesenswert?

::::::::::::::::::::::::::::::::::: schrieb:

> Sorry, klingt jetzt hart, aber m.E. bist du bisher nicht in der Realität
> angekommen.
das sehe ich anderes. gerade diejenigen die alle Mittel nutzen um 
Grundlagen zu verstehen kommen weiter, als die, die gleich in 
Verzweifelung geraten und Studiengang wechseln, wenn sie etwas nicht 
kapieren.  Solche Beiträge lese ich übrigens schon seit Anfang des 
Studiums und alle Fächer, um die es ging habe ich längst bestanden.
Gast #3135233
Lesenswert?

Sascha M. schrieb:
> ::::::::::::::::::::::::::::::::::: schrieb:
>
>> Sorry, klingt jetzt hart, aber m.E. bist du bisher nicht in der Realität
>> angekommen.
> das sehe ich anderes. gerade diejenigen die alle Mittel nutzen um
> Grundlagen zu verstehen kommen weiter ...

Zu deinem Eingangsposting gabs am Anfang des Threads eine gute Erklärung 
von Andi, unten nochmals reinkopiert.
Irgendwie erweckst du nicht den Eindruck, das verstanden zu haben.

Sascha M. schrieb:
> schon seit Anfang des
> Studiums und alle Fächer, um die es ging habe ich längst bestanden.

Welches Fach studierts du denn?
Welches Semester bist du denn?
Welchen Controller verwendest Du?
Warum ist das für einen Studenten (der eine abgeschlossene 
Schulausbildung mit Hochschulreife hat) so schwierig, das Posting von 
Andi zu verstehen?!?!?

Trollst Du?

Fragen über Fragen ...



Andi schrieb:
> Dein ATmega(???) hat mehrere Ausgangsports (Port A, Port B, ...) deren
> Pins Px0 bis Px7 heißen.
>
> Zu jedem Port gehören drei Register:
> DDRx
> PORTx
> PINx
>
> Jedes dieser Register ist 8 Bit breit, die Bits 1-8 im Register
> entsprechen den Pins 0-7.
>
> Funktionen der Register:
> DDR -> Datenrichtung bestimmen (0=Eingang, 1=Ausgang)
> PORT -> Ausgaberegister
> PIN -> Eingaberegister
>
> Besonderheit des PORT-Registers: Seine Funktion ist vom DDR-Register
> abhängig.
> Wenn DDR = 0: Aktiviert/deaktiviert interne Pull-Ups
> Wenn DDR = 1: Schaltet Ausgangspin high/low
>
> Deswegen kannst du mit dem PORT-Register auch keine Eingangssignale
> lesen, du würdest nur den Status der Pull-Ups einlesen.
> Verwende also zum Einlesen das PIN-Register.
>
> Du solltest zu dem Thema mal allgemein nach Atmega, AVR-GCC, Ports &
> Pins usw. googlen, da kommt noch einiges mehr...
OP #3135244
Lesenswert?

::::::::::::::::::::::::::::::::::: schrieb:

> Zu deinem Eingangsposting gabs am Anfang des Threads eine gute Erklärung
> von Andi, unten nochmals reinkopiert.
> Irgendwie erweckst du nicht den Eindruck, das verstanden zu haben.

ich habe es komplett verstanden, deine Eindrücke sind falsch.


> Schulausbildung mit Hochschulreife hat) so schwierig, das Posting von
> Andi zu verstehen?!?!?
>
> Trollst Du?
>
> Fragen über Fragen ...
 sinnlose Schlussfolgerungen erweckt durch falsche unbegründete 
Eindrücke.. trollst du?
Gast #3135575
Lesenswert?

Sascha M. schrieb:
> also das vom Skript kapiere ich nicht. Da sind meist irgendwelche
> Abkürzungen und Diagramme. In Vorlesung verliert man so oft den Faden
> und kommt einfach nicht mit.
> Ich fange damit an, dass ich die Begriffe die in Vorlesung und Labor
> fallen aufschreibe und danach separat im Internet suche. In
> Laborvorbereitung bekommt man konkrete Anweisungen, was zu machen ist
> und davon lernt man bestimmte Prozesse z.B. das Programmieren blind zu
> realisieren. Durch das Programmieren merkt man auch einiges. Da stellt
> man z.B. DDRA auf 0 und PORTA auf 1. Das heißt DDR und PORT hängen
> irgendwie zusammen. Aber wie? Nach einer langen Suche ist mir das nicht
> klarer geworden, dann bitte ich um Hilfe im Forum. Nun bin ich noch ein
> Schritt weiter, doch das ist immer noch der Anfang..)

Falls du die Port-Geschichte noch nicht verstanden hast: hast du 
zufällig mal das Datenblatt vom ATiny48 runtergeladen und dir die Seiten 
die ich oben genannt habe angeschaut?
Gast #3135602
Lesenswert?

Hi

Beim ATMega128 sollte aber die M103-Fuse gelöscht sein. Sonst 
funktionieren einige Ports etwas unerwartet:

• Port C is output only.
• Port G serves alternate functions only (not a general I/O port).
• Port F serves as digital input only in addition to analog input to the 
ADC.

MfG Spess

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