mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik zeichen empfangen


Autor: Sahra Nana (sahra_nana)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
receive_loop:
   ldi    temp,  UCSR0A                     ; warten bis ein Byte 
angekommen ist
   sbrs      temp , RXC0
   rjmp     receive_loop
   lds       temp, UDR0                       ; empfangenes Byte nach 
temp kopieren
   out      PORTD, temp                     ; und an Port D ausgeben.
   rjmp     receive_loop

Hallo Leute,
ich möchte ein Zeichen per poling über Hyperterminal empfangen, zb wenn 
ich ein 1 schreibe geht ein LED an und bei 0 geht die aus.
ist es so richtig wie ich geschrieben habe. ich bin in µc eine 
Angängerin.
ich habe eine Atmega88P
danke

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wir frage ist was übertragen wird? eine '0' order eine 0 (0x00) Wenn du 
in einem Terminialprogramm eine '0' eintippts wird eigentlich eine 48 
(0x48) übertragen und diese weist du jetzt dem Port zu.

Autor: Sahra Nana (sahra_nana)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich will einfach das Beispiel im AVR-Tutorial Empfangen von Zeichen per 
Polling zum laufen bringen. nur als Übung

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

Bewertung
0 lesenswert
nicht lesenswert
Sahra Nana schrieb:
> ich will einfach das Beispiel im AVR-Tutorial Empfangen von Zeichen per
> Polling zum laufen bringen. nur als Übung

OK.
Was ist mit dem Beispiel. Klappt es bei dir nicht?
http://www.mikrocontroller.net/articles/AVR_Checkl...

Autor: Sahra Nana (sahra_nana)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich habe nach meinem µC den Text angepasst, und so geschrieben:
 ; Port D = Ausgang
     ldi     temp, 0xFF
    out     DDRD, temp
     ; Baudrate einstellen
     ldi     temp, HIGH(UBRR_VAL)
    sts     UBRR0H, temp
    ldi     temp, LOW(UBRR_VAL)
    sts     UBRR0L, temp
     ; Frame-Format: 8 Bit
     ldi     temp, (1<<USBS0)|(3<<UCSZ00)
    sts     UCSR0C, temp
    ldi    temp,1<< RXEN0                     ; RX (Empfang) aktivieren
    sts    UCSR0B , temp
receive_loop:
   ldi    temp,  UCSR0A                     ; warten bis ein Byte 
angekommen ist
   sbrs      temp , RXC0
   rjmp     receive_loop
   lds       temp, UDR0                       ; empfangenes Byte nach 
temp kopieren
   out      PORTD, temp                     ; und an Port D ausgeben.
   rjmp     receive_loop
das Programm zeigt keine Fehler, also 0 Fehler 0 Warning, aber ich kann 
nicht in Hyperterminal was schreiben.

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

Bewertung
0 lesenswert
nicht lesenswert
Sahra Nana schrieb:

> das Programm zeigt keine Fehler, also 0 Fehler 0 Warning, aber ich kann
> nicht in Hyperterminal was schreiben.

Da heißt erst mal gar nichts.
0 Fehler, 0 Warnung heißt nur, dass dein Programm keine 
'Grammatik-Fehler' aufweist.
"Das Segelboot schimpft die Gabel" ist laut Duden auch korrekt und 
trotzdem ein sinnloser Satz.

Kannst du senden, sprich: Hast du schon getestet ob die UART 
funktioniert und ob PC und AVR miteinander prinzipiell können?

Immer mit dem Senden anfangen. Da kann man Hardwarefehler leichter 
diagnostizieren.

Autor: Sahra Nana (sahra_nana)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
senden kann ich ja, aber empfangen leider nicht..........
MFG

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

Bewertung
0 lesenswert
nicht lesenswert
Sahra Nana schrieb:
> senden kann ich ja, aber empfangen leider nicht..........

OK. das ist gut.
Das heist, die Leitung steht prinzipiell

Dann mach mal folgendes.
   ...
receive_loop:
   ldi    temp,  UCSR0A                     ; warten bis ein Byte angekommen ist
   sbrs      temp , RXC0
   rjmp     receive_loop

   lds       temp, UDR0                       ; empfangenes Byte nach temp kopieren

   ldi      temp, 0xAA          ; <------------
   out      PORTD, temp                     ; und an Port D ausgeben.
   rjmp     receive_loop

hier wird nicht das empfangene Zeichen ausgegeben, sondern einfach das 
Bitmuster für 0xAA (das ist abwechselnd 0 und 1). Wenn du 8 LED am PORT 
D hast, musst du das auf jeden Fall sehen.

Das Ziel ist es, herauszufinden, ob überhaupt etwas empfangen wird. 
Irgendwas.

Sobald du am Hyperterminal eine Taste drückst, muss sich am PORT D etwas 
tun

(Im Hyperterminal hast du das Handshake, die 'Flusskontrolle', 
ausgeschaltet?)

> MFG

Autor: Sahra Nana (sahra_nana)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
also keine Reaktion der macht nicht mit,

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

Bewertung
0 lesenswert
nicht lesenswert
Die Checkliste von weiter oben bist du schon durchgegangen.
Da ist insbesondere ein Test drinnen, der darüber Aufschluss geben kann, 
ob vom PC überhaupt etwas weggesendet wird.
(Das du im hyperterminal deine tastendrücke nicht siehst, bedeutet erst 
mal gar nichts. Je nach Einstellung des lokalen Echos ist das normal)

Autor: Sahra Nana (sahra_nana)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
schön guten Morgen,
welche checkliste meinste du, und wo finde ich die?
MFG
S.N

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

Bewertung
0 lesenswert
nicht lesenswert
Sahra Nana schrieb:
> schön guten Morgen,
> welche checkliste meinste du, und wo finde ich die?

Beitrag "Re: zeichen empfangen"

Autor: Sahra Nana (sahra_nana)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich habe die Liste gechekt, anscheint habe alles richtig eingestellt, 
wenn ich das Programm laufen lasse, leucht die Diode, die am Port  PD7 
angeschlossen habe permanent. aber der Hyperterminal  reagiert nicht, 
soll man vielleich etwas in HyT umstellen.
danke

Autor: Sahra Nana (sahra_nana)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich habe jetzt das auskommentiert:
  ;ldi      temp, 0xAA
und wenn nich irgendwas eintippe, wird die Diode leuchten, aber der 
HYTerminal, zeigt nicht was ich schreibe

Autor: Uwe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi!
>  ldi    temp,  UCSR0A               ; warten bis ein Byte angekommen ist
>  sbrs   temp , RXC0
sollte eher lauten:
   lds    temp,  UCSR0A              ; warten bis ein Byte angekommen 
ist
   sbrs   temp , RXC0

Viel Erfolg, Uwe

Autor: geb (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
vielleicht RX /TX vertauscht, probier mal Pin 2 und 3 des Sub-D Steckers 
zu vertauschen.

Grüße Gebhard

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

Bewertung
0 lesenswert
nicht lesenswert
Sahra Nana schrieb:
> ich habe jetzt das auskommentiert:
>   ;ldi      temp, 0xAA
> und wenn nich irgendwas eintippe, wird die Diode leuchten, aber der
> HYTerminal, zeigt nicht was ich schreibe

Das ist normal.
HyperTermianl wartet darauf, dass dein AVR die Zeichen zurückschickt, 
die er empfangen hat. AUf die Art kann man nämlich gut kontrollieren, ob 
die Übertragung klappt. Nur dann wenn Hyperterminal das getippte auch 
anzeigt kann man sicher sein, dass die Strecke PC->AVR und wieder zurück 
einwandfrei funktioniert und nicht zb irgendwo ein Kabel abgefallen ist.

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Seht euch mal den Tip von Uwe an.

MfG Spess

Autor: Sahra Nana (sahra_nana)
Datum:
Angehängte Dateien:
  • preview image for 1.png
    1.png
    15,9 KB, 110 Downloads

Bewertung
0 lesenswert
nicht lesenswert
es geht auch mit ldi, das Problem war: ich soll was in HyT einstellen, 
und zwar die Ascii setup, die 2 häckschen oben im Bild

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

>es geht auch mit ldi

Das 'ldi' macht deine Routine wirkungslos!

  ldi    temp,  UCSR0A lädt die Adresse des Registers
  lds    temp,  UCSR0A lädt den Inhalt des Registers

MfG Spess

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

Bewertung
0 lesenswert
nicht lesenswert
Sahra Nana schrieb:
> es geht auch mit ldi,

Äh. Nein
ldi macht etwas ganz anderes

> das Problem war: ich soll was in HyT einstellen,
> und zwar die Ascii setup, die 2 häckschen oben im Bild

Das erste Häkchen bestimmt nur was passiert, wenn du 'Return' drückst.
Das zweite Häkchen. Nun, das mag für dich jetzt so aussehen, als ob es 
dein Problem löst. Aber das tut es nicht. Es besagt nur, dass 
Hyperterminal die Zeichen die es rausschickt auch gleichzeitig anzeigt. 
Ob die Zeichen tatsächlich rausgehen bzw. ob sie auch korrekt empfangen 
werden kann man damit nicht feststellen.

Autor: Abdul K. (ehydra) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
'Früher' <tm> hat man sowas mit einem Längschlitzschraubendreher durch 
Brücken von TxD und TxD direkt am 8051 'überprüft'. Dran gehalten und 
kurz ins Terminalwindow gehackt, ferrrtisch.

Autor: Sahra Nana (sahra_nana)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo abdul,
wo kommst du her, dein Name klingt marokkanisch, stimmt es?

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.