PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : pic <=> uart <=> pic



michas_rob
30.05.2007, 22:23
Hallo an alle,

ist es möglich zwei Pic's (16f884) über die EUART(UART)-Schnittstelle kommunizieren zu lassen?

Hat vielleicht schon jemand Erfahrung damit?

Bin für jeden Rat dankbar.

michael

MartinITM
31.05.2007, 20:35
Hio,

habe zwar noch nie einen 16f884 programmiert aber warum sollte das nicht funktionieren?
Datenblatt Kapitel 12 (http://ww1.microchip.com/downloads/en/DeviceDoc/41291D.pdf)
Du hast ein Rx- und ein Tx-Register in beiden Controllern.
(Nun kenn ich deine Vorkenntnisse nicht. Also fang ich einfach bei 0 an. :) )
HW-technisch verbindest du Rx1 mit Tx2 und Rx2 mit Tx1 das wars dann (Masse sollte auch verbunden sein).
SW-technisch:
Full-duplex asynchronous transmit and receive.
Bei mir heißt das so viel wie: Du kannst senden und empfangen gleichzeitig.
Wenn du mit C1 was sendest bekommst du einen Interrupt bei C2 das etwas empfangen wurde. Bei C1 bekommst du auch einen Interrupt das etwas gesendet wurde. Somit kannst du dir entweder eine Bestätigung von C2 schicken lassen oder du befüllst das TXREG von C1 wieder neu und es werden die nächsten 8 Bit gesendet.
Wenn ich das richtig gelesen habe, kannst du auf das TRMT Flag pollen, falls du keinen Interrupt nutzen willst. Beim Empfangen musst du wohl auf den Interrupt zuück greifen.

Bessere Vorschläge?

LG
Martin

michas_rob
31.05.2007, 22:12
Danke Martin,

genau das habe ich versucht, die zwei Controller gekreuzt miteinander zu verbinden, jedoch bekomme ich auf der einen Seite keinen Interrupt wenn ich von der anderen Seite eine Hex Zahl sende...
Aber wenn ich den FTDI Chip die UART-Schnittstell mit der USB- Schnittstelle verbinde, kann ich ohne Probleme senden und empfangen....

Ich werde mit morgen einmal die Datenübertragung mittels Oszi anschauen und dann mich auf die Software stürzen...

Danke nochmal, jetzt weiß ich, dass es prinzipiell funktionieren muss, denn ich hab schon daran gezweifelt.

Michael

orph
01.06.2007, 09:01
hiho

Ich hab das mal mit 2 16F628a probiert. Hat zuerst nie funktionniert, bis ich gemerkt habe, dass kein Interrupt ausgelöst wurde, bim Datenempfang.
Als ich dann das Ganze mit polling gemacht habe, ist es prima gegangen.
(wie du beschrieben hast, hab ich auch einfach die beiden uC gekreuzt miteinander verbunden.)

An dem Interrupt-Problem hab ich dann aber nicht weitergearbeitet.

greez

MartinITM
01.06.2007, 19:15
Normalerweise muss man die Interrupts einzeln freigeben und dann auch alle Interrupts. Am besten lässt du in einem Interrupt einen Pin toggeln. Dann kannst du das am Oszi sehen, wenn ein Int ausgelöst wird. Alternativ kannst du auch ein Mulitmeter an den Pin hängen und wenn du die ganze Zeit was von einem PIC sendest solltest du an dem Pin eine Spannung >0V und < Vcc messen. (würde nun behaupten so 2,5V, bei 5V Versorgung)
Datenblatt ab Seite 33 (http://ww1.microchip.com/downloads/en/DeviceDoc/41291D.pdf) (Global Interrupt Enable bit) und Seite 34 (EUSART Receive Interrupt Enable bit) (EUSART Transmit Interrupt Enable bit)
(Seiten beziehen sich auf den AcrobatReader)

LG
Martin