Hallo,
nachdem ich mich gestern mit meiner Frage zur Einbindung von
Assembler-Dateien blamiert habe (bin ich von geheilt), habe ich mir doch
das gute alte STK500 gegriffen und mit WinAVR 20100110 sowie Atmel
Studio 4.18 wieder große Schritte gemacht. Also: Blinky ist Freund ...
Das die LED's logisch "invertiert" angesteuert werden, wußte ich noch.
Das Problem mit PORTA auf meinem ATMega88 ließ sich dank der
Compilermeldung auch flugs lösen (kennt er nicht weil gibt's nicht...).
Für das Problem PORTB6 und PORTB7 habe ich dann schon eine gute Stunde
gebraucht ... Schön mit Durchklingeln, messen direkt am Pin, internen
Oszillator auswählen usw. Jetzt weiß ich auch, warum die meisten
LCD-Codes mit PORTD arbeiten. Ohne STK500 hätte es gleich geklappt, aber
wozu hat man es denn...
Nun habe ich aber ein Brett vor dem Kopf:
1 | #include <avr/io.h>
|
2 | #include <util/delay.h>
|
3 |
|
4 | int main (void)
|
5 | {
|
6 | uint16_t i;
|
7 | DDRD = 0xFF; // PORTD Ausgang
|
8 | while(1)
|
9 | {
|
10 | PORTD = 0xFF; // PORTD komplett "1" => LED's aus
|
11 | for (i=0; i<1000; i++) // Sekunde warten
|
12 | {
|
13 | _delay_ms(1);
|
14 | }
|
15 | PORTD = 0x00; // PORTD komplett "0" => LED's an
|
16 | }
|
17 | return 0;
|
18 | }
|
Da blinkt nix.
1 | #include <avr/io.h>
|
2 | #include <util/delay.h>
|
3 |
|
4 | int main (void)
|
5 | {
|
6 | uint16_t i;
|
7 | DDRD = 0xFF;
|
8 | while(1)
|
9 | {
|
10 | PORTD ^= 0xFF;
|
11 | for (i=0; i<1000; i++)
|
12 | {
|
13 | _delay_ms(1);
|
14 | }
|
15 | }
|
16 | return 0;
|
17 | }
|
Da blinkt es artig.
Warum nicht beim ersten Code???