PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Serielle Daten mit 1200 Baud an Modem weitergeben?



casa74
09.08.2005, 19:57
Hallo Zusammen,

bin noch ziemlich unerfahren im Bereich der Mikrocontroller und hab da
mal eine allgemeine Frage zu den Ports eines ATmega8 !

Ist es möglich über einen Pin von beispielsweise PortB serielle Daten mit
einer Baudrate von 1200Bit/s an ein modem weiterzugeben?

Gruß!

Casa74



Hallo Casa74!
Ich habe mir erlaubt Deinen Titel etwas zu ändern, um allen Usern eindeutiger zu zeigen, worum es geht!
Der Titel war schon nicht schlecht, aber es geht ja auch so! ;o)

Viele Grüße
Florian (Moderator)

ProgDom
09.08.2005, 20:59
Also ich meine das das über einen Port zwar möglich sein wird, jedoch ganz schön aufwendig ist !
Ein Atmega hat ein UART, den mach recht einfach mit einer kleinen Schaltung verwenden kann. Darüber kann man dann Daten über RS232 senden. Das sollte auch für ein Modem besser sein.
Informationen darüber gibts z.B.: auf www.mikrocontroller.net

SprinterSB
09.08.2005, 21:02
Mega8 hat einen Universellen Synchronen/Asynchronen Seriellen Transceiver (USART).

Du brauchst also nicht selber mit den Pins rumwackeln, das kannst du die Mega8 Hardware machen lassen. Wenn man der UART aktiviert, dann geht das aber nur über die Pins PD0 (RxD) und PD1 (TxD).

An PortB liegt nur das SPI (Serial Peripheral Interface), über den man ihn via ISP proggen kann. Dieses Interface kann man aber auch benutzen, um seriell Daten zu übertragen (zB MMC-Card).

Die dritte Hardwareunterstützung für serielle Übertragung ist das TWI aka I2C an PortC.5 (SCL) und PortC.4 (SDA).

casa74
10.08.2005, 08:41
Vielen Dank erstmal für die ausführlichen Antworten. :D


Ich versuche z.B über den Rx-Pin des USART GPS-Daten zu empfangen,
intern einem Datenrahmen zuzufügen, um sie dann wieder an einem modem auszugeben.
Bisher war mein Gedanke sie über den Pin eines Ports auszugeben,
wenn ich euch aber jetzt richtig verstanden habe, kann ich über den USART
gleichzeitig Daten senden und empfangen.
Laut AVR-Tutorial vom Mikrocontroller.net , müsste also nur die Einstellung
der Baudrate und das aktivieren der entsprechenden Register notwendig sein.
Den Wechsel zwischen senden und empfangen, sowie schreiben/lesen
des FIFO-Puffers erfolgen also automatisch, richtig ??

Gruß!

Casa74

SprinterSB
10.08.2005, 09:04
Eine UART FIFO haben die AVRs nicht, da musst du dich schon selber kümmern. Wenn du den AVR nur als Transceiver nehmen willst, also

GPS --> [RxD].AVR
AVR.[TxD] --> Modem

Kannst da das über die UART machen, falls du schnell genug bist und auf beiden Seiten die gleiche Baudrate einstellst.

Die UART Hardware ermöglicht dir einen gewissen Grad an Parallelität.
Nach obigem Schema kannst du allerdings nichts ans GPS senden oder vom Modem empfangen.
Evtl kann das GPS HW-Flusssteuerung via CTS, RTS. Dann gehen dir auf keinen Fall Daten verloren.

cavegn
10.08.2005, 09:46
hi

um auf deine ursprüngliche frage zurückzukommen: ja, du kannst eine serielle schnittstelle über beliebige pins emulieren (siehe auch entsprechende application note von atmel: http://www.atmel.com/dyn/resources/prod_documents/DOC0952.PDF)

cu

chris

casa74
10.08.2005, 09:49
Alles klar so langsam verstehe ich.


Der USART des mega8 hat aber doch einen FIFO, oder?!
So entnehme ich es zumindest dem mega8-Datenblatt und dem Tutorial.
Oder hab ich da was falsch verstanden?

SprinterSB
10.08.2005, 10:02
Ja, die FIFO ist aber mit 1 Byte schon voll und wird im Receiver zwischengepuffert.
Eine mehrere Byte größe FIFO wie die in PCs verbreiteten 16550-kompatible UARTs haben AVRs nicht.

Psiyou
10.08.2005, 10:04
Hallo,
so weit ich weiss nicht. Er hat nur jeweils ein Shiftregister fuer Rx und Tx (welches Du selber aber nicht direckt ansprechen kannst), welches die Daten serialisier. Des weiteren gibt es noch ein Datenregister fuer Tx und Rx in das Du Deine Daten schreibst bzw liest. Hier gibt es allerdings eine Besonderheit, die Datenregister fuer Tx und Rx sind unter der gleichen Adresse erreichbar und der Controler entscheidet je nach dem ob Du lesend oder schreibend zugreifst auf welchen Wert Du bekommst.
Kann Dir da nur das Datenblatt zum uC emfpehlen, steht da alles drin, sogar mit Diagramm. Ist aber auf anhieb etwas schwer zu verstehen.

cavegn
10.08.2005, 10:11
aus dem datenblatt von atmel:
(http://www.atmel.com/dyn/resources/prod_documents/doc2486.pdf)



However, the receive buffering has two improvements that will affect the compatibility in
some special cases:
• A second Buffer Register has been added. The two Buffer Registers operate as a
circular FIFO buffer. Therefore the UDR must only be read once for each incoming
data! More important is the fact that the Error Flags (FE and DOR) and the ninth
data bit (RXB8) are buffered with the data in the receive buffer. Therefore the status
bits must always be read before the UDR Register is read. Otherwise the error
status will be lost since the buffer state is lost.
• The Receiver Shift Register can now act as a third buffer level. This is done by
allowing the received data to remain in the serial Shift Register (see Figure 61) if the
Buffer Registers are full, until a new start bit is detected. The USART is therefore
more resistant to Data OverRun (DOR) error conditions.


=> n wirkliches fifo haben sie nicht ...

cu

chris