VISCA Protokoll

Gast #207255
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?

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 21 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.