Forum: Mikrocontroller und Digitale Elektronik AVR-Tutorial UART senden wird nicht angezeigt?


von Olli R. (downunderthunder42)


Angehängte Dateien:

Lesenswert?

Hallo,

ich bin gerad beim Kapitel Uart des AVR-Tutorials.

Leider habe ich ein Problem mit dem ersten Programm, das einen an den µX 
gesendeten Zahlenwert über LEDs ausgeben soll.

Ich habe 6 LEDs angeschlossen und zwar an PD0 bis PD5. OK PD0 kann 
nichts anzeigen, weil RTX (read) aktiviert ist aber auch sonst tut sich 
nicht viel.

Hier nochmal das proggi aus Tutorial:

.include "m8def.inc"

.def temp = R16

.equ F_CPU = 4000000                            ; Systemtakt in Hz
.equ BAUD  = 9600                               ; Baudrate

; Berechnungen
.equ UBRR_VAL   = ((F_CPU+BAUD*8)/(BAUD*16)-1)  ; clever runden
.equ BAUD_REAL  = (F_CPU/(16*(UBRR_VAL+1)))     ; Reale Baudrate
.equ BAUD_ERROR = ((BAUD_REAL*1000)/BAUD-1000)  ; Fehler in Promille

.if ((BAUD_ERROR>10) || (BAUD_ERROR<-10))       ; max. +/-10 Promille 
Fehler
  .error "Systematischer Fehler der Baudrate grösser 1 Prozent und damit 
zu hoch!"
.endif

    ; Stackpointer initialisieren

    ldi     temp, HIGH(RAMEND)
    out     SPH, temp
    ldi     temp, LOW(RAMEND)
    out     SPL, temp

    ; Port D = Ausgang

    ldi     temp, 0xFF
    out     DDRD, temp

    ; Baudrate einstellen

    ldi     temp, HIGH(UBRR_VAL)
    out     UBRRH, temp
    ldi     temp, LOW(UBRR_VAL)
    out     UBRRL, temp

    ; Frame-Format: 8 Bit

    ldi     temp, (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0)
    out     UCSRC, temp

    sbi     UCSRB, RXEN                     ; RX (Empfang) aktivieren

receive_loop:
   sbis     UCSRA, RXC                      ; warten bis ein Byte 
angekommen ist
   rjmp     receive_loop
   in       temp, UDR                       ; empfangenes Byte nach temp 
kopieren
   out      PORTD, temp                     ; und an Port D ausgeben.
   rjmp     receive_loop                    ; zurück zum Hauptprogramm



Ich nutze, weil ich gerad nichts anderes zur Verfügung habe, den 
internen Takt von 4MHz. Die Baudrate liegt bei 9600.

Ich nutze am PC Hterm sind die Einstellungen so korrekt oder muss dort 
noch etwas beachtet werden?

ich wollte "0110" also die Zahl 6 übertragen! Dann müssten doch die LEDs 
1 und 2 leuchten (LED0 bis LED5 werden verwendet).

Ich musss doch bei Hterm nur verbinden und auf Asend klicken etc.?

von Falk B. (falk)


Lesenswert?

@  Olli R. (downunderthunder42)

>ich bin gerad beim Kapitel Uart des AVR-Tutorials.

Dann lern lesen und tu was man dir sagt.

>Ich nutze, weil ich gerad nichts anderes zur Verfügung habe, den
>internen Takt von 4MHz. Die Baudrate liegt bei 9600.

MÖÖÖP! Fehler!

http://www.mikrocontroller.net/articles/AVR-Tutorial:_UART#UART_konfigurieren

http://www.mikrocontroller.net/articles/AVR_Checkliste#UART.2FUSART

Und NEIN, du musst KEINE Weiteren Fragen zu diesem Thema stellen. Halte 
dich STRIKT an die Hinweise und du wirst Erfolg haben.

MFG
Falk

von Olli R. (downunderthunder42)


Lesenswert?

Hallo,

es war mir durchaus klar, dass da steht "es sollte dringend ein Quarz 
oder Quarzoszillator verwendet werden". Mir fehlt nur leider passende 
Kondensatoren!

OK also wird es vermutlich daran liegen?

Das ja auch kein Grund unhöflich zu werden!

von Falk B. (falk)


Lesenswert?

Wenn jemand zum 10.001 mal eine Frage stellt, die vor ihm schon 
mindestens 9000 Ignoranten und Schlaumeier gestellt haben, dann ist das 
einfach Pech. Oder mangelnde Recherche. Oder Legasthenie. Oder whatever.

von Karl H. (kbuchegg)


Lesenswert?

Olli R. schrieb:

> OK also wird es vermutlich daran liegen?

Kann sein, kann auch nicht sein.

Fang damit an, dass du den µC senden lässt.
Dann siehst du im HTerm ob und wenn ja was ankommt.

Wenn das klappt, weißt du, dass die Übertragungsstrecke steht und kannst 
auch in die andere Richtung arbeiten, bei der du dann nicht mehr so 
einfach kontrollieren kannst, was dort ankommt.

von Olli R. (downunderthunder42)


Lesenswert?

Das Senden des µC habe ich natürlich vorher gemacht.
Und das hat geklappt! Deswegen war ich so verwundert.

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.