Forum: Mikrocontroller und Digitale Elektronik Attiny 13 als Schwellwertschalter


von Raik C. (raik_c)


Angehängte Dateien:

Lesenswert?

moin,

folgendes Szenario,

mit oben aufgeführtem Code versuche ich einen Strom zu messen und bei 
Unterschreitung, in angemessener Zeit, eine LED_Gruen am Ausgang zu 
schalten.

Leider funktioniert der Code nur einmal. Wenn ich nach einmaligem 
Durchlauf wieder den Strom erhöhe müsste wieder die LED_Rot wieder 
leuchten.

1) Warum funktioniert die Schleife nur einmal?
2) Wie kann ich das vielleicht anders realisieren?

Im Versuchsaufbau habe ich ein Potentiometer am ADC Eingang.

Der Strom wird gemessen mit einem AC 1020 und wird anschliessend 
gleichgerichtet.

Bitte mit Nachsicht behandeln, ist mein erstes Projekt mit AVR.

Danke Raik

von Karl H. (kbuchegg)


Lesenswert?

Dein Code ist ... massig komplizierter als notwendig für die 
beschriebene Aufgabenstellung. Das jetzt zu analysieren bei welchem 
while welches Flag falsch steht etc. ist viel zu umständlich.

Schreib das ganze noch mal. Aber schreib es diesmal deutlich einfacher.
Du brauchst nur 1 Endlos-Schleife und das ist die Hauptschleife in 
main() (bei dir for(;;)). Alle anderen Schleifen sind überflüssig und 
verwirren nur.

von Raik C. (raik_c)


Lesenswert?

moin,

habe jetzt die Messschleife wie folgt geändert
1
if (ADC_Read(1) > Schwelle)
2
    {
3
        ROT_AN ();
4
      s = 0;
5
    }
6
    else if (s > 15)
7
           {
8
           GRUEN_AN();
9
        s = 0;
10
       }

und es läuft.
Danke für den Denkanstoss Raik

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.