Datenaustausch zwischen zwei Tiny2313

Gast #2109919
Hallo erstmal.
Ich möchte bei zwei Tiny2313 über einen Port einen Datenaustausch 
ermöglichen (Parallel-Port sozusagen). Selbstverständlich noch ein paar 
Pins dazu zur Steuerung. Mein Problem:
Muss ich beachten, ob im 'Ruhezustand' die Pins als Ausgang oder Eingang 
geschaltet sind, bzw. ob als Ausgang geschaltete Pins zur Sicherheit 
einen bestimmten Pegel haben sollten?
Gast
Nimm doch eine serielle Schnittstelle, welche schon in Hardware 
vorhanden ist:
TWI / I2C
UART
SPI

Geht viel einfacher als selbst was zu entwickeln, besonders als Anfänger
Gast
Moin, Paule!

Warum definierst Du nicht eine Menge an Pins fest als Ausgang, andere 
fest als Eingang und schließt die über Kreuz an? In logischer Folge 
kannst Du Peripherie verwenden, die ohnehin vorhanden ist: SPI, I²C oder 
USART.

Schau Dir das Datenblatt an, dann geht Dir ein Licht auf.

Gruß - Wolfgang
Gast
Naja, die seriellen Schnittstellen sind schon belegt. Von dem einen tiny 
gehts zum Computer und von dem anderen zur weiteren Steuerung. Aber die 
Variante die 8 Bit zu teilen, wäre eine Möglichkeit.
Die Kommunikation zwischen den µCs bekomme ich bestimmt hin, bin mir 
eben nur nicht sicher, ob's bei zwei verbundenen Pins, die als Ausgang 
geschaltet sind, raucht.
Gast
Paule schrieb:
> bin mir
> eben nur nicht sicher, ob's bei zwei verbundenen Pins, die als Ausgang
> geschaltet sind, raucht.

Hast Du meinen Beitrag weiter oben gelesen? Offensichtlich nicht, denn 
sonst hätte sich Deine jetzige Frage erübrigt. Hole es nach.

Gruß - Wolfgang
Paule schrieb:
> [...] bin mir
> eben nur nicht sicher, ob's bei zwei verbundenen Pins, die als Ausgang
> geschaltet sind, raucht.

Mit Garantie. Entweder du legst fest, dass ein Teil des Bus von 
Controller A nach B und der andere Teil von B nach A geht, oder du legst 
die Leitungen via Pullup auf High und der sendende µC zieht das Signal 
dann auf Low, so wird das ja auch bei I2C gehandhabt.
Probleme kriegst du aber mit Sicherheit, wenn beide den Ausgang aktiv 
auf beide Logikpegel steuern.
Wenn du es kompliziert machen willst, kannst du natürlich auch ein 
Mini-Protokoll einsetzen mit dem jeweils einer der beiden µCs das 
exklusive Senderecht erhält und der andere dann auf Eingang umschaltet, 
wenn du fehlerfrei arbeitest funktioniert auch das ...

mfG
Markus
Gast
@Markus J.
"...Mini-Protokoll einsetzen mit dem jeweils einer der beiden µCs das
exklusive Senderecht erhält..."
So wollte ich es eigentlich machen. Falls aber beim Umschalten der Ports 
etwas schiefgeht (vielleicht auch nur in der Entwicklungsphase), sieht 
es nicht so gut aus. Deshalb werde ich die Idee von Wolfgang 
verwirklichen und einen Port teilen. Das vereinfacht das Protokoll 
erheblich.
Gast
Paule schrieb:
> Die Kommunikation zwischen den µCs bekomme ich bestimmt hin, bin mir
> eben nur nicht sicher, ob's bei zwei verbundenen Pins, die als Ausgang
> geschaltet sind, raucht.Beitrag melden | Bearbeiten | Löschen |

Klare Antwort: Kann es ...

Entweder beide als Eingang (was wenig Sinn macht, Pull-up einschalten) 
oder Ausgang an Eingang. Du willst schließlich Daten übertragen.
Gast
Paule schrieb:
> @Markus J.
> "...Mini-Protokoll einsetzen mit dem jeweils einer der beiden µCs das
> exklusive Senderecht erhält..."
> So wollte ich es eigentlich machen. Falls aber beim Umschalten der Ports
> etwas schiefgeht (vielleicht auch nur in der Entwicklungsphase), sieht
> es nicht so gut aus.

Als Schutz gegen versehentliche Ausgang-Ausgang Verbindung kannst du 
sonst einfach einen Widerstand mit ein paar kOhm dazwischenschalten. 
Dann kann da nichts rauchen.
Gast
Vielleicht noch zur Erklärung: Warum gerade 'Parallel-Port'?
Der eine µC unterhält sich gemütlich mit dem Computer und gibt 
gelegentlich Daten an den zweiten µC weiter. Dieser hat allerdings voll 
mit der Kommunikation mit der Peripherie zu tuen (USART) und gibt nur 
alle paar Millisekunden ein Zeitfenster frei, um Daten zu empfangen bzw. 
abzuliefern. Da fand ich die Möglichkeit mit dem Parallel-Port am 
schnellsten. Bei der seriellen Übertragung habe/ hatte ich immer 
'Interrupt' im Hinterkopf. Das würde allerdings viel durcheinander 
bringen. Möglich wären vielleicht auch ein paar zusätzliche Leitungen 
zur Steuerung. So nach dem Motto: Ich habe da was für dich, wenn du Zeit 
hast, sag Bescheid...
Irgendwie ist dein ganzes Konzept nicht so ganz rund.

Mit 2 Controllern zu arbeiten, wobei der eine nur auf den anderen 
wartet, macht doch nicht wirklich Sinn.

Nimm einen Controller mit 2 USARTs, z.B. Atmega 644.

Mit dem einen USART handelst du die Kommunikation mit der Peripherie ab 
und der andere kommt an den PC. Wenn der PC Daten sendet, speichert der 
Controller die angekommenen Daten in einem Buffer und wenn Zeit ist, 
werden diese ausgewertet.

Das ist im Gegensatz zu der Synchronisation bei der parallelen 
Kommunikation überhaupt nicht zeitkritisch.

mfg.
Gast
Hi

>Der 644p von Reichelt ist der günstigste von allen.

Wie kannst du das vergleichen? Bei Reichelt finde ich keinen ATMega164p 
oder 324p. Bei CSD sind da 2€ Unterschied.

MfG Spess
Gast
Ich muss noch mal fortsetzen.
Da ich Schwierigkeiten sehe, wenn beim atmega644 (o.ä.) beide USARTs 
gleichzeitig Daten empfangen sollen, würde ich die Variante 2x 
attiny2313 mit Datenaustausch über USI mal weiterverfolgen. Da ich gern 
auf der Platine die µCs programmieren möchte, stellt sich mir allerdings 
folgendes Problem:
Durch die Verbindung von DO -> DI und DI -> DO, die ja gleichzeitig die 
Pins für MOSI und MISO sind, würde ja der Ausgang MISO des zweiten µC am 
Ausgang des 'AVR mk2 ISP' hängen. Programmiert wird da zwar nichts, 
solange der Reset-Pin nicht auf low liegt. Aber es ist eben Ausgang auf 
Ausgang. Deshalb meine Frage:
Weiß jemand, ob der Programmer intern über Widerstände bzw. eine 
Strombegrenzung verfügt um diesen Zustand zu erlauben?
Gast
@Thomas
Ich habe zwar noch nicht nachgerechnet, aber reicht denn die Zeit Zeit 
beim Empfang eines Datenpaketes die einzelnen Bytes (dann sicherlich 
immer abwechselnd) beim ungefähr gleichzeitigen Auftreten eines 
Interrupts aus dem Puffer zu holen und abzuspeichern ohne das nächste zu 
verpassen? (Der eine USART soll mit 57,6 BAUD laufen)
Paule schrieb:
> aber reicht denn die Zeit Zeit

Wenn du in der Interruptroutine keine großen Berechnungen durchführst 
reicht das dicke.

Bei 57,6 bekommst du maximal 5760 Bytes/s. Bei einem 20MHz-Controller 
hast du dann 20 Mio / 5760 = 3472 Taktzyklen Zeit, bevor das nächste 
Byte da ist, um ungefähr das hier zu machen:

ISR(USART0RX_vect)
{
  nRx0Buf[nRx0++] = UDR0;
}

ISR(USART1RX_vect)
{
  nRx1Buf[nRx1++] = UDR1;
}

Das reicht.

mfg.
Gast
@Thomas
doch sicherlich eher 3472/10? Denn ich darf ja das Start-BIT nicht 
verpassen.
Aber, auch bei meinen geplanten 6,144MHz (gängige Baud-Raten lassen sich 
da prima mit 0% Fehler einstellen) bleiben immer noch über hundert 
Takte. Die Frage wäre jetzt nur noch, wie kurz das Startbit sein kann, 
damit es noch als solches erkannt wird.
Gast
> Peter Dannegger schrieb:
>> Die UART kann nämlich 3 Byte a 10 Bit puffern.

Ja, ich auch! So weit war ich noch gar nicht vorgedrungen.
Also sozusagen: Empfangspuffer + FIFO (Datasheet: 'The recive buffer 
consists of a two level FIFO')
Nochmal wegen meiner 'Berechnung': Stimmt. Ich muss ja nicht auf das 
Startbit warten, das macht ja die USART (oder der, oder das?). 
Allerdings sollte man nicht zu sehr rumtrödeln. Es könnten ja noch mehr 
Daten ankommen...

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 15 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.