Lösungsansatz gesucht , RC5 Bascom

Gast #3926579
Lesenswert?

Hallo, ich suche , da ich noch sehr frisch bin , einen Lösungsansatz für 
folgendes Problem:

Allgein will ich eine LED mit einer Fernsteuerung bedienen.

Taste 1 schnell blinken

Taste 2 nicht so schnell blinken

Außerdem will ich das wenn das LED im Modus 1 ist und man 2 drückt der 
Modus wechselt .

Das geht bisher mit dem Programm auch :
1
$regfile = "attiny13.dat"
2
$crystal = 1200000
3
$hwstack = 20
4
$swstack = 10
5
$framesize = 22
6
Dim Address As Byte
7
Dim Command As Byte
8
Dim A As Byte
9
Config Portb.2 = Output
10
Config Portb.4 = Input
11
Portb.4 = 1
12
Led Alias Portb.2
13

14
Config Rc5 = Pinb.4 , Timer = 0 , Wait = 2000
15
Enable Interrupts
16
Do
17
Anfang:
18
 Led = 0
19
Getrc5(address , Command)
20
If Address < 255 Then
21
Command = Command And &B01111111
22

23
Select Case Command
24
Case 1 :
25
For A = 1 To 255 Step 1
26
A = 1
27
Toggle Led
28
Waitms 1000
29
Getrc5(address , Command)
30
If Address < 255 Then
31
Command = Command And &B01111111
32
Exit For
33
End If
34
Next A
35

36

37

38
Case 2 :
39
Do
40

41

42
Toggle Led
43
Waitms 10
44
Getrc5(address , Command)
45
Loop Until Address < 255
46

47

48

49
End Select
50

51

52
End If
53

54

55
Loop
56

57
End

das Problem ist nun dass ich Config Rc5 = Pinb.4 , Timer = 0 , Wait = 
2000 benutzen muss um jedes Signal zuverlässig zu empfangen .

Ich möchte die LED aber auch ganz schnell blinken lassen was aber nicht 
geht das das wait 2000 131ms sind .
Er fragt da ja immer ab damit man den Modus wechseln kann.

gibt es da einen weg?
PS : ich hab den empfänger leider nicht an einem interrupt.
#3926673
Lesenswert?

Na ja.
Der ganze Ansatz ist schon zweifelhaft.

Die 2000 bei der RC5 Konfiguration wird wohl das Timeout sein, wie lange 
der RC5 Code wartet, ehe er auf 'nichts' empfangen geht und zurückkehrt. 
D.h. diese Zeit muss runter.

Das andere ist die ganze Blinkerei.
Mit diesem Blinken durch lange Wartezeiten wirst du nicht glücklich 
werden. Das musst du umstellen. Was du brauchst ist eine Art Status, der 
über die Hauptschleife hineg Gültigkeit hat.

Ungefähr so
1
do
2

3
   frage rc5 ab 
4

5
   wenn Kommando empfangen dann
6
     wenn Kommando gleich kurze Blinkzeit dann
7
       SollBlinkzeit = 200
8

9
     wenn Kommando gleich lange Blinkzeit
10
       SollBlinkzeit = 1000
11
   endif
12

13
   IstBlinkzeit = IstBlinkzeit + 1
14
   wenn IstBlinkzeit grösser SollBlinkzeit dann
15
     IstBlinkZeit = 0
16
     schalte LED um
17
   endif
18

19
   waitms 1
20

21
loop

Ziel der Sache ist es, die ganzen langen Wait auf Vielfache von kurzen 
Wait zurückzuführen. Ein Durchlauf durch die Haupt do-loop wird hier 
künstlich auf zirka 1 Millisekunde getrimmt. Dazu darf natürlich der RC5 
Code nicht allzu lang umtun, sondern muss sofort, wenn feststeht, dass 
keine Übertragung da ist zurückkommen. Ist ja so gesehen auch kein 
Problem, denn 1 Millisekunde später, beim nächsten Durchlauf wird der 
RC5 Code ja sowieso wieder aufgerufen.

Gewartet wird auf nichts und niemanden, ausser vielleicht ganz kurz 
(hier 1 Millisekunde) und das auch nur, weil du keinen Timer mehr frei 
hast. Und in dem Fall geht es dann eben nach dem Muster: wenn man 1000 
mal 1 Millisekunde wartet, hat man in Summe auch 1000 Millisekunden 
gewartet. Der Unterschied ist aber, dass ich im zweiten Fall nur alle 
1000 Millisekunden alle Eingänge bzw. Datenzulieferer abfragen kann, ob 
sie etwas zur Bearbeitung haben, während im zweiten Fall jede 1 
Millisekunde das ganze Abscannen der Zulieferer erfolgt um darauf zu 
reagieren. Eine Verzögerung von 1000 Millisekunden ist für einen 
Menschen merkbar. Eine Verzögerung von 1 Millisekunde aber nicht.
#3926689
Lesenswert?

Karl Heinz schrieb:
> Na ja.
> Der ganze Ansatz ist schon zweifelhaft.
>
> Die 2000 bei der RC5 Konfiguration wird wohl das Timeout sein, wie lange
> der RC5 Code wartet, ehe er auf 'nichts' empfangen geht und zurückkehrt.
> D.h. diese Zeit muss runter.

Wenn du allerdings die 2000 nicht weiter reduzieren kannst, weil der 
Empfang dann nicht mehr funktioniert, tja, dann hast du wohl mit 
Zitronen gehandelt.
Gast #3926721
Lesenswert?

>> außerdem hab ich ja keinen timer mehr frei
Mike schrieb:
> Dann solltest du da vielleicht ansetzen und prüfen, ob sich daran etwas
> ändern läßt.

Nein, daran läßt sich nichts ändern, da die RC5-Routine den Timer nutzt.

>Mit was für hochwichtigen Dingen hast du die denn
> beschäftigt, dass einer davon nicht auch als Zeitbasis dienen kann?

Beschäftige Du Dich mal mit dem Datenblatt des Tiny13, dann siehst Du 
daß
es nur EINEN Timer gibt!

SCNR
Gast #3926745
Lesenswert?

Karl Heinz schrieb:

>
> Gewartet wird auf nichts und niemanden, ausser vielleicht ganz kurz
> (hier 1 Millisekunde) und das auch nur, weil du keinen Timer mehr frei
> hast. Und in dem Fall geht es dann eben nach dem Muster: wenn man 1000
> mal 1 Millisekunde wartet, hat man in Summe auch 1000 Millisekunden
> gewartet. Der Unterschied ist aber, dass ich im zweiten Fall nur alle
> 1000 Millisekunden alle Eingänge bzw. Datenzulieferer abfragen kann, ob
> sie etwas zur Bearbeitung haben, während im zweiten Fall jede 1
> Millisekunde das ganze Abscannen der Zulieferer erfolgt um darauf zu
> reagieren. Eine Verzögerung von 1000 Millisekunden ist für einen
> Menschen merkbar. Eine Verzögerung von 1 Millisekunde aber nicht.

soweit verstanden, wenn ich aber diesen Timeout oder was auch immer 
runterschraube reagiert das programm nicht auf jede taste zuverlässig.
Gast #3926751
Lesenswert?

Karl Heinz schrieb:
> Karl Heinz schrieb:
>> Na ja.
>> Der ganze Ansatz ist schon zweifelhaft.
>>
>> Die 2000 bei der RC5 Konfiguration wird wohl das Timeout sein, wie lange
>> der RC5 Code wartet, ehe er auf 'nichts' empfangen geht und zurückkehrt.
>> D.h. diese Zeit muss runter.
>
> Wenn du allerdings die 2000 nicht weiter reduzieren kannst, weil der
> Empfang dann nicht mehr funktioniert, tja, dann hast du wohl mit
> Zitronen gehandelt.

das heißt murks, wegwerfen? :D
#3926759
Lesenswert?

pascal schrieb:
> Karl Heinz schrieb:
>> Karl Heinz schrieb:
>>> Na ja.
>>> Der ganze Ansatz ist schon zweifelhaft.
>>>
>>> Die 2000 bei der RC5 Konfiguration wird wohl das Timeout sein, wie lange
>>> der RC5 Code wartet, ehe er auf 'nichts' empfangen geht und zurückkehrt.
>>> D.h. diese Zeit muss runter.
>>
>> Wenn du allerdings die 2000 nicht weiter reduzieren kannst, weil der
>> Empfang dann nicht mehr funktioniert, tja, dann hast du wohl mit
>> Zitronen gehandelt.
>
> das heißt murks, wegwerfen? :D

Sieht wohl so aus.
Die Online-Hilfe spricht ja davon, dass man die Zeit bis auf ca. 6.5ms 
runterschrauben könnte. Aber die Hilfe ist da etwas eigenartig 
formuliert. Wenns nicht funktioniert, dann funktioniert das eben nicht.

Jetzt stehst du natürlich im Regen. So schön es auch in BASCOM ist, wenn 
man vorgefertigte Module verwenden kann und sich um nichts kümmern muss 
bzw. verstehen muss, so sehr steht man dann auch im Regen, wenn es nicht 
funktioniert und man sich selbst helfen müsste und nicht kann.
Gast #3926766
Lesenswert?

Karl Heinz schrieb:

>
> Jetzt stehst du natürlich im Regen. So schön es auch in BASCOM ist, wenn
> man vorgefertigte Module verwenden kann und sich um nichts kümmern muss
> bzw. verstehen muss, so sehr steht man dann auch im Regen, wenn es nicht
> funktioniert und man sich selbst helfen müsste und nicht kann.

naja , ich kann mir schon helfen, ich nehme dann einfach ein atmega mit 
2 timer . dachte halt nur ich frag mal nach ob ihr ne idee hättet...
#3926784
Lesenswert?

Ich vermute mal, die vorgefertigte RC5-Empfangsroutine arbeitet 
blockierend.
Das ist natürlich äußerst praxisfern.

Du mußt daher die Routine auf interruptbasiert umschreiben.
Es ist dann auch kein Hexenwerk, den Timer durchlaufen zu lassen und ihn 
für RC-5 und Blinken zu verwenden.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren