mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ATmega162 RX-TX-Testprogramm geht nicht/ Probleme mit STK500


Autor: Martin Vojtek (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

ich habe versucht einem ATmega162 das UART-Protokoll beizubringen.
Allerdings geht da rein gar nichts. Es ist alles ein bisschen
chaotisch.

Ich benutze ein STK500. Einen externen Quarz mit 3686400 Hz. Jumper
sind richtig gesetzt, AVR sitzt in Slot 3000D3. ISP Programmierung.

Fuses: Divide clock by 8 ist deaktiviert
Int. RC 0sc.; Start-up time: 6CK + 65ms; [CKSEL=0010 SUT=10]

Und das ist komisch: ich benutze ja einen externen Quarz, aber wenn ich
das entsprechende Fuse setzen möchte, schmiert mir das Teil komplett ab
und ich kann gar nichts mehr setzen. So habe ich jetzt schon meinen
dritten AVR am Start. :-(

Ich habe ein einfaches Testprogramm geschrieben, welches mir Zeichen
auf TX an den PC senden soll (empfange mit HyperTerminal) und
gleichzeitig über Port B die LEDs ansteuern soll zur Kontrolle.

So habe ich herausgefunden, dass das Programm in der Routine
USART_Transmit hängen bleibt.

Aber wieso?????

Bitte helft mir, ich bin kurz davor zu verzweifeln. ;-)

Schonmal danke für die Hilfe.
Gruss
Martin


.include "m162def.inc"


  .def  count1  = r16    ;
  .def  akku  = r17    ;
  .def  count2  = r18    ;
  .def  count3  = r19    ;

ldi akku, LOW(RAMEND)      ; LOW-Byte der obersten RAM-Adresse
out SPL, akku
ldi akku, HIGH(RAMEND)      ; HIGH-Byte der obersten RAM-Adresse
out SPH, akku

ldi    akku, $ff      ;
out    DDRB, akku      ;

main:      ;

  andi akku,1
        out  PORTB,akku
  rcall USART_Transmit

rjmp    main


USART_Init:
;set baud rate

ldi r17,0
ldi r16, 23

out UBRR0H, r17
out UBRR0L, r16

;Enable receiver and transmitter

ldi r16, (1<<RXEN0) | (1<<TXEN0)
out UCSR0B,r16

;set frame format: 8data, 1stop bit

ldi r16, (1<<URSEL) | (0<<USBS0) | (3<<UCSZ00)
out UCSR0C,r16

ret


USART_Receive:

sbis UCSR0A, RXC0
rjmp USART_Receive
in akku, UDR0
out    PORTB, akku
ret


USART_Transmit:

sbis UCSR0A,UDRE0
rjmp USART_Transmit
out UDR0,akku
ret

Autor: Martin Vojtek (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
P.S: den Aufruf rcall USART_Init habe ich versehentlich gelöscht, der
taucht natürlich auf...

Autor: Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>So habe ich jetzt schon meinen dritten AVR am Start. :-(
Hast du die Dinger per HW-Parallel-Programming-mode versucht zu
"reaninmieren"?

>(0<<USBS0) multiosenseful...
um ein Bit zu löschen muß es "... &= ~(1<<USB0)" heissen...

Autor: Martin Vojtek (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
nein, habe noch nicht versucht sie zu reanimieren. Solange ich noch
welche übrig habe, versuche ich erstmal das Programm zum laufen zu
bringen.

USBS0 stimmt meiner Meinung nach schon: 0 == 1 Stop Bit.
(ich habe gerade nochmals im Datenblatt nachgeschaut)

Autor: Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich meinte auch nicht USBS0, sondern das ganze Konstrukt
"(0<<USBS0)".
Du versuchst eine 0 zu verschieben, und sie dann noch mit Einsen zu
verodern. Da kannst du dir das Ding "(0<<USBS0)" gleich sparen.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.