Forum: Mikrocontroller und Digitale Elektronik ATmega32 einzelne Pins setzen und abfragen


von Colin v. (colin_v)


Lesenswert?

Hallo µC-Freunde !
ich bin neu hier im Forum und konnte leider über die SuFu nichts 
finden..

Ich bin dabei einen Atmel ATmega32 in C zu programmieren.

Ich möchte nun gerne einzelne Pins, die als Eingang gesetzt sind, 
abfragen.

Außerdem möchte ich einzelne Pins, die natürlich als Ausgang geschaltet 
sind, setzen.

Das Setzten bzw. Löschen der Pins soll aber unabhängig der anderen Pins 
an dem selben Port ermöglicht werden.

z.B.

Port-A ist als Eingang geschaltet. Nun läuft im µC eine Schleife ab, die 
nur unterbrochen werden soll, wenn Pin 5 an Port-A "high" ist.

Ich hoffe ihr könnt mir dabei helfen.

Liebe grüße

Colin

(p.s. das ist keine Hausaufgabe aus der Schule etc. :D)

von Stefan P. (form)


Lesenswert?


von Tutorialgucker (Gast)


Lesenswert?

Vielleicht einfach mal im Tutorial nachschauen. Ist sehr gut und da 
steht alles inklusive Code.

http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Eing.C3.A4nge_.28Wie_kommen_Signale_in_den_.C2.B5C.29

von Karol B. (johnpatcher)


Lesenswert?

Colin v.H. schrieb:
> Ich möchte nun gerne einzelne Pins, die als Eingang gesetzt sind,
> abfragen.
>
> Außerdem möchte ich einzelne Pins, die natürlich als Ausgang geschaltet
> sind, setzen.
I.A. lassen sich Ports bei AVRs nur im "Ganzen" verarbeiten. Allerdings 
kann man mittels geeigneter Bitmanipulation (siehe 
https://www.mikrocontroller.net/articles/Bitmanipulation) problemlos 
einzelne Bits abfragen, setzen bzw. löschen.

Colin v.H. schrieb:
> Port-A ist als Eingang geschaltet. Nun läuft im µC eine Schleife ab, die
> nur unterbrochen werden soll, wenn Pin 5 an Port-A "high" ist.
Ich hab das Datenblatt des ATmega32 nicht zur Hand, aber wenn das 
wirklich so ablaufen soll, dann wirst du externe Interrupts verwenden 
müssen und erst einmal überprüfen müssen, ob PA5 diese Funktionalität 
überhaupt bietet.

von Peter II (Gast)


Lesenswert?

Karol Babioch schrieb:
> I.A. lassen sich Ports bei AVRs nur im "Ganzen" verarbeiten. Allerdings
> kann man mittels geeigneter Bitmanipulation (siehe
> https://www.mikrocontroller.net/articles/Bitmanipulation) problemlos
> einzelne Bits abfragen, setzen bzw. löschen.

ist das nicht ein wiederspruch in sich?

der atmel kann sowohl einen Port als auch ein Bit eines Ports ändern.

von Karol B. (johnpatcher)


Lesenswert?

Peter II schrieb:
> ist das nicht ein wiederspruch in sich?
Nö, wieso? Ich hatte ein "i.A." vorangestellt. Die meisten Befehle 
operieren auf 8 Bit, wobei es natürlich auch Befehle gibt, welche 
einzelne Bits direkt setzen/löschen bzw. abfragen können.

Ansonsten muss man halt den ganzen Port einlesen, mittels 
Bitmanipulation zu seinem Wohlwollen ändern, und wieder zurück 
"schreiben". Das lässt sich dann halt nicht mehr in einem Takt 
erledigen.

von Peter II (Gast)


Lesenswert?

Karol Babioch schrieb:
> Nö, wieso? Ich hatte ein "i.A." vorangestellt.

schön und das heist. "Im Auftrag" oder "Im Allgemeinen" macht aber 
beides keinen sinn.

> Die meisten Befehle
> operieren auf 8 Bit, wobei es natürlich auch Befehle gibt, welche
> einzelne Bits direkt setzen/löschen bzw. abfragen können.
befehle werden nicht nach menge eingeordnet.

Man kann beides machen ein ganzen Port oder ein einzelnes Bit so wie man 
es braucht.

von Peter D. (peda)


Lesenswert?

Am einfachsten mit Bit-Macros:

Beitrag "Re: Problem mit Befehl SET"


Peter

von Karol B. (johnpatcher)


Lesenswert?

Peter II schrieb:
> schön und das heist. "Im Auftrag" oder "Im Allgemeinen" macht aber
> beides keinen sinn.
Klar tut es das. "Im Allgemeinen" bedeutet laut Wikipedia u.A. ("für 
alle oder die überwiegende Mehrheit geltend"). Und ich denke wir sind 
uns einig darüber, dass die ein Großteil der Befehle aus dem AVR 
Instruktionssatz mit 8-Bit Operanden arbeitet bzw. diese innerhalb eines 
Taktzyklus verarbeiten kann. Unter anderem zählen die AVRs ja auch 
deswegen zu den 8 Bit Mikroprozessoren.

Peter II schrieb:
> befehle werden nicht nach menge eingeordnet.
Wer verbietet mir denn Befehle nach Art der Operanden zu ordnen? Ich 
finde in diesem Fall kann es durchaus Sinn machen zwischen diesen beiden 
"Arten" von Befehlen zu unterscheiden.

von spess53 (Gast)


Lesenswert?

Hi

>Unter anderem zählen die AVRs ja auch
>deswegen zu den 8 Bit Mikroprozessoren.

Wegen der Takte pro Befehl bestimmt nicht.

MfG Spess

von Karol B. (johnpatcher)


Lesenswert?

spess53 schrieb:
> Wegen der Takte pro Befehl bestimmt nicht.

Doch. Typischerweise verarbeitet ein Mikroprozessor mit einer 
8-Bit-Architektur eben genau 8 Bit pro Taktzyklus. Auch das steht so auf 
Wikipedia (siehe hier 
(https://de.wikipedia.org/wiki/8-Bit-Architektur)):

> Vereinfacht dargestellt bedeutet 8 Bit, dass die Prozessoren durch ihr
> Design so ausgelegt sind, dass 8 Bit (also 1 Byte) gleichzeitig bzw.
> während eines Taktes verarbeitet werden können.

Sind denn heute nur Besserwisser, welche gar keine sind, unterwegs?

von spess53 (Gast)


Lesenswert?

Hi

>Doch. Typischerweise verarbeitet ein Mikroprozessor mit einer
>8-Bit-Architektur eben genau 8 Bit pro Taktzyklus. Auch das steht so auf
>Wikipedia (siehe hier
>(https://de.wikipedia.org/wiki/8-Bit-Architektur)):

Den Schwachsinn glaubst du aber nicht ernsthaft?  Denn die 8008- und 
8080-Modelle, die 6502-Serie, die 6800er Serie, die Z80-Serie,
MCS-51- und MCS-48-Serie ... erfüllen alle diese Bedingung nicht.

MfG Spess

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.