Forum: Mikrocontroller und Digitale Elektronik AVR-C Programm Ledansteuerung


von O. A. (sokrates1989)


Lesenswert?

Hallo geschätze Forumsmitglieder,

ich brauche Hilfe mit meinem Programm...Es soll auf einem MK2 Board mit 
Atmega8 laufen.

Ich wollte mit 2 Potentiometern Aus und Notaus realisieren.
Wenn diese beiden nicht betätigt sind, sollen die Leds leuchten.
Das funktioniert auch. wenn ich einen der Potis schalte, gehen die Leds 
jedoch nicht aus. Erst über einen Reset..

D.h. es findet keine permanente Abfrage der Zustände von Pinb.1 und 
Pinb.2 statt.

Was muss ich tun damit die Leds ausgehen wenn ich einer der Potis eine 
"1" hat.

Ich danke vielmals. (Und meine C-Kenntnisse sind eher schlecht...)



Der Code:
1
//------------------------------
2
3
#define F_CPU 3686400
4
#include <avr/io.h>
5
6
7
8
9
uint8_t Ausgang_schalten = 0;
10
11
12
13
void AUS_pruefen (void)
14
{
15
if ( (!(PINB & 0x02))&&(!(PINB & 0x04)) )  //PinB.1 Aus und PinB.2 NotAus (beide Poti), müssen über "&&" verknüpft da in Reihe
16
Ausgang_schalten=1;
17
else
18
Ausgang_schalten=0;
19
}
20
21
22
void Ausgabe (void)
23
{
24
AUS_pruefen();
25
if (Ausgang_schalten==1)          //Bedingung prüfen für Aus/NotAus, wenn "1" Aus/NotAus nicht gedrückt
26
PORTC = (1<<0)|(1<<1);            // C.0 und C.1 ansteuern für Ausgabe
27
else
28
PORTC = 0;
29
}
30
31
32
33
int main()
34
{ 
35
36
DDRC  = 0xFF;          // Ausgänge
37
DDRB  = 0x00;         // Eingänge
38
//PORTB = 0b00000001;    // Pull up für B.0  (Ein Taster noch nicht verwendet)
39
40
while (1)         
41
{
42
43
Ausgabe();
44
45
return 0;
46
}
47
}

von Proddl (Gast)


Lesenswert?

Du springst aus Deiner while(1) Schleife mit return raus. Mach das 
Return hinter die While Schleife.

Und: In Ausgabe() ein Aufruf von AUS_pruefen() ... Leg den Aufruf von 
AUS_pruefen lieber mit in die while Schleife. Und benenn den gleich 
dabei um zu Eingabe. Denn das ist es  ja schließlich.

von Dietrich L. (dietrichl)


Lesenswert?

O. A. schrieb:
> while (1)
> {
>
> Ausgabe();
>
> return 0;
> }

Du verlässt die Schleife mit "return 0;"
Die Klammer } muss vor das "return 0;".

Edit: zu spät :-((

: Bearbeitet durch User
von Eric B. (beric)


Lesenswert?

O. A. schrieb:
> (Und meine C-Kenntnisse sind eher schlecht...)

Dann lies mal ein C-Buch, oder mach einen Online-Kurs.

O. A. schrieb:
> int main()
> {
>    ...
>   while (1)
>   {
>     Ausgabe();
>
>     return 0;

Hier steigt dein main() aus, heisst: dein uC wird sich resetten und 
wieder von vorne anfangen.

von O. A. (sokrates1989)


Lesenswert?

Dietrich L. schrieb:
> O. A. schrieb:
>> while (1)
>> {
>>
>> Ausgabe();
>>
>> return 0;
>> }
>
> Du verlässt die Schleife mit "return 0;"
> Die Klammer } muss vor das "return 0;".
>
> Edit: zu spät :-((

Es geht nun.

Vielen vielen Dank.

von Stefan F. (Gast)


Lesenswert?

Benutzt du wirklich Potis 
(http://i.ebayimg.com/00/s/MTYwMFgxNjAw/z/N98AAOSwiDFYMHTx/$_57.JPG?set_id=8800005007) 
als Schalter an digitalen Eingängen? Warum das denn?

von O. A. (sokrates1989)


Angehängte Dateien:

Lesenswert?

Stefan U. schrieb:
> Benutzt du wirklich Potis
> 
(http://i.ebayimg.com/00/s/MTYwMFgxNjAw/z/N98AAOSwiDFYMHTx/$_57.JPG?set_id=8800005007)
> als Schalter an digitalen Eingängen? Warum das denn?

ich nutze das Board im Anhang.

Und ich spiele nur rum, um zu sehen ob das was ich vorhabe am Board 
funktioniert.

Wir haben in der Schule eine Aufgabe, wo ich einen
Eintaster
Austaster
Notaus
und "Sensor-taster"

benötige.

und da das board nur 2 Taster hat verwende ich die Potis...wo ist das 
Problem?

von Stefan F. (Gast)


Lesenswert?

Kein Problem, in diesem Fall. Ich dachte schon, du hättest den Sinn von 
Potis nicht verstanden oder einfach das Falsche Wort anstelle von 
"Taster" verwednet.

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.