Forum: Mikrocontroller und Digitale Elektronik µc soll Daten über RS232 schicken


von Josef K (Gast)


Lesenswert?

Hallo. Ich hoffe den Thread gibts nicht schon irgendwo anders schon. Hab
auf jeden Fall gesucht =)

Also mein Problem sollte nicht zu schwierig sein.
Ich Möchte einen Zahlenwert mittels RS232 von meinem µC (Atmega8535) an
einen empfänger schicken.
Hab mich schon ein bißchen durch das Datasheet durchgehangelt, bin aber
nicht ganz schlüssig. Ich weiß, das ich das irgendwie mit UART machen
muß, aber wie das genau aussehen soll (zB in C) kann ich mir nicht
vorstellen. Speziel die Bautrate macht mir zu schaffen.
Kennt ihr ein paar gute Tutorials dazu?

MfG

von Danny (Gast)


Lesenswert?

<------ siehe tutorial punkt 10

von Zumlin (Gast)


Lesenswert?

Wow. Das ist mal ein richtig gutes Tutorial. Ich weiß ich greife mit dem
Thema Schnittstelle in Bezug zu meinem µC Wissen schon weit vor, aber
ich möchte gerne die Realisierbarkeit einer Idee testen.

Unter "Senden einzelner Zeichen" in dem Tutorial hab ich noch ne
Frage.
UDR = 'x';                  /* schreibt das Zeichen x auf die
Schnittstelle */

Dabei kann 'x' nur ein Integer Wert sein, oder?

Vielen Dank schon mal im Vorraus.

von Mike (Gast)


Lesenswert?

Hab das Tutorial gerade nicht ganz im Kopf (und bin zu faul zum
nachlesen :-)) aber eigentlich müßtest du über die Schnittstelle
nur 8Bit Werte übertragen können. Was du dann danach damit machst bzw.
was du damit codiert hast, bleibt dir überlassen.

von Marko (Gast)


Lesenswert?

Ja, nur Byte-Werte kannste übertragen,
ist aber kein Problem, zerlegste den Integer Wert
in Bytes, schickste zum Empfänger, der sie wieder zusammensetzt

von daniel (Gast)


Lesenswert?

hier ein program für atmega8515,müsste gehen:
Im Hyper terminal wird  "TEST" angezeigt, für andere sachen zu
übertragen genau so

.include "m8515def.inc"

.def temp = R16
.equ CLOCK = 8000000
.equ BAUD = 9600
.equ UBRRVAL = CLOCK/(BAUD*16)-1
.cseg
.org 0x000
      rjmp main
.org 0x009                             ; Interruptvektor for
UART-Receive
          rjmp int_rxc

main:    ldi r16, LOW(RAMEND)  ;Stack Pointer to top of RAM
      out SPL, r16
      ldi r16, HIGH(RAMEND)
      out SPH, r16

        ; Baudrate setup
           ldi temp, LOW(UBRRVAL)
          out UBRRL, temp
          ldi temp, HIGH(UBRRVAL)
          out UBRRH, temp

        ; Frame-Format: 8 Bit
          ldi temp, (1 << URSEL) | (1 << UCSZ1) | (1 << UCSZ0)
           out UCSRC, temp

          sbi UCSRB, RXCIE   ; Interrupt by Receive
          sbi UCSRB, RXEN    ; RX (Receive) activate
          sbi UCSRB,TXEN     ; TX (Transmit) activate
          sei                 ; Interrupts global activate
      ldi r20,0x00




program:
      clr r21      ; gleich nachdem Einshalten "ATMEL UHF Demo Rader"
anzeigen
      ldi ZL,LOW(2*lable)
      ldi Zh,HIGH(2*lable)
      ldi r17,0x04
      ldi temp, 10
      rcall serout

ok:      lpm r16,z
      adiw ZL,1
      rcall serout
      dec r17
      cpse r17,r20
      rjmp ok
      ldi temp, 10
          rcall serout
          ldi temp, 13
          rcall serout
serout:      sbis UCSRA,UDRE  ;Warten bis UDR für das nächste Byte
bereit ist
          rjmp serout
          out UDR, temp
          ret
; Interruptroutine: wird ausgeführt sobald ein Byte über das UART
empfangen wurde
int_rxc:
          in r21, UDR

      ;rcall loop

          reti            ;Interrupt beenden
lable:
.db"TEST",0

von Zumlin (Gast)


Lesenswert?

Ich weiß, schön langsam werd ich frech, aber hast das auch in ner
Hochsprach wie c oder c++? =)
Sry. Kenn mich mit Assembler leider noch nicht so gut aus. In C hab ich
wenigstens schon mal ein paar einfach Programme für meinen µC
geschrieben.

Aber danke für die schnelle Antwort

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
Noch kein Account? Hier anmelden.