Forum: Mikrocontroller und Digitale Elektronik DMX Board geht nicht :/


von Thomas T. (thomas_t39)


Angehängte Dateien:

Lesenswert?

Hallo allerseits,
ich hab noch recht neu im Elektronikgebiet und habe versucht einfach 
ganz simpel eine Schaltung nachzubauen.

Ich benutze eine ATMega8 und wollte folgende DMX Schaltung nachbauen: 
http://www.ulrichradig.de/home/index.php/avr/atmega8-experimentierboard/avr---dmx

Den ATmega habe ich wie in 
http://www.mikrocontroller.net/articles/AVR-Tutorial:_Equipment unter 
"Spannungsversorgung" beschrieben beschaltet. Die Leitung die in der DMX 
Schaltung zu TXD gehen soll liegt am PD1 des ATmega, was laut Datenblatt 
TXD ist.

Der Quelltext ist größtenteils von  Ulrich Radigs Seite übernommen,  der 
ist allerdings auf den ATmega88 ausgelegt.
Ich habe ein paar Änderungen vorgenommen sodass er auf dem Atmega8 
läuft. (zb UBBR0 zu UBBR umgekannt usw). Ausserdem habe ich eine  LED an 
PC5 angeschlossen um zu checken ob sich da überhaupt was tut.

So, die LED blinkt im Sekundentakt, so wie sie soll. Allerdings tut sich 
DMX mäßig nix.

Könnte es vll an der unterschiedliche Taktrate der Prozessoren liegen? 
Dadurch wird für den USART eine anderer Wert bereichnet , da dieser auf 
dem Prozessortakt basiert.

Im Anhang habe ich noch ein Bild meiner Schaltung, vll ist darauf auch 
ein Fehler ersichtlich, obwohl ich das eigentlich gründlich gecheckt 
habe. Links ist die Stromquelle in Form einer 9v Blockbatterie. Rechts 
sind die Ausgänge zu DMX. Schwarz ist GND, Grün +, Rot -.

Danke schonmal für eure Hilfe.

1
#include <avr/interrupt.h>
2
#include <avr/io.h>
3
#include <stdio.h>
4
5
#define F_CPU 1000000
6
#include <util/delay.h>
7
8
#define DMX_BAUD 250000
9
#define DMX_BAUD_BREAK 80000
10
11
volatile unsigned char dmx_buffer[512];
12
13
//############################################################################
14
//DMX Senderoutine
15
ISR (USART_TX_vect)
16
//############################################################################
17
{
18
  static unsigned int  dmx_channel_tx_count = 0;
19
  static unsigned char dmx_tx_state = 0;
20
  unsigned int ubrr;
21
  
22
  switch (dmx_tx_state)
23
  {
24
    case (0):
25
      ubrr   = (F_CPU / (DMX_BAUD_BREAK * 16L) - 1);
26
      
27
      UBRRH = (unsigned char)(ubrr>>8);
28
      UBRRL = (unsigned char)ubrr;
29
      
30
      UDR = 0; //RESET Frame
31
      dmx_tx_state = 1;
32
      break;
33
34
    case (1):
35
      ubrr    = (F_CPU / (DMX_BAUD * 16L) - 1);
36
      UBRRH = (unsigned char)(ubrr>>8);
37
      UBRRL = (unsigned char)ubrr;
38
      UDR = 0; //Start Byte
39
      dmx_tx_state = 2;
40
      break;
41
42
    case (2):
43
      _delay_us(10);
44
      //Ausgabe des Zeichens
45
      UDR = dmx_buffer[dmx_channel_tx_count];
46
      dmx_channel_tx_count++;
47
      
48
      if(dmx_channel_tx_count == 512)
49
      {
50
        dmx_channel_tx_count = 0;
51
        dmx_tx_state = 0;
52
      }
53
      break;
54
  }
55
}
56
57
//############################################################################
58
//Hauptprogramm
59
int main (void) 
60
//############################################################################
61
{  
62
  //Init usart DMX-BUS
63
  unsigned int ubrr = (F_CPU / (DMX_BAUD * 16L) - 1);
64
  
65
  UBRRH = (unsigned char)(ubrr>>8);
66
  UBRRL = (unsigned char)ubrr;
67
  
68
  DDRD |= (1<<PD1); //Output TXD Pin ATmega88
69
  UCSRB|=(1<<TXEN)|(1<<TXCIE); // TXEN0 Transmitter enable / TXCIE0 TX complete interrupt enable 
70
  UCSRC|=(1<<USBS); //USBS0 2 Stop bits  
71
  sei();//Globale Interrupts Enable
72
  UDR = 0;//Start DMX
73
  
74
  DDRC  |= (1<<PC5);
75
  //Endlosschleife
76
  while(1)
77
  {  dmx_buffer[24]=255;
78
    dmx_buffer[25]=255;
79
    dmx_buffer[26]=255;
80
    dmx_buffer[27]=255;
81
    PORTC |=(1<<PC5);
82
    _delay_ms(1000);
83
    dmx_buffer[24]=0;
84
    dmx_buffer[25]=0;
85
    dmx_buffer[26]=0;
86
    dmx_buffer[27]=0;
87
    PORTC &=~(1<<PC5);
88
    _delay_ms(1000);
89
    
90
  }
91
}

von Toff (Gast)


Lesenswert?

Die Software habe ich mir jetzt nicht angeschaut, aber die Hardware.
Ohne Kondensator zwischen VCC und GND und ohne externen Quarz(inklusive 
passenden Kondensatoren) bekommst Du keine Übertragungsrate von 250kB/s 
hin. Der interne Oszillator ist dafür viiiiel zu ungenau.
Womit wird die Schaltung eigentlich angesteuert?

von Thomas T. (thomas_t39)


Lesenswert?

Hallo Toff.

was für einen Oszillator brauche ich da genau? Also welche Taktrate.

Was meinst du mit angesteuert? Die Spannungsversorgung? Das ist momentan 
eine 9v Blockbatterie.

Gruß

von Falk B. (falk)


Lesenswert?

@ Thomas T. (thomas_t39)

>    20130605_200323.jpg
>    2,9 MB, 9 Downloads

HD ist zwar zeitgemäß, aber für so ein Bild reichen locker 500kB. Siehe 
Bildformate.

>Ich benutze eine ATMega8 und wollte folgende DMX Schaltung nachbauen:
>http://www.ulrichradig.de/home/index.php/avr/atmeg...

Es fehlen die Entkoppelkondensatoren NAH an den ICs.

http://www.mikrocontroller.net/articles/Kondensator#Entkoppelkondensator

>http://www.mikrocontroller.net/articles/AVR-Tutori... unter
>"Spannungsversorgung" beschrieben beschaltet.

Nö, siehe oben.

>Ich habe ein paar Änderungen vorgenommen sodass er auf dem Atmega8
>läuft. (zb UBBR0 zu UBBR umgekannt usw). Ausserdem habe ich eine  LED an
>PC5 angeschlossen um zu checken ob sich da überhaupt was tut.

DMX mit 1 MHz Takt? Eher nicht. Man braucht mindestens 4 MHz für den 
UART. Und die sollten von einem Quarz kommen.

von Toff (Gast)


Lesenswert?

Im Datenblatt des ATmega88 (ab S.195) sind mögliche Übertragungsraten 
des Controllers in Abhängigkeit der Taktfrequenz angegeben. Du benötigst 
eine Übertragungsrate von 250kBit/s. Jetzt musst Du schauen bei welcher 
Taktfrequenz der Fehler möglichst 0% beträgt (...ja, ich weiß, dass 
andere Frequenzen auch möglich sind...). In deinem Fall wären dass 
mindestens 2MHz. Aber wenn Du irgendwann "mehr" mit der Schaltung machen 
möchtest, würde ich eine höhere Frequenz empfehlen. Nimm einfach 16MHz, 
dann wirst Du nicht unglücklich ( ich denke nicht, dass Dich der minimal 
höhere Stromverbrauch des Contollers interessiert).

Ich meinte eher, was steuerst Du damit an?

von Thomas T. (thomas_t39)


Lesenswert?

Ok danke schonmal.
Gut dann bestelle ich mir diesen 16 MHz Oszillator mit entsprechenden 
Kondensatoren. 
http://www.reichelt.de/Oszillatoren/OSZI-16-000000/3/index.html?;ACTION=3;LA=2;ARTICLE=13686;GROUPID=3174;artnr=OSZI+16%2C000000

Die Koppelkondensatoren packe ich auch noch an den 75176BP.

Danke soweit!

von Toff (Gast)


Lesenswert?

Mit Oszillatoren habe ich noch nie gearbeitet. Daher würde ich Dir eher 
das hier empfehlen:
http://www.reichelt.de/Quarze/16-0000-HC49U-S/3/index.html?;ACTION=3;LA=2;ARTICLE=32852;GROUPID=3173;artnr=16%2C0000-HC49U-S

und dazu zwei mal:
http://www.reichelt.de/Quarze/16-0000-HC49U-S/3/index.html?;ACTION=3;LA=2;ARTICLE=32852;GROUPID=3173;artnr=16%2C0000-HC49U-S

Das ganze dann wie aus Seite 32 verschalten (möglichst nah am 
Controller).
Und zwischen VCC und Ground des Controllers auch noch einen 100nF 
Kondensator.

von Toff (Gast)


Lesenswert?


von Falk B. (falk)


Lesenswert?

@ Thomas T. (thomas_t39)

>Gut dann bestelle ich mir diesen 16 MHz Oszillator mit entsprechenden
>Kondensatoren.
>http://www.reichelt.de/Oszillatoren/OSZI-16-000000...

Ist OK, der liefert einen Takt.

>Die Koppelkondensatoren packe ich auch noch an den 75176BP.

Ja.

von Thomas T. (thomas_t39)


Lesenswert?

Noch eine Frage zu den Koppelkondensatoren.

die 75176 BP hat ja 3 VCC und einen GND anschluss. Versteh ich das 
richtig. dass ich in dem Fall 3 Koppelkondesatoren brauch? Also einer 
zwischen den jeweiligen VCC's und dem gemeinsamen GND?

Und wie siehts beim ATmega aus. Braucht der ebenfalls einen?

Gruß

von Falk B. (falk)


Lesenswert?

@ Thomas T. (thomas_t39)

>die 75176 BP hat ja 3 VCC und einen GND anschluss.

Bitte? Meiner hat nur 1x VCC an in 8 und GND an Pin 5. Der Rest sind 
Signale.

>Und wie siehts beim ATmega aus. Braucht der ebenfalls einen?

Was verstehst du an dem Satz nicht?

"Jeder Digitalschaltkreis benötigt einen 100nF Keramikkondensator nah 
(kleiner 20mm) an den Anschlüssen von VCC und GND."

von N00by (Gast)


Lesenswert?

Thomas T. schrieb:
> die 75176 BP hat ja 3 VCC und einen GND anschluss.

Nein. Lies mal das Datenblatt. 
http://www.produktinfo.conrad.com/datenblaetter/150000-174999/152828-da-01-en-SN_75176_BP.pdf
Wo siehst du da 3 Vcc? Ich sehe da ein VCC und ein GND. Dazwischen 
gehören so nah wie möglich (!) 100nF. Ab 2cm Distanz kannst du ihn auch 
weglassen den Kondensator.

Thomas T. schrieb:
> Versteh ich das
> richtig. dass ich in dem Fall 3 Koppelkondesatoren brauch?

Nein. Einen.

Thomas T. schrieb:
> Also einer
> zwischen den jeweiligen VCC's und dem gemeinsamen GND?

Ja richtig. Nur gibt es nur ein Vcc GND Pärchen hier.

Thomas T. schrieb:
> Und wie siehts beim ATmega aus. Braucht der ebenfalls einen?

Der braucht ihn noch viel mehr als der Schnittstellentreiber. Für den 
wurde der Kondensator auch vorgeschlagen.

Merke: An JEDES (absolut jedes) Vcc-GND-Pärchen gehört mindestens ein 
Kondensator mit 100nF (=0.1µF) ran. Immer. Bei kritischerern 
Bauelementen (Highspeed, etc. und nein das hier ist kein Highspeed) 
gehören zusätzlich parallel dazu 10nF.

von Thomas T. (thomas_t39)


Lesenswert?

Okay Danke.

Und selbst wenn der IC so beschaltet ist wie hier 
http://www.ulrichradig.de/home/uploads/images/AVR_DMX/RS485.PNG reicht 
trotzdem 1 Kondensator?
Da die Pins 2 und 3 auch auf VCC sind dachte ich da muss auch einer hin.

von Falk B. (falk)


Lesenswert?

@ Thomas T. (thomas_t39)

>Und selbst wenn der IC so beschaltet ist wie hier
>http://www.ulrichradig.de/home/uploads/images/AVR_... reicht
>trotzdem 1 Kondensator?

Ja.

>Da die Pins 2 und 3 auch auf VCC sind dachte ich da muss auch einer hin.

Nein. Nur an die Pins, an den VCC/GND am IC steht.

von Falk B. (falk)


Lesenswert?

http://www.ulrichradig.de/home/uploads/images/AVR_DMX/RS485.PNG

Die Z-Dioden un Widerstände sind unsinnig, der IC selber ist schon sehr 
robust und tolerant bezüglich Störungen und Potentialverschiebungen. Die 
Dioden machen es eher schlechter!

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Thomas T. schrieb:
> Da die Pins 2 und 3 auch auf VCC sind dachte ich da muss auch einer hin.
Das sind keine Versorgungspins. Nur zwischen Versorgungspins muss 
ein Blockkondensator.

Zum viel diskutierten Hintergrund (letzter Satz dort):
http://www.lothar-miller.de/s9y/categories/14-Entkopplung

von Falk B. (falk)


Lesenswert?

@ Lothar Miller (lkmiller) (Moderator) Benutzerseite

>Zum viel diskutierten Hintergrund (letzter Satz dort):
>http://www.lothar-miller.de/s9y/categories/14-Entkopplung

"Zu diesem Thema findet sich auch eine interessante Diskussion auf 
www.mikrocontroller.net"

Willst du das Universum in eine endlose Rekursionsschleife stürzen? 8-0

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Falk Brunner schrieb:
> Willst du das Universum in eine endlose Rekursionsschleife stürzen? 8-0
Mir gefällt deshalb die englische Originalausgabe vom K&R so gut: dort 
steht auf den Seite 46, 79 und 152 was zum Thema Rekursion. Und auf der 
Seite 245 findet sich im Stichwortverzeichnis der Eintrag:
recursion 46, 79, 152, 245


(Seitenzahlen hier nur beispielhaft)

von Thomas T. (thomas_t39)


Lesenswert?

Sooo kann es sein dass ich meinen AVR geschrottet habe? Ich hab wohl was 
falsches an den Fuse Bits gemacht.

Mit diesem Tool: 
http://www.frank-zhao.com/fusecalc/fusecalc.php?chip=atmega8
Wollte ich alle 4 CKSEL bits auf 4 setzen um den Quarz zu aktivieren. 
Hab die Fuses ausgelesen HIGH = 0xD9 LOW = 0xE1, in das programm 
eingetragen. Bei allen vier CKSEL einen Haken gemacht und dann das 
resultiernde HIGH = 0xD9 LOW = 0xE0, wieder in den AVR geschrieben. 
Seitdem kommt. Bei meinem AVR 6 Studio "Unable to enter programming 
mode" sobald ich etwas vom AVR auslesen will.
Als Board benutze ich das Ding: 
http://shop.embedded-projects.net/index.php?module=artikel&action=artikel&id=108

Ist da noch was zu retten?

Gruß

von Ha Noi (Gast)


Lesenswert?

Thomas T. schrieb:
> Seitdem kommt. Bei meinem AVR 6 Studio "Unable to enter programming
> mode" sobald ich etwas vom AVR auslesen will.

Kommt hier wöchentlich mind. einmal vor. Lest doch das Datenblatt, bevor 
ihr irgendwelche fuses programmiert.

von Falk B. (falk)


Lesenswert?


von Thomas T. (thomas_t39)


Lesenswert?

Die einzige Änderung die ich gemacht habe ist dass ich einen Haken bei 
CKSEL3 gemacht habe, der rest blieb unverändert. Deshalb seh ich nicht 
wo das problem ist.
Das Programmierboard hat ebenfalls einen Externen Quarz wenn ich das 
richtig sehe, deshalb sollte es doch gehen oder nicht?

von Thomas T. (thomas_t39)


Lesenswert?

Thomas T. schrieb:
> Die einzige Änderung die ich gemacht habe ist dass ich einen Haken bei
> CKSEL3 gemacht habe, der rest blieb unverändert. Deshalb seh ich nicht
> wo das problem ist.
> Das Programmierboard hat ebenfalls einen Externen Quarz wenn ich das
> richtig sehe, deshalb sollte es doch gehen oder nicht?

Ah verstehe. War genau falschrum.

von Thomas T. (thomas_t39)


Lesenswert?

So nächstes Problem. Ich habe jetzt auf den Atmega88 umgestellt.

Laut diesem Code sollte die LED auf dem Testboard jede Sekunde blinken. 
(Im Code ist F_CPU mit 16.000.000 definiert, da auf meinem Board auf dem 
der AVR laufen soll der 16mhz Quarz ist. Auf dem Testboard ist 
allerdings nur ein 8 mhz Quarz d.h. die LED müsste halb so schnell sein 
richtig?)

Die Fuses sind: LOW: 0x6F HIGH: 0xDF EXTENDED: 0xF9

Ich habe mir diesen Quarz gekauft: 
http://www.reichelt.de/Quarze/16-0000-HC49U-S/3/index.html?;ACTION=3;LA=2;ARTICLE=32852;GROUPID=3173;artnr=16%2C0000-HC49U-S

Ich habe die Fuses so gesetzt, dass der Quarz als Low power crystal 
oscillator gesehen wird, allerdings gibt es laut Datenblatt noch "Full 
swing crystal oscillator " und "Low frequency crystal oscillator". Wie 
erkenne ich was genau der Quarz ist?

Momenten ist die LED ca 20 sek lang an, dann wieder 20 Sek aus.

Hier noch der Code.
1
#include <avr/interrupt.h>
2
#include <avr/io.h>
3
#include <stdio.h>
4
5
#define F_CPU 16000000
6
#include <util/delay.h>
7
8
#define DMX_BAUD 250000
9
#define DMX_BAUD_BREAK 80000
10
11
volatile unsigned char dmx_buffer[512];
12
13
//############################################################################
14
//DMX Senderoutine
15
ISR (USART_TX_vect)
16
//############################################################################
17
{
18
  static unsigned int  dmx_channel_tx_count = 0;
19
  static unsigned char dmx_tx_state = 0;
20
  
21
  switch (dmx_tx_state)
22
  {
23
    case (0):
24
    UBRR0   = (F_CPU / (DMX_BAUD_BREAK * 16L) - 1);
25
    UDR0 = 0; //RESET Frame
26
    dmx_tx_state = 1;
27
    break;
28
29
    case (1):
30
    UBRR0   = (F_CPU / (DMX_BAUD * 16L) - 1);
31
    UDR0 = 0; //Start Byte
32
    dmx_tx_state = 2;
33
    break;
34
35
    case (2):
36
    _delay_us(10);
37
    //Ausgabe des Zeichens
38
    UDR0 = dmx_buffer[dmx_channel_tx_count];
39
    dmx_channel_tx_count++;
40
    
41
    if(dmx_channel_tx_count == 512)
42
    {
43
      dmx_channel_tx_count = 0;
44
      dmx_tx_state = 0;
45
    }
46
    break;
47
  }
48
}
49
50
//############################################################################
51
//Hauptprogramm
52
int main (void)
53
//############################################################################
54
{
55
  //Init usart DMX-BUS
56
  UBRR0   = (F_CPU / (DMX_BAUD * 16L) - 1);
57
  DDRD |= (1<<PD1); //Output TXD Pin ATmega88
58
  UCSR0B|=(1<<TXEN0)|(1<<TXCIE0); // TXEN0 Transmitter enable / TXCIE0 TX complete interrupt enable
59
  UCSR0C|=(1<<USBS0); //USBS0 2 Stop bits
60
  sei();//Globale Interrupts Enable
61
  UDR0 = 0;//Start DMX
62
  
63
  DDRC  |= (1<<PC5);
64
  //Endlosschleife
65
  while(1)
66
  {  dmx_buffer[24]=255;
67
    dmx_buffer[25]=255;
68
    dmx_buffer[26]=255;
69
    dmx_buffer[27]=255;
70
    PORTC |=(1<<PC5);
71
    _delay_ms(1000);
72
    dmx_buffer[24]=0;
73
    dmx_buffer[25]=0;
74
    dmx_buffer[26]=0;
75
    dmx_buffer[27]=0;
76
    PORTC &=~(1<<PC5);
77
    _delay_ms(1000);
78
    
79
  }
80
}

Gruß

von Falk B. (falk)


Lesenswert?

@ Thomas T. (thomas_t39)

>Die Fuses sind: LOW: 0x6F HIGH: 0xDF EXTENDED: 0xF9

>Ich habe mir diesen Quarz gekauft:
>http://www.reichelt.de/Quarze/16-0000-HC49U-S/3/in...

Ist OK.

>Ich habe die Fuses so gesetzt, dass der Quarz als Low power crystal
>oscillator gesehen wird,

Bei 16 MHz? Eher nicht.

> allerdings gibt es laut Datenblatt noch "Full
>swing crystal oscillator " und "Low frequency crystal oscillator". Wie
>erkenne ich was genau der Quarz ist?

Grob an der Frequenz. Nimm "Full swing".

>Momenten ist die LED ca 20 sek lang an, dann wieder 20 Sek aus.

Du hast ja auch die DIV 8 Fuse aktiviert, da kommen nur 2 MHz bei der 
CPU an.

Also Low Fuse auf 0xF7, dann sollte es gehen.

von Thomas T. (thomas_t39)


Lesenswert?

Danke, auf dem Testboard geht es soweit. Auf meinem anderen nicht. Ich 
verdrahte das neu damit es etwas übersichlicher wird. Vermutlich ist der 
Quarz falsch angeschlossen.

von Thomas T. (thomas_t39)


Lesenswert?

Hmmm. Okay es geht machmal. Das DMX Signal kommt teilweise an. 
Allerdings sehr unzuverlässig. Woran kann das liegen ? an den Timings 
vielleicht?

Gruß

von Falk B. (falk)


Lesenswert?

Wackelkontakte? Ein Oszi wäre jetzt nicht schlecht.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Thomas T. schrieb:
> Das DMX Signal kommt teilweise an.
> Allerdings sehr unzuverlässig. Woran kann das liegen ? an den Timings
> vielleicht?

Deine DMX Quelle ist zuverlässig und mit anderer Peripherie gestestet? 
Was benutzt du als Verbindungskabel? Deine

> Ich
> verdrahte das neu damit es etwas übersichlicher wird.
Verdrahtung ist jetzt übersichtlicher?
Denke auch dran, das Ulrich den 120 Ohm Abschlusswiderstand 
eingezeichnet hat, der nur am Anfang und Ende der Kette sein sollte. 
Mehr als 2 Terminatoren sollte die DMX Leitung nicht haben.

von Thomas T. (thomas_t39)


Lesenswert?

Ob die Quelle zuverlässig ist versuche ich ja gerade rauszufinden. Dass 
das Gerät welches DMX empfängt funktioniert weiss ich ganz sicher, daran 
liegts also nicht.

Den 120 Ohm Widerstand hab ich jetzt rausgenommen, allerdings ändert 
sich am Ergebnis nichts.

Die Kontakte von dem jeweiligen Draht halte ich an die DMX Buchse. Hab 
leider keinen Lötkolben hier um das direkt einzustecken.

Selbst Ohne Z Diode und den dazugehörigen Widerständen wird es nicht 
besser.

von Falk B. (falk)


Lesenswert?

@Thomas T. (thomas_t39)

>Die Kontakte von dem jeweiligen Draht halte ich an die DMX Buchse. Hab
>leider keinen Lötkolben hier um das direkt einzustecken.

AUA!!!! Verschone uns mit dieser Frickelei! Mach es gescheit oder lass 
es bleiben!

Mann O Mann, dass man ein wackeliges Steckbrett DERARTIG steigern kann?

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Mach jetzt nochmal bitte ein Foto deines derzeitigen Versuchsaufbaues. 
Im ersten Beitrag sind da sehr merkwürdige Sachen, wie z.B. der GND auf 
Pin 8 verbunden mit Pin23 (PC0), Pin20 (AVcc) hängt in der Luft und am 
gesamten MC sehe ich keinen Entkoppelkondensator.

Falk Brunner schrieb:
>>Die Kontakte von dem jeweiligen Draht halte ich an die DMX Buchse. Hab
>>leider keinen Lötkolben hier um das direkt einzustecken.
>
> AUA!!!! Verschone uns mit dieser Frickelei! Mach es gescheit oder lass
> es bleiben!

Allerdings. Wie willst du denn da was messen, wenn du schon damit 
beschäftigt bist, die Drähte in der Buchse festzuhalten? Selbst der 
billigste Baumarkt Lötkolben und der passende DMX Stecker tun da einen 
unersetzlichen Job.

von Thomas T. (thomas_t39)


Angehängte Dateien:

Lesenswert?

Okay, ich sehe zu dass ich an einen Lötkolben kommen.

Anbei die Bilder.

Einmal von vorne, einmal von hinten.

Auf der einen Seite die Stromversorgung in Form einer 9V Blockbatterie, 
auf der anderen die DMX Ausgänge. (Schwarz = GND, Grün = DMX+, Gelb = 
DMX-)

Danke

von Markus C. (ljmarkus)


Lesenswert?

Der C der Quer über den AVR geht, da fehlt doch noch ein kabel drann.

von Falk B. (falk)


Lesenswert?

Der Ausfbau sieht für ein Steckbrett OK aus. Kann man nur hoffen, dass 
alle Kontakte OK sind . . .

von Thomas T. (thomas_t39)


Lesenswert?

Markus C. schrieb:
> Der C der Quer über den AVR geht, da fehlt doch noch ein kabel drann.

Du meinst vom GND Pin? Okay hab das Kabel dran gemacht.

Aber dazu mal ne Frage. Wieso hat der AVR 2 GNDs? die hätte man doch 
intern zusammenschließen können sodass man einen Pin weniger braucht 
oder nicht?

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

AVcc (Pin 20) ist immer noch nicht angeschlossen. Leg das endlich mal 
auf +5Volt.

von Thomas T. (thomas_t39)


Lesenswert?

Matthias Sch. schrieb:
> AVcc (Pin 20) ist immer noch nicht angeschlossen. Leg das endlich mal
> auf +5Volt.

Ist erledigt.

von Thomas T. (thomas_t39)


Lesenswert?

Was mir auch auffällit ist dass die die LED nicht genau im Sekundentakt 
leuchtet. Sie ist ca 1,2 Sekunden an bzw aus. Ist das eine normale 
Ungenauigkeit?

von Falk B. (falk)


Lesenswert?

Nein, der Quarz und die Delay-Funktionen sind deutlich genauer. Entweder 
sind deine Fuses falsch eingestellt und dein AVR läuft in Wirklichkeit 
mit dem internen RC-Oszillator, der hat auch 8 MHz, aber UNGENAU! Oder 
du hast die Optimierung im Compiler nicht aktiviert, dann funktionieren 
die _delay_ms() auch nicht genau.

von Thomas T. (thomas_t39)


Lesenswert?

Mein Quarz hat 16 Mhz. Das ist im Programm bei F_CPU auch definiert.

Die Fuses sind so eingestellt wie es oben beschrieben wurde.

Wie müsste die Optimerung denn sein? Momentan habe ichs auf "O1".

Vll erklärt das warum DMX nicht funktioniert hatte. Die Timings sind 
möglicherweise durch die Verzögerung ausserhalb der Spezifikation.

von Falk B. (falk)


Lesenswert?

#define F_CPU 1000000

Sieht nicht nach 16 MHz aus. Oder hast du das inzwischen geändert?

Wie misst du die 1,2s? Mit dem Oszi?

von Thomas T. (thomas_t39)


Lesenswert?

Der Quellcode hat sich geändert. Ich habe ihn ein Stückchen weiter oben 
gepostet.

Inzwischen benutze ich auch einen Atmega88 anstatt des Atmega8.

Ich habe leider kein Oszilloskop hier. Ich habe in 12 Sekunden ging die 
LED 5 mal an und 5 mal aus. Kann natürlich nicht sagen ob es exakt 1,2 
Sekunden sind, aber definitiv keine genaue Sekunde.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Thomas T. schrieb:
> Wie müsste die Optimerung denn sein? Momentan habe ichs auf "O1".

Die Einstellung sollte normalerweise auf '-Os' stehen, wenn du nicht mit 
dem Simulator debuggen willst. Jedenfalls würde das so einiges erklären.

von Thomas T. (thomas_t39)


Lesenswert?

Hmm jetzt ist die LED immer fast 2 Sek an und aus..

Er nimmt aufjedenfall den Quarztakt. Denn wenn ich den entferne passiert 
nix.

von Falk B. (falk)


Lesenswert?

Warum jetzt 2s? Anderes Programm?

von Thomas T. (thomas_t39)


Lesenswert?

Frag ich mich auch. Optimierung anders und eben AVCC verbunden sowie den 
120 Ohm Widerstand und die Z Dioden entfernt

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Thomas T. schrieb:
> Frag ich mich auch.

Wenn du mit AVR Studio kompilierst, solltest du in den 
Projekteinstellungen mal schauen, was da für eine F_CPU definiert ist. 
Bei AS ist ein #define F_CPU im Code nicht nötig, sondern in den 
Projekteinstellungen.

von Thomas T. (thomas_t39)


Lesenswert?

Ändert nichts an der Sache. Immernoch knapp 2 sek an dann 2 sek aus.

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.