@markusj Bei neueren Mega8 ist AVCC nicht mehr mit VCC verbunden, das war ein Layoutfehler der mittlerweile behoben ist.
Tiny ASURO Library: Thread und sf.net Seite
Also ich kann jetzt einen Hardware Fehler definitiv und einfüralle mal ausschliesen.
Ich habe mal mein Windows vorgekramt und das gleiche Programm in AVRStudio 5 erstellt, da geht es perfekt.
Nur unter Linux macht es zicken.
Ich kann mir aber nicht erklären warum es nicht am Compiler an kommen sollte, ich hab mitlerweile F_CPU direkt in der main.c definiert, vor allen includes natürlich.
Keine veränderung.
Ich kann mir das echt nicht mehr erklären.
Da hält sich Atmel ziemlich bedeckt.
Den Hinweis bekam ich im mikrocontroller.net in Zusammenhang mit Probleme bei einem Mega8A und Reset.
Ich habe Mega8 da steht oben neben Atmel 0931G, bei denen ist der Schluss noch vorhanden, bei 1045 nicht mehr. Lässt sich leicht mit einem Ohmmeter überprüfen.
Thalhammer: Ok, dann gehen wir das jetzt Mal ganz systematisch an. Zuerst einmal wird die IDE ausgenockt.
Anbei dein Minimalcode, leicht modifiziert so dass anstelle der Makros direkt auf die Portregister zugegriffen wird, und ein Shellscript zum Bauen des ganzen. Beides abspeichern, Shellscript ausführbar machen und ausführen. Du kannst die Variable F_CPU im Skript variieren und kontrollieren ob sich dann das .hex-File und das .lss-File ändern. (Tun sie bei mir).
main.c
build.shCode:#include <avr/io.h> #include <util/delay.h> int main() { DDRB=0xFF; while(1) { _delay_ms(100); PORTB ^= (1 << PB0); } }
Code:#!/bin/bash F_CPU=8000000UL avr-gcc -Wall -Os -fpack-struct -fshort-enums -std=gnu99 -funsigned-char -funsigned-bitfields -mmcu=atmega8 "-DF_CPU=$F_CPU" -MMD -MP -MF"main.d" -MT"main.d" -c -o "main.o" "main.c" avr-gcc -Wl,-Map,main.map -mmcu=atmega8 -o "main.elf" ./main.o avr-objdump -h -S main.elf > "main.lss" avr-objcopy -R .eeprom -O ihex main.elf "main.hex"
Tiny ASURO Library: Thread und sf.net Seite
Eine Frage hätte ich da noch.
Was verwendest du für eine Version von GCC.
Es gab doch in älteren Versionen der AVR-Lib-C den Hinweis das _delay_ms() nur bis zu einem gewissen Wert funktioniert, abhängig von der Taktfrequenz.
@Hubert: Nein, 4.5.3 laut #17
Tiny ASURO Library: Thread und sf.net Seite
Huch?Willst du es nicht verstehen oder kanst du nicht.
ES IST VOLLKOMMEN EGAL WIE ICH F_CPU EINSTELLE!!!!!!!!!!
Ich würde die Datei delay.h im util-Verzeichniss umbenennen. Der zu erwartende Kompilerfehler würde zeigen, dass wirklich diese Datei eingebunden wird. Oder hier mal 8MHz eintragen:
[Edit]#ifndef F_CPU
/* prevent compiler error by supplying a default */
# warning "F_CPU not defined for <util/delay.h>"
# define F_CPU 1000000UL
#endif
Echt spannend. Minimalprogramm:
mit 8MHz:Code:#include <avr/io.h> #include <util/delay.h> int main(void) { _delay_ms(100); while(1); }
mit 1MHz:Code:1 .file "temp.c" 2 __SREG__ = 0x3f 3 __SP_H__ = 0x3e 4 __SP_L__ = 0x3d 5 __CCP__ = 0x34 6 __tmp_reg__ = 0 7 __zero_reg__ = 1 15 .Ltext0: 16 .global main 18 main: 19 .LFB6: 20 .LM1: 21 /* prologue: function */ 22 /* frame size = 0 */ 23 .LM2: 24 0000 88EE ldi r24,lo8(1000) 25 0002 93E0 ldi r25,hi8(1000) 26 .LVL0: 27 .LBB12: 28 .LBB13: 29 .LBB14: 30 .LBB15: 31 .LM3: 32 0004 28EC ldi r18,lo8(200) 33 0006 30E0 ldi r19,hi8(200) 34 .L2: 35 0008 F901 movw r30,r18 36 .LVL1: 37 /* #APP */ 38 ; 105 "c:/winavr/lib/gcc/../../avr/include/util/delay_basic.h" 1 39 000a 3197 1: sbiw r30,1 40 000c 01F4 brne 1b 41 ; 0 "" 2 42 /* #NOAPP */ 43 .LBE15: 44 .LBE14: 45 .LM4: 46 000e 0197 sbiw r24,1 47 .LM5: 48 0010 01F4 brne .L2 49 .L6: 50 0012 00C0 rjmp .L6 51 .LBE13: 52 .LBE12: 53 .LFE6: 79 .Letext0:
Code:1 .file "temp.c" 2 __SREG__ = 0x3f 3 __SP_H__ = 0x3e 4 __SP_L__ = 0x3d 5 __CCP__ = 0x34 6 __tmp_reg__ = 0 7 __zero_reg__ = 1 15 .Ltext0: 16 .global main 18 main: 19 .LFB6: 20 .LM1: 21 /* prologue: function */ 22 /* frame size = 0 */ 23 .LBB12: 24 .LBB13: 25 .LBB14: 26 .LBB15: 27 .LM2: 28 0000 88EA ldi r24,lo8(25000) 29 0002 91E6 ldi r25,hi8(25000) 30 .LVL0: 31 /* #APP */ 32 ; 105 "c:/winavr/lib/gcc/../../avr/include/util/delay_basic.h" 1 33 0004 0197 1: sbiw r24,1 34 0006 01F4 brne 1b 35 ; 0 "" 2 36 /* #NOAPP */ 37 .L2: 38 0008 00C0 rjmp .L2 39 .LBE15: 40 .LBE14: 41 .LBE13: 42 .LBE12: 43 .LFE6: 69 .Letext0:
Geändert von radbruch (10.10.2012 um 01:02 Uhr)
Bild hier
Atmel’s products are not intended, authorized, or warranted for use
as components in applications intended to support or sustain life!
Lesezeichen