www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Zwei AT89S8252 per 2(4-)-Draht verbinden?


Autor: Nicolas K. (nico33hh)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallöchen!

Wenn ich zwei AT89S8252 mit einander verbinden will und nur +5V, GND und 
noch 2 weitere Leitungen (also insgesamt 4 Adern) zur Verfügung habe und 
NICHT den UART (RS232) benutzen will, wie stellt man das am 
geschicktesten an?
Beide µC's sollen jeweils 1 Byte senden (und natürlich auch empfangen) 
können.

Hintergrund:
Ich suche eine elegante Möglichkeit mit möglichst wenig Programmcode, um 
mit einem AT89S8252 ein Tastenfeld für ein Codeschloss abzufragen (das 
ist kein Problem und steht auch schon) und jede gedrückte Taste (als ein 
Byte) dann über das Kabel an den zweiten (Haupt-)µC zu senden, der den 
Wert dann auswertet.
Andersherum soll aber der zweite µC auch ein Byte an den ersten µC mit 
dem Tastaturfeld schicken können, so daß dort Status-LEDs, 
Tastenfeldbeleuchtung u.ä. angesteuert werden können.
Das Ganze natürlich ohne Kollisions-Fehler...

Bevor die Frage aufkommt:
Ich habe noch mehrere AT89S8252 und arbeite gern mit ihnen. Deswegen 
diese µC-Wahl... ;-)

Bin mal gespannt auf Eure Ideen...

Schoinen (nächtlichen) Gruß -

  Nico  :o)


P.S.: Dieses Forum finde ich echt klasse..!

Autor: dernixwois (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Nicolas K.

Wie wäre es wenn Du es mit I2C probierst.
Weiß jetzt nicht ob der AT89S8252 Hardwareseitig I2C unterstützt, sonst 
müsstest Du es Softwaremäßig nach bilden wobei die Pinauswahl für SDA 
und SCL frei wählen kannst.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Am besten, Du nimmst einen Draht pro Richtung, dann gibts auch keine 
Kollision.

Die Datenbits schickst Du als unterschiedlich lange High-Pulse mit Pause 
dazwischen zum reinschieben, z.B. 10µs = 0, 20µs = 1.

Die Pulslänge macht der Sender mit ner Delayloop (DJNZ).
Die Pulsdauer zählt dann bequem der Empfänger mit T0 im Gate-Modus 
(INT0).

Eventuell noch nen extra langen Impuls (40µs) als Startbit.


Peter

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich würde bei so geringen Datenaufkommen asynchon arbeiten, also eine 
UART per Software nachbilden (Startbit, Deine n-Datenbits, Stoppbit).

Bei 8051 relativ einfach. Empfang: Mit Int0 auf fallende Flanke 
triggern, dann die halbe Bitzeit warten und einen Timer mit Zyklus der 
Bitzeit setzen und nun n-mal den Pegel abtasten. Damit sollten einige 
hundert Baud drin sein, bei Dir dürften aber auch 50 Baud ausreichen.

Asynchon zu senden dürfte überhaupt kein Problem sein.

Der 89S8252 hat leider keine PWM/PCA-Unit. Mit AT89C51xxx könntest Du 
eine PCA-UART per Software realisieren. Die entsprechende Anleitung 
findest Du auf den Atmelseiten.

Gruß Matthias

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.