Hallo zusammen.
Ich habe eine Arduino 2560, Arudino IDE 1.6.9 und Atmel Studio 7.
Ich möchte einen DMX Empfänger bauen der einen Kanal empfängt und diesen
auf dem Serial Terminal ausgibt. Ich habe dazu einen bereits vorhanden
Code für einen AVR (nicht spieziell für Arduino) benutzt und ihn
versucht abzuändern bzw zu vereinfachen damit das oben beschreibene
Ergebnis zustande kommt.
Anbei der Code und im Anhang findet sich ein Bild vom Aufbau.
Momentan ist das Problem dass es beim Upload (Kompilieren funktioniert)
folgende Fehlermeldung erscheint.
1 | Uploading to I/O board using 'AVRISP mkII'
|
2 | The uploader returned an error
|
3 | avrdude: usbdev_open(): did not find any USB device "usb"
|
Im Atmel Studio ist das richtige Board sowie der richtige COM port
ausgwählt, in der Arduino IDE ebenfalls.
Wenn ich das ganze mit der IDE versuche, erscheint folgender Fehler:
1 | C:\Users\Ich\Documents\Arduino\Tmp\Tmp.ino: In function 'void USART_RX_vect()':
|
2 |
|
3 | C:\Users\Ich\Documents\Arduino\Tmp\Tmp.ino:24:7: warning: 'USART_RX_vect' appears to be a misspelled signal handler [enabled by default]
|
4 |
|
5 | ISR (USART_RX_vect)
|
6 |
|
7 | ^
|
Hat jemand eine Idee woran das liegen könnte?
Gruß
1 |
|
2 | #include <avr/interrupt.h>
|
3 | #include <avr/io.h>
|
4 | #include <stdio.h>
|
5 |
|
6 | //#define F_CPU 16000000
|
7 |
|
8 |
|
9 | #define DMX_BAUD 250000
|
10 | #define DMX_LOST_TIMEOUT 8000
|
11 |
|
12 | volatile unsigned char dmx_buffer[514];
|
13 | volatile unsigned int dmx_lost = DMX_LOST_TIMEOUT;
|
14 |
|
15 | volatile unsigned int dmx_adresse = 0;
|
16 | volatile unsigned char phase_off_count = 0;
|
17 |
|
18 | volatile unsigned char val1;
|
19 | volatile unsigned char val2;
|
20 | volatile unsigned char val3;
|
21 |
|
22 | //############################################################################
|
23 | //Empfangsroutine für DMX
|
24 | ISR (USART_RX_vect)
|
25 | //############################################################################
|
26 | {
|
27 | static unsigned int dmx_channel_rx_count = 0;
|
28 | static unsigned char dmx_valid = 0;
|
29 | unsigned char tmp = 0;
|
30 |
|
31 | tmp = UDR0;
|
32 |
|
33 | if(UCSR0A&(1<<FE0))
|
34 | {
|
35 | if(dmx_channel_rx_count > 1)
|
36 | {
|
37 | dmx_lost = 0;
|
38 | }
|
39 | dmx_channel_rx_count = 0;
|
40 | dmx_buffer[0] = tmp;
|
41 | if(dmx_buffer[0] == 0)
|
42 | {
|
43 | dmx_valid = 1;
|
44 | dmx_channel_rx_count++;
|
45 | }
|
46 | else
|
47 | {
|
48 | dmx_valid = 0;
|
49 | }
|
50 | return;
|
51 | }
|
52 |
|
53 | if(dmx_valid)
|
54 | {
|
55 | dmx_buffer[dmx_channel_rx_count] = tmp;
|
56 | if(dmx_channel_rx_count < 514)
|
57 | {
|
58 | dmx_channel_rx_count++;
|
59 | }
|
60 | return;
|
61 | }
|
62 | }
|
63 |
|
64 | void setup()
|
65 | {
|
66 |
|
67 | //unsigned int dmx_adresse_tmp;
|
68 |
|
69 | //INT1 ON PHASE SYNC
|
70 | EICRA |= (1<<ISC11)|(1<<ISC10); //The rising edge of INT1 generates an interrupt request
|
71 | EIMSK |= (1<<INT1); //External interrupt request 1 enable
|
72 |
|
73 | //Init usart DMX-BUS
|
74 | UBRR0 = (F_CPU / (DMX_BAUD * 16L) - 1);
|
75 | UCSR0B|=(1 << RXEN0 | 1<< RXCIE0);
|
76 | UCSR0C|=(1<<USBS0); //USBS0 2 Stop bits
|
77 | sei();//Globale Interrupts Enable
|
78 |
|
79 | Serial.begin(57600);
|
80 |
|
81 | DDRC = (1<<PB3);
|
82 | PORTB |= 0x3F;
|
83 | PORTC |= 0xFF;
|
84 | PORTC &=~(1<<PB3);
|
85 |
|
86 | }
|
87 |
|
88 | void loop()
|
89 | {
|
90 |
|
91 | dmx_adresse=1;
|
92 | //new calculation of val1
|
93 | //val1 = valMap[dmx_buffer[dmx_adresse]];
|
94 | val1 = (255 - dmx_buffer[dmx_adresse])/2;
|
95 |
|
96 |
|
97 | if(dmx_lost==DMX_LOST_TIMEOUT)
|
98 | {
|
99 | dmx_buffer[dmx_adresse] = 0;
|
100 |
|
101 | }
|
102 | Serial.print(dmx_buffer[dmx_adresse]);
|
103 | }
|