Forum: Mikrocontroller und Digitale Elektronik ATMega 8 Ausgabe Problem von Programm


von Simon R. (simon_r44)


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

von STK500-Besitzer (Gast)


Lesenswert?

schmeiss das "loop" und "do" zwischen den anderen beiden raus.

von Frank G. (frank_g53)


Lesenswert?

Ich kann dir nicht sagen wo das Problem liegt.
Aber da ja ein LCD vorhanden ist, würde ich einfach nach jedem wichtigen 
Programmschritt eine Ausgabe auf das Display geben: 
Variableninhalt,jetzt wird Programmschritt xyz ausgeführt,.....
Dann kommst du bestimmt auf den bug.

von Simon R. (simon_r44)


Lesenswert?

STK500-Besitzer schrieb:
> schmeiss das "loop" und "do" zwischen den anderen beiden raus.

Danke, funktioniert.

Das hatte ich anfangs auch so gemacht, hat aber nie funktioniert.

Ich weiss auch warum, weil ich blöderweisse imer Volt_1 auf 0V gebracht 
habe anstatt Volt_2

von Simon R. (simon_r44)


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.

von Samuel C. (dragonsam)


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.

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.