www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Einfaches u. schnelles Protokol evtl. mit Schieberegister?


Autor: Thomas Oly (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich beschreibe erstmal mein Projekt: Ich will einen ATtiny zur
Analogwandlung verwenden da dieser ja 11 Kanäle für den ADC hat, naja
einer fällt durch den Resetpin wieder weg also hätte ich 10 ADC Kanäle
und 4 normale IO Pins zur Verfügung. Der ATtiny soll fortlaufend die
Kanäle umwandeln dabei werden je nach Priorität manche Kanäle z.b. nur
bei jedem 10ten druchlauf gewandelt damit die wichtigen Kanäle
schneller aktualisiert werden, die Werte sollen dann in einzelne
Register abgelegt werden und bei einer Anfrage eines ATmega8535
ausgegeben werden. Für diese Anfrage und Ausgabe habe ich nur 4 Pins zu
Verfügung. Es soll eine möglichst schnelle und einfache Möglichkeit
gefunden werden die Daten zu übertragen. Ich habe mir gedacht  so
vorzugehen. Der Atmega sendet seine Abfrage 4bit für die Kanalauswahl
an 2 Pins des ATTinys also 1001 wird in 2 Schritten übertragen z.b. 10
und dann nochmal 01, damit der ATTiny weiß welche Werte gewünscht sind.
Dieser hat jetzt noch 2 Pins übrig. Die einfachste Lösung für mich wäre
eine Schieberegister zu verwenden in welches die 8Bit Daten
reingeschoben werden und bei einen High Befehl an 8 Pins des ATMega's
ausgegeben. Habe ich die Funktion des Schieberegisters richtig
verstanden oder braucht dieser mehr als nur einen Startbefehl, den ich
durch den letzten Pin auslösen könnte.

Ich favorisiere diese Lösung weil sie mit sehr wenig Programmieraufwand
zu verwirklichen wäre. Und die Übertragung auch sehr schnell geht, wenn
man das Schieberegister mit z.b. 125nS pro Bit betreiben kann dann
wären das ca 12x125nSek von der seriellen Eingabe bis zur paralellen
Ausgabe des Schieberegisters und der ATmega kann den Port dann auch
sehr schnell und sehr einfach zur Weiterverarbeitung einlesen.

Autor: crazy horse (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hm, ich verstehe nicht ganz, warum du den Umweg über ein Schieberegister
gehen willst?? Warum nicht direkt über SPI koppeln?

Autor: Thomas Oly (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

weil der programmieraufwand zu hoch ist für ein Schieberegister müsste
ich nur die Impulslangen durch schleifen einstelen und gut.
Ist meine Vorstellugn eines Schieberegisters richtig oder funktionieren
die doch etwas aufwändiger?

Autor: crazy horse (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Lies mal die Datenblätter/SPI-Interface. Da gibt es nicht viel zu
programmieren. Du brauchst dich weder um die Serialisierung des Byte
noch um die Takterzeugung kümmern. Byte reinschreiben und husch - weg
ist es. Weiterer Riesenvorteil: der MC bleibt frei für andere Aufgaben,
während er bei der Software-Serialisierung/Sendung für die Dauer der
Übertragung blockiert ist.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der ATTiny26 hat ein SPI/I2C Slave Interface, d.h. einfach als I2C- oder
SPI-Slave  an den Mega ranhängen.

Nur die Master-Funktion (Takterzeugung) fehlt dem ATTiny26.


Peter

Autor: Thomas Oly (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ok werds mir mal anschauen.

Autor: Bernd (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was soll das Projekt denn mal werden? - Vielleicht gibt es ja eine
einfachere Lösung.

Autor: Thomas O. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

es soll halt die Analog/Wandlung auf einen 2ten AVR ausgelagert werden,
damit der immer die Werte vorrätig hat und man weder drauf warten muss
noch durch einen Interrupt gestört wird. Außerdem wäre das ganze für
mich einfacher zu programmieren und ich hätte statt 8 Analogeingänge 10
Stück.

Autor: Thomas O. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

leider hat der ATtiny keine USART-Einheit sonst wärs ja kein Problem.
Aber mir gefällt eine parallele Lösung im allgemeinen ganz gut leider
braucht man einen ganzen 8bit BUS

Autor: Andi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kann mir nur vorstellen, das Du den ATTiny26 meinst da dieser der
einzige mit 11 ADC-Channels ist.
Der hat einen USART im 2- oder 3-Wire Mode an PB0, PB1 und PB2 (DI, DO
und SCK).
PB0 - PB2 sind auch ohne ADC-Funktion also verlierst Du keinen
ADC-Channel.
Alles weitere zwecks USART steht ab Seite 63 im PDF.
Des weiteren dauert eine AD-Konvertierung sowieso ca. 0,2mSek da der
ADC-Clock nicht höher als 200KHz sein sollte und eine Konvertierung 25
ADC-Clocks dauert.
Und wenn zwischen zwei Messungen eine serielle Übertragung statt findet
ist das nicht der Rede wert.

Gruß
Andi

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.