Beiträge von samotronta05

    Die sind ja noch teurer als mein Vorschlag, aber genau da liegt das Problem, bei einfachen kleinen Maschinen gibt es kaum DMX,
    denn für den kleinen Partykeller nutzen die meisten Menschen kein DMX.


    Daher setzten die Hersteller bei Steuerung über DMX eine gewisse Professionalität voraus und dem entsprechen sind die Maschinen dann auch teurer.
    Edit: Schreiben sollte man auch um 0 Uhr noch können.....

    Das mit dem Led-Movinghead-Washer ist in diesem Thread zu finden:
    RGB Tube mit SMD Flexband µC
    Nebelmaschinen bzw. Hazer die über Dmx zusteuern sind und was taugen sind z.B.: die hier:
    http://www.hqpower.eu/ot/en/product/view/?id=371412
    oder als Hazer:
    http://www.hqpower.eu/ot/en/product/view/?id=369714
    Allerdings sind die schon relativ Leistungsstark, aber kleinere die Über Dmx zu steuern sind,
    sind relativ schlecht zu finden und leider sind die meisten nach meiner Erfahrung schlecht verarbeitet bzw. dann entsprechend teuer.

    Öhm, arbeitet BAUD 250000 überhaupt mit 16MHz sauber?


    Ja absolut kein Problem, der Fehler vernachlässigbar gering.



    @ samotronta05: Das Signal stammt von einem Programm namens AtmoWinX. Da's mit dem alten Code funktioniert geh ich mal davon aus.


    Da liegt das Problem denn der Highlevel Dmx-Befehl von Bascom erwartet eine Baudrate von 250Kbit/s.


    P.S.: das interessiert mich: wie misst man denn mit dem Oszi so nen kleinen Unterschied...? - ich habe nur so ein Billig-Teil, wenn da der 20 ms-Puls nun den ganzen (ziemlich kleinen) Bildschirm "ausfüllt", sieht man eigentlich keinen Unterschied, ob der nun 20 ms oder 19,9 lang ist - hast Du ein digitales, das das rausmessen kann...? - oder irgendwie mit nem 2-Kanal-Oszi, dass man nur den *Unterschied* darstellen lässt..?


    Naja ich hab eigentlich auch nur ein einfaches China-DSO, ein "vernünftiges" kann ich mir schlicht und einfach nicht leisten bzw. ist auch für den Bastelbetrieb übertrieben.
    Den unterschied zwischen den RC-Oszillatoren hat man auf jeden Fall schon gesehen, bei den beiden Tests mit Quarz hab ich das Signal einfach aufgezeichnet und dann nachher in Ruhe angeschaut.
    Das mit zwei Kanälen wäre theoretisch auch möglich, allerdings müssten dann ja die Avrs exakt gleichzeitig starten, was beinahe unmöglich ist.


    und dann bitte auch berichten, ob Du den Unterschied zwischen 20 ms und 19,968 ms siehst 8o


    Ja aufm Oszi hab ich den gesehn :D
    Allerdings hab ich gerade mal zum Spaß den Unterschied zwischen dem Rc-Oszi und einem Quarz getestet.
    Fazit:
    Der Unterschied zwischen den beiden Codes, getestet mit einem Quarz ist deutlich geringer, als der unterschied zwischen zwei Atmega8 und damit zwei verschiedenen Rc-Oszis.
    Zum Code:
    Der letzte Wert stimmt nicht, denn bei 1341 wird er auf 0 gesetzt und erst bei 1 wird wieder das Strobe angeschaltet.

    1. Wow! Bei soviel Fachwissen frage ich mich warum du nur so wenige Beiträge bisher geschrieben hast.
    Gerade weil du in Texten sehr verständlich erklären kannst.


    Danke, ich muss aber gestehen, dass ich mich auch erst ein Jahr mit den Avrs beschäftige.



    2. Warum ist die Division 156 / 7812,5 = 0,019968 ? Auf der Seite wo ich mich in das
    Timer-ding eingelesen hatte steht es Sinngemäß anders: 7812,5 / 156 = 50,080


    Korrekt hier muss man aber unterscheiden, ich habe ausgerechnet, dass der Timer0 alle 20 ms ausgeführt wird, in deiner Rechnung wird die Hertzzahl ausgerechnet.
    Es kommt aber das gleiche raus, denn 50,08 Hertz ergeben: 1 Sekunde / 50,08 Hertz = 0.019968 Sekunde bzw. ca. 20 ms.


    3. An welchem Pin wird der zweite Kanal geschaltet?
    Config Pinb.0 = Input 'Anschluss am Empfänger b.0
    Config Portb.0 = Output 'Schaltausgang 2
    Ist Pinb.0 und Portb.0 nicht das selbe?


    Ohh stimmt hab ich einfach übersehen, weil ich die Anschlüsse nachher noch geändert habe, da ich das ganze auf einem Atmega644 getestet habe.


    Grundsätzlich kannst du aber jeden Pin nehmen, ich würde jedoch die Pinne des Programmers, die UART und den Quarz freihalten, denn man ärgert sich, wenn man genau diese Pinne später nochmal braucht. Ansonsten einfach so belegen, dass es am besten zum Layout passt.




    Ich habe mal einen Schaltplan fertig gemacht.
    Findet dort jemand etwas was mach besser machen kann(Größen der Widerstände,Kapazitäten)?


    ISP nach RN-Standard ?
    Man könnte auch einen 6-Pin ISP-Anschluss verwenden um Platz zu sparen.
    Als Pullup am Reset würde ich 10k nehmen, da ansonsten manche Programmer den Pegel nicht sauber auf Low ziehen.
    Eventuell noch einen kleinen Elko parallel zum Abblockkondensator schalten.




    Achja ich war heute nicht fliegen. Auch wenn der Wind relativ schwach war wollt ich nicht mein Glück testen. ;) Das Video bekommt ihr aber noch.


    Hmm du bringst mich auf die Idee meinen Flieger mal wieder rauszuholen. *schon mal den Sekundenkleber suchen*
    Gruß

    Ach nicht iretieren von den unfrofesinellen Angaben. Aber wenn man keine ahnung heit wie die heiße, ist es schwer sie zu benennen^^


    Ach nicht irritieren lassen von unprofessioneller Rechtschreibung und Satzbau. Aber wenn man keine Ahnung hat, was das heißen soll, ist es schwer zu helfen^^

    Ja alles Super verständlich und gut kommentiert. ABER: Da ich in Berufsschule damals das mit den Interrupts und Timern an mir vorbeifliegen lasse habe (damn it :thumbdown: ) hab ich noch n paar Fragen.


    Code
    $crystal = 8000000
    Config Timer0 = Timer , Prescale = 1024
    On Timer0 Isr_timer0


    Durch den Prescaler werden die 8000000Hz ja durch 1024 geteilt (= 7812,5 Hz)
    Der Timer0 läuft nach 256 ja wieder über also 7812,5 Hz / 256 = 30,517578125 Hz.
    Wird durch On Timer0 Isr_timer0 der Interrupt immer ausgelöst wenn der Timer0 einmal durchgelaufen ist? Und das passiert ja 30 mal in der Sekunde also alle 33 Millisekunden.
    Wenn das alles so richtig sein sollte: Warum wird der Isr_timer0 dann immer alle 20ms ausgeführt?


    Also das mit dem Prescaler ist schon korrekt, nur der Rest stimmt nicht.
    Erstmal läuft der Timer von 100 weg also nur noch 156 Schritte, nur beim ersten mal halt die 256 Schritte, weil ich vergessen habe oben Timer0 = 100 einzufügen, macht aber auch nichts.
    Zweitens hast du die Division vertauscht. Es sind 7812,5 pro Sekunde, dass heißt man muss die 156 durch 7812,5 teilen und das sind dann 0,019968 Sekunden bzw. ca. 20ms.
    Ansonsten empfehle ich dir das hier, wenn man zu faul zum Rechnen ist: Klick

    Hier verstehe ich noch nicht ganz warum das Stobe angeht wenn der Interrupt das erste Mal ausgelöst wird. Die Variable Zaehler ist ja noch 0 aber der tiefste Case fängt erst bei 1 an. Oder ist "der" dann so "schlau" das der quasi mit case else aus der Schleife springt und bei der If Modus > 0 Then weitermacht?
    Und warum wird der timer auf 100 gesetzt anstatt auf 0 ?


    Das Strobe wird tatsächlich erst nachdem der Interrupt durch den Timer zweimal ausgelöst wurde aktiviert, beim ersten Aufruf ist Zaehler ja noch null und da er in der Case-Abfrage keinen Befehl findet den er bei 0 ausführen soll, macht er mit dem Rest weiter und Zählt dann hoch, sodass nach 20ms das Strobe aktiviert wird.
    Ansonsten würde das Strobe immer aktiviert, wenn man es ausschalten möchte, denn wenn alles aus ist, ist Zaehler = 0, um zu vermeiden, dass ein Licht an bleibt und die 20ms Verzögerung beim Einschalten merkt man eh nicht.
    Der Timer zählt von 100 weg, also 256-100=156 Schritte um auf die 20ms zu kommen, wie oben erklärt.
    Wenn sonst noch was unklar ist, gilt einfach Fragen.
    Gruß

    Brauchst du nicht zu machen. Ich teste gerade noch, aber bis jetzt geht alles bis auf mein Senderakku :pinch:
    Edit so alles Fertig:

    Zitat


    der interne RC-Oszi ohne Teiler ist aber doch 8 MHz und nicht 9,6...?!?


    Ja ursprünglich war aber vom Attiny13 die Rede und da sagt das Datenblatt auf Seite 25 4,8Mhz oder 9,6Mhz, beim Attiny2313 sind das aber natürlich 8Mhz.


    Getestet hab ich das ganze ebenfalls mit einem RC-Oszi mit 8Mhz, allerdings auf einem 644.
    Siehe hier:Klick
    Der Strobe kommt leider durch die Kamera extrem schlecht rüber....sieht in echt hundert mal besser aus, fast wie das orginal.


    Ich hoffe der Code ist so verständlich und übersichtlich.
    Fragen?, Fragen!


    Edit2:
    Da die ganzen Kommentare verrutscht sind einfach hier herunterladen dann passt die Formatierung auch: Rechtsklick speichern unter



    So jetzt will ich Schrott sehn :D
    Greetz
    Samotronta05, der sich jetzt wieder mit Delphi und der verdammten d2xx.dll rumschlagen darf...

    Lass mal folgenden Code 2 oder 3 Minuten laufen und vergleiche die auf dem Lcd ausgegebene Sekundenzahl mit der einer Stoppuhr.
    Außerdem füge eventuell mal deiner Lcd-Initialisierung folgendes hinzu:
    Config Lcdbus = 4




    Edit: Welche Software nutzt du denn zum Ansteuern?

    Genau das meinte ich, wenn du allerdings keinen max232 o.Ä. hast, dann kannst du auch erstmal eine Led mit Vorwiederstand an den entsprechenden Rx-Pin halten und gucken ob am Atmgea überhaupt ein Signal ankommt.
    Ansonsten lass doch mal den Timer1 eine Variable jede Sekunde erhöhen, die du dann auf dem Lcd ausgeben lässt. So ist sichergestellt das der Quarz auch richtig arbeitet.


    Das man auf Com2 stellt oder so macht keinen Sinn oder ?


    Das bringt überhaupt nichts, denn der Atmega16 hat keine zweite Uart.
    Lass doch mal über die Uart einfach ein paar zeichen ausgeben, dann wirst du sehen, ob sie funktioniert bzw. die Frequenz / Fusebits des Quarzes stimmt.