mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik USART Kommunikation mit PC fehlerhaft


Autor: suffix (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habe folgenden Aufbau:

-Ein STK500 mit eingesetztem AtMega16, PD0 und PD1 sind mit dem 
RS232-Spare-Anschluss verbunden. Das ganze ist über ein 1:1 Kabel mit 
dem COM-Anschluss des PC's verbunden.

Im Controller sind jetzt folgende Programme:

Die Hauptdatei, sorgt für den korrekten Ablauf:

.INCLUDE "m16def.inc"
.EQU  TAKT = 3686400
.EQU  BAUD = 9600
.DEF  akku = r16
.CSEG
rjmp start
.ORG  $2A
start:   ldi    akku,LOW(RAMEND)  ;Stapel initialisieren
    out    SPL,akku
    ldi    akku,HIGH(RAMEND)
    out   SPH,akku    ;--bis hier
    ser    akku      ;PORTB ist Ausgang
    out    DDRB,akku
    out    PORTB,akku
    clr    akku      ;--bis hier
    rcall   initusart    ;Schnittstelle initialisieren
    ldi    akku,'>'    ;und testen
    rcall   putch      ;Zeichen senden
loop:   rcall   getche      ;Arbeitsschleife, Zeichen
    rjmp   loop      ;aufnehmen und senden
    .INCLUDE "konsole.h"  ;Einbinden der Unterprogramme
    .EXIT




initusart.asm:
initusart: push   r16  ;zuerst Register retten
       ldi     r16,LOW(TAKT/(16*BAUD) -1)  ;dann Teiler+Baudrate 
errechnen
       out     UBRRL,r16  ;High+Low-Teil in die
       ldi     r16,HIGH(TAKT/(16*BAUD) -1)  ;Register schreiben
       andi   r16,0b01111111;
       out    UBRRH,r16  ;--bis hier
       sbi    UCSRB,RXEN  ;Empfänger
       sbi    UCSRB,TXEN  ;und Sender ein
       ldi    r16,(1 << URSEL) | (1 << UCSZ1) | (1 << UCSZ0) 
;Einstellungen:
       out  UCSRC,r16  ; Asynchron, 8Bit, ein Stopbit
       in    r16,UDR     ;Empfangsregister leeren
       pop  r16        ;zurückschreiben und Rücksprung
       ret      ;



putch.asm:
putch: sbis    UCSRA,UDRE    ;Daten da?
     rjmp    putch    ;wenn nein, Schleife
     out    UDR,r16  ;wenn ja, senden
     ret        ;Rücksprung


getche.asm:
getche: sbis    UCSRA,RXC  ;zuerst Zeichen lesen
    rjmp    getche
    in      r16,UDR
    out      PORTB,r16   ;und auf PORTB ausgeben
getche1:sbis    UCSRA,UDRE  ;und dann zurückschreiben
    rjmp    getche1
    out      UDR,r16
    ret



Das Programm macht im Prinzip was es soll: Nach dem Einschalten 
erscheint ein Zeichen auf dem Hyperterminal, und bei Tastendruck kommt 
was zurück. Nur: es kommt anstatt > nur LL zurück, und auch sonst kommen 
nur einige wenige Zeichen zurück, die eben nicht dem entsprechen was ich 
geschickt habe, die LEDS am STK blinken dazu hektisch.

Ist das ein Fehler oder normal, dass da eben was nicht richtig kodiert, 
bzw. dekodiert wird? Wie kann ich den ein Bitmuster nach Art 0b11111111, 
bzw 255 oder $ff senden? Habs mit einer Text-Datei versucht aber, bei 
jedem Übertragen steht was anders auf den LEDS, eigentlich auch logisch, 
eine Textdatei besteht nun mal nicht nur aus den ASCII-Zeichen, die ich 
eingegeben habe.

Die Bedingungen sind eigentlich optimal, der Takt auf dem STK beträgt 
ca. 3,69MHZ, was auch im Programm eingestellt ist, ich denke Probleme, 
die daher rühren kann man ausschließen.

Hat das jemand verstanden, was mein Problem ist? Ich kann das auch gerne 
noch genauer erklären.

Vielen Dank schon mal für eure Hilfe

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das übliche:
Bist du sicher, dass der AVR mit dem externen Quarz läuft.
Sprich: Hast du die Fuse Bits entsprechend umgestellt?

Autor: suffix (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hast recht, der läuft mit 1MHZ intern, das wäre im Prinzip kein Problem 
den umzuprogrammieren, aber im STK500 gibts jede Menge externe Optionen, 
getrennt nach Frequenzbereichen, Start-Up time und anderem, welche der 
vielen Optionen muss ich denn da nehmen für die 3,69MHZ am XTAL1?

Autor: Florian Glaser (suffix)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
danke, hat sich erledigt

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.