Werbung
Habe da ein Problem, der Atmel hängt sich bei der RC5 Routine scheinbar immer auf. Er Läuft jedenfalls nicht mehr zum Schleifenanfang. Mit einem ATMEGA8515 (auf 8515 kompatibilität gesetzt) läufts...
Empfänger ist in beiden fällen ein TSOP1736
Code:$regfile = "2313def.dat" $crystal = 4000000 CONFIG PinB.2 = OUTPUT CONFIG RC5 = PortD.6 DIM Wert AS WORD DIM Eichwert1 AS WORD DIM Eichwert2 AS WORD DIM Eichwert3 AS WORD DIM Eichwert4 AS WORD DIM Merker AS WORD DIM Adresse AS Byte DIM Kommando AS Byte CONST Solladresse = 20 CONST Einschalten = 129 CONST Ausschalten = 128 Eichwert1 = GETRC(PinB , 3) Wait 3 Eichwert2 = GETRC(PinB , 3) Wait 2 Eichwert3 = GETRC(PinB , 3) Wait 3 Eichwert4 = GETRC(PinB , 3) SELECT CASE Eichwert1 CASE IS < 15 : Eichwert1 = Eichwert1 + Eichwert2 Eichwert1 = Eichwert1 + Eichwert3 Eichwert1 = Eichwert1 + Eichwert4 Eichwert1 = Eichwert1 / 4 ' Mittelwert Eichwert2 = Eichwert1 - 2 Eichwert3 = Eichwert1 + 2 CASE ELSE : Eichwert1 = Eichwert1 / 4 Eichwert2 = Eichwert2 / 4 Eichwert3 = Eichwert3 / 4 Eichwert4 = Eichwert4 / 4 Eichwert1 = Eichwert1 + Eichwert2 Eichwert1 = Eichwert1 + Eichwert3 Eichwert1 = Eichwert1 + Eichwert4 ' Mittelwert Eichwert2 = Eichwert1 SHIFT Eichwert2 , RIGHT , 6 ' /16 Eichwert2 = Eichwert1 - Eichwert2 '-1/16 Eichwert3 = Eichwert1 + Eichwert2 '+1/16 END SELECT Merker = 0 DO Wert = GETRC(PinB , 3) WAITms 250 IF Wert < Eichwert1 THEN IF Merker = 0 THEN TOGGLE PortB.2 Merker = 1 ENDIF ELSEIF Wert > Eichwert1 THEN IF Merker = 0 THEN TOGGLE PortB.2 Merker = 1 ENDIF ELSE Merker = 0 ENDIF TOGGLE PortB.2 WAIT 2 TOGGLE PortB.2 GETRC5(Adresse , Kommando) IF Adresse = 20 THEN SELECT CASE Kommando CASE 129: SET PortB.2 CASE 128: RESET PortB.2 END SELECT ENDIF WAITMS 250 LOOP END
Linus Torvalds, Entwickler von LinuxIch will Microsoft wirklich nicht zerstören. Das wird nur ein gänzlich unbeabsichtigter Nebeneffekt sein.
Hi,
weiter unten (oder besser ganz unten) im Code benutze ich GETRC5(Adresse, Kommando)
Habe nur das ganze Teil gepostet, falls irgendwoanders was hängt...
Geht übrignes auch nicht, wenn ich nur am Anfang nen Port mit LED einschalte dann den GETRC5 Befehl und die LED wieder ausschalte...
Das Einschalten geht aber ausgeschaltet wird nicht...
Chip hat die Bezeichnung AT90S2313-10PI (PI steht soweit ich weiss f.d. Industrieausführung, oder?)
kann der 2313 (Bzw. ...PI) den GETRC5 Befehl nicht?
Linus Torvalds, Entwickler von LinuxIch will Microsoft wirklich nicht zerstören. Das wird nur ein gänzlich unbeabsichtigter Nebeneffekt sein.
Hm...
werde ich mal ausprobieren, ich glaube aber dass ich das beim ATMEGA nicht gemacht habe, aber kann mich auch irren...
Danke
Also RC5 läuft auf dem 2313 auf jeden Fall, hab ihn und es geht.
Vielleicht hlft dir dieses BSP. weiter
Wie du siehst wird der RC5-Befehl hier ganz anders benutzt als bei dir.Const Tv = 0
Config Rc5 = Pind.2
Portd.2 = 1
Enable Interrupts
Dim Address As Byte , Command As Byte
Do
Getrc5(address , Command)
If Address = Tv Then
Print Address ; " " ; Command
End If
Loop
End
hier Getrc5(address , Command) Wo die Signale reinkommen wird ja vorher durch Config Rc5 = Pind.2 festgelegt.
Daher also kein Wunder, dass das bei dir Probleme gibt, das Beispielpro läuft einwandfrei.
Allerdings wundert es micht, das Bascom nciht vorher bei GETRC(PinB , 3) eine Fehlermeldung ausspuckt, denn werder PinB noch 3 sind als Varaiblen definiert.
OK, alles schwachsinn, darin unterscheiden sich die Befhle GetRC5 und GetRC!
Ich würde es mal mit en GETRC5 Befehlen versuchen, die funktionieren auf jeden Fall!
EDIT: warum schreibst du .CONFIG RC5 = PortD.6, verwendest später aber immer den Pin B.3?
Linus Torvalds, Entwickler von LinuxIch will Microsoft wirklich nicht zerstören. Das wird nur ein gänzlich unbeabsichtigter Nebeneffekt sein.
Wie gesagt:
OK, alles schwachsinn, darin unterscheiden sich die Befhle GetRC5 und GetRC!![]()
Aber ich würde RC5 auch wirklich mal am gelichen Pin configurieren wie die Signale dann auch reinkommen.
Ich würde einfach mal eine zusätzliche Led einbauen, die einfach in bestimmten Programmteilen angeht, so kann man das immer weiter nach hinten verschieben, bis man schließlich weiß, bis wo das programm kommt, bzw. wo es hängt.
MFG Moritz
Haste recht gehabt... beim Atmega hatte ich die Interrupts gesetzt... hab in aller eile aber vergessen die beim 2313 reinzuschreiben, ist ja such irgendwie klar, dass er dann immer hängt...Ich glaube ich hab es!
Der GETRC5 -Befehl arbeitet mit TMR0 zusammen also musst du die Interrupts anschalten!!!
Enable Interrupts
So ich hoffe das war jetzt richtig denn dies ist mein erster Beitrag als Robotergenie!!!
Danke nochmals, da wäre ich so schnell nicht drauf gekommen, dachte dann eher an Platinen- bzw. Aufbauprobleme als an nen simplen codefehler...
Lesezeichen