mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik 16bit Bus mit AVR


Autor: Rantanplan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

Für ein kleines Experiment bräuchte ich einen 16bit Bus. Dazu habe ich 
bei im Register XMCRA das Bit SRE gesetzt und kann so PORTA und C 
gemeinsam als 16bit Adressport benutzen. Wie sprich ich aber den Port 
an? Kann ich einfach einen 16Bit Wert auf den Port legen, z.B. 
PORTC=55FF ?

Grüße
Thomas

Autor: Knut Ballhause (Firma: TravelRec.) (travelrec) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Zum Einen gibt es kein Bit SRE im XMCRA-Register, es befindet sich im 
MCUCR. Damit schaltest Du lediglich das externe Speicherinterface an. 
Zum Anderen wird zum Anschluß des SRAM ein Latch benötigt, welches die 
unteren 8 Adressen und die Daten multiplext. Zum Dritten gibst Du gar 
nichts auf die Ports, das macht das externe Speicherinterface alleine, 
indem Du einen Zugriff auf Adressen machst, die höher als das interne 
SRAM liegen. Und dann wäre es nett, wenn Du bei Deiner nächsten Anfrage 
den Controller nennst, damit man nicht suchen muß, was Du meinst.

Autor: Rantanplan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wuff-wuff-wuff! Kläff-kläff...

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Rantanplan schrieb:
> Wuff-wuff-wuff! Kläff-kläff...
Armer Hund... was haben sie dir nur ins Fressen getan?
Getroffene Hunde bellen   :-/

> Kann ich einfach einen 16Bit Wert auf den Port legen, z.B. PORTC=55FF ?
Nein.
Port C ist nur 8 Bit breit.
55FF ist keine Zahl (0x55FF schon eher).

Du machst das z.B. so:
   *(char*)0x3456 = 0x55;

Autor: Rantanplan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Auszug aus dem Datenblatt:

External SRAM operation is enabled by setting the SRE bit in the XMCRA 
Register.


Soviel ich kapiert hab, müsste dann das 16bit Adressregister aktiviert 
sein unter PORTA in das ich dann auch 16bit Werte schreiben kann, z.B. 
PORTA = 0xffff


Ps.: Das Gekläffe war nicht von mir

Autor: Rantanplan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
und ich benötige den 16bit bus nicht für Speicher sondern anderweitig 
und erhoffte mir, dass ich ihn einfach als 16bit Port ansprechen 
könnte...

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Auszug aus dem Datenblatt:

Datenblatt WOVON?

> Soviel ich kapiert hab, müsste dann das 16bit Adressregister aktiviert
> sein unter PORTA in das ich dann auch 16bit Werte schreiben kann, z.B.
> PORTA = 0xffff

Nein. PORTA ist und bleibt ein 8-Bit-Register. Nochmal: Wenn du externes 
SRAM verwendest, adressierst du es wie das interne und nicht über 
irgendwelche Port-Register.

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nein, das geht so nicht. Das kann der 8-Bit-AVR nicht.

Wenn das Speicherinterface aktiviert ist, ist es das Speicherinterface, 
und kein Port mehr.

Ein µC, der tatsächlich zwei 8-Bit-Ports zu einem 16-Bit-Port 
zusammenfassen und auch mit einem Maschinenbefehl beschreiben kann, muss 
logischerweise ein 16-Bit-µC sein.
Das bedeutet aber nicht im Umkehrschluss, daß jeder 16-Bit-µC 
Portzusammenlegung unterstützt. Bei den MSP430 ist das beispielsweise 
ein recht neues Feature, das im 'F54xx zu finden ist, nicht aber in 
älteren Varianten.

Was möchtest Du mit Deinem 16-Bit-Bus ansteuern?

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> dass ich ihn einfach als 16bit Port ansprechen könnte...
Das geht nicht. Wo hast du das gelesen?
Zudem würde es keinen Sinn machen, denn der Controller muß trotzdem 
einen 16-Bit Zugriff in 2 einzelne 8-Bit Häppchen aufteilen. Gewonnen 
ist so nichts.

Da wäre ein kleines define genausogut:
#define BUS(x) (PORTA=(unsigned char)((x)>>8); PORTC=(unsigned char)(x)
:
   BUS(0x55ff);
:

Autor: Läubi .. (laeubi) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Naja es geht schon:
- Z Pointer laden mit 16 Bit Adresse
- Bus Holding aktivieren
- Dummy read
- XMEM deaktivieren

Ist aber natürlich nicht wirklich schneller/einfacher als einfach 2 
Reads/Writes oder so wie Lothar beschrieben hat.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Läubi .. schrieb:
> Naja es geht schon:

Nur, wenn es nicht stört, daß man keine kleinen Werte (interner 
Adreßraum) ausgeben kann.
Also eigentlich nutzlos.


Peter

Autor: Knut Ballhause (Firma: TravelRec.) (travelrec) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das einfachste ist es doch, an einen normalen Port ein latch zu hängen, 
dieses mit dem LowByte zu laden, das High-Byte am Port auszugeben und 
über einen weiteren Pin ein Strobe auszulösen, wenn die Daten gültig 
sind.

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dann kommen hi und low aber zeitlich versetzt angelegt, genauso wie wenn 
man einfach zwei Ports genommen hätte.

Autor: wieder (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Zwei Latches, zwei Ports. Zweimal ausgeben, beide Latches mit einem 
Signal durchschalten.

Autor: Knut Ballhause (Firma: TravelRec.) (travelrec) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn man eine Strobeleitung hat ist es wurscht, wenn die Bytes 
zeitversetzt ankommen, da die Daten erst bei Strobe gültig sind. Die 
externe Hardware muß dies freilich dann auch abfragen.

Autor: Thomas O. (kosmos)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Eigentlich braucht man ja nur 1 Port und ein enige Pins zur Steuerung, 
der Port wird dann parallel an beide Latches(oder auch mehrere) gelegt 
man gibt die Daten aus und teilt einem Latch mit das er sie übernimmt, 
dann gibt man die nächsten 8 Bit aus sagt dem anderem Latch "übernehme" 
und dann wiederum ein Signal parallel an beide Daten ausgeben.

Autor: Knut Ballhause (Firma: TravelRec.) (travelrec) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So in etwa.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Man könnte auch ganz einfach 2* 74HC595 kaskadieren und ran ans SPI.


Peter

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.