PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : UART mit STK500



klush
07.02.2005, 20:27
Ich habe einen ATmega16 auf meinem STK500
und versuche gerade irgendwie über die serielle
Schnittstelle Daten auszulesen. Dazu habe ich
mir erst einmal den UART Quellcode von Mikrocontroller.net
runtergeladen. Aber hier scheitert es schon.
Dort stand man könnte sich einfach mit dem Hyperterminal
die gesendeten Daten ansehen. Dort seh ich allerdings nichts.
Habe ich das Hyperterminal falsch eingestellt, oder die Baudrate
auf dem Controller, oder sonst etwas??

Danke!

bluebrother
09.02.2005, 16:04
Hast du die entsprechenden Kabel fürs USART auf dem STK gesteckt? Sonst passiert nämlich gar nix, siehe Handbuch.

klush
09.02.2005, 19:16
Kabel sind alle gesteckt und mehrfach überprüft. Habe auch mal
Rxd und Txd ausgetauscht, um sicher zu gehen, daß ich das richtige
Kabel verwende. Ich habe auch schon mit dem Oszi überprüft, ob irgendetwas gesendet wird und es kommen Signale aus dem Ausgang.
Um sicher zu gehen, daß mit dem RS232 Eingang meines Computers
alles stimmts, habe ich es auch schon an anderen Computern probiert...
aber das Hyperterminal macht einfach nur blue (bzw. white) screen...
Wer weiß, wahrscheinlich bin ich einfach unfähig das Hyperterminal zu bedienen....
Suche Rat

bluebrother
10.02.2005, 13:31
Hyperterminal is ne ziemliche Krankheit, probier doch mal TeraTerm oder das Terminal von Br@y. Da kannste ziemlilch einfach mal alle Baudraten durchklicken ... in deinem Code is mir beim überfliegen jetzt nix aufgefallen.

klush
10.02.2005, 16:21
Vielen Dank,
habe das jetzt mit Tera Term ausprobiert.
Dort habe ich erstmal zwar nicht das bekommen, was ich
gesendet habe, aber zumindest schon mal ein paar kryptische
Zeichen. Nachdem ich alle möglichen Frequenzänderungen versucht
habe, habe ich damit angefangen den Stecker solange
raus und reinzustecken bis die Übertragung dann irgendwie
synchronisiert war, und die Nachricht übermittelt wurde. Ist das
jetzt bei mir ein Hardwarefehler oder muß bzw kann ich die
Übertragung softwaretechnisch synchronisieren?

Endlich blinkt mal was...
Klush

bluebrother
10.02.2005, 16:55
Ich hatte auch schon ab und an das Problem dass trotz korrekter Einstellung erstmal nur Müll kam, wenn ich dann einen Reset vom Atmel gemacht hab gings. Keine Ahnung woran das lag. Sehe ich aber bislang nicht als großes Problem an.

David.W
19.02.2005, 15:24
Hallo,

reicht es eigentlich um diese Schnittstelle auf dem STK500 Board zu nutzen, wenn der Pin PD0 und PD1 mit RXD und TXD auf dem Board verbunden wird? Oder muß noch etwas weiteres getan werden?
Ich hab im kleinen Handbuch nichts gefunden und versuche ohne Erfolge irgendwie Daten zu lesen (selber Code wie oben).

bluebrother
19.02.2005, 20:34
im Handbuch steht an sich drin wo du welche Kabel stecken musst. Prinzipiell reichen TxD und RxD, GND sollte man ja annehmen dass schon verbunden ist. Hab aber weder ein STK500 noch das Handbuch da und kanns net nachgucken. Im Zweifelsfall auch mal das Kabel und die serielle Schnittstelle kontrollieren (du hast nicht zufällig Com1 und Com2 vertauscht?)

JanB
19.02.2005, 20:47
reicht es eigentlich um diese Schnittstelle auf dem STK500 Board zu nutzen, wenn der Pin PD0 und PD1 mit RXD und TXD auf dem Board verbunden wird?
Ja, das genügt.
Dann kannst du die zweite RSR232 auf dem STK500 benutzen.

Gruß Jan

slaud
02.05.2005, 22:47
hatte das sebe problem
habs denn hinbekommen
übertragungsrate mus richteg gewählt sein
3,686 mhz kann man 9600 baud nehmen

Tobiaur
02.05.2005, 23:25
HI
hast Du die Massen verheiratet? Ich hab mir mal nen Wolf gesucht weil ich offensichtlichen Datenmüll hatte. Am ende war das problem das sich die Massen net kannten :-(
Alternativ halt noch so Sachen wie start/stopbits parity etc. checken aber ich vermute das hast Du eh schon gemacht.
Weiterhin viel Glück.
Tobi

slaud
02.05.2005, 23:53
.include "m16def.inc"

.def temp = R16
.equ CLOCK = 3686000
.equ BAUD = 9600
.equ UBRRVAL = CLOCK/(BAUD*16)-1



.org 0x00
rjmp main

.org 0x0016
rjmp int_rxc


; Hauptprogramm
main:
ldi temp, LOW(RAMEND)
out SPL, temp
ldi temp, HIGH(RAMEND)
out SPH, temp

ldi temp, 0xFF ; Port B = Ausgang
out DDRB, temp
;

; Baudrate einstellen
ldi temp, LOW(UBRRVAL)
out UBRRL, temp
ldi temp, HIGH(UBRRVAL)
out UBRRH, temp

; Frame-Format: 8 Bit
ldi temp, (1<<URSEL)|(3<<UCSZ0)
out UCSRC, temp

sbi UCSRB, RXCIE ; Interrupt bei Empfang
sbi UCSRB, RXEN ; RX (Empfang) aktivieren

sei ; Interrupts global aktivieren

loop:

rjmp loop ; Endlosschleife

; Interruptroutine: wird ausgeführt sobald ein Byte über das UART empfangen wurde
int_rxc:

in temp, UDR
out PORTb, temp
reti

probiers mal so vieleicht fuktzs ja

slaud
02.05.2005, 23:55
.include "m16def.inc"

.def temp = r16
.equ CLOCK = 3868000
.equ BAUD = 9600
.equ UBRRVAL = CLOCK/(BAUD*16)-1

; Stackpointer initialisieren
ldi temp, LOW(RAMEND)
out SPL, temp
ldi temp, HIGH(RAMEND)
out SPH, temp

; Baudrate einstellen
ldi temp, LOW(UBRRVAL)
out UBRRL, temp
ldi temp, HIGH(UBRRVAL)
out UBRRH, temp

; Frame-Format: 8 Bit
ldi temp, (1<<URSEL)|(3<<UCSZ0)
out UCSRC, temp

sbi UCSRB,TXEN ; TX aktivieren

loop: ldi temp, 'T'
rcall serout ; Unterprogramm aufrufen
ldi temp, 'e'
rcall serout ; Unterprogramm aufrufen
ldi temp, 's'
rcall serout ; ...
ldi temp, 't'
rcall serout
ldi temp, '!'
rcall serout
ldi temp, 10
rcall serout
ldi temp, 13
rcall serout
rjmp loop

serout:
sbis UCSRA,UDRE ; Warten bis UDR für das nächste
; Byte bereit ist
rjmp serout
out UDR, temp
ret ; zurück zum Hauptprogramm

matzel
16.07.2005, 22:18
Hallo!

Mal eine andere Frage: wie müssen denn die Settings beim Terminal sein ? Ich fummel mir schon seit Stunden einen Wolf...

slaud
17.07.2005, 01:18
eigentlich gar nicht so schwer
com1 normalerwiese als schnitstelle baudrate 9600 datenbits 8 parität keine flusssteuerung keine

matzel
17.07.2005, 12:13
Naja, bei mir ist es COM6, weil ich eine PCMCIA Karte mit zwei seriellen Schnittstellen habe. Aber die Einstellungen scheinen Standard zu sein, es muss also am Programm des MC liegen.