www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik serielle Datenübertragung mit Atmel Controllern


Autor: Joachim Eisenberg (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

Ich möchte einen digitalen Lautstärkesteller von Burr- Brown ( Typ. PGA
2310 ) über einen Atmel- Controller ( z.B. den 90S2313) ansteuern.
Dieses IC empfängt 16 Bit Daten ( jeweils 8 Bit pro Kanal ) die seriell
übertragen werden müssen. Mittels "Chip Select"- Leitung wird die
Datenübertragung freigeschaltet. Wie kann ich das mit Atmel- µCs
hinbekommen? Ich habe überlegt, den UART zu verwenden, aber hier stören
die Start- und Stop- Bits. Die 16 Bits müssen direkt hintereinander und
synchron zum CPU- Takt an den PGA 2310 geschickt werden.

Vielen Dank für Ideen und Anregungen.

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Klingt sehr nach SPI. Gibt's als Schrumpfversion (USI) im Tiny2313 oder
etwas vollständiger im Mega8. Wie schnell getaktet? Nur 1 Bit Zeit, um
das erste Byte abzuholen.

Autor: Joachim Eisenberg (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
...vielen Dank für die schnelle Antwort.

Der PGA 2310 kann bis 6,25 MHz Taktfrequenz arbeiten.

Autor: Rufus T. Firefly (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kann. Und muss?

Sind die zu übertragenden Daten der Audiodatenstrom oder ist das die
nur gelegentlich zu übertragende Lautstärkeeinstellung? (habe gerade
kein Datenblatt des PGA vor mir)

Wenn letzteres zutrifft, erscheint mir eine so hohe Datenrate für das
Verstellen der Lautstärke etwas unnötig.

Autor: Joachim Eisenberg (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
6,25 MHz ist die maximal mögliche Taktfrequenz. Übertragen wird
tatsächlich nur die Lautstärkeeinstellung, die Verarbeitung analoger
Signale findet ausschließlich im PGA 2310 statt.
Ich habe über einen Audioversand einen Bausatz entdeckt, in dem ein
Atmel 90 S 2313 für den PGA 2310 genau diese Aufgabe verrichtet. Wie
kann das mit diesem Controller ( ohne SPI, wie von A.K. oben
vorgeschlagen ) funktionieren?
Ich möchte den angebotenen Bausatz nicht nutzen, da die Einstellung der
Lautstärke über eine Tastatur vorgenommen wird, ich selbst aber mit
Drehencodern arbeiten will.

Autor: Rufus T. Firefly (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Interessant ist hier also nicht die maximale, sondern die minimale
Taktfrequenz, die der PGA auf dieser Schnittstelle akzeptiert. Solange
die nicht allzu hoch ist, kann die Schnittstelle in Software per "bit
banging" implementiert werden.

Da dieses Interface dem SPI sehr ähnlich zu sein scheint, solltest Du
mal nach "software spi" suchen.
Je nach Entwicklungssystem kann das sogar eine mitgelieferte
Libraryfunktion sein. Der Basic-Compiler BASCOM beispielsweise
unterstützt Software-SPI auch mit anderen Wortlängen als 8 Bit.

Betr. Drehencoder: Hast Du Dir mal Schrittmotoren angesehen? Die kann
man wunderbar zu Drehencodern umfunktionieren, und sie haben eine sehr
"wertige" Haptik aufgrund der bewegten Masse und des Einrastens an
den Polstellen. Wenn ausreichend Platz im Gerät ist, ist so ein
Schrittmotor eine sehr schöne Alternative zu anders aufgebauten
Drehencodern. Wie die analoge Signalaufbereitung aufzubauen ist, wurde
hier des öfteren besprochen; 's ist nicht arg kompliziert.

Autor: Joachim Eisenberg (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für den Encoder- Tip!

Ich nutze zum Programmieren den AVR- Assembler. Weißt Du, ob hier auch
entsprechende Libraryfunktionen wie bei BASCOM existieren?

Um die analoge Signalaufbereitung brauche ich mich beim PGA 2310 nicht
zu kümmern. Dieses gute Teil besteht intern aus Widerstandsnetzwerken,
Analogschaltern und Operationsverstärkern. Das Audiosignal wird einfach
nur auf das Widerstandsnetzwerk gegeben, das entsprechend der digitalen
Ansteuerung ( in meinem Fall über den Atmel ) geschaltet wird.

Autor: Rufus T. Firefly (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Joachim Eisenberg (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank, werde mich da mal einarbeiten.

Autor: Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So wie ich das Datenblatt verstehe, ist es wirklich SPI, wobei einfach
zwei Bytes nachreinander übertragen werden; das erste für den linken
und das zweite für den rechten Kanal.

Die Daten werden mit der steigenden Flanke an SCL übernommen.
Es gibt sogar ein SDO.
Vier Anschlüsse: SCLK, SDI, SDO, /CS.
Synchrone serielle Datenübertragung... SPI!
Bei der Atmel-SPI muß man sich doch auch um das /CS selber kümmern.
Beispielcode (leider in C, da kein Programmierer über 12 Jahren noch in
Basic programmiert...[Ich möchte jetzt keinen dieser Glaubenskriege
anfangen, welche Sprache besser ist. Das ist die Aussage eines
professioneller Programmierer (nicht meine!!!)]):

void write(unsigned char rechts, unsigned char links)
{
  PORTB &= ~(1<<SlaveSelect);    // SPI-Übertragung einleiten
  SPDR = rechts;          // Write-Kommando (0x02) senden
  while (!(SPSR && (1<<SPIF)));    // Warten, bis Byte gesendet wurde
  SPDR = links;            // Register-Adresse übertragen
  while (!(SPSR && (1<<SPIF)));    // Warten, bis Byte gesendet wurde
  PORTB |= (1<<SlaveSelect);      // SPI-Übertragung beenden
}

So schwierig siehr das doch auch gar nicht aus. Alles im Poll-Betrieb.

Autor: Rufus T. Firefly (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Einige AVRs haben aber anscheinend kein Hardware-SPI, das aber betrifft
wohl nur die "älteren Semester".

Autor: Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Kommentare stammen noch aus dem Original-Programm. Haben leider
nicht ganz den Sinn, den Kommentare haben sollten...

Gruß Rahul

Autor: Helmut (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen.
Ich habe ein ähnliches Problem. Ich will ein 16 Bit-Wort über die
8-Bit-Hardware-SPI-Schnittstelle eines AT90CAN128 übertragen.
Wie schaffe ich es, daß die beiden Bytes "aneinandergeklebt" (also
quasi als 16Bit-Wort übertragen werden). Der SPI-Clock müßte mit 2MHz
laufen.
Ich programmiere mit WINAVR (also in C).

Vielen Dank und viele Grüße
Helmut

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.