Hallo zusammen, nachdem jetzt der ADC tadellos funktioniert, möchte ich nun die "einfache" ADC-Wandlung in ein Interruptgesteuertes Ereignis umbauen. Funktioniert nur noch nicht so ganz. Es soll ein Lauflicht aus 4 LEDs werden, je nachdem ob das Poti auf 0 V oder auf 5 V ist, soll die Laufgeschwindigkeit schneller oder langsamer sein. Irgendwas stimmt aber mit meinem ISR-Abschnitt noch nicht. Oder liegt der Fehler woanders? Kann mal bitte jemand kurz drübersehen? Wenn ich es richtig deute, bleibt die Variable "result" ständig auf Null. Christian
Das geht nicht
1 | |
_delay_ms kann man nicht mit Variablen benutzen. D.h. man kann schon. Nur stimmen die Zeiten nicht
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
Lass das SREG in Ruhe. Das ist ein Register, das geht dich nichts an! cli brauchst du nicht innerhalb einer ISR. In einer iSR sind Interrupts automatisch aus.
Gast
#1965517
>_delay_ms(result);
Blödsinn Nummer 1:
_delay_ms(); arbeitet nur mit Konstanten Werten.
Für variable delays bau dir eine Routine ala:
void MyDelayMs(uint16_t delay)
{
while(delay--) _delay_ms(1);
}
Blödsinn Nummer 2:
cli(); in einem Interrupt macht keinen Sinn
ISR(ADC_vect)
{
// Ergebnis der Konvertierung auslesen
result = ADCW;
}
Ach wie schön klein ist diese Interruptroutine jetzt;)
Und funktioniert ohne das ganze Geraffel das von einem
unglaublichen Halbwissen zu stammen scheint.
holger, spar dir diese saublöde Anmache, bitte. Wenn du dich über "Geraffel" und "Halbwissen" beschwerst, dann macht vielleicht mal dieses Forum dicht, schließlich ist es dafür da, Fragen von Personen zu beantworten die sich nicht so gut auskennen (Ich). Da kann ich sonst auch genausogut meine Glaskugel zu Hause fragen, die gibt mir bestimmt keine so dummen Kommentare als Antwort. Falls jemand noch konstruktive Vorschläge hat, die mir wirklich weiterhelfen, ich bin ganz Ohr. Danke. Die besagten Vorschläge von vorhin brachten übrigens keine Besserung im Programmablauf. Trotzdem Danke. Christian
Gast
#1965557
Hi Vielleicht bin ich blind, aber ich sehe keine Zeile, in der du den ADC startest. MfG Spess
Hier:
1 | |
2 | |
und hier:
1 | |
2 | |
:) Oder? Geht doch so? Christian
Gast
#1965574
Hi
>Oder? Geht doch so?
Nein. Der Free Running Mode muss durch setzen von ADSC in ADCSRA
gestartet werden.
MfG Spess
Jawoll, perfekt, genau das wars. Danke Spess. Hab die Zeile noch hinzugefügt, jetzt gehts!
1 | |
2 | |
Gast
#1965634
@christian_w
>holger, spar dir diese saublöde Anmache, bitte.
Mach ich. Ich merk mir auch deinen Namen.
> Mach ich.
Danke :-)
Christian
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.