Hier ein bischen Code für ein Moodlight mit RGB-Led.
Ist zwar nicht wirklich "fertig", aber sicher ein schöner Anfang wenn
man mal mit ner RGB-LED spielen will.
Der Sourcecode ist hauptsächlich Copy&Paste aus diesem Forum, vorallem
der RC5 Code von Peter (Beitrag "Fernbedien RC5 Empfänger")
und die HSV->RGB Umrechnung von Benedikt
(Beitrag "Re: HSV RGB Led Dimmer, C Code & Video & Doku")
Features:
* S+V Über Fernbedienung verstellbar
* H-Cycle Geschwindigkeit einstellbar
* Presets im EEPROM (leider noch nicht online speicherbar)
* Debugausgabe über RS232
* 3-Kanal Software-PWM mit variabler Periodendauer (um die PWM im
niedrigen Bereich etwas feiner abstufen zu können)
* Kalibrierungskurven für die drei Farbkanäle getrennt einstellbar, mit
linearer Interpolation zwischen Stützpunkten.
Leider ist der Flash mit 2040 Bytes dann schon ein wenig voll, für mehr
Funktionalität oder größere Kalibriertabellen müsste man dann z.B. den
UART-Code rausnehmen oder kürzen.
Schaltplan gibts keinen, ist aber relativ straightforward:
20MHz quarz an den Tiny,
LEDs an PB0..PB2 (Über Transistoren, wenns ne größere RGB-LED ist)
TSOP1736 IR-Receiver an PD6 anschliessen, dessen Versorgungsspannung
sollte man besser über einen LC-Filter etwas bereinigen, die PWM
"schmutzt" da etwas.
Hallo,
ich brauche Hilfe.
Ich habe ein Moodlioght aufgebaut mit Tiny2313 20MHZ. Mit dem Orginal
hex File funktioniert auch alles.
Nun muss ich die IR Codes ändern , was auch nicht das Problem ist. Neue
Codes habe ich schon ermittelt.
Das Problem ist nun folgendes :
Wenn ich den Orginal Code mit unverändertem Makefile compilieren will,
dann funktioniert das zwar ohne Fehler, aber das Hexfile will auf dem
Tiny2313 nicht laufen.
Ausprobiert habe ich schon die letzten 4 Winavr pakete.
Was mich wundert ist, das die erzeugte Hexdatei immer größer ist und
zB. moodlight.lss habe ich debug einträge: hier ein Auszug:
moodlight.elf: file format elf32-avr
Sections:
Idx Name Size VMA LMA File off Algn
0 .text 00000892 00000000 00000000 000000b4 2**0
CONTENTS, ALLOC, LOAD, READONLY, CODE
1 .data 00000000 00800060 00000892 00000946 2**0
CONTENTS, ALLOC, LOAD, DATA
2 .bss 0000002c 00800060 00800060 00000946 2**0
ALLOC
3 .noinit 00000000 0080008c 0080008c 0000096e 2**0
CONTENTS
4 .eeprom 00000028 00810000 00810000 00000946 2**0
CONTENTS, ALLOC, LOAD, DATA
5 .stab 00000354 00000000 00000000 00000970 2**2
CONTENTS, READONLY, DEBUGGING
6 .stabstr 00000084 00000000 00000000 00000cc4 2**0
CONTENTS, READONLY, DEBUGGING
7 .debug_aranges 00000054 00000000 00000000 00000d48 2**0
CONTENTS, READONLY, DEBUGGING
8 .debug_pubnames 00000242 00000000 00000000 00000d9c 2**0
CONTENTS, READONLY, DEBUGGING
9 .debug_info 00000a54 00000000 00000000 00000fde 2**0
CONTENTS, READONLY, DEBUGGING
10 .debug_abbrev 000003ee 00000000 00000000 00001a32 2**0
CONTENTS, READONLY, DEBUGGING
11 .debug_line 000008a2 00000000 00000000 00001e20 2**0
CONTENTS, READONLY, DEBUGGING
12 .debug_str 000002fb 00000000 00000000 000026c2 2**0
CONTENTS, READONLY, DEBUGGING
Disassembly of section .text:
Im Orginal von Ernst ist das nicht drin.
Bin für jeden Tip dankbar. Nur zur Info ich beschäftige mich erst seit
kurzem mit atmegas.
gruß
mr_energy
Hmm, mit dem GCC-4.1.2 komm ich auf 2016 Bytes in .text, die Vorversion
hatte noch 2040...
was gibt er denn bei dir als Größe nach dem Compilieren an?
Wenns wirklich nicht passen will: uart.* im Makefile rausnehmen, und
alle Aufrufe von uart_write, uart_hex etc. auskommentieren.
/Ernst
Hallo,
was wurde denn für eine WINAVR Version benutzt oder war es eine Linux
Version?
Wenn ich das mit der Flash Größe richtig verstanden habe muss ich es
schaffen das die Ausgabe .text nicht mehr als 2048 ist da der tiny2313
ja nur 2kb Flash hat ?
Gruß
mr_energy
Hier sind noch mal Details aus meinem Ergebnis.
avr-gcc (GCC) 3.4.5
moodlight.elf :
section size addr
.text 2194 0
.data 0 8388704
.bss 44 8388704
.noinit 0 8388748
.eeprom 40 8454144
avr-gcc (GCC) 4.1.1 (WinAVR 20070122)
moodlight.elf :
section size addr
.text 2090 0
.bss 44 8388704
.eeprom 40 8454144
.stab 852 0
.stabstr 132 0
.debug_aranges 136 0
.debug_pubnames 578 0
.debug_info 3026 0
.debug_abbrev 1028 0
.debug_line 2627 0
.debug_frame 368 0
.debug_str 781 0
.debug_loc 881 0
Total 12583
avr-gcc (GCC) 4.1.2 (WinAVR 20070525)
moodlight.elf :
section size addr
.text 2094 0
.bss 44 8388704
.eeprom 40 8454144
.stab 864 0
.stabstr 113 0
.debug_aranges 136 0
.debug_pubnames 578 0
.debug_info 3004 0
.debug_abbrev 1028 0
.debug_line 2627 0
.debug_frame 368 0
.debug_str 781 0
.debug_loc 881 0
Total 12558
Sieht bei mir z.b. so aus (anderes Projekt)
avr-gcc.exe -I"C:\PreampControll\..\lib" -mmcu=atmega162 -Wall
-gdwarf-2 -std=gnu99 -DF_CPU=8000000UL -Os -funsigned-char
-funsigned-bitfields -fpack-struct -fshort-enums -MD -MP -MT uart2.o -MF
d
Hallo,
danke für die Tips.
Ich habe es nun hinbekommen.
Der Otimierungslevel war immer s.
Ich habe den Code für das lesen vom UART auskommentiert, meine neuen IR
Codes eingefügt und den Zugriff auf die EEProm Daten geändert.
Nun komme ich auf 2004 und alles funktioniert (Philips LCD TV und Lampe
steuern). Die RGB Lampe(5 Watt Power LED) reagiert jetzt auf codes für
einen VCR.
moodlight.elf :
section size addr
.text 2004 0
.bss 44 8388704
.eeprom 40 8454144
.stab 864 0
.stabstr 113 0
.debug_aranges 136 0
.debug_pubnames 578 0
.debug_info 2777 0
.debug_abbrev 1013 0
.debug_line 2537 0
.debug_frame 368 0
.debug_str 786 0
.debug_loc 903 0
Total 12163
Nochmals Danke für die Tips
Nun kann ich das nächste Project mit mega32, LCD,DCF77 einem oder
mehreren 1Wire anschlüssen für DS18S20 Sensoren angehen. Die Krönung
wäre für mich wenn ich auf eine SD Karte die Messungen speichern könnte.
Gruß mr_energy
Hallo, ich versuche schon seit tagen verzweifelt den Code auf einem
mega48 zum laufen zu bringen, leider ohne Erfolg. Auf einem tiny2312
funktioniert er wunderbar wenn ich den uart Code auskommentiere, da
sonst zu wenig Platz ist. Da ich den uart aber verwenden möchte würde
ich den Code gerne auf einem mega48 anpassen.
zunächst scheint was mit den fusebits nicht zu stimmen. ich habe einen
20 mhz quarz mit 2x22pf kondensatoren angeschlossen wie im datenblatt
beschrieben ist, aber ich kann die fusebits nicht richtig setzen.
Bin mir auch gar nicht so sicher, ob das die richtigen Einstellungen für
einen externen Quartz sind
http://palmavr.sourceforge.net/cgi-bin/fc.cgi?P_PREV=ATmega48&P=ATmega48&V_LOW=FF&V_HIGH=DF&V_EXTENDED=FF&M_LOW_0x3F=0x3F&M_LOW_0x40=&M_LOW_0x80=&M_HIGH_0x07=0x07&M_HIGH_0x08=&M_HIGH_0x10=&M_HIGH_0x20=0x00&M_HIGH_0x40=&M_HIGH_0x80=&M_EXTENDED_0x01=&B_SUT1=P&B_SPIEN=P&B_SUT0=P&O_BITS=Apply+fuse+bits
avrdude: safemode: lfuse reads as CF
avrdude: safemode: hfuse reads as DF
avrdude: safemode: efuse reads as 1
"lfuse" und "hfuse" lassen setzen aber "efuse" nicht.
avrdude meldet: "..efuse changed! Was ff, and is now 1..Would you like
..to change back? [y/n]."
Wenn ich y auswähle hängt avrdude. Bei Auswahl von n bleibt das "efuse"
auf 1.
Nun ja, den Uart Code muss ich zunächst auch hier auskommentieren da die
Bezeichnungen der Register nicht passen. Falls ich dann im Hauptprogramm
TIMSK durch TIMSK0 ersetze kann ich das Programm ohne Fehler kompilieren
und flashen, die angeschlossenen LED's leuchten aber nur schwach in
einer Farbe... :(
Vielleicht kann mir wer bei diesen Problemchen helfen, bin als Anfänger
echt aufgeschmissen.
Hallo,
erstmal: Vielen Dank für das schöne Projekt. Ich bastel gerade an etwas
ähnlichem und würde mir vor allem gerne ein bisschen was bei der
IR-Auswertung abgucken.
Leider bekomme ich den Code nicht auf einem ATTINY84 zum laufen. Ich
habe die Ports entsprechend abgeändert, damit es auf meine Schaltung
passt. Leider habe ich nur eine wild flackernde LED.
Ich habe keinen externen Quarz zur Verfügung. Was muss ich beachten,
wenn ich den Code auf 8Mhz intern laufen lasse?
Ich habe mit den Prescalern rumgespielt, aber leider keinen großen
Erfolg gehabt.
Danke!
Hans
Hansi Cardell schrieb:> Leider bekomme ich den Code nicht auf einem ATTINY84 zum laufen. Ich> habe die Ports entsprechend abgeändert, damit es auf meine Schaltung> passt. Leider habe ich nur eine wild flackernde LED.
Hmm...
Wie Flackerts denn? So als würde der RC5-Code ständig irgendwelche
Tastendrücke erkennen, oder so als ob die Soft-PWM viel zu langsam wäre?
(1MHz (8MHz mit Clockdiv) statt 20MHz würde die PWM schon deutlich in
den Flacker-Bereich bringen)
Der Tiny84 hätte genug Hardware-PWMs, evtl. lieber die nehmen.
Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.
Wichtige Regeln - erst lesen, dann posten!
Groß- und Kleinschreibung verwenden
Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang