mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Problem mit AVR OCA Interrupt


Autor: Manfred Schön (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ATMEGA88  programmiert on BASCOM  ( mit Inline Assembler )

Ich verwende den Timer0 als einstellbaren Taktgenerator.
Diesen Takt führe ich Timer1 zu.

Timer1 verwende ich zum messen der Zeit zwischen zwei Digitalimpulsen.
Wenn der erste Impuls auftritt, wird Timer 1 auf Null gesetzt und der 
Takt freigeben
Wenn nun der zweite Impuls auftritt, wird der Timer gestoppt und der 
Zählerwert ausgelesen.
Ich schreibe nun den Zählerwert in das OCR1A-Register, setze den Timer1 
auf 0 und geben dan Takt wieder frei.
Gleichzeitig sende ich über die serielle schnittstelle diverse Daten zu 
einem PC.
Wenn nun der Zählerstand den Wert des OCR1A-Registers erreicht, wird ein 
Interrupt ausgelöst der einen Digitalausgang schaltet.

Dies funktionert am Schreibtisch auch einwandfrei.
Wenn ich das ganze nun aber Vorort ausprobiere wird der Interrupt nicht 
ausgelöst, obwohl das restliche Programm einwandfrei funktionert.

Da das restliche Programm einwandfrei funktionert, kann ich feststellen, 
dass der Timer1 beim ausmessen des Zeitabstandes der beiden 
Digitalsignale einwanfrei funktionert.
Es wird nur der Interrupt nicht aufgerufen.
Der uC hängt sich nicht auf und führt auch keinen RESET durch. Dies 
könnte ich feststellen.
Ich habe die BrownOut-detection mit 4.3V aktiviert.


Kann es sein, dass der uC beim Einschalten nicht ordentlich initialisert 
wird ?

Bin nun echt schon am verweifeln.
Könnt Ihr mir helfen ?
Würde mir die entscheidente Hilfe auch was kosten lassen.

hmg
Mandi

Autor: michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo manfred.

natürlich kann es es sein, dass der uC beim einschalten nicht ordentlich 
initialisert wird.
du könntest z.b. vergessen haben, die timer-interrupts zu enablen 
(register TIMSK1).
mit sicherheit kann ich das aber erst sagen, wenn ich den quellcode 
gesehen hab ;-)

gruß

michael

Autor: Manfred Schön (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Michael

>>du könntest z.b. vergessen haben, die timer-interrupts zu enablen
>>(register TIMSK1).

Am Schreibtisch im Büro funktioniert ja alles. Also sollte ich nichts 
vergessen haben ?

Ich denke eher dass der uC keinen ordentlichen Reset beim PowerUp macht 
und daher stellenweise tut was er will ?

Beiliegend der Code. Wäre echt toll wenn Du mal drauf schaun könntest.
Ab Zeile 331 befindet sich der Bereich wo das Problem auftritt.


Vielen Dank im voraus.

hmg
Mandi

Autor: Manfred Schön (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

Niemand da der mir weiterhelfen kann ?   :-(

hmg
Mandi

Autor: Andreas K. (a-k)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Manfred Schön wrote:

> ATMEGA88  programmiert on BASCOM  ( mit Inline Assembler )

Nicht wundern, wenn wenig Antworten kommen. "BASCOM" klingt für viele 
hier wie "Zahnarzt" ;-).

> Ich verwende den Timer0 als einstellbaren Taktgenerator.
> Diesen Takt führe ich Timer1 zu.

Da fängt's schon an wunderlich zu werden. Wozu dieses Konstrukt?

> Timer1 verwende ich zum messen der Zeit zwischen zwei Digitalimpulsen.

Normalerweise verwendet man für sowas Timer Capture.

> Kann es sein, dass der uC beim Einschalten nicht ordentlich initialisert
> wird ?

Sowas kann man durchaus erreichen, beispielsweise durch falsche 
Startup-Time bei Quarz, schnarchlangsam ansteigende Spannungsversorgung.

Üblicherweise sind solche Hardwareprobleme aber in Wahrheit 
Softwareprobleme.

Autor: Manfred Schön (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Andreas Kaiser

>Nicht wundern, wenn wenig Antworten kommen. "BASCOM" klingt für viele
>hier wie "Zahnarzt" ;-).

Hab mich auch schon über Bascom geärgert. Aber für Kleinigkeiten ist es 
einge güntige schnell zu erlernende Möglichkeit....

>> Ich verwende den Timer0 als einstellbaren Taktgenerator.
>> Diesen Takt führe ich Timer1 zu.
> Da fängt's schon an wunderlich zu werden. Wozu dieses Konstrukt?

Der Zeitintervall kann sehr stark variieren.
Muss bei kurzen Intervallen eine hohe Genauigkeit erreichen.
Bei langen Intervallen ist die Genauigkeit nicht so wichtig. Es würde 
aber bei hoher Taktrate der Zähler überlaufen.

>> Timer1 verwende ich zum messen der Zeit zwischen zwei Digitalimpulsen.
>Normalerweise verwendet man für sowas Timer Capture.

Wenn immer so einfach wäre. würde wohl auch mit Timer Capture gehen.
Wäre aber eben nicht so einfach.... Habe mich daher für die 
Softwareversion entschieden.

>> Kann es sein, dass der uC beim Einschalten nicht ordentlich initialisert
>> wird ?
>Sowas kann man durchaus erreichen, beispielsweise durch falsche
>Startup-Time bei Quarz, schnarchlangsam ansteigende Spannungsversorgung.

>Üblicherweise sind solche Hardwareprobleme aber in Wahrheit
>Softwareprobleme.

Auf ein Softwareproblem hab' ich auch erst getippt, da ich noch nicht 
soviel Erfahrung mit dem AVR habe. Da es aber am Schreibtisch 
einwandfrei läuft, kann's das wohl nicht sein.

hmg
Mandi

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.