Forum: Mikrocontroller und Digitale Elektronik Lösungsansatz gesucht , RC5 Bascom


von pascal (Gast)


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.

von Mike (Gast)


Lesenswert?

pascal schrieb:
> Ich möchte die LED aber auch ganz schnell blinken lassen was aber nicht
> geht das das wait 2000 131ms sind .

???

Mit deinem "Waitms 1000" blockierst du deinen Programmablauf für eine 
ganze Sekunde.

Warum machst du das?

von pascal (Gast)


Lesenswert?

du meinst beim toggeln der led? das ist ja nur zum test . außerdem hab 
ich ja keinen timer mehr frei

von Karl H. (kbuchegg)


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.

: Bearbeitet durch User
von Mike (Gast)


Lesenswert?

pascal schrieb:
> außerdem hab ich ja keinen timer mehr frei

Dann solltest du da vielleicht ansetzen und prüfen, ob sich daran etwas 
ändern läßt. Mit was für hochwichtigen Dingen hast du die denn 
beschäftigt, dass einer davon nicht auch als Zeitbasis dienen kann?

von Karl H. (kbuchegg)


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.

von never ever (Gast)


Lesenswert?

Bascom hat dor IR sampels mit dabei !!

von Ratgeber (Gast)


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

von pascal (Gast)


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.

von pascal (Gast)


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

von pascal (Gast)


Lesenswert?

never ever schrieb:
> Bascom hat dor IR sampels mit dabei !!

was soll ich damit?

von Karl H. (kbuchegg)


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.

von pascal (Gast)


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

von Peter D. (peda)


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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.