Frage zu AVR-ATmega8L, Lösung per Interrupts sinnvoll?

Im Unterforum Microcontroller - Beschreibung: Hardware - Software - Ideen - Projekte

Elektronik Forum Nicht eingeloggt       Einloggen       Registrieren




[Registrieren]      --     [FAQ]      --     [ Einen Link auf Ihrer Homepage zum Forum]      --     [ Themen kostenlos per RSS in ihre Homepage einbauen]      --     [Einloggen]

Suchen


Serverzeit: 02 10 2024  14:25:06      TV   VCR Aufnahme   TFT   CRT-Monitor   Netzteile   LED-FAQ   Osziloskop-Schirmbilder            


Elektronik- und Elektroforum Forum Index   >>   Microcontroller        Microcontroller : Hardware - Software - Ideen - Projekte


Autor
Frage zu AVR-ATmega8L, Lösung per Interrupts sinnvoll?

    







BID = 412891

BlackLight

Inventar

Beiträge: 5305
 

  


Hallo,
ich hab mich erst kurz in µC eingelesen und noch kaum einen Überblick.
(Blutiger Anfänger im µC-Befehlssatz trifft es besser. Elektronik ist kein Problem, mit Pseudo-Assembler durfe ich auch mal rumspielen und der Unterschied zwischen Input/Output, Analog/Digital und Port/Pin ist auch klar.)

Ich wollte folgende Kleinigkeit einen ATmega8L machen lassen und wäre hoch erfreut, wenn mich jemand in die richtige Richtung schubsen könnte:


IO:
2 Eingänge A&B (Digital und je 1 Bit; per CNY17-Optokoppler)
1 Ausgang Z (auch Digital, soll per Logik-Level MOSFET ein Reed-Relais dran.)

Logik:
Wenn sich am Eingang A der Pegel ändert (Wird relativ konstant mit 1 Hz und etwa 50:50 Duty-Zycle sein) soll ca 10 s lang die Impulse an A gezählt werden.
Nach den 10 s sollte abhängigt von der Anzahl der Wechsel und dem Pegel an Eingang B der Ausgang Z für ca 5 s aktiviert werden.


Falls jemanden an den Details interesiert ist, es soll eine PC-Fernbedienung werden.
An A kommt ein Handy, bzw. der Vibrationsmotor-Anschluss, an B per USB-5V der Status vom PC und das Reedrelais darf den Ein-/Ausschalttaster spielen.



Ist es sinnvoll den Großteil des Problems per Interrupts zu lösen?

Also Eingang A löst z.B. 'INT0' aus, zählt ein Register um eins höher und falls es 0 war wird noch ein Timer gestartet.
Zum Beispiel TIMER1 nehmen und per 'TIMER1 COMPA' die 10 s realisieren.
'TIMER1 COMPA' Schaut dann nach was in dem Register steht und was an Eingang B anliegt und spricht das Relais an.

Ein 'TIMER0 OVF'(Timer0 Überlauf) würde das Relais dann wieder abschalten, alternativ erledigt Eingang B per INT1 das Ausschalten.

---
Kann man es so realisieren , hat jemand Tipps oder eine einfachere Lösung?

BID = 412893

perl

Ehrenmitglied



Beiträge: 11110,1
Wohnort: Rheinbach

 

  

Das kann man ohne weiteres mit Interrupts machen, aber wenn du Anfänger bist, rate ich dir eher dazu, alle Interrupts abzuschalten und die Logik in eine Endlossschleife zu packen.

So wird es wahrscheinlich für dich übersichtlicher und Interrupts sind, da sie an unvorhersehbarer Stelle aufttreten, schwieriger zu debuggen.
Außerdem sind Interrupts empfindlich für kurze Störimpulse.


Da deine Timer ziemlich langsam sind, kannst du sie auch problemlos in Software realisieren.
Am einfachsten wird das, wenn du dafür sorgst, daß deine Hauptschleife eine feste Zeit, z.B. 5ms (aber 50..100ms sind der Aufgabenstellung vielleicht angemessener), für einen Durchlauf braucht.
Dazu kannst du z.B. am Ende der Hauptschleife warten, bis ein Hardwaretimer durch 0 geht.
Dann kannst du in der Software fast beliebig viele Abwärtszähler als Timer programmieren.




_________________
Haftungsausschluß:



Bei obigem Beitrag handelt es sich um meine private Meinung.



Rechtsansprüche dürfen aus deren Anwendung nicht abgeleitet werden.



Besonders VDE0100; VDE0550/0551; VDE0700; VDE0711; VDE0860 beachten !


[ Diese Nachricht wurde geändert von: perl am 10 Mär 2007 11:21 ]

BID = 413043

cholertinu

Inventar



Beiträge: 3755
Wohnort: CH

Für die ersten Gehversuche rate ich dir auch eher zu einer Lösung ohne Interrupts. Es ist einfacher, sich in ein neues Thema einzuarbeiten, wenn man nicht viele "Baustellen" gleichzeitig offen hat.

Interrupts sind wunderbare Hilfsmittel, wenn sie richtig eingesetzt werden, sind aber auch eine grosse Fehlerquelle, ganz besonders für Anfänger.

BID = 413099

BlackLight

Inventar

Beiträge: 5305

perl und cholertinu, vielen Dank für die Ratschläge.

Ihr lagt beide richtig, die Hauptschleife und ein Unterprogramm per ASM haben mich die letzten paar Stunden genug beschäftigt, bzw. eher die passenden Befehle und die Fehler zu finden.
Aber so langsam wird es was.

Falls jemand Interesse an dem fertigen Programm hat, das in 'myAVR Workpad SE' geschrieben ist, kann ich es ja posten.

BID = 413575

cholertinu

Inventar



Beiträge: 3755
Wohnort: CH


Zitat :
BlackLight hat am 11 Mär 2007 00:36 geschrieben :

Falls jemand Interesse an dem fertigen Programm hat, das in 'myAVR Workpad SE' geschrieben ist, kann ich es ja posten.

Nur zu, evtl. bekommst du noch ein paar Tipps dazu.


Zurück zur Seite 1 im Unterforum          Vorheriges Thema Nächstes Thema 


Zum Ersatzteileshop


Bezeichnungen von Produkten, Abbildungen und Logos , die in diesem Forum oder im Shop verwendet werden, sind Eigentum des entsprechenden Herstellers oder Besitzers. Diese dienen lediglich zur Identifikation!
Impressum       Datenschutz       Copyright © Baldur Brock Fernsehtechnik und Versand Ersatzteile in Heilbronn Deutschland       

gerechnet auf die letzten 30 Tage haben wir 19 Beiträge im Durchschnitt pro Tag       heute wurden bisher 11 Beiträge verfasst
© x sparkkelsputz        Besucher : 182112029   Heute : 3101    Gestern : 5426    Online : 476        2.10.2024    14:25
1 Besucher in den letzten 60 Sekunden        alle 60.00 Sekunden ein neuer Besucher ---- logout ----viewtopic ---- logout ----
xcvb ycvb
0.0365238189697