ATMega 8 Ausgabe Problem von Programm

OP #4022416
Lesenswert?

Hallo,

Ich programmiere gerade mit Bascom  kleinere Programme was auch bisher 
gut funktioniert. Bei "größeren" wird es dann für mich schon etwas 
schwieriger.

Das untenstehende Programm stellt ein Spannungsmesser dar, der von den 
Ports PC0 nach einer Zeit zu PC1 geht und jeweils an den Ports die 
Spannnungen misst, diese dann auch am LCD ausgibt (2 Digits)

Das funktioniert soweit auch.

Nun wollte ich zum Test, das wenn die Spannung z.B. bei Volt_2 "0.0" 
oder "0.00" ist, das Portb.0 eine LED einschaltet. Das funktioniert 
nicht.

Ich hab schon ein paar mal damit rumgespielt, nichts führte zum Erfolg.

Eigentlich wollte ich, das wenn Volt_2 über z.B. "5.0" ist, dass dann 
die LED leuchet für eine unbegrentzte Zeit.

Für den ein oder anderen mag der Code unübersichtlich sein:




1
$regfile = "m8adef.dat"
2
$crystal = 8000000
3
$hwstack = 100
4
$swstack = 100
5
$framesize = 100
6

7

8
Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , _
9
   Db7 = Portd.7 , E = Portd.3 , Rs = Portd.2
10
Config Lcd = 16 * 2
11
Config Single = Scientific , Digits = 2
12

13
Led1 Alias Portb.0
14
Config Led1 = Output
15

16
Cursor Off
17

18
Const Adc_multi = 0.0048828125                             
19
Config Adc = Single , Prescaler = Auto , Reference = Avcc
20
Start Adc
21
Dim Messergebnis_1 As Word
22
Dim Volt_1 As Single
23
Dim Messergebnis_2 As Word
24
Dim Volt_2 As Single
25

26

27
Declare Sub Init
28
Declare Sub Text
29

30
Call Init
31
Wait 1
32

33
'
34
'************** HAUPTPROGRAMM *********************************************
35
'
36

37
Do
38

39
  Debounce Pind.0 , 1 , Taster1 , Sub
40

41
    Messergebnis_1 = Getadc(0)
42
    Volt_1 = Messergebnis_1 * Adc_multi
43

44

45
  Cls
46

47
  Locate 2 , 10
48
  Lcd Volt_1 ; " V"
49
  Locate 2 , 1
50
  Lcd "Batterie"
51

52
  Waitms 5
53

54

55
    Messergebnis_2 = Getadc(1)
56
    Volt_2 = Messergebnis_2 * Adc_multi
57

58
  Locate 1 , 10
59
  Lcd Volt_2 ; " V"
60
  Locate 1 , 1
61
  Lcd "Akku"
62

63
  Wait 1
64

65
Loop
66

67

68

69
Do
70

71
If Volt_2 = 0.00 Then
72
   Portb.0 = 1
73

74
  Wait 20
75
  End If
76

77
Loop
78

79

80
'***************************************************************************
81

82
Taster1:
83
    Call Text
84
Return
85

86
'***************************************************************************
87

88
Sub Init
89

90
 Cursor Off
91
 Cls
92
 Locate 1 , 5 : Lcd "Spannung"
93
 Locate 2 , 5 : Lcd " Messen "
94
 Wait 5
95
 Cls
96

97
End Sub
98

99

100
Sub Text
101

102
 Cls
103
 Locate 1 , 1
104
 Lcd "Testprogramm"
105
 Locate 2 , 1
106
 Lcd "Voltmeter"
107
 Wait 5
108

109
End Sub
110

111

112
End
OP #4022468
Lesenswert?

Dann hätte ich nochmal eine Frage, wenn im Programm steht
1
...
2

3
If Volt_2 = 4.00 Then
4
   Portb.0 = 1
5

6
  Wait 20
7
  End If
8

9
Loop
10

11
...

Wie kann ich dann dem Programm sagen, das Portb.0 erst 1 sein soll, wenn 
der Wert über 4.00 ist?

Das gleiche dann mit unter z.B. 4.00?


Ich konnte mit über und unter nichts im Netz finden.
#4022502
Lesenswert?

Dann solltest du mal grundsätzlich programmieren lernen (sieht man auch 
am restlichen Code) und nicht nur c&p.

Gleich:              =
Größer:              >
Größer oder Gleich:  >=
Kleiner:             <
Kleiner oder Gleich: <=

Hier noch ein kleiner Kurs. Mach ihn komplett durch, dann dürfte dein 
Code schon besser aussehen.
http://halvar.at/elektronik/kleiner_bascom_avr_kurs

PS: 4.00 wirst du sowieso nie genau treffen.

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