Forum: Mikrocontroller und Digitale Elektronik Hiiiiiilfe - versuche mit Taste einen RS232-Befehl zu senden


von Markus Reichert (Gast)


Lesenswert?

Hallo zusammen,

ich versuche verzweifelt mit Hilfe meines STK500 und einem Tiny2313 per
Tastendruck einen USART-Befehl zu versenden.

Aber das Ding macht einfach nicht, was ich will!!! ;-) Ich bin kurz
davor aufzugeben. :-(

Was ist an meinem Code falsch? Ich bin gerade erst dabei, das Programm
zu entwickeln und es steckt absolut noch in den Kinderschuhen. Aber
schon jetzt macht es mir große Probleme.

Ich hoffe jemand kann mir den Fehler sagen. Ich wäre soooooooo dankbar.
:-)

Im Voraus vielen Dank.

Gruß
Markus



  .include "tn2313def.inc"      ;Definitionsdatei laden


  .def  akku = r16
  .def  switch = r17

  .cseg
  rjmp start
  .org  0x16

start:

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

    rcall USART_Init

    ldi    akku, 0x81
    rcall  USART_Transmit

    ldi    akku, 0x01
    rcall  USART_Transmit

    ldi    akku, 0x04
    rcall  USART_Transmit

    ldi    akku, 0x3F
    rcall  USART_Transmit

    ldi    akku, 0xFF
    out    PORTB, akku

main:
    in    switch, PINB
    cpi    switch, 0b11111111
    brne  LEFT

;Alternative:   sbis   PORTB,0
;               rcall  LEFT

    rjmp main


USART_Init:
    ;set baud rate

    ldi r17,0
    ldi r16, 23

    out UBRRH, r17
    out UBRRL, r16

    ;Enable receiver and transmitter

    ldi r16, (0<<RXCIE) | (0<<RXEN) | (1<<TXEN)
    out UCSRB,r16

    ;set frame format: 8data, 1stop bit

    ldi r16, (0<<USBS) | (3<<UCSZ0)
    out UCSRC,r16

    ret


USART_Transmit:

    sbis  UCSRA, UDRE
    rjmp  USART_Transmit
    out    UDR,akku

    ret


LEFT:

    ldi    akku, 0x81
    rcall  USART_Transmit

    ldi    akku, 0x01
    rcall  USART_Transmit

    ldi    akku, 0x04
    rcall  USART_Transmit

    ret

.EXIT

von Spess53 .. (hardygroeger)


Lesenswert?

Hi

Es wäre hilfreich wenn du noch ein paar Rahmendedingungen preisgeben
würdest:

Taktfrequenz
Baudrate
Empfängerprogramm
usw.

MfG HG

von Markus Reichert (Gast)


Lesenswert?

Übertragungsrate: 9600 Baud
Quarz: 3,6864 Mhz

Senden geht prinzipiell, nur wenn ich den Befehl per Tastendruck senden
möchte, dann gibt es Probleme.

Eine Senderoutine in der Hauptschleife funktioniert wunderbar.

Wäre super, wenn mir jemand nen Tip geben könnte, woran mein Programm
scheitert.

Liegt es an irgendwelchen Interrupts? Oder ist einfach mein Programm
fehlerhaft?

Danke für jede weitere Hilfe.

von Mika (Gast)


Lesenswert?

Versuch doch mal die Taste zu entprellen. Du wartest auch nicht ob die
Übertragung fertig ist. ( Da gibts ein Flag das du abfragen kannst. )

Wenn jetzt die Taste prellt sendest du zu schnell hintereinander.

von Markus Reichert (Gast)


Lesenswert?

Danke für den Tip.

Aber es lag am STK500.

Ich habe die Ports getestet (vgl. Thread
http://www.mikrocontroller.net/forum/read-1-365001.html#365012) und
habe festgestellt, dass die irgendwie nicht richtig funktioniert haben.


Ich habe etwas hin und her probiert und irgendwann gings dann
plötzlich. Ich habe keine Ahnung, woran es gelegen hat. :-(

Trotzdem Danke für die Hilfe.

Gruß
Markus

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.