ATmega128 + USART

Gast #1191217
Lesenswert?
• ▲
▼
Hi :)

also ich bekomme einfach keine USART-Kommunikation mit meinem ATmega128 
hin. Die Mega103 Kompatibilität ist ausgeschaltet, und ich will USART0 
nutzen. Da an den selben Leitungen der ISP-Anschluss hängt, habe ich zu 
RX und TX welche vom MAX232 kommen, jeweils einen 10k Widerstand 
eingebaut (hoffe das ist richtig so?).

Der ISP-Zugriff klappt prima, nur beim RS232 tut sich gar nicht. Die 
Baudrate hab ich auf 2400 gestellt, weil ich bislang nur den internen 
Oszi genutzt hab (hab beim fusen auf den externen den µC schon zweimal 
"abgeschossen" und musste ihn über nen externen Takt wiederbeleben, also 
bin ich da nun bissel... ängstlich :)).

Den ATmega128 hab ich auf einer Mini-Aufsteck-Platine gekauft, laut 
Händler ist ein "PBRC16.00MHz Resonator" verbaut. Bei den Fuses im AVR 
Studio hab ich zuerst dafür CKOPT gesetzt (laut Datenblatt für 
Frequenzen über 8MHz nötig) und External Crystall/Resonator High 
Frequenz, Startup-Time: 16K CK + 64ms gewählt... zack ging nichts mehr 
:) Dann hab ich noch den Ext. RC-Osc. 8MHz-12MHz Startup-time 6CK + 4ms 
geklickt, und wieder tot.

Im Momemnt läuft der µC mit der Einstellung "Int. RC-Osc. 4MHz 
Startup-time 6CK + 4ms" ...

Für das Testen der UART-Verbindung hab ich folgendes Programm 
geschrieben:
-----

.INCLUDE "m128def.inc"
.DEF temp = R16

.EQU Baud = 2400
.EQU CLOCK = 4000000
.EQU UBRVAL = CLOCK/(Baud*16)-1

  ; Stackpointer initialisieren

  ldi temp,LOW(RAMEND)    ; Unteres Ende des Stackspeichers
  out SPL,temp
  ldi temp,HIGH(RAMEND)   ; Oberes Ende des Stackspeichers
  out SPH,temp

  ; Baudrate einstellen
  ldi temp,LOW(UBRVAL)
  out UBRR0L,temp
  ldi temp,HIGH(UBRVAL)
  sts UBRR0H,temp

  ; Frame Format 8bit
  ldi temp, 0x00 ; R16 wird mir Nullen belegt
  out UCSR0A, temp ; Control and Status Register A (UCSRA) wird mit 
Nullen
          ; belegt
  out UCSR0B, temp
  ldi temp,0b00010011
                    ; = Asynchroner Modus, kein Parity Bit
                  ; 1 Stop Bit, 8 DatenBits
  sts UCSR0C,temp          ; temp wird in UCSRC geschrieben


start:
cbi UCSR0B,TxEN0   ; Transmit Enable auf 0 gesetzt
sbi UCSR0B,RxEN0   ; Receive Enable wird auf 1 gesetzt

empfangen:
      sbis UCSR0A,UDRE0    ; Skip Bit if Set = Überspringe die nächste 
Anweisuung
                     ; wenn Bit UDRE des Registers UCSRA auf 1 gesetzt 
ist
                   ; UDR=1 heißt, dass UDR (Buffer) leer ist
      rjmp empfangen       ; wenn UDR nicht leer ist, zurück zu 
"empfangen"

komplett:
sbis UCSR0A,RxC0                 ; sbis, wenn die Daten komplett 
empfangen wurden
rjmp komplett

in temp,UDR0  ; empfangenes Byte aus dem Buffer UDR nach R16 schieben
inc temp     ; R16 um 1 inkrementieren

leer:
sbis UCSR0A,UDRE0
rjmp leer

out  UDR0,temp

cbi UCSR0B,RxEN0  ; Receive Enable wird auf 0 gesetzt
sbi UCSR0B,TxEN0  ; Transmit Enable wird auf 1 gesetzt

test:
sbis UCSR0A, UDRE0 ; sbis wenn UDR Empty
rjmp test

a2:
sbis UCSR0A,TxC0 ; Tranmission Complete?
rjmp a2
sbi UCSR0A,TxC0  ; manuelles Löschen von TxC durch auf 1 setzen
rjmp start
------------

Das Ding funktioniert (mit umgewandelten Registern) auch auf einem 
ATmega8.

Der einzige technische Unterschied ist, dass ich beim ATmega128 einen 
USB-Seriell-Wandler benutzen muss (der mega8 ist aufm Asuro, da läuft 
das über einen IR-USB-Transmitter)... könnte das vl auch an dem Teil 
liegen? Oder hats mit der Taktquelle zu tun? Ich hätte gedacht, dass 
dann vl fehlerhafte Zeichen kommen, aber im Hyperterminal kann ich 
nichtmal was eintippen (und es kommt freilich auch nichts :)) ....

Wäre super wenn mir jemand auf die Sprünge helfen könnte!
Vielen Dank und liebe Grüße,
Jan
#1191356
Lesenswert?
• ▲
▼
Jan wrote:
> kann mir denn jemand sagen, welche einstellung ich für den ext. takt
> wählen muss?
Als allererstes musst Du entscheiden, ob Du tatsächlich einen externen 
Takt (external clock) hast oder einen Quarz (external crystal). Das 
sind nämlich zwei völlig unterschiedliche Dinge.

> ... wie gesagt, die bezeichnung bringt mich irgendwie
> durcheinander... :/
Welche Bezeichnung?

AVR Fuses
Gast #1191391
Lesenswert?
• ▲
▼
dieses ding hier soll der externe taktgeber sein: PBRC16.00MHz Resonator 
... nur das sieht ja für mich nach einem rc-oszi aus? ... und der µC ist 
bei der einstellung ja bereits abgeschmiert bei mir.. ?

danke weiterhin!
Gast #1191414
Lesenswert?
• ▲
▼
Hi

>dieses ding hier soll der externe taktgeber sein: PBRC16.00MHz Resonator
>... nur das sieht ja für mich nach einem rc-oszi aus? ... und der µC ist
>bei der einstellung ja bereits abgeschmiert bei mir.. ?

Schon mal Datenblatt angesehen?

MfG Spess
Angehängte Dateien:
Gast #1191456
Lesenswert?
• ▲
▼
ah um ehrlich zu sein - nein *g ... entschuldigung. (und danke :))
also das sieht für mich nach einem quarz, sprich external crystal aus. 
nur wieso ging dann die einstellung External Crystall/Resonator High
Frequenz, Startup-Time: 16K CK + 64ms plus gesetzte CKOPT fuse nicht? 
... also nachdem ich das so eingestellt und die fuses geschrieben hab, 
konnte ich nichtmehr auf den µC zugreifen? ...

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