Lieber Besucher, herzlich willkommen bei: RCLine Forum. Falls dies Ihr erster Besuch auf dieser Seite ist, lesen Sie sich bitte die Hilfe durch. Dort wird Ihnen die Bedienung dieser Seite näher erläutert. Darüber hinaus sollten Sie sich registrieren, um alle Funktionen dieser Seite nutzen zu können. Benutzen Sie das Registrierungsformular, um sich zu registrieren oder informieren Sie sich ausführlich über den Registrierungsvorgang. Falls Sie sich bereits zu einem früheren Zeitpunkt registriert haben, können Sie sich hier anmelden.

1

Sonntag, 8. Februar 2015, 18:17

Anfänger in Bascom braucht Hilfe

Hallo
habe einen Attiny13 als Blinklicht programmiert. Das war ja noch einfach. Jetzt wollte ich noch einen Liposaver hinzufügen. Das geht soweit auch. Wenn ich jetzt auf meinem Steckboard die Schaltung aufbaue geht das blinken und der Liposaver geht auch. sobald der Liposaver reagiert ist das blinken der Led nicht mehr gleichmäßig. Kann man nich mit zwei schleifen den tiny programmieren. So daß das Blinken und der Liposaver extra sind.
Danke schon mal.
Big EC 135 AIR-ZERMATT
KYANITE (Koax)
BLADE msr
Blade MQx
DX6i
Dickie PB600

2

Sonntag, 8. Februar 2015, 20:37

Du kannst Timer dazu verwenden.

Haeng mal deinen bisherigen Code hier mit rein.

Edit: Schau mal hier das Beispielprogramm. Programm 6: Timer-Interrupts
Gruss
Thomas
🖖

Vielleicht ist Wissen doch nicht die Antwort auf alles

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »Thomas_R.« (8. Februar 2015, 20:53)


3

Montag, 9. Februar 2015, 19:19

Hy Thomas
das ist mein Code

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
$regfile = "attiny13.dat"                               	'verwendeter Controller
$crystal = 10000000                                     	'Taktfrequenz
$hwstack = 32
$swstack = 5
$framesize = 20


Config Portb.0 = Output                                 	'Blink LED
Config Portb.1 = Output                                 	'Blink LED
Config Portb.2 = Output                                 	'LED blinkt < 6.8 V                              	

Config Adc = Single , Prescaler = Auto , Reference = Avcc
Start Adc
Dim Lipo As Word , Channel As Byte
Channel = 3

'==============================================================================
'Hauptprogramm
'------------------------------------------------------------------------------
Do                                                      	'Schleifenanfang
Lipo = Getadc(3)
If Lipo > 500 Then                                      	'Spannung < 6.8 V
Portb.2 = 1
Waitms 500
Portb.2 = 0
End If

Portb.0 = 1                                             	'Port B.0 einschalten
Portb.1 = 1                                             	'Port B.1 einschalten
Waitms 200                                              	'200ms Sekunden warten
Portb.0 = 0                                             	'Port B.0 ausschalten
Portb.1 = 0                                             	'Port B.1 ausschalten
Waitms 200                                              	'200ms Sekunden warten                                         	'Port B.1 ausschalten


Loop                                                    	'Zurück zu Do (Schleifenanfang)
'==============================================================================

End                                                     	'end program
Big EC 135 AIR-ZERMATT
KYANITE (Koax)
BLADE msr
Blade MQx
DX6i
Dickie PB600

4

Montag, 9. Februar 2015, 19:45

Hm. Ja. Da blinkt dann was.

Und da du im Lipo Teil sogar noch ein WAIT drinnen hast ist es kein Wunder das dann da was haengt.

Hast du mal in das Timer Beispiel geschaut?

Du muss die beiden Sachen komplett entkoppeln.
Gruss
Thomas
🖖

Vielleicht ist Wissen doch nicht die Antwort auf alles

5

Montag, 9. Februar 2015, 20:33

Hy Thomas
Ja habe ich angeschaut bzw durch gelesen. Aber irgendwie komm ich nicht weiter. Bin ja schon glücklich das 1 was blinkt und zum 2 der ADC gelesen wird. Das Blinken soll in der Schleife laufen und die Messung im Timer. Verstehe ich das richtig ?
Big EC 135 AIR-ZERMATT
KYANITE (Koax)
BLADE msr
Blade MQx
DX6i
Dickie PB600

6

Montag, 9. Februar 2015, 21:31

Ja. zum Beispiel so wie du das eben geschildert hat.
Blinken soll es staendig.

Und du willst den Lipo alle 500ms auslesen. Edit: Da brauchst du dann kein Wait mehr.

Versuchs mal. Das Beispiel ist da recht gut beschrieben.
Gruss
Thomas
🖖

Vielleicht ist Wissen doch nicht die Antwort auf alles

7

Montag, 9. Februar 2015, 21:33

Geh mal andersrum. Versuch erstmal in einem Timer den Lipo alle 500ms auszulesen.
Wenn das geht anschliessend wieder das Blinken mit rein.
Ist dann evtl. anschaulicher.
Gruss
Thomas
🖖

Vielleicht ist Wissen doch nicht die Antwort auf alles

8

Samstag, 28. Februar 2015, 10:33

Hy
Hat ein bischen gedauert. Aber hab da was hinbekommen. Es läuft aber noch nicht zufrieden stellend. Kannst vielleicht mal drüber schauen. Mit Taktfrequenz und prescaler gespielt und es blinkt.

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
'Beschreibung: zwei blinkende LED an Port B.0 und B.1 sowie
'Lipowächter  an Port B.2
'************************************************************

$regfile = "attiny13.dat"                               	'verwendeter Controller
$crystal = 4000000                                      	'Taktfrequenz
$hwstack = 32
$swstack = 5
$framesize = 20

'======================================================
'Konfigurationen
'======================================================
Config Portb.0 = Output                                 	'Blink LED
Config Portb.1 = Output                                 	'Blink LED
Config Portb.2 = Output                                 	'LED blinkt < 6.8 V                              	

Config Adc = Single , Prescaler = Auto , Reference = Avcc   'Konfiguration des Analogeingangs
Config Timer0 = Timer , Prescale = 1024                 	'Konfiguration des Timer0 !!!Prescale nur 1|8|64|256|1024!!!
'======================================================
'Deklarationen
'======================================================
Dim Lipo As Word , Channel As Byte
Channel = 3
'======================================================
'Initialisierungen
'======================================================
On Timer0 T0_isr                                        	'Angabe der Interrupt-Service-Routine für Timer0
Enable Timer0                                           	'Timer-Freigabe
Enable Interrupts                                       	'Freigabe der Interrupt-Routinen
Start Timer0                                            	'Timer starten
Start Adc                                               	'Anschaltung der Analogwert-Verarbeitung
'==============================================================================
'Hauptprogramm
'------------------------------------------------------------------------------
Do                                                      	'Schleifenanfang

Portb.0 = 1                                             	'Port B.0 einschalten
Portb.1 = 1                                             	'Port B.1 einschalten
Waitms 50                                               	'50ms Sekunden warten
Portb.0 = 0                                             	'Port B.0 ausschalten
Portb.1 = 0                                             	'Port B.1 ausschalten
Waitms 50                                               	'50ms Sekunden warten

Portb.2 = 0

Lipo = Getadc(3)                                        	'Analogwert lesen
If Lipo < 500 Then

End If
Loop                                                    	'Zurück zu Do (Schleifenanfang)
T0_isr:
Incr Lipo
If Lipo < 500 Then                                      	'Spannung < 6.8 V
Toggle Portb.2

End If

Return
Big EC 135 AIR-ZERMATT
KYANITE (Koax)
BLADE msr
Blade MQx
DX6i
Dickie PB600

9

Samstag, 28. Februar 2015, 13:04

Versuchs mal damit.
Mit Speed1 und Speed2 stellst du die beiden Blinkfrequenzen ein.
Der Lipo wird in der Hauptschleife ausgelesen.
Das Blinken ist in die ISR verlagert. Dadurch entfaellt jegliches wait.

Ist ungetestet. Hab gerade nicht die Moeglichkeit zum Kompilieren.

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
Dim Speed1 As Word
Dim Speed2 As Word

Speed1 = 50
Speed2 = 100

Portb.0 = 0
Portb.1 = 0
Portb.2 = 0

Do                                                      	'Schleifenanfang
Lipo = Getadc(3)                                        	'Analogwert lesen
Loop                                                    	'Zurück zu Do (Schleifenanfang)

T0_isr:
Incr N
Incr M
If N > Speed1 Then
  Toggle Portb.0
  Toggle Portb.1
  N = 0
End If
If M > Speed2 Then
  If Lipo < 500 Then
    Toggle Portb.2
  End If
  M = 0
End If

Return
Gruss
Thomas
🖖

Vielleicht ist Wissen doch nicht die Antwort auf alles

10

Sonntag, 1. März 2015, 17:07

Hallo Thomas
Habs gestern probiert und läuft. Nur wenn während dem blinken des Portb.2 wieder höher 500 ist dann bleibt die LED an. Dürfte ja nicht sein da Portb.2 = 0
Da es ja ein Lipowächter ist sollte es egal sein, ich muß den Lipo jetzt aufladen. Nur verstehe ich das nicht.
Danke
Big EC 135 AIR-ZERMATT
KYANITE (Koax)
BLADE msr
Blade MQx
DX6i
Dickie PB600

11

Sonntag, 1. März 2015, 17:23

Es wird nur abgefragt ob die Warnschwelle erreicht ist. Dann blinkt die LED.
Ist der Lipo Wert wieder ueber der Warnschwelle behaelt sie ihren letzten Zustand.

Aender den unteren Teil einfach so ab:

Quellcode

1
2
3
4
5
6
7
8
9
If M > Speed2 Then
  If Lipo < 500 Then
    Toggle Portb.2
  End If
  M = 0
End If
If Lipo >= 500 Then
  Portb.2 = 0
End If
Gruss
Thomas
🖖

Vielleicht ist Wissen doch nicht die Antwort auf alles