Zeit / wegmessung in Bascom verwirklichen

OP (Firma: Mapi Modellbau) #3237196
Lesenswert?

Hallo,

Bin neu hier und hoffe hier einen Gedankenanstoß zu bekommen,

Mein Vorhaben.
Auf eine Modellbahn fahren Autos einen Magnetband entlang ( Carsystem)
Jedes Auto hat einen Akku an Board.
Diese Autos werden über eine PC Software angesteuert und somit über die 
Anlage gelenkt.
soweit dazu.

Da das ganze ja automatisch läuft sollen die Autos nun auch je nach 
Ladeszustand des Akkus in einen Bereich gebracht werden zu Aufladen.

Ich würde dazu gerne eine Strecke auf der Anlage  mit einer festen länge 
zB. 50 cm definieren.Am Anfang und ende der Stecke ist jeweils ein 
Hallsensor verbaut.
Bei auslösen des ersten Sensores sollte die Zeitmessung beginnen und bei 
Auslösen des Zweiten Stoppen.
Die gemessene Zeit muss dann mit einer Zeit verglichen werden welche ich 
vorher ermitteln muss und diese dann fest in der Programmierung 
eingtragen ist.
Wenn die gemessene Zeit kürzer ist als die eingetragene sollte ein 
Ausgang zuschalten.

Dieser gibt dann meine Software den Befehl zum Ladepause für das Auto.

Ich würde mich freuen wenn jemand so eine Ähnliche Programmierung kennt; 
hat oder mir auch nur einen Gedankenanstoß geben könnte.

lg marcel
#3237225
Lesenswert?

Marcel Pieroth schrieb:

> Auf eine Modellbahn fahren Autos einen Magnetband entlang ( Carsystem)
> Jedes Auto hat einen Akku an Board.
> Diese Autos werden über eine PC Software angesteuert und somit über die
> Anlage gelenkt.

Das heißt, jedes Auto hat auch einen kleinen µC mit an Bord?
(Ist soweit auch logisch, denn wie käme sonst BASCOM da mit ins Spiel)


> Da das ganze ja automatisch läuft sollen die Autos nun auch je nach
> Ladeszustand des Akkus in einen Bereich gebracht werden zu Aufladen.

Soweit klar.

> Ich würde dazu gerne eine Strecke auf der Anlage  mit einer festen länge
> zB. 50 cm definieren.Am Anfang und ende der Stecke ist jeweils ein
> Hallsensor verbaut.
> Bei auslösen des ersten Sensores sollte die Zeitmessung beginnen und bei
> Auslösen des Zweiten Stoppen.

Das ist grundsätzlich nicht so schwer, wenn du mit Timern umgehen 
kannst.
Allerdings: wäre es nicht einfacher, die Akkuspannung ganz einfach 
direkt zu messen und wenn die unter einen Grenzwert fällt, dann merkt 
das Auto auch so, dass es zum Laden drann ist?
Einziges Problem, wie kriegt der PC mit, dass das Fahrzeug zum Laden 
fährt. Ist natürlich ein Argument, das allerdings lösbar wäre, wenn man 
den Autos mehr Autonomie zugesteht. Der PC könnte das Auto zb in eine 
spezielle Strecke steuern lassen, in der das Auto mittels 
Infrarot-Übertragung seine Kennung samt aktuellen Akku-Spannungszustand 
an den PC übermittelt, der es dann in die Ladestrasse einplant.

> Die gemessene Zeit muss dann mit einer Zeit verglichen werden welche ich
> vorher ermitteln muss und diese dann fest in der Programmierung
> eingtragen ist.
> Wenn die gemessene Zeit kürzer ist als die eingetragene sollte ein
> Ausgang zuschalten.

Und was passiert dann, wenn ein Ausgang zuschaltet?

> Dieser gibt dann meine Software den Befehl zum Ladepause für das Auto.

Wer genau macht das?
Das Auto selber, oder die PC-Software.
Denn das ist jetzt nicht ganz unerheblich. Wer muss die Fahrzeit auf der 
Teststrecke deiner Meinung nach messen?

Überhaupt hängt in dem ganzen Szenario jetzt sehr viel daran, wie die 
Aufgabenteilung zwischen PC und Auto zur Zeit aussieht, bzw. wie sie 
weiter aussehen soll.
Gast #3237235
Lesenswert?

Falls die Autos keine µC an Board haben sollten, könnte man aller x 
Runden trotzdem in die "Box" fahren und dann dort die Spannung messen. 
Die Ladekontakte sind ja wohl 1:1 mit dem Akku verbunden, dann könnte 
man auch dort messen.
Blos irgendwie muss der Motor ja gesteuert werden, sonst fährt das Auto 
ja wieder aus der Box raus..
OP (Firma: Mapi Modellbau) #3237255
Lesenswert?

Hi,

danke für die Schnelle Antwort.

Der µc sollte nicht im Auto sitzen sodern in einer kleinen Elektrnik 
unter der Straße welch nur die Sensoren abfragt.
Deswegen kann ich die Akuspannung nicht dirket abfragen.
Da ich auch die Autos nicht umbauen möchte fällt der µc an Board auch 
flach.

Der Ausgang welcher geschaltet werden soll hat ein kleines Relais 
angeschlossen.Im Bereich Modellbahn gibt es Rückmeldedecoder.
An denen wird an einem Eingang + angelegt und der Rückmeldeeingang 
Schaltet auf ein wenn dort Masse anliegt.
Das wird dann weiter an die Steuerungssoftware geleitet.
Die Software schaltet dann eine Weiche in der Straße und das Auto Fährt 
in ein Parkhaus.Dort kann es dann von hand zum Laden angesteckt werden.
Dies soll auch von hand passieren und nicht automatisch da man so das 
Auto dirket vom Dreck befreien kann.

Mit Timern kann ich noch nicht wirklich umgehen da ich erst am anfang 
meine Bascom Laufbahn stehe ;-)

Ich hoffe das erklät auch die Aufgabenteilung PC /Auto.
Man muss das ganze in 2 Systeme unterteilen welche eingentlich nicht 
miteinander zu tun haben.

System 1
PC Software Steuert das Auto über die Strecke. Schaltet Weichen für 
Straßenkreuzungen etc.

Das Messen soll das zweite System darstellen das so arbeitet we oben 
beschrieben.
Das Auto löst dann die Sensoren mittel eines kleinen Magneten aus.
Der Ausgang welcher das Relais schaltet verbindet die zwei Systeme in 
sweit das der PC eine Weiche schaltet und das Auto abbiegt.

Ich hoffe das erklärt die Fragen

lg marcel
#3237275
Lesenswert?

Marcel Pieroth schrieb:

> Der µc sollte nicht im Auto sitzen sodern in einer kleinen Elektrnik
> unter der Straße welch nur die Sensoren abfragt.
> Deswegen kann ich die Akuspannung nicht dirket abfragen.
> Da ich auch die Autos nicht umbauen möchte fällt der µc an Board auch
> flach.

ok. wichtige Information.

> Der Ausgang welcher geschaltet werden soll hat ein kleines Relais
> angeschlossen.Im Bereich Modellbahn gibt es Rückmeldedecoder.
> An denen wird an einem Eingang + angelegt und der Rückmeldeeingang
> Schaltet auf ein wenn dort Masse anliegt.
> Das wird dann weiter an die Steuerungssoftware geleitet.

Ah. ok.
Dieses 'Ausgang schalten' ist die Rückmeldung an den PC.
Ebenfalls eine wichtige Information.

> Die Software schaltet dann eine Weiche in der Straße und das Auto Fährt
> in ein Parkhaus.

Alles klar.
Ab jetzt zeichnet sich da auch ein Bild ab, wie du dir das vorstellst.

> Mit Timern kann ich noch nicht wirklich umgehen da ich erst am anfang
> meine Bascom Laufbahn stehe ;-)

Dann musst du das eben lernen. So schwer ist das nicht.

Moment.
Ist sicher gestellt, dass immer nur 1 Auto in der Messstrecke ist, oder 
können das auch mehrere sein.

Wenn es nur eines ist, dann kann man auch eine Lösung, die auf 
Wartezeiten beruht, von einem Neuling akzeptieren. Denn wenn man nach 
dem überfahren des Startsensors alle 10 Millisekunden nachsieht, ob der 
Endesemsor überfahren wurde, und dabei mitzählt wie oft man nachsehen 
musste, bis das der Sensor überfahren wurde, dann kann man daraus 
natürlich auch die zeit berechnen. Wurde die Schleife 3000 mal 
wiederholt, ehe das Ausfahrtssignal kam, dann lagen zwischen Einfahrt 
und Ausfahrt 3000 mal 0.01 Sekunden oder eben 30 Sekunden. Und die 10 
Millisekunden kannst du ja (schauder) mit einem WAITMS leicht erreichen.
#3237283
Lesenswert?

Karl Heinz Buchegger schrieb:


> Wenn es nur eines ist, dann kann man auch eine Lösung, die auf
> Wartezeiten beruht, von einem Neuling akzeptieren. Denn wenn man nach
> dem überfahren des Startsensors alle 10 Millisekunden nachsieht, ob der
> Endesemsor überfahren wurde, und dabei mitzählt wie oft man nachsehen
> musste, bis das der Sensor überfahren wurde, dann kann man daraus
> natürlich auch die zeit berechnen. Wurde die Schleife 3000 mal
> wiederholt, ehe das Ausfahrtssignal kam, dann lagen zwischen Einfahrt
> und Ausfahrt 3000 mal 0.01 Sekunden oder eben 30 Sekunden. Und die 10
> Millisekunden kannst du ja (schauder) mit einem WAITMS leicht erreichen.


1
  DO
2
    warte auf Einfahrtssignal
3
    
4
    Zeit = 0
5
    wiederhole bis Ausfahrtssignal anspricht
6
      WAITMS 10
7
      Zeit = Zeit + 1
8
    ende wiederhole
9

10
    if Zeit > grenzwert
11
      setze Rückmeldeausgang
12

13
    warte ein wenig
14
    lösche Rückmeldesignal
15

16
  LOOP

ist zwar nicht ganz die feine englische Art, aber wenn der µC ausser 
dieser Messung sowieso nichts zu tun hat, ist es vertretbar, das so zu 
machen.
#3238424
Lesenswert?

Ungetestet während der Werbepause hingeschmiert:
1
$regfile = "atTiny13.dat"
2
$crystal = 1000000
3

4
$hwstack = 32
5
$swstack = 12
6
$framesize = 10
7

8

9
Halleinfahrt Alias Pinb.0                                   'Hallsensor Beginn Messung
10
Hallausfahrt Alias Pinb.1                                   'Hallsensor Ende Messung
11
Ausgangpc Alias Portb.5                                     'Ausgang für Meldung an den PC
12
Programmiertaste Alias Pinb.4                               'Länge des Tastendrucks programmiert die Maxzeit
13

14
Config Ausgangpc = Output
15
Portb = &B00010011                                          'Pullups für Hallsensoren und Taster. Diese müssen dann auf GND ziehen
16

17
Config Timer0 = Timer , Prescale = 64                       '10Millisekunden
18

19
On Timer0 Timer0_irq
20

21
Const Timervorgabe = 100                                    '10Millisekunden
22
Const Meldezeit = 100                                       '1 Sekunde lan an den PC melden
23

24
Dim Zeit As Word                                            'reicht für 65 Sekunden
25
Dim Maxzeit As Word
26
Dim Dummy As Eram Byte                                      'Byte 0 nutze ich nicht.
27
Dim Emaxzeit As Eram Word                                   'Eprom wird benutzt, Fuse Preserve Eprom aktivieren
28
Dim Programmierzeit As Word
29
Dim Meldung As Byte                                         '1 Sekunde
30
Dim Modus As Byte                                           '0=nichts, 1=Zeitmessung, 2=Programmieren
31

32
Maxzeit = Emaxzeit                                          ' Aus Eprom einlesen
33

34
Enable Timer0
35
Enable Interrupts
36

37
Do
38
   If Halleinfahrt = 0 Then
39
      Modus = 1
40
   End If
41

42
   If Hallausfahrt = 0 Then
43
      Modus = 0
44
   End If
45

46
   If Programmiertaste = 0 Then
47
      Modus = 2
48
   Else
49
      If Modus = 2 Then
50
         Emaxzeit = Programmierzeit                         'In Eprom speichern
51
         Maxzeit = Programmierzeit
52
         Modus = 0
53
      End If
54
   End If
55

56
   If Meldung >= 1 Then
57
      Set Ausgangpc
58
   Else
59
      Reset Ausgangpc
60
   End If
61

62
Loop
63
End
64

65
Timer0_irq:
66
  Timer0 = Timervorgabe
67

68
  If Meldung > 0 Then
69
      Decr Meldung
70
  End If
71

72
  If Modus = 1 Then                                         'Durchfahrt des Autos
73
      Incr Zeit
74
      If Zeit > Maxzeit Then
75
         Meldung = Meldezeit
76
         Modus = 0
77
      End If
78
  Else
79
      Zeit = 0
80
  End If
81

82
  If Modus = 2 Then                                         'Zeitprogrammierung
83
      Incr Programmierzeit
84
  Else
85
      Programmierzeit = 0
86
  End If
87

88
Return
OP (Firma: Mapi Modellbau) #3238532
Lesenswert?

Hi,

danke für die Zeilen !!

Sollte ein tiny 13 werden ! das ist schon super so.

Die Hallsensoren die TLE4905 und schalten nur einen kurzen Impuls.
Beim Sensor wird GND durchgeschaltet.

Das Progrsamm muss ich mir mal auseinanderpfücken da ich mich noch nicht 
so gut in Bascom auskenne.

Vielen dank
OP (Firma: Mapi Modellbau) #3265701
Lesenswert?

Hi @ Peter,

so nun hatte ich mal Zeit zum testen.

ich habe mal deine Zeilen aud nen Tiny13 aufgespielt.
Über das STK 500 angeschlossen mit Taster und LED als Ausgang zum 
testen.

aber leider passiert nichts .

Mein ablauf wie ich getestet habe.

Den tasten für die Zeit zu Programmieren ca 1 sec gedrückt.
Dann den Tasten Halleinfahrt gedrückt
ca 2 sek gewartet
Dann den Hallausfahrt gedrückt.

Nun solllte die LED Leuchten aber leider ohne erfolg.

Woran könnte es liegen konnte an der Verdrahtung keinen Fehler 
feststellen und im Programm habe ich mit meinen Kentnissen auch nichts 
finden können.

Kannst Du mir auf die Sprünge helfen?!

lg marcel
Gast #3265742
Lesenswert?

Marcel Pieroth schrieb:
> Wenn die gemessene Zeit kürzer ist als die eingetragene sollte ein
> Ausgang zuschalten.
>
> Dieser gibt dann meine Software den Befehl zum Ladepause für das Auto.

Das ist m.E. falsch. Es sollte wohl heissen:

Wenn die gemessene Zeit laenger ist als die eingetragene sollte...


wendelsberg
#3266134
Lesenswert?

Eben mal auf dem Pollinboard mit einem M32 getestet, da ich keinen 
anderen da habe.
1
$regfile = "M32def.dat"
2
$crystal = 1000000
3
$hwstack = 32
4
$swstack = 10
5
$framesize = 40
6
$baud = 9600
7

8

9
Halleinfahrt Alias Pind.2                                   'Hallsensor Beginn Messung
10
Hallausfahrt Alias Pind.3                                   'Hallsensor Ende Messung
11
Ausgangpc Alias Portd.5                                     'Ausgang für Meldung an den PC
12
Programmiertaste Alias Pind.4                               'Länge des Tastendrucks programmiert die Maxzeit
13
Led Alias Portd.6
14
Config Ausgangpc = Output
15
'Portb = &B00010011                                          'Pullups für Hallsensoren und Taster. Diese müssen dann auf GND ziehen
16
Config Led = Output
17
Config Timer0 = Timer , Prescale = 64                       '10Millisekunden
18

19
On Timer0 Timer0_irq
20

21
Const Timervorgabe = 100                                    '10Millisekunden
22
Const Meldezeit = 100                                       '1 Sekunde lan an den PC melden
23
Const Ohnepullups = 1
24

25
Dim Zeit As Word                                            'reicht für 65 Sekunden
26
Dim Maxzeit As Word
27
Dim Dummy As Eram Byte                                      'Byte 0 nutze ich nicht.
28
Dim Emaxzeit As Eram Word                                   'Eprom wird benutzt, Fuse Preserve Eprom aktivieren
29
Dim Programmierzeit As Word
30
Dim Meldung As Byte                                         '1 Sekunde
31
Dim Modus As Byte                                           '0=nichts, 1=Zeitmessung, 2=Programmieren
32
Dim Flag As Byte
33

34
Maxzeit = Emaxzeit                                          ' Aus Eprom einlesen
35

36
Enable Timer0
37

38
Enable Interrupts
39
'Start Timer0
40

41
Do
42
   If Halleinfahrt = Ohnepullups Then
43
      If Modus = 0 Then
44
         Modus = 1
45
      End If
46
      Programmierzeit = 0
47
   End If
48

49
   If Hallausfahrt = Ohnepullups Then
50
      If Modus = 2 Then
51
         Maxzeit = Programmierzeit
52
         Emaxzeit = Maxzeit                                 'In Eprom speichern
53
         Reset Led
54
      End If
55
      Modus = 0
56
   End If
57

58
   If Programmiertaste = Ohnepullups Then
59
      Modus = 2
60
      Set Led
61
   End If
62

63

64
   If Flag > 0 Then
65
      Decr Flag
66

67
      If Meldung >= 1 Then
68
         Decr Meldung
69
         Set Ausgangpc
70
      Else
71
         Reset Ausgangpc
72
      End If
73

74
      If Modus = 1 Then                                         'Durchfahrt des Autos
75
         Incr Zeit
76
         If Zeit > Maxzeit Then
77
            Meldung = Meldezeit
78
            Modus = 0
79
         End If
80
      Else
81
         Zeit = 0
82
      End If
83

84
      If Modus = 2 Then                                         'Zeitprogrammierung
85
         Incr Programmierzeit
86
      End If
87
   End If
88

89
Loop
90
End
91

92
Timer0_irq:
93
  Timer0 = Timervorgabe
94
'  Toggle Led
95
   Incr Flag
96

97
Return

Jetzt brauch man den Programmiertaster nur kurz drücken, dann wird die 
Zeit automatisch genommen. Anschließend der Wert gespeichert.

Die Ports musst du dir wieder anpassen. Die Konstante Ohnepullups muss 
bei dir auf 0. Die LED signalisiert den Programmiermodus. Hast Du keine, 
dann das auskommentieren.

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