Mehrere Interrupts in 'C' mit WINAVR bearbeiten

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: 30 11 2024  07:35:51      TV   VCR Aufnahme   TFT   CRT-Monitor   Netzteile   LED-FAQ   Osziloskop-Schirmbilder            


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

Autor
Mehrere Interrupts in 'C' mit WINAVR bearbeiten

    







BID = 173649

hajos118

Schreibmaschine



Beiträge: 2453
Wohnort: Untermaiselstein
 

  


Hi,
inzwischen hab' ich schon einige einfache Problemchen mit dem ATtiny2313 in 'C' gelöst.
Jetzt stehe ich aber vor folgendem (vereinfachten) Problem:
1) Lichtschranke soll eine Stopuhr steuern.
2) LCD (4*16 / 4*20) soll diverse Zeiten anzeigen

Punkt 2 ist schon fertig, für Punkt 1 benötige ich jedoch 2 Interrupts:
1. Timer (läuft schon mit 1/100 sec Auflösung)
2. Interrupt bei Änderung des Signalpegels an einem Eingang.

Konkrete Fragestellung:
in meiner Interrupt - Routine des Timers (s.u.)
sei(); // Globalen Interrupt freigeben
TIMSK =_BV(OCIE1A); // Vergleichswertüberlauf Interrupt einschalten
TCCR1B = _BV(CS10); // Vorteiler = 1
OCR1A = tim_cnt; // Zeit einschreiben

wird mittels "sei();" der Irq global freigegeben.

Wie muss dan meine Routine für den Pin-change Interrupt (generell) aussehen?

Mein Ansatz sieht so aus, aber klappt das?
SIGNAL(SIG_PCINT)
{
// Daten einlesen INPMASK = 0x10 für PORTB.4
sigi = inp(PINB) & INPMASK;
if (sigi != INPMASK)
{
// fallende Flanke
}
else
{
// steigende Flanke
}
}


... und wie sieht die notwendige Initialisierung dann aus?

Kann mir jemand helfen?
Danke schon mal im vorraus!
Hajo

BID = 174031

hajos118

Schreibmaschine



Beiträge: 2453
Wohnort: Untermaiselstein

 

  

Problem gelöst!
Meine Geberschaltung hatte eine Macke ... deshalb nur unregelmäßige Interrupts und meine Fehlinterpretation (Fehler im Programm)

Initialisierung für Interrupt bei Pegeländerung am Pin:
outp(PINCHANGEIRQ,GIMSK); // Pin change IRQ
outp(INPMASK,PCMSK); // welcher Pin ist gemeint
wobei "PINCHANGEIRQ" und "INPMASK" als 0x20 definiert sind.

[edit: Rechtschreibfehler]

[ Diese Nachricht wurde geändert von: hajos118 am 15 Mär 2005  8:49 ]


Zurück zur Seite 0 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 20 Beiträge im Durchschnitt pro Tag       heute wurden bisher 3 Beiträge verfasst
© x sparkkelsputz        Besucher : 182426869   Heute : 828    Gestern : 5094    Online : 398        30.11.2024    7:35
2 Besucher in den letzten 60 Sekunden        alle 30.00 Sekunden ein neuer Besucher ---- logout ----viewtopic ---- logout ----
xcvb ycvb
0.0422759056091