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.
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?
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ß
@ 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.
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?
@ 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.
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ß
@ 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."
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.
@ 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.
@ 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
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)
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ß
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.
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?
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.
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.
@ 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.
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.
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.
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.
@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?
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.
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
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?
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?
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.
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.
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.
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.
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.