Forum: Projekte & Code RGB-Moodlight auf ATTiny2313 mit RC5-Fernbedienung


von Εrnst B. (ernst)


Angehängte Dateien:

Lesenswert?

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.

von mr_energy (Gast)


Lesenswert?

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

von Εrnst B. (ernst)


Lesenswert?

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

von mr_energy (Gast)


Lesenswert?

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

von Ralf H. (heschdy)


Lesenswert?

Was für ein Optimization Schalter verwendest du denn?

-O0 bis -O4  oder -Os?

Versuche mal -Os

von Ralf H. (heschdy)


Lesenswert?

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

von mr_energy (Gast)


Lesenswert?

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

von P. F. (skybandit)


Lesenswert?

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.

von Hansi C. (honsey)


Lesenswert?

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

von Εrnst B. (ernst)


Lesenswert?

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.

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.