ATMega 8 Ausgabe Problem von Programm

OP #4022416
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
#4022428
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.
OP #4022468
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
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

Eine eigene Frage? Dieser Thread ist über 11 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.