Forum: Mikrocontroller und Digitale Elektronik VISCA Protokoll


von Thomas (Gast)


Lesenswert?

Hallo,

nach einigem testen komme ich irgendwie nicht weiter. Ich möchte mit
einem ATMEL MEGA16 eine Kamera mit Schwenk-Neigekopf über VISCA
Protokoll ansteuern. Nachdem ich mit meinem eigenen Programm nicht
weiterkam habe ich das Demo aus dem Tutorial Kap.7 genommen und
ausprobiert:
1
.include "m16def.inc"
2
3
.def temp = r16
4
.equ CLOCK = 4000000
5
.equ BAUD = 9600
6
.equ UBRRVAL = CLOCK/(BAUD*16)-1
7
8
        ; Stackpointer initialisieren
9
        ldi temp, LOW(RAMEND)
10
        out SPL, temp
11
        ldi temp, HIGH(RAMEND)
12
        out SPH, temp
13
14
        ; Baudrate einstellen
15
        ldi temp, LOW(UBRRVAL)
16
        out UBRRL, temp
17
        ldi temp, HIGH(UBRRVAL)
18
        out UBRRH, temp
19
20
        ; Frame-Format: 8 Bit
21
        ldi temp, (1<<URSEL)|(3<<UCSZ0)
22
        out UCSRC, temp
23
24
        sbi UCSRB,TXEN                   ; TX aktivieren
25
    sbi UCSRB, RXEN          ; RX aktivieren
26
27
start:
28
        ldi ZL, LOW(text*2)               ; Adresse des Strings in den
29
        ldi ZH, HIGH(text*2)              ; Z-Pointer laden
30
        rcall print                       ; Unterfunktion print
31
aufrufen
32
33
        ;ldi R16, 10                       ; die Bytes 10 und 13
34
senden
35
        ;rcall sendbyte                    ; (Zeilenumbruch im
36
Terminal)
37
        ;ldi R16, 13
38
        ;rcall sendbyte
39
ende:
40
41
        rjmp ende                        ; das Ganze wiederholen
42
43
44
; print: sendet die durch den Z-Pointer adressierte Zeichenkette
45
print:
46
        lpm                               ; Erstes Byte des Strings
47
nach R0 lesen
48
        tst R0                            ; R0 auf 0 testen
49
        breq print_end                    ; wenn 0, dann zu print_end
50
        mov r16, r0                       ; Inhalt von R0 nach R16
51
kopieren
52
        rcall sendbyte                    ; UART-Sendefunktion
53
aufrufen
54
        adiw ZL, 1                        ; Adresse des Z-Pointers um 1
55
erhöhen
56
        rjmp print                        ; wieder zum Anfang springen
57
print_end:
58
        ret
59
60
; sendbyte: sendet das Byte aus R16 über das UART
61
sendbyte:
62
        sbis UCSRA, UDRE                  ; warten bis das UART bereit
63
ist
64
        rjmp sendbyte
65
        out UDR, R16
66
        ret
67
68
text:
69
.db 0x81, 0x01, 0x06, 0x04, 0xff ,0    ; Stringkonstante, durch eine 0
70
abgeschlossen

Wenn ich ein Terminal Programm starte, empfange ich die Daten richtig,
aber mit irgendetwas scheint die Kamera nicht einverstanden zu sein.
Schicke ich diesen Code jedoch über das Terminal Programm an die Kamera
klapt alles wunderbar. Ich vermute das irgendwas an dem Timing oder aber
ein Schalter falsch gesetzt ist (Visca Protokoll benötigt
9600bps(38400bps) data bits: 8 start bits:1 stop bits:1 Non parity MSB
first und kein Flow control) Ich glaub momentan sehe ich den Wald vor
Bäumen nicht mehr.

Kann mir jemand da helfen?

von Thomas (Gast)


Lesenswert?

Hat da keiner eine Idee?

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.