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.
Hm, ich verstehe nicht ganz, warum du den Umweg über ein Schieberegister gehen willst?? Warum nicht direkt über SPI koppeln?
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?
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.
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
Was soll das Projekt denn mal werden? - Vielleicht gibt es ja eine einfachere Lösung.
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.
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.