Archiv verlassen und diese Seite im Standarddesign anzeigen : GETRC5 über Int1 ???
spatz2222
01.11.2005, 18:52
hallo
ich muß das GetRC5 über einen Interrupt auslösen - da ein polling mit GETRC5 zu lange dauert ...
dafür habe ich folgendes programm genommen :
$crystal = 10000000
$regfile = "m8def.dat"
$baud = 19200
Config Pinc.0 = Output ' IR Sensor sitzt mit GND an Pinc.0
Reset Portc.0 ' und mit +5V an Pinc.1
Config Pinc.1 = Output ' und mit Sign. an Pinc.2
Set Portc.1
Config Pind.4 = Output ' kontroll LED
Config Pind.5 = Output 'kontroll led
Gruen Alias Portd.4
Rot Alias Portd.5
Config Rc5 = Pinc.2
Config Pind.3 = Input 'int1 als Eingang
Config Int1 = Falling
On Int1 Int1_isr
Enable Interrupts
Enable Int1
Dim A As Byte , C As Byte
Print "Waiting for RC5..."
Do
Reset Rot
Waitms 100
Set Rot
Waitms 1
Print C
Loop
End
Int1_isr:
Disable Int1
Getrc5(a , C)
Enable Int1
Return
pinc.2 (RC5 Eingang) und Pind.3 (int1 Eingang habe ich mit einem drähtchen verbunden
jedoch funkt. das ganze leider nicht ...
nachdem der in die In1_isr gesprungen ist blinkt nichtmehr die rote kontroll led
also der hängt sich irgendwie in der Int1_isr auf ....
wer hat schonmal das ganze mit dem RC5 und interrupts gelöst ?
Gruß Tobias
ich habe das mit fastavr-basic gelöst.
--------------------------------------------------
$Device= m16
$Stack = 32
$Clock = 8
$Baud = 19200
$RC5=PORTD.2
Dim ir_adr As Byte, ir_Command As Byte
Declare Interrupt Int0()
Int0 Falling
Enable Int0
Enable Ovf0
Enable Interrupts
Do
Wait 100
Loop
End
Interrupt Int0(), Save 2
Disable Int0
Enable Interrupts
RC5(ir_adr, ir_Command)
Print ir_command
Reset Int0
Enable Int0
End Interrupt
-------------------------------------------
mfg psf
spatz2222
05.11.2005, 10:35
tja sieht ja auch fast wie meine Code in Bascom aus ... nur leider funkt. es eben nicht ganz so wie bei Deinem fastavr-Basic
na ja da werde ich halt noch ein bischen rumbasteln müssen !
gruß Tobias
bascom nimmt für diese rc5-routine eine interrupt:
Connect to input to PIND.2 for this example
'The GETRC5 function uses TIMER0 and the TIMER0 interrupt.
'The TIMER0 settings are restored however so only the interrupt can not
'be used anymore for other tasks
da liegt der haken bei bascom. kann dir nicht mehr weiterhelfen.
Aber Timer0 wird im Programm doch garnicht verwendet?!?
spatz2222
05.11.2005, 17:05
doch die das getrc5(...,...) nimmt intern den Timer0
mh... dann also wieder einen 2. Controller der getrc5 --> rs232
und im hauptcontroller einen Interrupt bei Rx
na ja habe ich mir schon fast so gedacht ...
aber es wäre totzdem schon wenn einer mal das Beispiel von der u.g. Version hätte !!!
"GETRC5 supports extended RC5 code form version 1.11.6.9 thanks to Gert Boer who implemented the extended RC5..."
gruß Tobias
Ja, geht GETRC5 nimmt den Timer0 um die Pulslängen zu erkennen.
Aber:
$crystal = 10000000
$regfile = "m8def.dat"
$baud = 19200
Config Pinc.0 = Output ' IR Sensor sitzt mit GND an Pinc.0
Reset Portc.0 ' und mit +5V an Pinc.1
Config Pinc.1 = Output ' und mit Sign. an Pinc.2
Set Portc.1
Config Pind.4 = Output ' kontroll LED
Config Pind.5 = Output 'kontroll led
Gruen Alias Portd.4
Rot Alias Portd.5
Config Rc5 = Pinc.2
Config Pind.3 = Input 'int1 als Eingang
Config Int1 = Falling
On Int1 Int1_isr
Enable Interrupts
Enable Int1
Dim A As Byte , C As Byte
Print "Waiting for RC5..."
Do
Reset Rot
Waitms 100
Set Rot
Waitms 1
Print C
Loop
End
Int1_isr:
Disable Int1
Getrc5(a , C)
Enable Int1
Return
Wo ist hier von Timer0 die Rede? Niergendwo. Brauch ja auchnicht. Das erledigt GETRC5() ja von alleine.
Warum sollte also INT1 gesperrt sein, wenn Timer0 angewendet wird???
Ich verstehe nicht, warum Gast die Hilfe bezüglich GETRC5() zitiert in der von Timer0 die Rede ist, wenn INT1 verwendet werden soll.
spatz2222
05.11.2005, 17:51
deshalb wäre es schön zu sehen wie das Getrc5 in Bascom arbeitet
gehen tut das bestimmt irgendwie und wenn es auch assembler ist ...
was ist gemeint das auch der interrupt von Tomer0 verwendet wird ?
bei einem Überlauf ? im Fehlerfall ? also wenn kein RC5 signal da ist ?
INT1 wird überhaupt nicht verwendet für GETRC5()! Er ist frei. Du kannst damit machen was du willst. Von daher ist es egal das GETRC5() den Timer0 braucht. Timer0 und INT1 haben nicht miteinander zu tun.
Davon rede ich doch die ganze Zeit.
'The GETRC5 function uses TIMER0 and the TIMER0 interrupt.
'The TIMER0 settings are restored however so only the interrupt can not
'be used anymore for other tasks
da liegt der haken bei bascom. kann dir nicht mehr weiterhelfen.
INT1 <> Timer0!
Probier es doch mal so. Mal schauen was passiert.
Int1_isr:
Set Rot
Disable Int1
Set Gruen
Getrc5(a , C)
Enable Int1
Reset Rot
Return
ich glaub, spatz hat das gleiche verständnisproblem wie ich:
Ich hab den Timer0 für eine PWM verwendet; nur Timer1 wäre für GETRC5 frei. Wenn ich jetzt lese:
>> The GETRC5 function uses TIMER0 and the TIMER0 interrupt.
tritt doch das problem auf, oder?
Gruß Stupsi
spatz2222
05.11.2005, 19:02
stupsi - ich weiß nicht genau wie Du das meinst ... ich möchte ja eigentlich nur aus der Int1_isr das Getrc5 aufrufen !
stimmt schon man muß verstehen wie das getrc5 funkt.
marco78 - habe das mal probiert ... beide LED's leuchten !
auch von ich das -- reset rot -- vor das Enable Int1 schreibe !!!
der µC hängt sich irgendwie in dem Getrc5 auf !?
das ganze funkt. auch schon mit Kunstlicht aus einer Leuchtstoffröhre !
wenn ich die Zeile getrc5 entferne und auf der Fernb. eine Taste drücke sehe ich die LED ganz ganz schwach aufblitzen !
gruß Tobias
spatz2222
05.11.2005, 19:15
ich werde mal folgendes in der Praxis probieren !
dim b as bit
Do
If b = 1 Then
Getrc5(a , C) 'Reset Rot
Toggle Gruen
reset b
End If
Loop
End
Int1_isr:
Set B
Return
Es mag ja sein, das bis der TSOP auf low ist und der INT soweit ist das GETRC5() aufgerufen wird, zuviel Zeit vergangen ist.
Kann ich mir aber nicht vorstellen.
Nochmal zum debuggen. Das mit den LEDs war wohl ne blöde Idee von mir. Die rote z.b. würde ja nur flackern.
Du kannst ja in der ISR vor jeder Zeile ein Print "sonstwas" einfügen. So siehst du, an welcher Stelle er stoppt.
Sonstwas sollte aber für jede Zeile anders sein ;)
spatz2222
05.11.2005, 20:07
weiß ich ja - er stopt an der getrc5 zeile in der isr
na, ich hatte was misverstanden >> The GETRC5 function uses TIMER0 and the TIMER0 interrupt. ich dachte, "TIMER0 interrupt" ist INT0; das ist wohl nicht richtig.
Weil es aber so schön in diesen Thread passt, die Zusatzfrage:
Was bedeutet: >> The GETRC5 function uses TIMER0 and the TIMER0 interrupt. ?? Ist GETRC5 ohne TIMER0 nutzbar?
Gruß Stupsi
spatz2222
05.11.2005, 20:26
ich denke nein !
das ganze wird ja intern über Timer0 realisiert !
für was der interrup von Timer0 ? warscheilnich beim Überlauf im Fehlerfall ...
spatz2222
05.11.2005, 20:53
danke an rudi
hier : https://www.roboternetz.de/phpBB2/zeigebeitrag.php?t=14024&highlight=rc5
folgendes geht :
Do
Print A ; " " ; C
Waitms 300
Loop
End
Int1_isr:
Disable Int1
ENABLE INTERRUPTS
Getrc5(a , C)
Print A ; " " ; C
Enable Int1
Return
nur funkt. nur das print aus der isr herraus
irgendwie übernimmt der das a und c nicht in's hauptprogramm ...
aber ich glaube das hat sich fast gelöst der problem ... da der bei jedem Lichtblitz etc. in die int1_isr springt
da geht mit zuviel zeit dahin !
vielen Dank an alle
Gruß Tobias
ENABLE INTERRUPTS ...
also hast du doch nicht mein code von fastavr übernommen. es fehlte bei dir
..Enable...
ihr müsst das nächste mal besser prüfen und nicht über die hilfe meckern.
spatz2222
05.11.2005, 23:54
sorry - die eine Zeile habe ich leider Übersehen !!!
aber wie gesagt Danke den vielen Helfern !!!
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.