LED an AVR ATmega16 bleibt dunkel

Gast #2265305
Lesenswert?

Hallo!


Vor Jahren hatte ich mit den AVR-uC einiges gemacht. Für ein kleines 
Projekt versuche ich mich gerade wieder einzufinden und irgendwie klappt 
gar nichts mehr. Zum Einstieg wollte ich eine LED blinken lassen. Am 
Atmega16 mit 16MHz getaktet habe ich an PC3 eine LED gegen GND 
angeschlossen und den ISP-Programmer.

Mit dem avrdude aus der aktuellen Version von WinAVR habe ich aus dem 
Programmer's Notepad heraus folgenden Source Code erfolgreich auf den 
Controller schreiben können:
1
#include <avr/io.h>
2
#include <util/delay.h>
3
#define F_CPU 16000000UL
4

5
int main(void)
6
{
7
    DDRC = 0xff;          /* define all pins of port C as output pins */
8
    while(1)              /* loop forever */
9
    {
10
        _delay_ms(1000);  /* wait a second */
11
        PORTC = 0xff;     /* turn all output pins on */
12
        _delay_ms(1000);  /* wait again a second */
13
        PORTC = 0x00;     /* turn all output pins off */
14
    }
15
    return 0;             /* never achieved */
16
}

Der Sourcecode ließ sich fehlerfrei compilieren und übertragen. Auch das 
verifizieren nach dem programmieren des Controllers hat geklappt. Dann 
tut sich aber nichts mehr, die rote LED an PC3 bleibt die ganze Zeit 
aus.

Folgendes habe ich schon überprüft bzw. ausprobiert:
* Rote LED verpolt? Nein, nicht verpolt.
* Vorwiderstand der roten LED defekt? Nein, nicht defekt.
* Vorwiderstand der roten LED zu groß dimensioniert? Nein, Tausch gegen 
820Ohm-Widerstand brachte keine Änderung.
* Pullup-Widerstand am Reset-Eingang defekt? Nein, nicht defekt.
* Pin des Controllers defekt? LED auch an anderen Pins des Ports 
erfolglos getestet.
* Verkabelung richtig? Verkabelung überprüft und keinen Fehler gefunden.

Den Controller habe ich neu gekauft und nur mit dem Programmer's Notepad 
programmiert, also keine Veränderung an Fuse-Bits oder Ähnlichem. Ich 
verstehe nicht, warum sich an der LED nichts tut. Habe ich einen Fehler 
gemacht oder kann ich noch etwas anderes ausprobieren um den Fehler zu 
finden? Hier noch mein Makefile (gekürzte Version!):
1
MCU = atmega16
2
F_CPU = 16000000
3
FORMAT = ihex
4
TARGET = test
5
OBJDIR = .
6
SRC = $(TARGET).c
7
CPPSRC = 
8
ASRC =
9
OPT = s
10
DEBUG = dwarf-2
11
EXTRAINCDIRS = 
12
CSTANDARD = -std=gnu99
13
CDEFS = -DF_CPU=$(F_CPU)UL
14
ADEFS = -DF_CPU=$(F_CPU)
15
CPPDEFS = -DF_CPU=$(F_CPU)UL
16
AVRDUDE_PROGRAMMER = ponyser
17
AVRDUDE_PORT = com3
18
AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex
19
AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)
20
AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)
21
AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)
22
AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)
23
program: $(TARGET).hex $(TARGET).eep $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)


Alex
Angehängte Dateien:
Gast #2265334
Lesenswert?

Hallo!


Bin wie gesagt total aus der Übung, darum vielen Dank für die schnelle 
Hilfe! Habe mir hier (http://www.mikrocontroller.net/articles/AVR_Fuses) 
das mit den Fuse-Bits noch mal angeschaut und mit dem online Burn-O-Mat 
(http://avr8-burn-o-mat.aaabbb.de/avr8_burn_o_mat_avrdude_gui_online.html) 
und Engbedded AVR Fuse (http://www.engbedded.com/fusecalc/) 
herausgefunden das ich dem avrdude folgende Option mitgeben muss:
1
-U hfuse:w:0xD9:m
Stimmt das so?


Alex
#2265346
Lesenswert?

Alex schrieb:
> Hallo!
>
>
> Bin wie gesagt total aus der Übung, darum vielen Dank für die schnelle
> Hilfe! Habe mir hier (http://www.mikrocontroller.net/articles/AVR_Fuses)
> das mit den Fuse-Bits noch mal angeschaut und mit dem online Burn-O-Mat
> (http://avr8-burn-o-mat.aaabbb.de/avr8_burn_o_mat_avrdude_gui_online.html)
> und Engbedded AVR Fuse (http://www.engbedded.com/fusecalc/)
> herausgefunden das ich dem avrdude folgende Option mitgeben muss:
>
1
> -U hfuse:w:0xD9:m
2
>
> Stimmt das so?

LIes die momentanen Fuse BIts vom Prozessor aus, gib das in einen 
Fuse-Calculator ein. Dort drehst du dann die JTAGEN Fuse um und lässt 
dir vom Fuse-Calculator das neue Steuerbyte geben.

Aber solange du ausser Übung bist, lies um Himmels willen die Fuse vom 
Prozessor aus!

Wenn irgendwie geht, nimm ein Tool, bei dem du nicht selber die Bytes 
angeben musst, sondern eines das dir das alles abnimmt. Du setzt nur 
noch die Häkchen. Aber auch dort: vorher auslesen!

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren