Forum: Mikrocontroller und Digitale Elektronik Atmega 162-USART funktioniert nicht mit Parity:none


von Chris p. C. (sharth)


Lesenswert?

Hallo zusammen,

ich teste gerade die USART Schnittstellen indem ich mit DockLite über 
die RS232 Schnittstelle Daten sende, diese im SRAM des AtMega speichere 
und wieder ausgebe.
Dabei ist mir aufgefallen, dass wenn ich mit Parity "mark" sende alles 
korrekt funktioniert: der String wird gesendet und genauso wieder 
empfangen.
Stelle ich das Parity auf "none" kommt nichts zurück. Habe keine Ahnung 
wo mein Fehler liegen könnte. Mein Code sieht folgendermaßen aus:

Initialisierung der USART:
1
;*******-->USART0(DockLite->AtMega)  
2
3
ldi   temp, HIGH(UBRR_VAL)
4
out   UBRR0H, temp
5
ldi   temp, LOW(UBRR_VAL)
6
out   UBRR0L, temp
7
;8 Bit Übertragung; keine Parity Bits (UPM00=0)
8
ldi     temp, (1<<URSEL0)|(1<<UCSZ00) |  (1<<UCSZ01)    
9
out     UCSR0C,temp    
10
11
ldi   temp, (1<<RXEN0)|(1<<TXEN0)|(1<<RXCIE0)
12
out   UCSR0B,temp

Ausgabe der im SRAM gespeicherten Daten:

1
send_to_docLite:
2
  ldi     YH,HIGH(sdata)    
3
  ldi     YL,LOW(sdata) 
4
    
5
redo:
6
  ld    data, y+  
7
  cpi    data, 0x0D   ;markiert das Ende des Strings   
8
  breq    ende
9
10
wait2:
11
  sbis    UCSR0A,UDRE0          
12
                            
13
  rjmp    wait2
14
  out     UDR0, data         
15
  rjmp   redo
16
ende:
17
18
  ret

Ich hoffe das reicht euch an Code. Ich hoffe ihr habt Tipps oder 
Anregungen, da ich im Moment auf dem Schlauch stehe.

Gruß,
sharth

von spess53 (Gast)


Lesenswert?

Hi

>ich teste gerade die USART Schnittstellen indem ich mit DockLite über

Dann überprüfe mal die Einstellungen von Docklite.

MfG Spess

von Chris p. C. (sharth)


Lesenswert?

Hallo,

ich habe den Fehler gefunden. Das Register UCSR0B wurde vorher nochmal 
überschrieben.
Verstehe das mit dem Mark-Parity noch nicht ganz. Welche Register sind 
zuständig um das Mark-Bit zu setzen? Sind es UPM0 und UPM1? Habe alle 
Varianten ausprobiert und bekomme es nicht hin.
Wäre nett wenn jemand eine Antwort darauf hat.

Gruß,

sharth

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.