Atmel Mega Port toggeln

G

Gerald Oppen

Guest
Konkret geht es um einen Atmel Mega48.
Die Atmel-uCs sind für mich Neuland - die Ports funktionieren
ein bischen anderst als bei meinen bisherigen uCs.
So wie ich das Verstanden habe lässt ein Setzen von Register PINxn
den zugehörigen Portxn toggeln. In der Entwicklungsumgebung scheinen
dabei jedoch alle Pins dieses Ports zu toggeln (USB- 1Wire ICE von Atmel
mit Software 4.09).
Da Prozessor als auch Entwicklungsumgebung noch recht neu sind weiss ich
jetzt nicht ob der Fehler bei mir liegt oder ob ich auf einen Bug
gestossen bin - beim ersten Muster liess sich nicht mal die Taktquelle
umstellen.

Gerald
 
Uwe Bonnes schrieb:


PINx: Das Signalk, was am Porteingang anliegt
DDRx: Data Direction ( 1 fuer Ausgang)
PORTx: Signal dass ggf an den Ausgang gelegt wird (bei DDR=1). Bei
PORTx=1 und DDRx=0 wird ein Pull-Up an den Eingang gelegt

Besorg Dir mal bei Atmel das Datenblatt.
Danke, soweit bin ich schon. Mir geht es um den Teil mit dem Port
toggeln was bei beschreiben von PINxn - Register geschieht - steht auch
im Datenblatt, funktioniert aber anderst wie erwartet, d.h. nicht der
einzelne Pin toggelt sodern der gesamte PORTC in meinem Fall.

Gerald
 
Gerald Oppen schrieb:

Mir geht es um den Teil mit dem Port
toggeln was bei beschreiben von PINxn - Register geschieht - steht auch
im Datenblatt, funktioniert aber anderst wie erwartet, d.h. nicht der
einzelne Pin toggelt sodern der gesamte PORTC in meinem Fall.
Hi Gerald, du schreibst auf PINx ?
Also bis jetzt dachte ich, daß die PINx read only sind. DDRx u. PORTx
sind read/write. Mit toggeln meinst du "ein Bit negieren" also
0->1 und 1->0. Das geht IMO nur (Assembler) mit einer XOR Operation.
Gruß Andy
 
Gerald Oppen wrote:

So wie ich das Verstanden habe lässt ein Setzen von Register PINxn
den zugehörigen Portxn toggeln. In der Entwicklungsumgebung scheinen
dabei jedoch alle Pins dieses Ports zu toggeln (USB- 1Wire ICE von Atmel
mit Software 4.09).
Mit welchem Befehl hast Du das denn gemacht? Mit sbi wie im Datenblatt
steht?

Da Prozessor als auch Entwicklungsumgebung noch recht neu sind weiss ich
jetzt nicht ob der Fehler bei mir liegt oder ob ich auf einen Bug
gestossen bin - beim ersten Muster liess sich nicht mal die Taktquelle
umstellen.
Was natürlich auch heißt, daß hier praktisch noch niemand damit
gearbeitet hat (mich eingeschlossen). Der ATMega8 (von dem
der Mega48 ja abstammt) kann das toggeln nämlich noch nicht.

Markus
 
Andreas Weber schrieb:

Gerald Oppen schrieb:

Mir geht es um den Teil mit dem Port
toggeln was bei beschreiben von PINxn - Register geschieht - steht auch
im Datenblatt, funktioniert aber anderst wie erwartet, d.h. nicht der
einzelne Pin toggelt sodern der gesamte PORTC in meinem Fall.

Hi Gerald, du schreibst auf PINx ?
Also bis jetzt dachte ich, daß die PINx read only sind. DDRx u. PORTx
sind read/write. Mit toggeln meinst du "ein Bit negieren" also
0->1 und 1->0. Das geht IMO nur (Assembler) mit einer XOR Operation.
Offensichtlich können die neuen ATMega's (48,88,168) das. Man beschreibt
das PIN-Register und der Port toggelt. Nutzt man SBI/CBI zum beschreiben
des Registers toggelt nur der entsprechende Pin. So zumindest hab ich
das Datenblatt verstanden.

--
Matthias Weißer
matthias@matwei.de
http://www.matwei.de
 
Gerald Oppen <Gerald.Oppen@web.de> wrote:
: Konkret geht es um einen Atmel Mega48.
: Die Atmel-uCs sind f?r mich Neuland - die Ports funktionieren
: ein bischen anderst als bei meinen bisherigen uCs.
: So wie ich das Verstanden habe l?sst ein Setzen von Register PINxn
: den zugeh?rigen Portxn toggeln. In der Entwicklungsumgebung scheinen
: dabei jedoch alle Pins dieses Ports zu toggeln (USB- 1Wire ICE von Atmel
: mit Software 4.09).
: Da Prozessor als auch Entwicklungsumgebung noch recht neu sind weiss ich
: jetzt nicht ob der Fehler bei mir liegt oder ob ich auf einen Bug
: gestossen bin - beim ersten Muster liess sich nicht mal die Taktquelle
: umstellen.

PINx: Das Signalk, was am Porteingang anliegt
DDRx: Data Direction ( 1 fuer Ausgang)
PORTx: Signal dass ggf an den Ausgang gelegt wird (bei DDR=1). Bei
PORTx=1 und DDRx=0 wird ein Pull-Up an den Eingang gelegt

Besorg Dir mal bei Atmel das Datenblatt.

Bye

--
Uwe Bonnes bon@elektron.ikp.physik.tu-darmstadt.de

Institut fuer Kernphysik Schlossgartenstrasse 9 64289 Darmstadt
--------- Tel. 06151 162516 -------- Fax. 06151 164321 ----------
 
So wie ich das Verstanden habe lässt ein Setzen von Register PINxn
den zugehörigen Portxn toggeln. In der Entwicklungsumgebung scheinen
dabei jedoch alle Pins dieses Ports zu toggeln (USB- 1Wire ICE von Atmel
mit Software 4.09).
PINxn sind nur die Eingänge -
wenn du einen Ausgang toggeln willst könntest du das probieren:

xor r16,r16
ldi r17,$01

loop:
xor r16,r17
sbis sreg,z
cbi porta,0
sbic sreg,z
sbi porta,0
rjmp loop


Da Prozessor als auch Entwicklungsumgebung noch recht neu sind weiss ich
jetzt nicht ob der Fehler bei mir liegt oder ob ich auf einen Bug
gestossen bin - beim ersten Muster liess sich nicht mal die Taktquelle
umstellen.
Da du eh schon geschrieben hast, dass du dich nicht damit auskennst glaube
ich nicht du bist auf einen Bug gestoßen ...

gruß

thomas
 
Gerald Oppen <Gerald.Oppen@web.de> wrote:


: Uwe Bonnes schrieb:


: > PINx: Das Signalk, was am Porteingang anliegt
: > DDRx: Data Direction ( 1 fuer Ausgang)
: > PORTx: Signal dass ggf an den Ausgang gelegt wird (bei DDR=1). Bei
: > PORTx=1 und DDRx=0 wird ein Pull-Up an den Eingang gelegt
: >
: > Besorg Dir mal bei Atmel das Datenblatt.

: Danke, soweit bin ich schon. Mir geht es um den Teil mit dem Port
: toggeln was bei beschreiben von PINxn - Register geschieht - steht auch
: im Datenblatt, funktioniert aber anderst wie erwartet, d.h. nicht der
: einzelne Pin toggelt sodern der gesamte PORTC in meinem Fall.

: Gerald

PORTD=1 setzt PD0
PORTD=2 setzt PD1

usw
--
Uwe Bonnes bon@elektron.ikp.physik.tu-darmstadt.de

Institut fuer Kernphysik Schlossgartenstrasse 9 64289 Darmstadt
--------- Tel. 06151 162516 -------- Fax. 06151 164321 ----------
 
Matthias Weißer schrieb:

Hi Gerald, du schreibst auf PINx ?
Also bis jetzt dachte ich, daß die PINx read only sind. DDRx u. PORTx
sind read/write. Mit toggeln meinst du "ein Bit negieren" also
0->1 und 1->0. Das geht IMO nur (Assembler) mit einer XOR Operation.


Offensichtlich können die neuen ATMega's (48,88,168) das. Man beschreibt
das PIN-Register und der Port toggelt. Nutzt man SBI/CBI zum beschreiben
des Registers toggelt nur der entsprechende Pin. So zumindest hab ich
das Datenblatt verstanden.
Ja, genau das meine ich - nur dass bei mir eben nicht der einzelne Pin
toggelt sondern der gesamte Port obwohl nur ein einzelner Pin gesetzt
wird (auch per Mausklick am Emulator auf ein PIN-Register ist das so).

Aber wenn das jetzt erst mit den neuen Megas eingeführt wurde ist ein
Bug doch nicht so ganz auszuschliesen...

Gerlad
 
Markus Kaufmann schrieb:

Mit welchem Befehl hast Du das denn gemacht? Mit sbi wie im Datenblatt
steht?
Unter C und direkt mit der Maus auf der Entwicklungs-Oberfläche...

Was natürlich auch heißt, daß hier praktisch noch niemand damit
gearbeitet hat (mich eingeschlossen). Der ATMega8 (von dem
der Mega48 ja abstammt) kann das toggeln nämlich noch nicht.
War mir nicht bekannt dass diese Funktion erst neu eingeführt wurde
da es mein erster Atmel ist.

Gerald
 
Gerald Oppen schrieb:
Offensichtlich können die neuen ATMega's (48,88,168) das. Man beschreibt
das PIN-Register und der Port toggelt. Nutzt man SBI/CBI zum beschreiben
des Registers toggelt nur der entsprechende Pin. So zumindest hab ich
das Datenblatt verstanden.

Ja, genau das meine ich - nur dass bei mir eben nicht der einzelne Pin
toggelt sondern der gesamte Port obwohl nur ein einzelner Pin gesetzt
wird (auch per Mausklick am Emulator auf ein PIN-Register ist das so).

Aber wenn das jetzt erst mit den neuen Megas eingeführt wurde ist ein
Bug doch nicht so ganz auszuschliesen...
Aber wohl eher ein Bug im AVR-Studio als im Chip. Wie schreibst du in
das Pin-Register? Mit SBI oder mit OUT?

--
Matthias Weißer
matthias@matwei.de
http://www.matwei.de
 
Hmm - ist ja eine lustige neue Funktion ...

Gruß

Thomas

"Gerald Oppen" <Gerald.Oppen@web.de> schrieb im Newsbeitrag
news:2pkcp8Flst3oU1@uni-berlin.de...
Thomas Pototschnig schrieb:


PINxn sind nur die Eingänge -

Nicht mehr bei den neuen ATMEGA48 - siehe andere Postings

Gerald
 
Gerald Oppen <Gerald.Oppen@web.de> wrote:


: Thomas Pototschnig schrieb:


: > PINxn sind nur die Eing?nge -

: Nicht mehr bei den neuen ATMEGA48 - siehe andere Postings

Woher hast Du den Baustein?

--
Uwe Bonnes bon@elektron.ikp.physik.tu-darmstadt.de

Institut fuer Kernphysik Schlossgartenstrasse 9 64289 Darmstadt
--------- Tel. 06151 162516 -------- Fax. 06151 164321 ----------
 
Matthias Weißer schrieb:

Aber wohl eher ein Bug im AVR-Studio als im Chip. Wie schreibst du in
das Pin-Register? Mit SBI oder mit OUT?
Habe mir noch nicht genau angeschaut was der C-Compiler daraus macht -
zumal mir die Atmel-Assemblerbefehle noch nicht geläufig sind.

Gerald
 
Hallo!

"Gerald Oppen" <Gerald.Oppen@web.de> schrieb

PINxn sind nur die Eingänge -

Nicht mehr bei den neuen ATMEGA48 - siehe andere Postings
Wo hast Du das eigentlich gelesen? Wenn ich im Datenblatt zum Mega48
(doc2545.pdf) auf Seite 79 schaue, steht bei PINC immer noch nur ein R und
nicht R/W. Und auch das Bild 24 auf Seite 63 sieht aus als könntest Du PINx
nur lesen

Gruß

Dirk
 
Dirk <dirk.doerr@3soft.de> wrote:
: Hallo!

: "Gerald Oppen" <Gerald.Oppen@web.de> schrieb

: >> PINxn sind nur die Eing?nge -

: > Nicht mehr bei den neuen ATMEGA48 - siehe andere Postings

: Wo hast Du das eigentlich gelesen? Wenn ich im Datenblatt zum Mega48
: (doc2545.pdf) auf Seite 79 schaue, steht bei PINC immer noch nur ein R und
: nicht R/W. Und auch das Bild 24 auf Seite 63 sieht aus als k?nntest Du PINx
: nur lesen

Seite 64:
Toggling the Pin Writing a logic one to PINxn toggles the value of PORTxn,
independent on the value of DDRxn. Note that the SBI instruction can be used
to toggle one single bit in a port.

Bye
--
Uwe Bonnes bon@elektron.ikp.physik.tu-darmstadt.de

Institut fuer Kernphysik Schlossgartenstrasse 9 64289 Darmstadt
--------- Tel. 06151 162516 -------- Fax. 06151 164321 ----------
 
Hallo!

"Uwe Bonnes" <bon@elektron.ikp.physik.tu-darmstadt.de> schrieb im
Newsbeitrag news:ch5clo$ibg$1@lnx107.hrz.tu-darmstadt.de...

Seite 64:
Toggling the Pin Writing a logic one to PINxn toggles the value of PORTxn,
independent on the value of DDRxn. Note that the SBI instruction can be
used
to toggle one single bit in a port.
Ah, ja. Den kleinen Abschnitt habe ich übersehen. Interessant. Dann ist
vermutlich die Port-Übersicht noch falsch Da das Doc. noch als vorläufig
klassifiziert ist, muß man natürlich noch abwarten, was gültig ist.

Da der OP sagt, daß er es mit einer C-Routine versucht, stellt sich die
Frage was der Compiler daraus macht.

Gruß

Dirk
 
Gerald Oppen wrote:

Habe mir noch nicht genau angeschaut was der C-Compiler daraus macht -
zumal mir die Atmel-Assemblerbefehle noch nicht geläufig sind.
Wenn dein C Compiler inline Assembler unterstützt, wäre das eine
schnelle, einfache Möglichkeit, die direkten Assemblerbefehle zu
erzwingen, ohne dass du von deinem C-Source weg musst.

Viele Grüße
Johannes
 
* Johannes Bauer <dfnsonfsduifb@gmx.de> [2004-09-02 14:54]:
Gerald Oppen wrote:

Habe mir noch nicht genau angeschaut was der C-Compiler daraus macht -
zumal mir die Atmel-Assemblerbefehle noch nicht geläufig sind.

Wenn dein C Compiler inline Assembler unterstützt, wäre das eine
schnelle, einfache Möglichkeit, die direkten Assemblerbefehle zu
erzwingen, ohne dass du von deinem C-Source weg musst.
ein anständiger Compiler sollte aber aus sowas wie

PORTB |= _BV(PB5);

ein sbi machen. Macht zumindest der avr-gcc. Ohnehin sollte man bei
solch hardwarenaher Programmierung immer ein Assemblerlisting zur Hand
haben, ich lass es automatisch beim `make' generieren.


Gruß,
Bernhard

--
"Feature freeze means that everyone has a bad feeling when they change
something, almost nothing more."
-- Stephan Kulow
 

Welcome to EDABoard.com

Sponsor

Back
Top