Geht Toggle via PINx=1 nicht bei allen AVRs?

geschaltet ist. Nach: DDRB=_BV(PB0); bewirkt ein PINB|=_BV(PB0); einen Bitwechsel an PB0.

Bei einem Tiny13 habe ich das schon in einem kleinen Programm benutzt. Bei einem Test auf einem Atmega32 zeigte sich hingegen keine Reaktion. Im Datenblatt zum Mega32 war aber auch nichts dazu zu

implementiert ist. Wenn ja, welche AVRs haben dieses Feature?

--
Dipl.-Inform(FH) Peter Heitzer, peter.heitzer@rz.uni-regensburg.de 
HTML mails will be forwarded to /dev/null.
Reply to
Peter Heitzer
Loading thread data ...

Zumindest bei den ATmega gibt es das Feature erst ab der 2. bzw. 3. Generation. Also ATmegaxx4 und ATmegaxx8 haben es, ATmegaxx nicht.

zwischen ATtiny11/12/15 (alt) und allen anderen.

Im Zweifelsfall das Datenblatt konsultieren.

XL

Reply to
Axel Schwenke

auch um einen Fehler der Dokumentation handeln.

zu verwenden. Im Normalfall kann man ja auch mit PORTB^=_BV(PB0) togglen.

--
Dipl.-Inform(FH) Peter Heitzer, peter.heitzer@rz.uni-regensburg.de 
HTML mails will be forwarded to /dev/null.
Reply to
Peter Heitzer

[snip]

In diesem Fall kannst du das aussschliessen. Ich kann mich noch gut daran erinnern wie Atmel genau dieses Toggle Feature als eine Neuerung der AVR's werbemaessig ausgeschlachtet hat (Die haben damals angedeutet, dass sie es auf Userwunsch hin hinzugefuegt haben). Wie von Axel bereits beschrieben, ist das nur bei den neueren Designs implementiert - was auch logisch ist. Man entwickelt nicht eine neue Chipmaske, um eine bereits etablierte Prozessorfamilie zu verbessern. Dafuer ist das Verhaeltnis von Nutzen zu Kosten/Risiko von neuen Bugs zu klein.

Gruss Klaus

Reply to
Klaus Bahner

Wo genau siehst du da das Problem, wenn man einen bisher reservierten Modus (in diesem Fall Schreiben auf I/O-Port PINx) mit einer neuen Funktion belegt?

Selbst 2 vollwertige Register (Command/Status) auf einer Adresse sind

den Wahnsinn noch in den Lachkrampf treiben.

Reply to
Michael Baeuerle

Da musste ich mich erst wieder richtig an die AVR-Architektur erinnern - DataDirection, In und Out sind ja drei Register. Hier wird also Data Out gesetzt und dann auf das In-Register geschrieben? Okay, das sollte

Das sind dann also vier Register - Data Direction In, Out Standard, Out Toggle, nur mit In/ Out Toggle auf der selben Adresse. Na ja, so richtig konsequent ist das irgendwie nicht.

Ich kenne keinen einzigen, bei dem ein Bit toggelt, wenn es auf '1' gesetzt wird. Werde mir jetzt aber wohl merken, dass so etwas nicht immer ein Fehler sein muss. ;o)

Reply to
Edzard Egberts

Es ist auf jeden Fall einfacher so, als ein neues Register pro Port

Register hat, das beim Lesen den Zustand der Pins ergibt und beim Schreiben in das Latch (vor den Pintreibern) schreibt. Aber Atmel hat nun mal die Trennung in PIN und PORT. Und da hat ein Schreib- zugriff auf das PIN Register nunmal keine offensichtliche Bedeutung

XL

Reply to
Axel Schwenke

DDRx (direction, rw), PORTx (output latch, rw), PINx (pin status, ro)

| | For compatibility with future devices, reserved bits should be written | to zero if accessed. | Reserved I/O memory addresses should never be written.

Dann wurde PINx umdefiniert zu: PINx(pin status, r / output toggle, w)

wie Atmel es empfiehlt.

port latch PORTx negiert.

Eigentlich sind es nur 2 Register (direction und port latch). Der Pin status hat kein richtiges Register wenn man von der Synchronisier-Logik absieht. Und der Toggle Befehl wird auch nicht gespeichert.

AVR hat einen sehr kleinen I/O-Adressraum (nur 64 I/O-Ports) und davon

Register nicht) nutzbar.

Mein Kommentar bezog sich auch allgemein auf "mehrere Register bzw. Funktionen auf der gleichen Adresse".

4 Takte wegen PUSH und POP und braucht den Stack. Und auf einem ATtiny13 mit nur 64Byte RAM kann das durchaus weh tun.
Reply to
Michael Baeuerle

Hallo Edzard,

Du schriebst am Tue, 16 Sep 2014 11:28:08 +0200:

st _jedes_ Periperieregister 3 (drei) Zusatzregister, mit denen man durch Schreiben auf 1 gesetzter Bits - diese Bits (auf 1) _setzen_

- bzw. _umschalten_ ("toggeln") kann.

n zu sein, weil auch nicht-ARMe das so implementieren.

--
--  


----------------------------------------------------------- 

-----------------------------------------------------------
Reply to
Sieghard Schicktanz

Bei Microchip PIC16 ist das so (man kann nur den Pinstatus, nicht aber

Obwohl die Pins als Ausgang konfiguriert waren, waren die Treiber nicht

den gelesenen Zustand behalten wollte) sind umgefallen.

RAM anzulegen, Read-Modify-Write nur auf diese Kopien zu machen und erst am Ende die Kopie in den Portlatch zu schreiben.

Seither betrachte ich die Kontruktion mit lesbaren Portlatches als das

Reply to
Michael Baeuerle

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.