PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Interrupt ! ich bitte um Hilfe



tms2002
23.04.2005, 20:03
Hallo an alle,

Ich habe mir einen IR Sensor mit dem IS471 gebastelt.

Ich möchte nun sobalt der Sensor etwas erkennt, ihn ausweichen lassen.
Geht sowas über Schleifen oder Interrupts? -der Atmega16 hat ja nur 2Interrputs

Weil sonst müsste man ja z.b. folgendes machen:
4:
portd.1 = 1
waitms 1
if pinb.1 = 0 Then
portd.1 = 0
else goto 4
end if


Hat jemand einen Gedankestoß oder eine Lösung für dieses Problem?

Hab schon eine Stunde mit Suchen verbracht, aber weiter bin ich nun auch nicht :(

Ich würde mich über jegliche Hilfe freuen!


Viele Grüße

FLorian

Werner_Just
23.04.2005, 21:20
Hallo,

wie kommst Du darauf, daß der M16 nur 2 Interrupts hat?
Ich hab die Liste gerad nicht parat, die Anzahl bewegt sich aber eher im der Größenordnung um die 20.

> Hab schon eine Stunde mit Suchen verbracht, aber weiter bin ich nun auch nicht

vielleicht würde es helfen, wenn Du das was die BASCOM-Help zu einem Suchbegriff anbietet, liest?



BASCOM HELP, Suchbegriff "Interrupt", Thema "On Interrupt"
Enable Interrupts
Enable Int0 'enable the interrupt
On Int0 Label2 Nosave 'jump to label2 on INT0
Do 'endless loop
nop
Loop
End

Label2:
Dim A As Byte
If A > 1 Then
Return 'generates a RET because it is inside a condition
End If
Return 'generates a RETI because it is the first RETURN
Return 'generates a RET because it is the second RETURN

Zur Funktion der einzelnen Interrupts -> M16 Datenblatt

Ciao,
Werner

Baui
23.04.2005, 21:39
Hallo tms2002,
also wenn ich dich jetzt richtig verstanden habe, dann meinst du, dass der Mega16 lediglich zwei Ports hat die einen externen interrupt bereitstellen. ja das stimmt. sollte aber auch im normalfall immer reichen.

zu deinem Problem mit dem IS471F:
ja du musst deine Ports( an denen die Sensoren hängen) immer wieder abfragen (pollen) und bei Pegeländerung dann darauf entsprechend reagieren (andere Ports schalten o.ä.)

Gruß
Baui

tms2002
23.04.2005, 22:09
danke Baui! hast du einen Codeschnipsel wie ich den Pin pollen kann?
bzw wie ich schleifen schnell durchlaufen lassen kann? Ich hab auch irgend was von Case Select gehört aber wie das funktioniert hab ich keinen Plan


gruß

florian

Baui
23.04.2005, 22:22
hallo florian,
folgender Code würde zum Beispiel Sensoren am Portd abfragen ob diese eine Hinderniss erkennen oder nicht und darauf mit dem Schalten des Ports B reagieren



$crystal=400000

config portd=input
config portb=output

do
if portd<>255 then gosub Hinderniss
=>mach andere sachen (LCD o.ä.)
loop

Hinderniss:
if pind.0=0 then
'tu was
elseif pind.1=0 then
'tu was anderes
elseif pind.n=0 then
end if
Return

Hoffe das hilft dir ansonsten einfach nochmal melden.

Gruß
Baui