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 ]
|