mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik UDR0 auslesen


Autor: joerg_seemann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
frage vom anfänger:

ATmega 168 UART, Empfangen

wie lese ich UDR0

im datenblatt steht 'in r16,UDR0', aber register out of range.
habs erfolglos mit lds probiert, wobei das beschreiben mit 'sts' 
funktioniert.

ratlosigkeit???...

Autor: Jörg X. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
es muss aber mit "lds ..." gehen (lds kan ALLE 
register/IO-Adressen/Speicheradressen lesen)

Autor: Bend Guet (frankyfarell0)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo bin anfänger  in dem bereich, ich habe ein asm progr geschriben
und weiss nicht wieich mit mein PC communizieren kann, ich lade den prog
im mikro_c und kommt nichst in den Hyper-terminal.
ist es moeglich auf den selbe pc alles zu tun?

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Cyrille Guetsop

Mach' eine eigene Diskussion auf. Gib' den Quelltext vom vorhandenen 
Programm an sowie einen Schaltplan, aus dem man erkennen kann, wie deine 
µC (welcher?) Hardware aufgebaut und an den PC angeschlossen ist.

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> 'in r16,UDR0', aber register out of range.

Du hast die richtige Include-Datei für den Prozessor eingebunden? Wie 
sieht der restliche Quelltext aus? Kommt die Fehlermeldung exakt bei 
dieser Quellcodezeile?

Autor: Jörg X. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
UDR0 liegt auf (RAM- nicht I/O-) Adresse "0xC6" laut Registersummary, es 
kann also nur
lds r16, UDR0
    ;(oder auch ld rn, -<X,Y,Z>+, ldd rn, <Y,Z> 
    ;wenn du den Pointer entspr. vorlädst, lds benötigt 2 Worte im Flash

Autor: joerg_seemann (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
guten morgen

ich hab hier mal meinen quelltext, mit dem ich ein gelesenes byte wieder 
ausgeben möchte. im terminal kommt zwar was zurück, aber immer nur ne 
null.

Autor: Tassilo Böhr (big_t)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ersetze 'brne' durch 'rjmp' und schon sollte es gehen. Für 'brxx' fehlt 
der vorher nötige Vergleich (cp, cpi, dec etc.) um das SREG mit 
'gültigen' Werten zu füllen.

Tassilo

Autor: joerg_seemann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
der vorher nötige vergleich ist doch von der sache das sbrs?
habs geändert und leider keinen anderen effekt als vorher.

Empfangen:
;
;
lds temp, UCSR0A
sbrs temp, 7
rjmp Empfangen
lds data, UDR0

ret

etwas an diesem Ausdruck klappt nicht.
auch ohne etwas empfangen zu haben wird der Programmteil bis ret 
ausgeführt.

Autor: joerg_seemann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
die merkwürdigkeit geht noch weiter, meine sendeanweisung funktioniert 
und ist getestet. So, jetzt hab ich das programm so geändert, dass die 
variable data mit 0x08 gefüllt und gesendet wird, nachher empfang und 
senden des neuen datawertes:

ldi data, 0x08


Hauptprogramm:

call SendenRS

call Empfangen

call SendenRS

rjmp Hauptprogramm



SendenRS:; Sendefunktion

lds temp, UCSR0A
sbrs temp, UDRE0
rjmp SendenRS
sts  UDR0,data

ret


Empfangen:

lds temp, UCSR0A
sbrs temp, 7
rjmp Empfangen
lds data, UDR0

ret


um mich so richtig zu ärgern passiert jetzt, wider meiner erwartung, das 
senden von zwei nullen. das heisst, die 0x08 wird irgendwie unter den 
tisch gekehrt.

da läuft was grundlegend schief...

Autor: joerg_seemann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ok, das letzte problem ist gelöst, kriege ne 0x08 gesendet.

aber kann das sein, das ich das falsche RX-register auslese?
es wird wohl was empfangen, aber nicht an data übergeben.

Autor: Tassilo Böhr (big_t)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Laut AVRStudio-Hilfe ändert sbrs nix am SREG und nur das SREG bestimmt, 
ob brxx abzweigt oder nicht! In dem ganzen Programm ist auf den ersten 
Blick kein Befehl, der die brxx-relevanten Bits im SREG verändert -> 
brne ist fehl am Platz.
Woher weißt du überhaupt, daß die Empfangen-Routine bis zum ret 
durchläuft?

Tassilo

Autor: joerg_seemann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
weil die nachstehende senden-funktion ausgeführt wird.

Autor: Tassilo Böhr (big_t)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Da war ich wohl zu langsam...

Ich werde das Gefühl nicht los, daß hier was Grundlegendes nicht stimmt:
Reduziere die Hauptschleife mal zu:
[avrasm]
Hauptprogramm:

call SendenRS

inc data

rjmp Hauptprogramm
[/avrasam]

Wenn die ausgegebenen Werte eine durchgehende Reihe ergeben, dann sehen 
wir weiter...

Tassilo

Autor: joerg_seemann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ja, das geht.

Autor: Tassilo Böhr (big_t)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ok, dann kann man halbwegs sicher sein, daß die ganzen Takteinstellungen 
auch wirklich richtig sind.
Mit was sendest du denn die einzelnen Zeichen an den AVR? Ich habe die 
Befürchtung, daß da noch was nicht stimmt...

Tassilo

Autor: ecslowhand (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du initialisierst das Baudraten-Register falsch, es besteht aus ZWEI 
Registern !!!


ldi  r16, LOW((clock/(16*baudrate))-1)       ; Baudrate berechnen..
ldi  r17, HIGH((clock/(16*baudrate))-1)
sts  UBRR0L, r16        ; ...und setzen
sts  UBRR0H, r17


Lg EC

Autor: Tassilo Böhr (big_t)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
???
Macht er doch richtig (siehe UART_2.asm)!

Tassilo

Autor: ecslowhand (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Tassilo:

Ja, macht er richtig. Sorry, habs zu schnell überlesen....

Sorry !



Autor: joerg_seemann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
mittagspause...

ich kommuniziere mit einem programm namens rs232 terminal.

das hab ich aus 'messen steuern und regeln mit c-control 2'

Autor: Tassilo Böhr (big_t)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hm, ist mir jetzt kein Begriff, aber um auf Nummer sicher zu gehen, 
nimm' mal sowas wie HTerm (http://www.der-hammer.info/terminal/), da 
kann man am besten sehen was gesendet wird.
Notfalls geht auch das windowseigene Hyperterminal...

Tassilo

Autor: joerg_seemann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
big_T, das klappt.


scheinbar lags an dem programm, danke für den tip.

AHOI und besten dank nochmal...

Autor: Tassilo Böhr (big_t)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Na also, geht doch :-)

Tassilo

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.