Hallo allerseits,
angeregt durch diesen Beitrag
"PowerLED PWM mit RC5 Fernbedienung"
Beitrag "PowerLED PWM mit RC5 Fernbedienung"
habe ich die Schaltung nachgebaut mit einem ATTiny85 und erfreue mich an
dessen Funktion sofern ich die beigefügte hex-Datei direkt ins Flash
lade.
Inzwischen wollte ich das Programm etwas abändern und noch eine serielle
Ausgabe an dem freien Pin hinzufügen, um einzelne Register-Inhalte
anzeigen zu lassen.
Mir gelingt es jedoch nicht, auch nur die ORIGINALEN Dateien in eine
hex-Datei zu verwandeln, die korrekt läuft. Die LED bleibt in der
niedrigsten Dimmstufe, dimmt nicht automatisch hoch und reagiert auch
nicht auf RC5-Signale. Am PWM-Ausgang sieht man eine PWM, die der
niedrigen LED-Leuchtstärke entspricht, also kommen dort 125 kHz heraus.
die in der Hauptschleife hinzugefügte serielle Ausgabe lief auch nicht.
Es scheint als ob die Hauptschleife nicht laufen würde.
Einige zitate aus dem Beitrag:
"Da fehlt ein volatile bei rc5_data. Mit (ganz) früheren gcc-Versionen
funktionierte das auch so mit eingeschalteter Optimierung, die neueren
optimieren gnadenlos alles weg."
"Mit den defines habe ich so meine Schwierigkeiten, was wo wie
definieren, damit der Compiler nicht meckert. Peter hat rc5_data als
external in der RC5.h definiert. Das müsste dann wohl raus und die
volatile def in der RC5.c definiert werden."
rc5.c:
[c]volatile uint rc5_data;[c]
rc5.h:
[c]extern volatile uint rc5_data;[c]
Ich benutze AVR-Studio 4.18 mit AVRGCC 20100110.
Build-Ausgabe (-Os):
rm -rf P_LED.o rc5.o LED2.elf dep/* LED2.hex LED2.eep LED2.lss LED2.map
Build succeeded with 0 Warnings...
avr-gcc -mmcu=attiny85 -Wall -gdwarf-2 -std=gnu99 -DF_CPU=8000000UL
-Os -funsigned-char -funsigned-bitfields
-fpack-struct -fshort-enums -MD -MP -MT P_LED.o -MF dep/P_LED.o.d -c
../P_LED.c
avr-gcc -mmcu=attiny85 -Wall -gdwarf-2 -std=gnu99 -DF_CPU=8000000UL
-Os -funsigned-char -funsigned-bitfields
-fpack-struct -fshort-enums -MD -MP -MT rc5.o -MF dep/rc5.o.d -c
../rc5.c
avr-gcc -mmcu=attiny85 -Wl,-Map=LED2.map P_LED.o rc5.o -o LED2.elf
avr-objcopy -O ihex -R .eeprom -R .fuse -R .lock -R .signature LED2.elf
LED2.hex
avr-objcopy -j .eeprom --set-section-flags=.eeprom="alloc,load"
--change-section-lma .eeprom=0
--no-change-warnings -O ihex LED2.elf LED2.eep || exit 0
avr-objdump -h -S LED2.elf > LED2.lss
AVR Memory Usage
----------------
Device: attiny85
Program: 854 bytes (10.4% Full)
(.text + .data + .bootloader)
Data: 37 bytes (7.2% Full)
(.data + .bss + .noinit)
Build succeeded with 0 Warnings...
_____________________________
Habe mal die Tipps berücksichtigt und die Optimierung abgeschaltet
(-O0):
rm -rf P_LED.o rc5.o LED2.elf dep/* LED2.hex LED2.eep LED2.lss LED2.map
Build succeeded with 0 Warnings...
avr-gcc -mmcu=attiny85 -Wall -gdwarf-2 -std=gnu99
-DF_CPU=8000000UL -O0 -funsigned-char
-funsigned-bitfields -fpack-struct -fshort-enums -MD -MP -MT P_LED.o -MF
dep/P_LED.o.d -c ../P_LED.c
avr-gcc -mmcu=attiny85 -Wall -gdwarf-2 -std=gnu99
-DF_CPU=8000000UL -O0 -funsigned-char
-funsigned-bitfields -fpack-struct -fshort-enums -MD -MP -MT rc5.o -MF
dep/rc5.o.d -c ../rc5.c
avr-gcc -mmcu=attiny85 -Wl,-Map=LED2.map P_LED.o rc5.o -o LED2.elf
avr-objcopy -O ihex -R .eeprom -R .fuse -R .lock -R .signature LED2.elf
LED2.hex
avr-objcopy -j .eeprom --set-section-flags=.eeprom="alloc,load"
--change-section-lma .eeprom=0
--no-change-warnings -O ihex LED2.elf LED2.eep || exit 0
avr-objdump -h -S LED2.elf > LED2.lss
AVR Memory Usage
----------------
Device: attiny85
Program: 1326 bytes (16.2% Full)
(.text + .data + .bootloader)
Data: 37 bytes (7.2% Full)
(.data + .bss + .noinit)
Build succeeded with 0 Warnings...
Das Programm ist wesentlich größer, jedoch wird die PWM durchlaufen. Die
Hauptschleife scheint zu gehen.
Ohne Optimierung bringt aber das delay für die serielle Ausgabe
Fehlermeldungen:
#ifndef _OPTIMIZE_
# warning "Compiler optimizations disabled; functions from
<util/delay.h> won't work as designed"
#endif
____________________
Kann mir da bitte jemand weiter helfen? Im Anhang die Quelldateien.
mit freundlichem Gruß