Forum: Mikrocontroller und Digitale Elektronik Attiny2313 und RS232


von Martin S. (crocodile)


Lesenswert?

Hallo Zusammen,

Weiß  jemand wie ich  über rs232 Schnittstelle des Port von Attiny2313 
steuern kann.
Möchte gern an dem Port 6 LED’s über PC ansteuern.

Gruß
Martin

von Peter D. (peda)


Lesenswert?

Dann mußt Du Dir ein Protokoll ausdenken und 2 Programme schreiben (für 
den PC und den AVR).


Peter

von Martin S. (crocodile)


Lesenswert?

Hallo Peter,

Was meinst du mit dem Prorotkoll???
Weiss du ich kann nicht Programmieren, eher habe ich mir gedacht ob 
irgend wo ein fertiges Application für 2313 gibt dass ich so einfach 
übernenhmen kann.

Gruß
Martin

von Sam (Gast)


Lesenswert?

Du musst ein Protokoll schreiben, dass sagen kann, dass LED nummer X 
einen bestimmten Zustand haben soll.
Alternativ über usb kenne ich das hier: 
http://www.recursion.jp/avrcdc/cdc-io.html#usage

von Peter D. (peda)


Lesenswert?

Mikrocontroller sind ab Werk strohdoof und können garnix. Sie sind 
primär für Leute gedacht, die programmieren können oder lernen wollen.

Es kann sein, daß es für Deine konkrete Anwendung schon was fertiges im 
Web gibt, ich weiß es nicht.
Es wird wohl auch keiner für Dich danach suchen (d.h. mußt Du wohl 
selber).

Du brauchst in jedem Fall aber noch ein Programmiergerät, um das 
Programm in den MC zu flashen.


Peter

von Martin S. (crocodile)


Lesenswert?

Hallo,

dieser Code habe ich von AVR turirial Uart kopiert. so weit ich 
verstanden habe die entschprechen fast meine anwendung allerdings dieser 
Code für Atmega 8 geschrieben. Die Frage ist kann ich dieser Code auch 
für AT902313 verwenden oder nicht wenn Ja, was muss ich ändern?

Gruss
Martin


.include "m8def.inc"

.def temp = R16

.equ F_CPU = 4000000                            ; Systemtakt in Hz
.equ BAUD  = 9600                               ; Baudrate

; Berechnungen
.equ UBRR_VAL   = ((F_CPU+BAUD*8)/(BAUD*16)-1)  ; clever runden
.equ BAUD_REAL  = (F_CPU/(16*(UBRR_VAL+1)))     ; Reale Baudrate
.equ BAUD_ERROR = ((BAUD_REAL*1000)/BAUD-1000)  ; Fehler in Promille

.if ((BAUD_ERROR>10) || (BAUD_ERROR<-10))       ; max. +/-10 Promille 
Fehler
  .error "Systematischer Fehler der Baudrate grösser 1 Prozent und damit 
zu hoch!"
.endif

.org 0x00
        rjmp main

.org URXCaddr
        rjmp int_rxc

; Hauptprogramm
main:

    ; Stackpointer initialisieren

    ldi     temp, HIGH(RAMEND)
    out     SPH, temp
    ldi     temp, LOW(RAMEND)
    out     SPL, temp

    ; Port B = Ausgang

    ldi     temp, 0xFF
    out     DDRB, temp

    ; Baudrate einstellen

    ldi     temp, HIGH(UBRR_VAL)
    out     UBRRH, temp
    ldi     temp, LOW(UBRR_VAL)
    out     UBRRL, temp

    ; Frame-Format: 8 Bit

    ldi     temp, (1<<URSEL)|(1<<UCSZ1)|(1<<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:
    push    temp                        ; temp auf dem Stack sichern
    in      temp, sreg                  ; SREG sichern
    push    temp

    in      temp, UDR                   ; UART Daten lesen
    cpi     temp, '1'                   ; empfangenes Byte mit '1' 
vergleichen
    brne    int_rxc_1                   ; wenn nicht gleich, dann zu 
int_rxc_1
    cbi     PORTB, 0                    ; LED einschalten, low aktiv
    rjmp    int_rxc_2                   ; Zu int_rxc_2 springen
int_rxc_1:
    cpi     temp, '0'                   ; empfangenes Byte mit '0' 
vergleichen
    brne    int_rxc_2                   ; wenn nicht gleich, dann zu 
int_rxc_2
    sbi     PORTB, 0                    ; LED ausschalten, low aktiv
int_rxc_2:

    pop     temp
    out     sreg, temp                  ; SREG wiederherstellen
    pop     temp                        ; temp wiederherstellen
    reti

von spess53 (Gast)


Lesenswert?

Hi

>Die Frage ist kann ich dieser Code auch
>für AT902313 verwenden oder nicht wenn Ja, was muss ich ändern?

Zumindest:  .include "m8def.inc". Ansonsten fällt mir jetzt nichts 
offensichtliches auf.

MfG Spess

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.