Forum: Mikrocontroller und Digitale Elektronik Problem mit IF Abfrage und and in Bascom


von Tom Z. (tom_z)


Lesenswert?

Hallo,

ich baue zur Zeit ne kleine Alarmanlage mit GSM Modem Siemens M20 
Terminal.

Bei mir löst die Schaltung immer Alarm aus, egal ob sie aktiviert oder 
deaktiviert ist und auch egal ob der Reedkontakt auf oder zu ist.

Sensor ist ein Reedkontakt der an Pinb.1 hängt und gegen GND geschaltet 
ist. Tür zu => Signal Low

An Pinb.0 hängt ein zweiter Mikrocontroller (RFID Modul). Ist der Pin 
Low ist die Alarmanlage deaktiviert. Ist der Pin High, dann aktiviert.

Auslösen (SMS senden) geht Problemlos. Nur Passiert das immer EGAL wie 
die Pins sind.
Alarmgeber werden später noch angeschlossen. Bis jetzt is das eh noch 
ein Versuchsaufbau auf dem Tisch.

Das Relais soll das GSM Modem ein- und ausschalten um Strom zu sparen. 
Das Alarm Bit soll verhindern, dass ständig SMS gesendet werden.
1
$regfile = "attiny2313.dat"
2
$crystal = 14745600
3
$baud = 19200
4
5
Wait 5
6
7
Dim Alarm As Bit
8
Alarm = 1
9
10
Config Portd.6 = Output
11
Relais Alias Portd.6
12
Relais = 0
13
14
Config Portd.5 = Output
15
Summer Alias Portd.5
16
Portd.5 = 1
17
18
Config Pinb.0 = Input                                       'zweiter Mikrocontroller (RFID Modul)
19
Rfid Alias Portb.0
20
Set Rfid
21
22
Config Pinb.1 = Input                                       'Reedkontakt gegen Masse
23
Reed Alias Portb.1
24
Set Reed
25
26
Do
27
28
If Reed = 1 And Rfid = 1 Then
29
  If Alarm = 1 Then
30
    'Sirenen einschalten
31
    Relais = 1                                              'GSM Modem einschalten
32
    Wait 15
33
    Print "AT+CPIN=4310"
34
    Wait 30
35
    Print "AT+CMGF=1"
36
    Wait 10
37
    Print "AT+CMGS={034}+491741824156{034}"                 'SMS senden
38
    Wait 5
39
    Print "ALARM; Einbruch Stadl{026}"
40
    Wait 15
41
    Alarm = 0
42
    Relais = 0                                              'GSM Modem ausschalten
43
  End If
44
End If
45
46
If Rfid = 0 Then
47
  'Sirenen ausschalten
48
49
  Alarm = 1
50
  'Reset Summer
51
  'Waitms 300
52
  'Set Summer
53
 ' Waitms 300
54
 ' Reset Summer
55
 ' Waitms 300
56
  'Set Summer
57
End If
58
59
loop


MfG Tom

von mue-c (Gast)


Lesenswert?

Tom Z. schrieb:
> Config Pinb.0 = Input            'zweiter Mikrocontroller (RFID Modul)
> Rfid Alias Portb.0
> Set Rfid
>
> Config Pinb.1 = Input            'Reedkontakt gegen Masse
> Reed Alias Portb.1
> Set Reed

Schreib das mal lieber so

Config Pinb.0 = Input              'zweiter Mikrocontroller (RFID Modul)
Rfid Alias Pinb.0
Set Portb.0

Config Pinb.1 = Input              'Reedkontakt gegen Masse
Reed Alias Pinb.1
Set Portb.1

von Thomas K. (tkroth) Benutzerseite


Lesenswert?

Mache mal so:
1
If (Reed = 1) And (Rfid = 1) Then

von Tom M. (Gast)


Lesenswert?

mue-c schrieb:
> Schreib das mal lieber so

Wozu??? FUD.

von Tom Z. (tom_z)


Lesenswert?

Hallo,

Danke! funktioniert jetzt. Mit dem Pin statt Port. Hatte ich garnicht 
bemerkt, dass ich das so geschrieben hatte.

@Thomas K.
da kommen bei mir in Bascom Fehlermeldungen

von mue-c (Gast)


Lesenswert?

Tom M. schrieb:
> mue-c schrieb:> Schreib das mal lieber so
> Wozu??? FUD.

Wer solche Anfängerfehler macht und dann noch nicht mal lesen kann, 
sollte nicht so überheblich sein.

von Paul Baumann (Gast)


Lesenswert?

Ich mußte erst mal suchen, was FUD heißt, aber hier ist die Erklärung:
http://bar.wikipedia.org/wiki/Fud

MfG Paul

von troll42 (Gast)


Lesenswert?

Paul Baumann schrieb:
> Ich mußte erst mal suchen, was FUD heißt, aber hier ist die Erklärung:
> http://bar.wikipedia.org/wiki/Fud
Oh Mann, NSFW aber gut! Typisch Paul halt.

von Tom Z. (tom_z)


Lesenswert?

Hallo,

ich habe nochmal ein Problem und zwar soll ja das Alarm Bit mehrere SMS 
verhindern. Tut es aber nicht. Jetzt ist auch noch die Auslösung per 
Anruf drin. Weis jemand warum mehrere SMS kommen, obwohl sie nicht 
deaktiviert ist (RFID = 0)?

1
$regfile = "attiny2313.dat"
2
$crystal = 14745600
3
$baud = 19200
4
5
Wait 5
6
7
Dim Alarm As Bit
8
Alarm = 1
9
10
Config Portd.6 = Output
11
Relais Alias Portd.6
12
Relais = 0
13
14
Config Portd.5 = Output
15
Summer Alias Portd.5
16
Portd.5 = 1
17
18
Config Pinb.0 = Input                                       'zweiter Mikrocontroller (RFID Modul)
19
Rfid Alias Pinb.0
20
Set Rfid
21
22
Config Pinb.1 = Input                                       'Reedkontakt gegen Masse
23
Reed Alias Pinb.1
24
Set Reed
25
26
Config Pinb.2 = Input
27
Gsm Alias Pinb.2
28
29
30
Do
31
32
If Reed = 1 And Rfid = 1 Then
33
  If Alarm = 1 Then
34
    'Sirenen einschalten
35
    Relais = 1                                              'GSM Modem ein
36
    Wait 5
37
    Print "AT+CPIN=0000"
38
    Wait 30
39
    Print "AT+CMGF=1"
40
    Wait 1
41
    Print "AT+CMGS={034}+4900000000000{034}"                 'SMS senden
42
    Wait 1
43
    Print "ALARM; Einbruch{026}"
44
    Wait 1
45
    Alarm = 0
46
  End If
47
End If
48
49
50
51
If Alarm = 0 Then
52
  Relais = 1
53
  Alarm = 1
54
    If Gsm = 0 Then
55
      Summer = 0
56
    End If
57
End If
58
59
60
61
If Rfid = 0 Then 'Fals per RFID deaktiviert wird, dann...
62
  Relais = 0 'GSM Modem aus
63
  Set Summer 'Sirene aus
64
  Alarm = 1 'Alarmbit zurücksetzen um neue SMS zuzulassen.
65
End If
66
67
loop

von Weingut P. (weinbauer)


Lesenswert?

Schau mal in die Stack und Frame Einstellungen bei Fehlern in Variablen 
ist bei Bascom das die erste Anlaufstelle

Ach so, mal noch nebenbei, Du kannst die Bitvariable auch als 
Bytevariable deklarieren, Bascom verwendet eh ein ganzes Byte ... leider

Ach so, im Programmablauf ist auch noch unlogisch, erst setzt Du Alarm = 
0
um gleich darauf:

If Alarm = 0 Then
  Relais = 1
  Alarm = 1

wird ergo gleich wieder aufgehoben Dein Flag.

von Tom Z. (tom_z)


Lesenswert?

Fhutdhb Ufzjjuz schrieb:
> Schau mal in die Stack und Frame Einstellungen bei Fehlern in Variablen
> ist bei Bascom das die erste Anlaufstelle

Ok werd ich machen. Danke

Fhutdhb Ufzjjuz schrieb:
> Ach so, mal noch nebenbei, Du kannst die Bitvariable auch als
> Bytevariable deklarieren, Bascom verwendet eh ein ganzes Byte ... leider

Das ist ja blöd. Für was gibt es dann die Bit Vaiable in Bascom.

MfG Tom

von Paul Baumann (Gast)


Lesenswert?

Man kann Platz sparen, indem man mehrere "Merker" in einem Byte 
zusammen-
fasst und dann aber bitweise benutzt:

Dim Merker as Byte

set merker.0 'Setzt nur das Bit 0 und läßt die anderen in Ruhe

set Merker.1 'wie oben

If Merker.0=1 and Merker.1=1 then 'z.B. Zwei Merkerbits verknüpfen
  Print "Tralala"
End If

Reset Merker.0

u.s.w.

Print "MfG Paul"

von MWS (Gast)


Lesenswert?

Fhutdhb Ufzjjuz schrieb:
> Bytevariable deklarieren, Bascom verwendet eh ein ganzes Byte ... leider

Ist falsch.

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.