Forum: Mikrocontroller und Digitale Elektronik Bascom Schleifen Problem


von Hartmut L. (hartmutl)


Angehängte Dateien:

Lesenswert?

Hallo von einem absoluten Anfänger (kurz vor der Rente).
Im Rahmen meiner (noch) beruflichen Tätigkeit muss (darf)
ich über 150 Kabelbäume (siehe Schaltbild) prüfen. Manuell
mittels Durchgangstester und Voltmeter etwas mühsam.
Diese Aufgabe soll ein Attiny13 übernehmen. Das beigefügte
(einfache und mikrige) Programm würde zwar funktionieren,
aber eine akustische Meldung, 3x schnelles "piepen" pro
Prüfling, wäre von vorteil um nicht ständig die LED's zu
beobachten.Nur wie muss die Schleife dafür aussehen?
Meine Versuche sind kläglich in die "Hose" gegangen. Bei
meinen "Versuchen" war ständig ein "Dauerpiepen" zu hören!
Wer kann mir da weiterhelfen?

1
'Anschlussbelegung des Tiny13:
2
3
'Pin 1: Reset, Widerstand 10k nach Pin 8 (VCC)
4
'Pin 2: PB3, ADC-Eingang ADC3, Messeingang
5
'Pin 3: PB4, ADC-Eingang ADC2, Messeingang
6
'Pin 4: GND, Masse
7
'Pin 5: PB0, LED für "Gut-Meldung", 5,0V
8
'Pin 6: PB1, LED für "Gut-Meldung", Kabel OK
9
'Pin 7: PB2, ADC-Eingang ADC1, Messeingang
10
'Pin 8: VCC, Versorgungsspannung
11
12
13
$regfile = "attiny13.dat"
14
$crystal = 9600000
15
$hwstack = 16
16
$swstack = 16
17
$framesize = 16
18
19
Config Portb.0 = Output                               ' LED grün = 5,0 V
20
Config Portb.1 = Output                               ' LED grün = Kabel OK
21
22
23
Dim W As Word
24
Dim U As Word
25
Dim V As Word
26
27
28
Config Adc = Single , Prescaler = Auto , Reference = Avcc
29
30
Do
31
Start Adc
32
33
W = Getadc(1)                              ' messen des Analogwertes
34
U = Getadc(2)                              ' messen des Analogwertes
35
V = Getadc(3)                              ' messen des Analogwertes
36
37
Stop Adc
38
39
'Widerstandsschleifen Messung an 2 Punkten
40
'Wenn die Spannung am ADC 2 mit einer Hysterese
41
'von 200mV zwischen 3,9V und 4,1V beträgt und
42
'am ADC 3 mit einer Hysterese von 200mV
43
'zwischen 1,9V und 2,1V beträgt, dann
44
'soll eine LED an Portb.0 leuchten.
45
46
47
If U > 840 Then                                  'Spannung > 4,1 V
48
   Portb.0 = 0
49
End If
50
51
If V > 430 Then                                  'Spannung > 2,1 V
52
   Portb.0 = 0
53
End If
54
55
If U < 840 And U > 799 And V < 430 And V > 389 Then         'Spannungsprüfung
56
   Portb.0 = 1
57
End If
58
59
If U < 799 Then                                  'Spannung < 3,9V
60
   Portb.0 = 0
61
End If
62
63
If V < 389 Then                                  'Spannung < 1,9V
64
   Portb.0 = 0
65
End If
66
67
If W > 251 Then                                  ' Spannung > 5,1 V
68
   Portb.1 = 0
69
End If
70
71
If W < 251 And W > 243 Then                      ' Spannung 4,9 - 5,1 V
72
   Portb.1 = 1
73
End If
74
75
If W < 243 Then                                  ' Spannung < 4,9V
76
   Portb.1 = 0
77
End If
78
79
80
'If Portb.0 = 1 And Portb.1 = 1 Then
81
82
     '3x schnelles Piepen , wenn Bedingung erfüllt
83
     'bis zur nächsten Prüfung an Portb.0 oder
84
     'Portb.1 oder aktivieren von Portb.5
85
86
'End If
87
88
Loop
89
90
End

von Paul B. (paul_baumann)


Lesenswert?

Hallo Hartmut,
wo willst Du denn eigentlich raus kommen mit Deinem Piep-Signal?

Du könntest mit dem Sound-Befehl an's Werk gehen:

Config Portb.0 = Output 'Hier mußt Du sehen, welchen Portpin Du nehmen 
kannst
Speaker Alias Portb.0
Dim Schleifenzaehler as Byte
If Portb.0 = 1 And Portb.1 = 1 Then
 For Schleifenzaehler = 2 to 0 Step -1
    Sound Speaker , 165 , 1011
    waitms 500
 Next Schleifenzaehler
End if


MfG Paul

von Hartmut L. (hartmutl)


Lesenswert?

Hallo Paul,

danke für die schnelle Antwort. Ich benutze keinen Lautsprecher
sondern einen aktiven Signalgeber. Ich habe nun den Portb.5
dafür genommen und folgende Schleife eingegeben. Nun piept es
ständig, wenn die Bedingung erfüllt ist.
Was muss ich machen, damit es, wenn die Bedingung erfüllt ist,
nur 3x "piept" ? Fehlt da noch ein "Merker"?


If Portb.0 = 1 And Portb.1 = 1 Then
 For Schleifenzaehler = 2 to 0 Step -1
    Portb.5 = 1
    Waitms 10
    Portb.5 = 0
    Waitms 10
 Next Schleifenzaehler
End if


MfG  Hartmut

von Paul Baumann (Gast)


Lesenswert?

>Fehlt da noch ein "Merker"?

Ja, -nur was sollte als Kriterium dienen, um diesen Merker wieder
zurückzusetzen?
So lange das Kabel dransteckt und in Ordnung ist, ist auch die Bedingung
erfüllt.

MfG Paul

von Hartmut L. (hartmutl)


Lesenswert?

> So lange das Kabel dransteckt und in Ordnung ist, ist auch die Bedingung
> erfüllt.

In diesem Fall soll es ja auch nur 3x piepen und nicht ständig. Oder 
muss das
Prog kpl. umgeschrieben werden?
Ich habe nur das gefährliche Halbwissen....

MfG  Hartmut

von Luca E. (derlucae98)


Lesenswert?

Wie wäre es mit:
1
If Portb.0 = 1 And Portb.1 = 1 Then
2
 For Schleifenzaehler = 2 to 0 Step -1
3
    Portb.5 = 1
4
    Waitms 10
5
    Portb.5 = 0
6
    Waitms 10
7
    If Schleifenzähler = 0 then goto [SUB/Label]
8
 Next Schleifenzaehler
9
End if

von Paul Baumann (Gast)


Lesenswert?

Dann erzwinge, daß die Bedingung nicht mehr wahr ist, wenn es piept:

If Portb.0 = 1 And Portb.1 = 1 Then
 Portb.0 = 0

von Hartmut L. (hartmutl)


Lesenswert?

Hallo,

danke für die Informationen. Ich habe leider keinen Erfolg erzielen 
können.
Mein Halbwissen reicht leider nicht aus. Dann werde ich weiter LED's 
beobachten. Nochmals Danke für die schnellen Rückmeldungen.


MfG  Hartmut

von Hartmut L. (hartmutl)


Lesenswert?

Hallo,

mein Prog läuft.

........
Dim Slz As Byte
Dim Gut As Byte
........
Do
........
If Portb.0 = 1 And Portb.1 = 1 Then

  If Gut = 0 Then
      Gut = 1
      For Slz = 2 To 0 Step -1
         Portb.5 = 1
         Waitms 8
         Portb.5 = 0
         Waitms 8
      Next Slz
  End If
      Else
      Gut = 0

End If

von Weingut P. (weinbauer)


Lesenswert?

gut gemacht :)

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.