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?