Problem mit DMX Empfang mit Arduino und Atmel Studio

OP #4447576
Lesenswert?
• ▲
▼
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
}
Angehängte Dateien:
OP #4447692
Lesenswert?
• ▲
▼
Update:

ich habe den  ISR Vector zu USART0_RX_vect geändert weil das wohl beim 
2560 so sein muss.

jetzt bekomme ich folgenden Fehler inder IDE:

C:\Users\Helyx\AppData\Local\Temp\build25a76891c667e0896ec10beb77bd0478. 
tmp/core\core.a(HardwareSerial0.cpp.o):  In function `__vector_25':

D:\Programme\Arduino\hardware\arduino\avr\cores\arduino/HardwareSerial0. 
cpp:48:  multiple definition of `__vector_25'

sketch\DmxReceive.ino.cpp.o:C:\Users\Helyx\Documents\Arduino\DmxReceive/ 
DmxReceive.ino:26:  first defined here

d:/programme/arduino/hardware/tools/avr/bin/../lib/gcc/avr/4.8.1/../../. 
./../avr/bin/ld.exe:  Disabling relaxation: it will not work with 
multiple definitions

collect2.exe: error: ld returned 1 exit status

exit status 1
Fehler beim Kompilieren.
Gast #6133633
Lesenswert?
• ▲
▼
Guten Abend,
ich versuche Momentan mit einem Arduino Uno und mit Hilfe eines Max 485, 
sozusagen eine Endstufe zu erstellen...
Also mein Plan sieht so aus, ich möchte an den Arduino LED Lämpchen 
anschließen und die über einen PC aktiv steuern. Und dafür muss ich ja 
die Adressen digital speichern. haben sie eine Variante für einen Code 
und einen Plan?
ICh würde mich freuen wenn sie mir helfen könnten

LG BK

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

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.