Forum: Mikrocontroller und Digitale Elektronik Problem mit DMX Empfang mit Arduino und Atmel Studio


von Thgomas T. (helyxc)


Angehängte Dateien:

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
}

: Bearbeitet durch User
von Thgomas T. (helyxc)


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.

von Bennett Krawitz (Gast)


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

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.