www.mikrocontroller.net

Forum: Codesammlung RGB-Moodlight auf ATTiny2313 mit RC5-Fernbedienung

Autor: Εrnst B✶ (ernst)
Datum:
Angehängte Dateien:

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.
Autor: mr_energy (Gast)
Datum:

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
Autor: Εrnst B✶ (ernst)
Datum:

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
Autor: mr_energy (Gast)
Datum:

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
Autor: Ralf H. (heschdy)
Datum:

Was für ein Optimization Schalter verwendest du denn?

-O0 bis -O4  oder -Os?

Versuche mal -Os
Autor: Ralf H. (heschdy)
Datum:

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
Autor: mr_energy (Gast)
Datum:

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
Autor: P. Fischer (skybandit)
Datum:

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_PR...

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.

Antwort schreiben

Die Angabe einer Email-Adresse ist freiwillig. Wenn Sie automatisch per Email ü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

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel




Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder GIF-Format hochladen.
Siehe Bildformate
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken erkennst du die Nutzungsbedingungen an.

webmaster@mikrocontroller.netImpressumNutzungsbedingungenWerbung auf Mikrocontroller.net