Probleme beim Blinklicht

Gast #2883594
Lesenswert?

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.
#2883637
Lesenswert?

Anfänger schrieb:
> Ingo schrieb:
>> Wie sind deine LEDs an den Controller angeschlossen?
>
> an PORTCx kommen Widerstände 1kOhm und dann die LEDm due LED an Vcc, wie
> in dem Tutorial beschrieben. Ich habe auch mal Anode und Kathode beim
> Anschließen vertauscht, aber dann bleibt die LED ganz aus.


Und das bedeutet dann, dass jede LED, deren Ausgangspin auf 0 ist 
leuchtet.
Also einfach deine Denkweise umdrehen.
0 ... LED leuchtet
1 ... LED leuchtet nicht
Gast #2883641
Lesenswert?

Und wandele ich das Programm in der Schleife nochmal ab:
1
  while(1)
2
  {
3
    PORTC = 0x01;       // PINC1 blinkt im Sekundentakt!
4
    _delay_ms(1000);
5
    PORTC = 0x00;
6
    _delay_ms(1000);
7
    PORTC = 0x02;
8
    _delay_ms(1000);
9
    PORTC = 0x00;
10
  
11
  }

dann passiert folgendes:

Lampe an PINC1 an
Lampe an PINC0 an
Lampe an PINC1 aus
Licht wechselt von Lampe an PINC1 an PINC0

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