Hallo Läute,
ich habe mir einen ATMega128 vom Chinesen meines Vertrauens geholt und
habe versucht in Betrieb zu nehmen. Den bekannten Anfängerfehler mit
MOSI/MISO auf dem PortE habe ich rel. schnell gefunden und behoben.
Jetzt zeigt der µC komisches verhalten bei Unterprogrammen, nämlich
scheint die Rückkehradresse immer die von "main" zu sein. D.h. mein
Programm läuft durch bis zum ersten Aufruf eines Unterprogramms und dann
fängt es von vorne an…
Hier ist das Programm:
1 |
|
2 | #ifndef F_CPU
|
3 | #define F_CPU 1000000
|
4 | #endif
|
5 |
|
6 | #include <avr/io.h>
|
7 | #include <util/delay.h>
|
8 | //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
9 | uint8_t tuMaBlinken(uint8_t Anzahl){
|
10 | DDRD = 0b00010000; // PIND4 als Output
|
11 | for(uint8_t i = 0; i < Anzahl; i++){
|
12 | PORTD = 0b00010000;// LED an
|
13 | _delay_ms(500);
|
14 | PORTD = 0b00000000;// LED aus
|
15 | _delay_ms(500);
|
16 | }
|
17 | _delay_ms(500);
|
18 | PORTD = 0b00010000; //LED kurz blinken lassen um das
|
19 | _delay_ms(100); // Ende des UProgramms zu markieren
|
20 | PORTD = 0b00000000;
|
21 | _delay_ms(500);
|
22 | return 0;
|
23 | }
|
24 | //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
25 | int main(void)
|
26 | {
|
27 | // 5s warte...
|
28 | _delay_ms(500);
|
29 | _delay_ms(500);
|
30 |
|
31 | _delay_ms(500);
|
32 | _delay_ms(500);
|
33 |
|
34 | _delay_ms(500);
|
35 | _delay_ms(500);
|
36 |
|
37 | _delay_ms(500);
|
38 | _delay_ms(500);
|
39 |
|
40 | _delay_ms(500);
|
41 | _delay_ms(500);
|
42 |
|
43 | //2x blinken
|
44 | tuMaBlinken(2);
|
45 |
|
46 | while(1)
|
47 | {
|
48 | //nichts tun
|
49 | _delay_ms(250);
|
50 | }
|
51 | }
|
Ich würde erwarten, dass die LED 2Mal blinkt und dann passiert nichts
mehr, tatsächlich blinkt die LED 2x (+ ein kurzes), wartet ca. 5s blinkt
2x, wartet ca.5s usw. Und nun die Frage: habe ich etwas übersehen und
mache wieder einen Anfängerfehler, oder ist der µC defekt? Hatte schon
jemand das Problem?
Gruß