Guten Abend,
ich benötige Hilfe bei einem kleinen Hard/Software Problem.
Ich habe einen Atmega 128 und habe ein LC-Display an den µC
angeschlossen.
Verbindung und Programmierung des Displays funktioniert tadelos.
Zusätzlich habe ich drei Kippschalter mit jeweils 3 Pins.
Jeder Kippschalter kann folgende Zustände annehmen High oder Low.
Für jeden Kippschalter habe ich zwei LEDs (grün & rot).
Der mittlere Pin des jeweiligen Kippschalters ist mit einem Eingang des
µC verbunden. Der Zustand der drei Kippschalter wird mit Hilfe der LEDs
angezeigt. Entweder schalte ich die Masse einer LED oder VCC (5Volt).
LED - Vorwiderstand = 220Ohm.
Die Zustände der Kippschalter lasse ich mir auf dem Display anzeigen mit
1/0
Es funktioniert alles sehr gut.
Leider habe ein Problem mit den LEDs. Die LEDs flackern.
Folgender C-Code verwende ich, um den Zustand der Schalter zu prüfen und
entsprechende Befehle und Ausgänge zu setzen:
1 | DDRE=0xff;
|
2 | DDRC=0x00;
|
3 |
|
4 | while(1) {
|
5 |
|
6 | ///////////// Motor Enable /////////////////////////
|
7 | if(PINC & (1<<PINC0))
|
8 | {
|
9 | lcd_setcursor( 0, 1 );
|
10 | lcd_string("Motor : 1");
|
11 |
|
12 | PORTE = (1 << PE3 );
|
13 | PORTE &= ~(1 << PE4);
|
14 |
|
15 | }
|
16 | else
|
17 | {
|
18 |
|
19 | lcd_setcursor( 0, 1 );
|
20 | lcd_string("Motor : 0");
|
21 |
|
22 | PORTE = (1 << PE4 );
|
23 | PORTE &= ~(1 << PE3);
|
24 | }
|
25 | ///////////////////////////////////////////////////////
|
26 | ///////////// Half/Full Step /////////////////////////
|
27 | if(PINC & (1<<PINC1))
|
28 | {
|
29 |
|
30 | lcd_setcursor( 0, 2 );
|
31 | lcd_string("HALF/FULL: 1");
|
32 | PORTE = (1 << PE2 );
|
33 | PORTE &= ~(1 << PE5);
|
34 |
|
35 |
|
36 | }
|
37 | else
|
38 | {
|
39 | lcd_setcursor( 0, 2 );
|
40 | lcd_string("HALF/FULL: 0");
|
41 | PORTE = (1 << PE5 );
|
42 | PORTE &= ~(1 << PE2);
|
43 |
|
44 | }
|
45 |
|
46 | //////////////////////////////////////////////
|
47 | ///////////// CW/CCW /////////////////////////
|
48 |
|
49 | if(PINC & (1<<PINC2))
|
50 | {
|
51 | lcd_setcursor( 0, 3 );
|
52 | lcd_string("CW/CCW : 1");
|
53 |
|
54 | PORTE = (1 << PE1 );
|
55 | PORTE &= ~(1 << PE6);
|
56 | }
|
57 | else
|
58 | {
|
59 | lcd_setcursor( 0, 3 );
|
60 | lcd_string("CW/CCW : 0");
|
61 |
|
62 | PORTE = (1 << PE6 );
|
63 | PORTE &= ~(1 << PE1);
|
64 | }
|
65 | //////////////////////////////////////////////
|
Sobald ich alle Kippschalter prüfe per Abfrage, flackern die LEDs.
Die Schaltfunktion der LEDs und die Ausgabe auf dem Display funktioniert
einwandfrei jedoch verstehe ich nicht warum die LEDs flackern?
Sobald ich nur einen einzigen Kippschalter abfrage und den Code für die
anderen Kippschalter auskommentiere(/* */) leuchten die beiden LEDs des
Kippschalter ohne zu flackern. Sobald ich einen weiteren Kippschalter
prüfen will bekomme ich das flackern.
Ich hoffe jemand kann mir helfen.