Problem mit IF Abfrage und and in Bascom

OP #2781171
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
Gast #2781188
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
OP #2783466
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
#2783471
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.
OP #2783472
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
Gast #2783572
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"

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