PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Atmel AT90S2313



Dr.Nokill
30.10.2004, 18:13
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





$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

x-ryder
30.10.2004, 18:38
Das Probklem ist sehr warscheinlich sehr einfach!

Du benutzt statt GetRC5 GetRC!

GetRC iss das mit der entladezeit eines Kondensators und nicht RC5-Code empfangen.

Martin

!!!Letzter Beitrag als Ehren Mitglied!!!




Oh Nein son Mist hab wieder das GETRC5 übersehen...

Ich nehme alles zurück 8-[

Dr.Nokill
30.10.2004, 19:41
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?

x-ryder
30.10.2004, 19:53
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!!! :cheesy:

Martin

30.10.2004, 20:51
Hm...

werde ich mal ausprobieren, ich glaube aber dass ich das beim ATMEGA nicht gemacht habe, aber kann mich auch irren...

Danke

RCO
31.10.2004, 14:02
Also RC5 läuft auf dem 2313 auf jeden Fall, hab ihn und es geht.
Vielleicht hlft dir dieses BSP. weiter


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

Wie du siehst wird der RC5-Befehl hier ganz anders benutzt als bei dir.
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?

x-ryder
31.10.2004, 19:46
@RCO: du machst den gleichen Fehler wie ich :-) .

Ich habe auch erst gedacht er hätte die falschen Befehle benutzt aber du musst mal im unteren Programmteil nochmal genau hingucken!!!

Martin

RCO
01.11.2004, 16:54
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

Dr.Nokill
02.11.2004, 22:00
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!!!


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

Danke nochmals, da wäre ich so schnell nicht drauf gekommen, dachte dann eher an Platinen- bzw. Aufbauprobleme als an nen simplen codefehler ;-)...