Beiträge von Shuzz

    Wenn es Dir wirklich zu dunkel sein sollte mit den 47R kannst Du auch folgendes versuchen:


    2x47R in Reihe und dazu einen 47R parallel, ergibt insgesamt dann ca. 31R.
    ( = 1/(1/47 + 1/94))


    Verbraucht zwar unnötig viele Widerstände, aber erlaubt Dir den benötigten Strom recht genau einzustellen.

    Ich würde Dir auch für den Anfang die Atmels ans Herz legen.
    Sind supereinfach zu programmieren, Entwicklungsumgebungen gibt's für jede denkbare Plattform und die Einstiegskosten sind ziemlich gering.
    (Für nen gründlichen(!) Einstieg würde ich mal so auf ca. 50 Euronen tippen, da wären dann der Programmer, diverse Controller und alles was man so für die ersten Gehversuche (Steckbrett, paar Widerstände, Kondensatoren, LEDs, ...) braucht dabei)


    Ein "kleiner" ATMega8 kostet nicht mehr als zwofuffzig oder so, ist also erschwinglich.


    Als Sprache würd ich mit C anfangen, das reicht für die allermeisten Sachen vollkommen aus.
    Assembler lohnt sich imho erst wenn Du merkst, dass Du an die Grenzen der Leistungsfähigkeit Deiner Controller stösst.


    Die bereits hier verlinkten Tutorials auf mikrocontroller.net sind auch ein richtig guter Einstiegspunkt, man bekommt wirklich alles was wichtig ist einmal erklärt...


    Tipp: Am Anfang mal das Datenblatt des verwendeten Controllers ausdrucken, hilft ungemein wenn man sich die wichtigsten Seiten griffbereit hinlegen kann und nicht erst ewig durch ein PDF scrollen muss... ;)

    Kurz gesagt: Du versuchst das Signal mit Interrupt-Pins "abzutasten", das funktioniert nicht gescheit.
    Frag den Pin einfach in nem Timer-Interrupt ab, das geht besser! ;)
    Ich hab z.B. nen RGB-Dimmer mit Fernbedienung gebastelt, da läuft die (8-Bit) PWM zusammen mit der RC5-Dekodierung und Entprellung mehrerer Taster und eines Drehgebers komplett in einem Timer völlig problemlos.


    Da Du ja auch in "dem anderen Forum" gepostet hast:
    http://www.mikrocontroller.net/topic/12216


    Dort steht die Antwort auf alle Deine Fragen und der Beispielcode funktioniert auch einwandfrei!
    Ich hab meine RC5-Routine auch von Peter übernommen, die ist einfach nur gut.

    Ich würde an Deiner Stelle den Pollin-Bausatz nur für die Entwicklung hernehmen.


    Wenn alles läuft nimmst den µC aus der Platine raus, lötest noch 3-4 externe Bauteile dran und versteckst ihn irgendwo hinter der Verkleidung...
    (Das mit dem Verstecken dürfte mit dem Eval-Board u.U. etwas schwierig werden... ^^)

    Ich wollte nochmal kurz Bescheid geben wg. der FB von DX .


    Das Teil ist heute angekommen, sieht billig aus funktioniert aber (leidlich).


    Die erste Einstellung mit RC5-Codes hat leider für zwei Tasten den gleich Code, ist also Mist.
    Hält man den Mute-Button dann länger gedrückt kommen einem noch mehrere Einstellungen unter die RC5 senden.
    Eine davon benutzt Extended-Commands (würde funktionieren, ist aber mehr Aufwand bei der Verarbeitung) und die letzte schliesslich macht alles richtig: Keine Extended-Commands, keine Doppelbelegungen.


    Leider haben die Chinesen haben nen blöden Bug eingebaut bzgl. des Toggle-Bits...
    Hält man eine Taste fest so wird der Befehl ständig wiederholt (was ja auch korrekt ist), leider wechselt dabei alle 0,5sec auch das Toggle-Bit.
    Dadurch ist nicht mehr klar erkennbar ob der Benutzer eine Taste wiederholt drückt oder festhält. Das passiert bei allen RC5-Einstellungen, ich vermute auch bei anderen Kodierungen die von dieser FB kommen.


    Bei mir ist das jetzt nicht das Riesenproblem (kann das programmatisch umgehen), bei anderen Anwendungen könnte es aber stören.
    Deshalb vorsicht bevor ihr euch diese FB ebenfalls kauft, überlegt genau ob ihr mit diesem "Toggle-Bug" leben könnt oder nicht.



    Grüße,


    Shuzz

    Bei LED Ansteuerung auf jeden Fall die Phase correct PWM nehmen. Bei Fast-PWM glimmen sie bei 0 noch ganz leicht. Frag mich jetzt nicht wieso, aber es ist so...


    hat das irgendeinen Grund wieso da steht: "OCR1AW"
    Da bringt der Compiler dann doch ne Fehlermeldung, weil das Register heisst OCR1A.


    Den ICR braucht man eigentlich nur beschreiben, wenn man den oberen Wert braucht. Ansonsten zählt der immer bis zu den eingestellen 8, 9 10 oder 16 bit hoch.

    Mit OCR1AW sollte man das High und Low Byte im Register "am Stück" ansprechen können, ist aber Compiler-abhängig.
    Das Register an sich heisst OCR1A, aber ansprechen muss man es normalerweise mit Low- und HighByte (OCR1AL bzw. OCR1AH), dafür bieten manche Compiler halt das OCR1AW Konstrukt in das man direkt ein int reinschreiben kann.
    IIRC sollte das mit WinAVR aber funktionieren, in Assembler dann natürlich nicht...


    Den ICR muss man beschreiben wenn man einen der PWM-Modi haben möchte. Bis 16Bit zählt der Timer nämlich nur im normalen Modus, da werden aber keine PWM-Pins getoggelt, zumindest hab ich das Datenblatt so verstanden. (Ich mag mich täuschen, habe wie gesagt keinen Tiny2313 da...)
    Das Geile ist dabei natürlich, dass man über das ICR1 dann wirklich beliebige Tastverhältnisse für die PWM einstellen kann und nicht auf die 2er Potenzen gebunden ist.


    Die LEDs glimmen übrigens im Fast-PWM Mode aus nem einfachen Grund: Der Pin wird beim Overflow eingeschaltet, dann beim Compare Match (0 == 0) wieder abgeschaltet, ist aber nen klitzekleinen Moment unter Spannung dabei. Bei sehr hellen LEDs (wie sie hier die meisten verwenden dürften) ist dann halt ein sehr schwaches Glimmen zu sehen.
    Bei der Phase-Correct PWM ist das nicht der Fall.



    Grüße,


    Shuzz

    Hardware-PWM bei den ATMELs läuft grob gesagt so:


    Du schreibst den PWM-Wert in das Register OCR1A (bzw. OCR1B) und stellst den Timer ein.


    Die 10Bit-PWM ist nur eine Möglichkeit von vielen.
    Du kannst den "TOP"-Wert (d.h. der Wert bis zu dem der Timer läuft bevor es wieder bei null losgeht bzw. rückwärts gezählt wird) auch in das ICR1-Register schreiben und die PWM im entsprechenden Modus starten.
    (Glaube Seite 110 im Datenblatt, mein DB ist aber schon was älter, evtl. hat sich das verschoben)
    Im WinAVR sollte das dann per ICR1W=0xffff funktionieren glaub ich.


    Mal als Beispiel:
    ICR1W = 0xFFFF; // TOP = 65535


    OCR1AW = 0x7FFF; // Vergleichswert für Pin OC1A, 50% Duty Cycle
    OCR1BW = 0x3FFF; // Vergleichswert für Pin OC1B, 25% Duty Cycle


    TCCR1A = (1<<COM1A1) | (1<<COM1B1); // Compare Output mode setzen: Clear when upcounting, set when downcounting --> d.h. Du gibts in den OCR1A:B Register die "An-Zeit" vor.
    TCCR1B = (1<<WGM13) | (1<<CS10); // Phase and frequency correct PWM, Timer Clock = System Clock


    Damit sollte der Timer eigentlich funktionieren, ist aber ohne jede Garantie da ich keinen 2313 zum Testen da habe und es auch gut sein kann dass ich nen Fehler gemacht hab. ;)



    Grüße,


    Shuzz

    Benutzt man um ein TSOP Signal aufzunehmen einen ADC vom uC und wertet dann die Kurve aus ?

    Nö, das geht über nen stinknormalen Portpin.
    Beispielcode findest du z.B. hier


    Der TSOP gibt ja bereits ein wunderbar demoduliertes Signal aus, kann man prima in ner Timerroutine abfragen.

    Den Code der FB zu ändern dürfte wg. der Art und Weise wie sie programmiert wird schwierig werden.
    Vermutlich funktioniert das so: Sobald Du die Mute-Taste gedrückt hältst fängt die FB nach z.B. 1sec an ihre Codes durchzuprobieren.
    Dann wird jede Sekunde ein neuer Code geschickt (und damit auch die FB umgestellt) bis Du die Taste los lässt.
    Dabei eine Einstellung zu finden die RC5-Codes verschickt ist glaub ich aussichtslos, da gewinnste eher den 6er mit Superzahl im Lotto... ;)


    Aus dem Grund wird Dir auch die andere FB von DX nicht helfen, die wird nämlich auch mit der 1-Tasten Methode programmiert.


    Deshalb ja mein Vorschlag mit dem "RC5-Detektor", das sollte eigentlich problemlos funktionieren.


    Und danke für die Erklärung mit den .wav-Files, die Idee ist gut. :)

    Ich habe die hier bestellt. Wenn da "Universal" dabei steht sollte die auch irgend eine Einstellung haben in der sie RC5 Codes versendet.


    Hast Du Deine FB denn auch auf ein Gerät programmiert das RC5 versteht/braucht?
    Die Universal-FBs sprechen normalerweise verschiedenste Protokolle, evtl. hast einfach das falsche erwischt?


    Versuch mal folgendes: nimm nen kleinen µC (Tiny13 o.Ä.) und ein kleines Programm das beim Empfang eines gültigen RC5-Codes ne LED am Ausgang kurz blinken lässt.
    Dann auf der FB die Mute-Taste so lange halten bis die LED kurz blinkt, fertig. ;)


    btw, in Deiner codes.zip sind .wav-files... ?(

    Mal ehrlich, ich würde an Deiner Stelle nochmal gewaltig über die Schieberegister nachdenken...


    Was brauchst Du?


    8x8 RGB LEDs ergeben bei mir 8x8x2 = 192 Steuerleitungen oder 192Bit


    Bei 8Bit PWM-Auflösung komme ich da auf 49152Bit/PWM-Zyklus (48kBit)


    Das noch mit Deinen gewünschten 50Hz multipliziert sind dann 2400kBit/s, also etwas über 2MBit/s.


    Das schafft ein ATMega locker!
    Vor allem wenn man das Hardware-SPI verwendet, dann kann der Prozessor nebenher schon das nächste zu versendende Byte berechnen.


    Bei 16MHz Takt hast dann noch massig Luft um irgendwelche anderen Dinge zu tun.


    Der Voteil hierbei ist: Du musst die LEDs nicht multiplexen sondern kannst sie ganz gediegen mit Nennstrom anfahren.


    Ich würd mir das echt gut überlegen... ;)