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