Hallo!
Ich habe Probleme beim Erzeugen eines Blinklichts. Der verwendete uC ist
der Atmega88.
Hier der Quellcode:
1 | #include <avr/io.h>
|
2 | #include <util/delay.h>
|
3 |
|
4 | int main(void)
|
5 | {
|
6 | DDRC = 0xFF; // alle Pins sind Ausgänge!
|
7 | PORTC = 0xFF; // alle Pins einmal alle an!
|
8 | _delay_ms(2000);
|
9 | PORTC = 0x00; // alle Pins aus!
|
10 |
|
11 | while(1)
|
12 | {
|
13 | PORTC = 0x02; // PINC1 blinkt im Sekundentakt!
|
14 | _delay_ms(1000);
|
15 | PORTC = 0x00;
|
16 | _delay_ms(1000);
|
17 |
|
18 | }
|
19 | }
|
Zuerst lege ich fest - PORTC = Ausgang ---> DDRC = 0xFF;
Alle LEDs an PORTC sollen einmal aufleuchten für 2 Sekunden ---> PORTC =
0xFF;
alle PINS aus ---> PORTC = 0x00;
Die LED an PINC1 soll aufleuchten - PORTC = 0x02;
nach der Pause wieder ausgehen ---> PORTC = 0x00;
Folgendes Problem tritt auf - alle Lampen bleiben dauerhaft an. Nur die
eine LED, die ich dierekt ansteuere geht an und aus, also in diesem Fall
die zweite LED an PORTC1. Ich kapiere nicht, warum die anderen Lampen
alle brennen, wenn ich schreibe PORTC = 0x00; dann sage ich alle Ports
sind LOW und dennoch sind die übrigen PINS an PORTC ausser dem einen,
der zuvor an sein sollte, auch noch auf HIG.
Falls mir jemand von Euch da helfen könnte, fänd ich das klasse.