Forum: Mikrocontroller und Digitale Elektronik Probleme beim Blinklicht


von Anfänger (Gast)


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.

von Wolfgang (Gast)


Lesenswert?

Anfänger schrieb:
> Falls mir jemand von Euch da helfen könnte, fänd ich das klasse.

Das wird wohl an der Verdrahtung der LEDs liegen. Guck mal in den 
Schaltplan.

von Ingo (Gast)


Lesenswert?

Wie sind deine LEDs an den Controller angeschlossen?


Ingo

von Anfänger (Gast)


Lesenswert?

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.

von Anfänger (Gast)


Lesenswert?

Seltsamerweise - wenn ich alle an und ausschalte

while () {
PORTC = 0xFF
delay...
PORTC = 0x00
delay...

}

dann gehen alle an und aus.

von Karl H. (kbuchegg)


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

von Anfänger (Gast)


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

von Anfänger (Gast)


Lesenswert?

Karl Heinz Buchegger schrieb:
> Also einfach deine Denkweise umdrehen.

ja toll :-)

also 1 = aus
     0 = an

Vielen Dank für die schnelle Antwort und schon klappts auch mit dem 
Blinken :-)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.