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


von Thomas Oly (Gast)


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.

von crazy horse (Gast)


Lesenswert?

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

von Thomas Oly (Gast)


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?

von crazy horse (Gast)


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.

von Peter D. (peda)


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

von Thomas Oly (Gast)


Lesenswert?

Hallo,

ok werds mir mal anschauen.

von Bernd (Gast)


Lesenswert?

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

von Thomas O. (Gast)


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.

von Thomas O. (Gast)


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

von Andi (Gast)


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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.