Forum: Mikrocontroller und Digitale Elektronik ATMega328 UART


von Paul (Gast)


Lesenswert?

Hallo,
ich hab irgendwie Probleme mit den "neuen" AVRs.

Ich wollt mich jetzt erstmal zum warm werden von meinem Mega328 mit 
lauter Us benageln lassen. Wenn ich nun aber das Hyperterminal auf mache 
kommt nichts an.

Hab jetzt schon paar mal drüber geschaut und probiert aber es klappt 
irgendwie nicht :(
1
.include "m328Pdef.inc"
2
3
.def temp    = r16  
4
 
5
; Baudrate einstellen
6
ldi     temp, 25
7
sts     UBRR0L, temp
8
9
; 8 Bit,1S, 0P,Asy
10
 
11
ldi     temp, 0b10000110
12
sts     UCSR0C, temp
13
  
14
ldi     temp, 0b00001000
15
sts     UCSR0B,temp                  
16
 
17
loop:
18
  lds     temp,UCSR0A
19
  sbrs    temp,UDRE0                  
20
rjmp    loop
21
     ldi   temp, 'U'
22
     sts     UDR0, temp
23
rjmp   loop

Danke für eure Hilfe!

von Z8 (Gast)


Lesenswert?

; Baudrate einstellen
>ldi     temp, 25
>sts     UBRR0L, temp

ich hab keinen Bock mehr drauf --> bitte mit Bit-Namen! Z8

von Paul (Gast)


Lesenswert?

Ich hoffe ich hab das jetzt richtig verstanden:

also die 25 ist einfach der vorher berechnete Wert für 4MHz und 9800Baud

und bei UCSR0C
URSEL|UMSEL|UPM1|UPM0|USBS|UCSZ1|UCSZ0|UCPOL

bei UCSR0B
ist halt in dem Fall TXEN gesetzt

von Stefan E. (sternst)


Lesenswert?

> ldi     temp, 0b10000110
> sts     UCSR0C, temp

Was versprichst du dir davon, einen Modus zu benutzen, der im Datenblatt 
mit "(Reserved)" markiert ist? Oder versuchst du hier vielleicht, das 
Bit URSEL zu benutzen? Das gibt es beim Mega328 gar nicht.

von Paul (Gast)


Lesenswert?

Nun gut also für Asynchron UMSEL1 und UMSEL0 auf 00 gesetz geht aber 
leider
trotzdem nicht.

von Z8 (Gast)


Lesenswert?

Ist Deine Hartware ok?
Hast Du den µC auf einem Sockel?

von Paul (Gast)


Lesenswert?

Ja hab grad mal den Controller getauscht ging auch nicht und vorhins 
nochmal mit nem 8515 getest um zu gucken ob es wenigstens damit geht und 
es ging, also geht Kabel und beide Stecker ;). Aber dabei sei vielleicht 
gesagt das ich das STK200 nutze. Kann es vielleicht daran 
liegen?(Einfache Programme gehn aber zBsp Lampe an Lampe aus)

von Z8 (Gast)


Lesenswert?

was? der 8515 ist ein 40-Pinner, im Gegensatz zum m328 mit 28 Pins!

STK200! ich binn raus.

mfg Z8

von Paul (Gast)


Lesenswert?

Ja klar. Nur weiß ich das auf den 8515 meine UART funktionier und damit 
ab ich meine Stecker und alles getestet um das auszuschließen

von Z8 (Gast)


Lesenswert?

Ich kenn das STK200 nicht.

Z8 DU BIST RAUS.

von Roman (Gast)


Lesenswert?

Ich sehe da zweimal
1
rjmp    loop

So sendet er wohl nie ein U.

von Paul (Gast)


Lesenswert?

Naja das erste wird ja "geskipt" wenn der UART wieder bereit ist.

Ich bin aber selber schon n bisschen weiter ich habs jetzt geschafft das 
schon ein Zeichen ankommt (Fusebits) aber eben nicht das richtige und 
nur dann wenn ich ein U schicke sonst ist auch nichts. Klingt ja danach 
als wäre was mit der Baudrate nicht richtig aber
eigentlich ist doch die 25 für 4MHz und 9600 Baud richtig !?

von Z8 (Gast)


Lesenswert?

>eigentlich ist doch die 25 für 4MHz und 9600 Baud richtig !?

schau mal hier:

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

Der Schlüsselsatz lautet : lass Deinen Rechner rechnen. :)

von spess53 (Gast)


Lesenswert?

Hi

>Der Schlüsselsatz lautet : lass Deinen Rechner rechnen. :)

>Z8 DU BIST RAUS.

25 ist schon richtig. Benutzt du den internen RC-Oszillator oder einen 
Quarz?

MfG Spess

von Z8 (Gast)


Lesenswert?

Frage von leztlich:

>Ist Deine Hartware ok?
>Hast Du den µC auf einem Sockel?

das habe ich nicht, so sinnlos mal derher gefragt.
Wenn der  mC auf einem Sockel sitzt, könnte man
diesen entfernen und eine Brücke zwischen RX und TX
schalten. Damit könnte man die Kommunikation zwischen
dem Pc und Deiner Schaltung überprüfen.

Wenn Du über Dein Terminal-Prog. ein Zeichen sendest,
solltest Du es dann auch zurück bekommen.

Funktioniert das? Z8

von Z8 (Gast)


Lesenswert?

nie wieder ohne:

>.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

von Paul (Gast)


Lesenswert?

Also wie schon gesagt es kommen ja Zeichen an. Ich hab mir das jetzt so 
gebastelt das bei jedem Tastendruck das Zeichenregister erhöht wird und 
dieses ausgegeben. Also 1..2..3..A..B..
Bei machen Zeichen geht gar nichts bei anderen kommt nur so ein C mit 
nem Strich dran.
Ich nutz die Clock vom STK200

von spess53 (Gast)


Lesenswert?

Hi

Ich tippe auf falsch gesetzte Fuses.

MfG Spess

von Paul (Gast)


Lesenswert?

Muss ich da noch irgendwas setzen? Hab die Clockbbits eigentlich richtig 
gesetzt.

von spess53 (Gast)


Lesenswert?

Hi

>Muss ich da noch irgendwas setzen?

Was hast du denn gesetzt?

MfG Spess

von Paul (Gast)


Lesenswert?

Naja im AvrStudio ist so ne Auswahlliste für den Quarz und da is
"ExtClock, 40ms + 6CK" gewählt sonst alles aus ausser SPI.

Das STK200 hat ja nen Clock.

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.