Archiv verlassen und diese Seite im Standarddesign anzeigen : UART mit STK500
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, 17:04
Hast du die entsprechenden Kabel fürs USART auf dem STK gesteckt? Sonst passiert nämlich gar nix, siehe Handbuch.
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, 14: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.
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, 17: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.
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, 21: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?)
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
hatte das sebe problem
habs denn hinbekommen
übertragungsrate mus richteg gewählt sein
3,686 mhz kann man 9600 baud nehmen
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
.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
.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
Hallo!
Mal eine andere Frage: wie müssen denn die Settings beim Terminal sein ? Ich fummel mir schon seit Stunden einen Wolf...
eigentlich gar nicht so schwer
com1 normalerwiese als schnitstelle baudrate 9600 datenbits 8 parität keine flusssteuerung keine
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.
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.