Hallo, ich habe folgenden Aufbau: -Ein STK500 mit eingesetztem AtMega16, PD0 und PD1 sind mit dem RS232-Spare-Anschluss verbunden. Das ganze ist über ein 1:1 Kabel mit dem COM-Anschluss des PC's verbunden. Im Controller sind jetzt folgende Programme: Die Hauptdatei, sorgt für den korrekten Ablauf: .INCLUDE "m16def.inc" .EQU TAKT = 3686400 .EQU BAUD = 9600 .DEF akku = r16 .CSEG rjmp start .ORG $2A start: ldi akku,LOW(RAMEND) ;Stapel initialisieren out SPL,akku ldi akku,HIGH(RAMEND) out SPH,akku ;--bis hier ser akku ;PORTB ist Ausgang out DDRB,akku out PORTB,akku clr akku ;--bis hier rcall initusart ;Schnittstelle initialisieren ldi akku,'>' ;und testen rcall putch ;Zeichen senden loop: rcall getche ;Arbeitsschleife, Zeichen rjmp loop ;aufnehmen und senden .INCLUDE "konsole.h" ;Einbinden der Unterprogramme .EXIT initusart.asm: initusart: push r16 ;zuerst Register retten ldi r16,LOW(TAKT/(16*BAUD) -1) ;dann Teiler+Baudrate errechnen out UBRRL,r16 ;High+Low-Teil in die ldi r16,HIGH(TAKT/(16*BAUD) -1) ;Register schreiben andi r16,0b01111111; out UBRRH,r16 ;--bis hier sbi UCSRB,RXEN ;Empfänger sbi UCSRB,TXEN ;und Sender ein ldi r16,(1 << URSEL) | (1 << UCSZ1) | (1 << UCSZ0) ;Einstellungen: out UCSRC,r16 ; Asynchron, 8Bit, ein Stopbit in r16,UDR ;Empfangsregister leeren pop r16 ;zurückschreiben und Rücksprung ret ; putch.asm: putch: sbis UCSRA,UDRE ;Daten da? rjmp putch ;wenn nein, Schleife out UDR,r16 ;wenn ja, senden ret ;Rücksprung getche.asm: getche: sbis UCSRA,RXC ;zuerst Zeichen lesen rjmp getche in r16,UDR out PORTB,r16 ;und auf PORTB ausgeben getche1:sbis UCSRA,UDRE ;und dann zurückschreiben rjmp getche1 out UDR,r16 ret Das Programm macht im Prinzip was es soll: Nach dem Einschalten erscheint ein Zeichen auf dem Hyperterminal, und bei Tastendruck kommt was zurück. Nur: es kommt anstatt > nur LL zurück, und auch sonst kommen nur einige wenige Zeichen zurück, die eben nicht dem entsprechen was ich geschickt habe, die LEDS am STK blinken dazu hektisch. Ist das ein Fehler oder normal, dass da eben was nicht richtig kodiert, bzw. dekodiert wird? Wie kann ich den ein Bitmuster nach Art 0b11111111, bzw 255 oder $ff senden? Habs mit einer Text-Datei versucht aber, bei jedem Übertragen steht was anders auf den LEDS, eigentlich auch logisch, eine Textdatei besteht nun mal nicht nur aus den ASCII-Zeichen, die ich eingegeben habe. Die Bedingungen sind eigentlich optimal, der Takt auf dem STK beträgt ca. 3,69MHZ, was auch im Programm eingestellt ist, ich denke Probleme, die daher rühren kann man ausschließen. Hat das jemand verstanden, was mein Problem ist? Ich kann das auch gerne noch genauer erklären. Vielen Dank schon mal für eure Hilfe
Das übliche: Bist du sicher, dass der AVR mit dem externen Quarz läuft. Sprich: Hast du die Fuse Bits entsprechend umgestellt?
hast recht, der läuft mit 1MHZ intern, das wäre im Prinzip kein Problem den umzuprogrammieren, aber im STK500 gibts jede Menge externe Optionen, getrennt nach Frequenzbereichen, Start-Up time und anderem, welche der vielen Optionen muss ich denn da nehmen für die 3,69MHZ am XTAL1?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.