Forum: Compiler & IDEs Interrupt löst nicht aus


von Daniel H. (Gast)


Angehängte Dateien:

Lesenswert?

Ich sitze mal wieder vor dem Code und es funzt einfach nicht. Hab jetzt
auf die neue WinAvr version umgestellt und schon gehen meine ganzen
Interrupts nicht mehr. Hab das Prog mal als anhang drangehängt. Ich
denke ich hab alles gemacht hab mir auch das Tutorial durchgelesen.

Hardware seitig hab ich einfach den ICP pin an ein stück draht gehängt
und kann so 5v drauf geben. Mir Signal hat das alles geklappt aber
nicht mit ISR. Vielleicht kann ja mal jemand drüber gucken. Danke schon
mal im vorraus.

MFG
Daniel

von Qwerty (Gast)


Lesenswert?

Probier mal

volatile unsigned long int temp;

Es kann sein, dass der Compiler in der for-Schleife "temp" nur einmal
liest, da er der Meinung ist, dass es sich in der Schleife nicht
verändern kann (es wird ja auch "von außen" verändert). Siehe auch
http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Datenaustausch_mit_Interrupt-Routinen
.

Außerdem würde ich einen 16-Bit-Typ nehmen, nicht "long" (32 Bit).
Oder du solltest statt itoa() die passende long-taugliche Funktion
nehmen, also ultoa(). itoa() ist übrigens für signed-Typen, bei
unsigned müsste es ohnehin utoa() sein.

von Daniel H. (Gast)


Lesenswert?

Hab jetzt mal die variable so umgebaut wie du es geschrieben hast aber
leider ohne erfolg. Selbst wenn ich ein einfachen Bit setze in der
Interrupt routine klkappt es nicht er springt nicht rein.

Noch jemand eine Idee?

von Dirk Broßwick (Gast)


Lesenswert?

hallo,

schreibe mal bitte welchen mC du benutzt. Oder benutzt du de falschen
interrupt-vector ? Und schreibe was du genau machen willst, zeit
messen, oder den timer starten mit ICP ?

von Daniel H. (Gast)


Lesenswert?

Hi Dirk

Ist ein Atmega 8L

Will die Zeit zwischen 2 impulsen messen (z.b. Drehzahl eines
Elektromotors oder Benzinmotors)

Der Teil zum diffrenz ermitteln ist noch nicht drin weil er noch
garnicht in die interrupt rutine rein geht.

Gute nacht noch.

von Qwerty (Gast)


Lesenswert?

Zum Eingrenzen des Fehlers: konfiguriere doch mal einen freien Pin auf
Ausgang und setz ihn vor dem sei() auf 0. In der ISR setzt du ihn auf
1. Dann kannst du schonmal sehen, ob die ISR vielleicht doch
angesprungen wird, aber die Auswertung bzw. Werteübernahme ins
Hauptprogramm so nicht passt.

von johnny.m (Gast)


Lesenswert?

Auch zum Eingrenzen des Fehlers:
Was genau verleitet Dich denn zu der Annahme, dass die ISR nicht
angesprungen wird? Wird ein falscher Wert oder gar kein Wert im Display
angezeigt?

von Daniel H. (Gast)


Lesenswert?

@qwerty werde ich gleich mal testen wenn ich zu hause bin.

@johnny

Hab ja alle Variblen verschiedene werte gegeben.

So hat Temp den Wert 50 time 10 und temp wird wärend des interrupts auf
100 geändert. Der Lcd funzt ich seh das was er anzeigen soll aber anhand
des wertes weiß ich wo es hängt (in etwa). momentan hat time den wert 50
also klappt die übergabe von temp zu time. Aber temp ändert sich nicht
also keine rückgabe vom interrupt.

von johnny.m (Gast)


Lesenswert?

> an ein stück draht gehängt und kann so 5v drauf geben.

Fiel mir grad so auf: Wie stellst Du Dir das vor? Du hast nirgends
einen Pin konfiguriert, d.h. an Deinem ICP ist undefiniertes Potenzial!
Du solltest den Pull-Up aktivieren und den Pin dann nicht auf 5V sondern
auf Masse ziehen, um ein Signal zu erzeugen.

von Daniel H. (Gast)


Lesenswert?

@Johnny

du glaubst es nicht. Ich könnte ................

Hab mal aus Spass ein anderen Mikro rein und schwups gings. Das Teil
ist im Arsch. Aber wie soll man auf sowas kommen. Gibts da ein
testgerät für? oder hat da schonmal jemand selber sowas gebaut?

Jetzt sitz ich schon 4 Tage an dem mist und der doofe Mikro ist kaputt
aber halt nicht komplet nur zum teil. Ausgänge schalten ging ja.

Wäre nett wenn mir jemand sagen könnte ob es sowas gibt oder ob jemand
sowas schon mal gebaut hat.

Man man man könnte mich grün und blau ärgern aber wo bleibt denn dann
der Spass.

Schöne Nacht noch und grüsse aus FFM
Daniel

von johnny.m (Gast)


Lesenswert?

> Das Teil ist im Arsch...

Da gehört es ja auch nicht hin! Frage mich, wie es da rein gekommen
ist... Außerdem pieksen die Pins dann immer so...

Nen Port zerschießen ist vergleichsweise leicht, v.a. dann, wenn man,
wie Du es anscheinend gemacht hast, mit nem Draht 5V einfach irgendwo
dranlegt ohne Widerstand dazwischen. Man lege niemals VCC direkt an
einen Portpin! Wenn der als Ausgang konfiguriert ist und der
Ausgangstreiber auf '0' steht, gibt das nen satten Kurzschluss.
Danach kannste den Pin vergessen...

von Dr.Sommer (Gast)


Lesenswert?

>> Das Teil ist im Arsch...
>
> Da gehört es ja auch nicht hin! Frage mich, wie es da rein
> gekommen ist...

Du glaubst nicht, was manche Leute für Neigungen haben ;-)

> Außerdem pieksen die Pins dann immer so...

Du hast also Erfahrung damit?

von johnny.m (Gast)


Lesenswert?

@Dr. Sommer:
Nein, ich habe keine Erfahrung damit, aber ich besitze hinreichend viel
Vorstellungsvermögen, um mir denken zu können, dass etwas, das in den
Finger piekst auch woanders pieksen könnte...

von Daniel H. (Gast)


Lesenswert?

@johnny

Da war ja ein 470 Ohm Wiederstand dazwischen. Was mich halt gewundert
hat war das der lcd immer heller geworden ist bei jedem mal wo ich ein
puls drauf gegeben hab.

Aber ein Test Gerät scheint es nicht zu geben.

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.