ATmega128 RS232 Baudrate

OP #3083491
Lesenswert?

Hallo Forum

Hab ein C-Control pro Käfer (mega128) und ein Projektboard von Conrad.

An dieses Board kam noch von mir eine ISP-Schnittstelle.
Dann löschte ich den M128 und wollte mit einer seriellen Verbindung
anfangen. Problem: ich kann das UBRR0H UBRR0L setzen wie ich will,
der zugehörige Portpin für TxD ist entweder viel zu schnell
oder zu langsam.
Bei 9600 Bd und senden von "U" (0x55) würde ein bit ca. 100 uS
brauchen. Da lo und hi sich abwechseln,wäre die Frequenz ca. 5 kHz
oder 200 uS.
Nun kam aber durch ausprobieren und herantasten entweder zuviel raus
oder es war wesentlich zu wenig, und das sprungartig!
Ich habe das Gefühl, das Baudraten-Register stimmt nicht.
oder hängt es am ISP- Anschluss, der (dummerweise) die gleichen Pins 
benutzt.

Da man den Quarz (fosc=14745600) wegen des Metall-Geäuses nicht 
kontaktieren kann, legte ich an einen gut zugänglichen Portpin ein 
Testmuster.
1
;gemessen  ergibt 0.85 uS bzw 1.176 Mhz an pin PG0 ===14745600 / 6 zyklen
2
ldi r16,0b0000_0011
3
sts ddrg,r16
4
tstlp3:
5
inc r16
6
andi r16,0b0000_0001
7
sts portg,r16
8
rjmp tstlp3
ergo läuft der M128 nur mit der halben Frequenz. (ca)
Hat jemand Erfahrung in der Richtung.

bastler4
Gast #3083516
Lesenswert?

Hi

>Nun kam aber durch ausprobieren und herantasten entweder zuviel raus
>oder es war wesentlich zu wenig, und das sprungartig!

In welcher Reihenfolge beschreibst du die beiden Register?

MfG Spess
OP #3083916
Lesenswert?

Hallo Spess53
danke für die schnelle Reaktion

hier die Reihenfolge;
es war so
;ldi r17,byte2(fosc/16/BR)
;ldi r16,low(fosc/16/BR)
dann testweise so
ldi r17,1 ;high
ldi r16,2   ;low

; Set baud rate ??out UBRR0H, r17  out UBRR0L, r16
sts UBRR0H, r17
sts UBRR0L, r16
und hier ein Auszug aus dem .LST file, das AVR-Studio 4.18 gemacht hat
------------------------
000079 e011      ldi r17,1
00007a e002      ldi r16,2
                 ; Set baud rate ??out UBRR0H, r17  out UBRR0L, r16
00007b 9310 0090 sts UBRR0H, r17
00007d 9300 0009 sts UBRR0L, r16
--------------------------
am TxD-Pin dauert ein bit dann ca. 270 uS

mit freundlichem Gruß
bastler4
Gast #3083995
Lesenswert?

@Fritz

Ich habe nicht alle Makros in der Birne aber:
ldi r17,byte2(fosc/16/BR)
ldi r16,low(fosc/16/BR)
Taugt nix.

Versuchs mal mit:
... high()
... low()

Darüber hinaus ist Deine Formel verhunzt.

Zu viele Fehler in zu wenig Zeilen...

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren