Forum: Mikrocontroller und Digitale Elektronik ATMega8-Verzweiflung


von Alex T. (avr_alex)


Angehängte Dateien:

Lesenswert?

Hallo,

ich hab schon seit einer Zeit Probleme selbst ein einfaches 
Blink-Programm auf einem ATMega8 zum laufen zu bringen. Hab alles 
gecheckt, Fuses, verschiedene Frequenzen, verschiedene ISP-Adapter, 
unterschiedliche avr-gcc-Versionen, alte Ubuntu-Version, neue ATMega8s 
und langsam weiß ich nicht mehr weiter...

main.c:
1
#include <avr/io.h>
2
#include <util/delay.h>
3
4
int main(void) {
5
    DDRB = 0xff;
6
    //setup();
7
    while(1) {
8
        PORTB = 0xff;
9
        _delay_ms(1000);
10
        PORTB = 0;
11
        _delay_ms(1000);
12
        //loop();
13
    }
14
15
    // Never reached:
16
    return 0;
17
}

Kompiliert:
1
avrdude -c usbasp -p m8 -U lfuse:w:0xC1:m -U hfuse:w:0x99:m -U lock:w:0xFF:m
2
3
/opt/ubuntu.bionic/usr/bin/avr-gcc -g -Wall -mcall-prologues -mmcu=atmega8 -DF_CPU=1000000L -O2   -c -o main.o main.c
4
/opt/ubuntu.bionic/usr/bin/avr-gcc -g -Wall -mcall-prologues -mmcu=atmega8 -DF_CPU=1000000L -O2 main.o -Wl,-gc-sections -Wl,-relax -o Blink.obj
5
/opt/ubuntu.bionic/usr/bin/avr-objcopy -R .eeprom -O ihex Blink.obj Blink.hex
6
rm Blink.obj main.o
7
8
avrdude -p atmega8 -c usbasp -U flash:w:Blink.hex

Versionen:
1
/opt/ubuntu.bionic/usr/bin/avr-gcc -v
2
Es werden eingebaute Spezifikationen verwendet.
3
Lesen der Spezifikationen von /opt/ubuntu.bionic/usr/bin/../lib/gcc/avr/5.4.0/device-specs/specs-avr2
4
COLLECT_GCC=/opt/ubuntu.bionic/usr/bin/avr-gcc
5
COLLECT_LTO_WRAPPER=/opt/ubuntu.bionic/usr/bin/../lib/gcc/avr/5.4.0/lto-wrapper
6
Ziel: avr
7
Konfiguriert mit: ../gcc/configure -v --enable-languages=c,c++ --prefix=/usr/lib --infodir=/usr/share/info --mandir=/usr/share/man --bindir=/usr/bin --libexecdir=/usr/lib --libdir=/usr/lib --enable-shared --with-system-zlib --enable-long-long --enable-nls --without-included-gettext --disable-libssp --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=avr CFLAGS='-g -O2 -fdebug-prefix-map=/build/gcc-avr-n0nSsH/gcc-avr-5.4.0+Atmel3.6.0=. -fstack-protector-strong -Wformat ' CPPFLAGS='-Wdate-time -D_FORTIFY_SOURCE=2' CXXFLAGS='-g -O2 -fdebug-prefix-map=/build/gcc-avr-n0nSsH/gcc-avr-5.4.0+Atmel3.6.0=. -fstack-protector-strong -Wformat ' FCFLAGS='-g -O2 -fdebug-prefix-map=/build/gcc-avr-n0nSsH/gcc-avr-5.4.0+Atmel3.6.0=. -fstack-protector-strong' FFLAGS='-g -O2 -fdebug-prefix-map=/build/gcc-avr-n0nSsH/gcc-avr-5.4.0+Atmel3.6.0=. -fstack-protector-strong' GCJFLAGS='-g -O2 -fdebug-prefix-map=/build/gcc-avr-n0nSsH/gcc-avr-5.4.0+Atmel3.6.0=. -fstack-protector-strong' LDFLAGS='-Wl,-Bsymbolic-functions -Wl,-z,relro' OBJCFLAGS='-g -O2 -fdebug-prefix-map=/build/gcc-avr-n0nSsH/gcc-avr-5.4.0+Atmel3.6.0=. -fstack-protector-strong -Wformat ' OBJCXXFLAGS='-g -O2 -fdebug-prefix-map=/build/gcc-avr-n0nSsH/gcc-avr-5.4.0+Atmel3.6.0=. -fstack-protector-strong -Wformat '
8
Thread-Modell: single
9
gcc-Version 5.4.0 (GCC)
10
11
avrdude -v
12
13
avrdude: Version 6.3-20171130
14
         Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
15
         Copyright (c) 2007-2014 Joerg Wunsch
16
17
         System wide configuration file is "/etc/avrdude.conf"
18
         User configuration file is "/home/alex/.avrduderc"
19
         User configuration file does not exist or is not a regular file, skipping
20
21
22
avrdude: no programmer has been specified on the command line or the config file
23
         Specify a programmer using the -c option and try again

Und compiliere ich das Programm mit einem ATTiny85 funktioniert es 
einwandfrei, es ist zum Mäuse melken...

Mein Oszilloskop, zeigt nur einen ganz kurzen Pulldown auf der Leitung. 
Spannung am MC: 4,5V

Langsam weiß ich nicht mehr weiter. Ist ja nicht so, dass ich nicht 
schon Schaltungen mit einem ATMega8 gebaut und programmiert hätte, aber 
was mach ich dieses mal falsch?

Liebe Grüße
Alex

PS: Sorry für das zweifache Bild.

: Bearbeitet durch User
von Ingo Less (Gast)


Lesenswert?

Hast du den WDT aktiv über die Fuses? Scheint ein zyklischer Reset zu 
sein, der da reingrätscht

von Ingo Less (Gast)


Lesenswert?

Mach mal dein Delay auf 1ms, dann kannst du bestimmt sehen, das ca. 5 
Pulse kommen und dann ein Resert feuert

von Ben B. (Firma: Funkenflug Industries) (stromkraft)


Lesenswert?

Schaltplan? Könnte ein Problem beim Start des Controllers sein, z.B. daß 
er sofort in einen Reset-Zustand fällt. Abblockkondensatoren vorhanden?

von M. K. (sylaina)


Lesenswert?

Sieht mir auch nach einem Reset aus aber 12ms Watchdog-Reset? Ich weiß 
von nem 16ms aber 12ms?

von EAF (Gast)


Lesenswert?

Alex T. schrieb:
> Langsam weiß ich nicht mehr weiter. Ist ja nicht so, dass ich nicht
> schon Schaltungen mit einem ATMega8 gebaut und programmiert hätte, aber
> was mach ich dieses mal falsch?

Der Fehler ist meist da zu finden, wo man zuletzt sucht.
Da wo man sich sicher fühlt.

In Foren wird oft das gezeigt, was tausendfach geprüft wurde, und 
woanders seinen Test besteht.

Die fehlerhafte Stelle wird gerne übersehen und dann geheim gehalten.
z.B. du vor die selber und dann auch vor uns.

So auch hier.
Dein Programm funktioniert auf einem ATMega328P natürlich perfekt.
Arduino IDE, mit C und C++ kompiliert.


Merksatz:
Der Weg in die Hölle, ist mit falschen Annahmen gepflastert.

Hier ist der Schaltplan, bzw. die Schaltung, falsch.
(sagt meine Kristallkugel)

von Rächdschraipunk (Gast)


Lesenswert?

EAF schrieb:
> Merksatz:
> Der Weg in die Hölle, ist mit falschen Annahmen gepflastert.
> Hier ist der Schaltplan, bzw. die Schaltung, falsch.

Hinweis: hier sind zuviele Kommas im Text.

von EAF (Gast)


Lesenswert?

Rächdschraipunk schrieb:
> Hinweis: hier sind zuviele Kommas im Text.

Überflüssige Kommata, darfst du dir gerne abmalen, und dann selber 
weiterverwenden.

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Alex T. schrieb:
> avrdude -c usbasp -p m8 -U lfuse:w:0xC1:m -U hfuse:w:0x99:m -U
> lock:w:0xFF:m

Diese Fuse-Werte ergeben folgendes Bild:

http://eleccelerator.com/fusecalc/fusecalc.php?chip=atmega8&LOW=C1&HIGH=99&LOCKBIT=FF

Demnch ist der Watchdog-Timer WDTON eingeschaltet. Mach den mal aus, 
also hfuse=0xD9.

: Bearbeitet durch Moderator
Beitrag #6854409 wurde von einem Moderator gelöscht.
Beitrag #6854415 wurde von einem Moderator gelöscht.
von Alex T. (avr_alex)


Lesenswert?

Danke, danke, danke! War der Watchdog! 🙈

Kann es sein, dass sich der Default geändert hat? Ich hatte die Seite 
http://eleccelerator.com/fusecalc/fusecalc.php schon früher für das 
Berechnen der Fuses benutzt und dann immer nur die Frequenz eingestellt.

Aber danke für die Hinweise, dafür hab ich jetzt hab ich zwei Programmer 
extra und einen ZF-Sockel zum Programmieren, was deutlich bequemer ist.

Liebe Grüße
Alex

Beitrag #6854432 wurde von einem Moderator gelöscht.
von EAF (Gast)


Lesenswert?

Alex T. schrieb:
> Kann es sein, dass sich der Default geändert hat?

https://www.engbedded.com/fusecalc/
Sieht da andere Defaults.

von Adam P. (adamap)


Lesenswert?

- Externer oder interner Takt?
- Weiterhin, wo ist F_CPU definiert? delay.h benötigt das.
Hast du das in den Compiler-Optionen definiert? Sonst muss es in den 
Source rein.

von Alex T. (avr_alex)


Lesenswert?

Ist aber auch immer Fies, wenn mehrere Fehler zusammenkommen. Der erste 
Mega8 hatte wirklich einen Schlag weg, das hat mich dann wohl auch 
bisschen auf das Glatteis (ggf Programmer defekt) geführt. Der ist jetzt 
gut in der Dead-Parts-Bin aufgehoben.

Beitrag #6854443 wurde von einem Moderator gelöscht.
Beitrag #6854458 wurde von einem Moderator gelöscht.
Beitrag #6854470 wurde von einem Moderator gelöscht.
von affenstahl (Gast)


Lesenswert?

Adam P. schrieb:
> - Externer oder interner Takt?
> - Weiterhin, wo ist F_CPU definiert? delay.h benötigt das.
> Hast du das in den Compiler-Optionen definiert? Sonst muss es in den
> Source rein.

Typisch mc.net. Frage nicht gelesen, aber sofort in die Tasten hauen. 
Der TO hat all das im Eingangspost beantwortet. Man muss es nur sehen...

Beitrag #6854484 wurde von einem Moderator gelöscht.
von Adam P. (adamap)


Lesenswert?

affenstahl schrieb:
> Adam P. schrieb:
>> - Externer oder interner Takt?
>> - Weiterhin, wo ist F_CPU definiert? delay.h benötigt das.
>> Hast du das in den Compiler-Optionen definiert? Sonst muss es in den
>> Source rein.
>
> Typisch mc.net. Frage nicht gelesen, aber sofort in die Tasten hauen.
> Der TO hat all das im Eingangspost beantwortet. Man muss es nur sehen...

Ich lese da nichts von Taktquelle oder F_CPU.

von Thomas E. (thomase)


Lesenswert?

Adam P. schrieb:
> Ich lese da nichts von Taktquelle oder F_CPU.

Musst du gucken:

Alex T. schrieb:
> lfuse:w:0xC1:m -U hfuse:w:0x99:m -U lock:w:0xFF:m

Alex T. schrieb:
> -DF_CPU=1000000L

von Adam P. (adamap)


Lesenswert?

Thomas E. schrieb:
> Musst du gucken:

Tatsache...sorry, dass mit dem DF_CPU hatte ich überlesen.

Beitrag #6855004 wurde von einem Moderator gelöscht.
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.