Forum: Mikrocontroller und Digitale Elektronik Mega2560 und Bascom1.11.9.1 ADC8-15 lesen geht nicht


von Mr. K. (kaktus-)


Lesenswert?

Hallo Leute,

bin im Moment ziemlich ratlos.

Habe folgendes Problem:

Möchte mit Bascom1.11.9.1 von einem AT-MEGA2560 unter anderem die ADC 
Ports 0-15 auslesen. 0-7 klappt wunderbar, 8-15 geht jedoch nicht, egal 
was ich mache.
1
$prog , 255 , &B11011001 ,                                  'Quarz an / Teiler aus / Jtag aus
2
3
$regfile = "m2560def.dat"
4
$hwstack = 82                                               '80
5
$framesize = 68                                             ' 64
6
$swstack = 68                                               '44
7
8
$crystal = 16000000                                         'Quarzfrequenz
9
10
Config Pind.5 = Output
11
Led Alias Portd.5
12
13
14
$baud = 57600
15
16
Dim Kanal As Byte
17
Dim X As Word
18
19
20
21
'*** RS232 Protokoll ***
22
23
Const Tz = ","
24
25
' *** ADC ***
26
Config Adc = Single , Prescaler = Auto , Reference = Internal_1.1
27
Start Adc
28
29
'*** Hauptschleife ***
30
31
Do
32
33
34
 Kanal = 0
35
 Print "*" ; Tz;
36
 Led = 0
37
 Adcsrb.mux5 = 0
38
 Waitms 100
39
 For Kanal = 0 To 7
40
 X = Getadc(kanal)
41
 Print X ; Tz;
42
 Next Kanal
43
44
 Adcsrb.mux5 = 1
45
 Kanal = 0
46
 Waitms 100
47
 For Kanal = 0 To 7
48
 X = Getadc(kanal)
49
 Print X ; Tz;
50
 Next Kanal
51
 Led = 1
52
 Print "#" ; Tz
53
54
55
56
Loop
57
End

Das hier hab ich natürlich zuerst probiert:
1
For Kanal = 0 To 15
2
 X = Getadc(kanal)
3
 Print X ; Tz;
4
 Next Kanal

von Herbert von Caravan (Gast)


Lesenswert?

Die Hilfe zu Getadc sagt:
"But it is important that no I/O switching is done while using the A/D 
converter."

Du machst aber ein I/O Switching mit dem Printbefehl. Ich denke auch, 
daß Du die Kanäle zu schnell nacheinander abfragst, so daß der 
AD-Wandler noch gar nicht mit dem Wandeln eines Kanals fertig ist, wenn 
schon der nächste dran kommt.

Hochachtungsvoll
Herbert von Caravan

von Mr. K. (kaktus-)


Lesenswert?

So, habe es mal etwas umgestellt, ist zwar jetzt total umständlich , 
dafür aber übersichtlich.

Jedoch ist das Ergebnis das gleiche
Die ADC Eingänge hängen in der Luft, habe sie nur mit der Hand berührt.
Man kann aber deutlich den Unterschied zwischen den ersten 0-7 und den 
Rest ADC 8-15 sehen.

Ich habe das Gefühl der bekannte Bascom Fehler ist immer noch nicht 
behoben.

1023,1023,1023,1023,1023,1023,1023,1023,10,511,511,511,511,511,511,512,< 
\r><\n>

1
$prog , 255 , &B11011001 ,                                'Quarz an / Teiler aus / Jtag aus
2
3
$regfile = "m2560def.dat"
4
$hwstack = 82                                               '80
5
$framesize = 68                                             ' 64
6
$swstack = 68                                               '44
7
$crystal = 16000000                                         'Quarzfrequenz
8
9
Config Pind.5 = Output
10
Led Alias Portd.5
11
12
13
'$baud = 57600
14
Config Com4 = 57600 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
15
Open "com4:" For Binary As #4                               'USB Buchse
16
17
Dim X0 As Word
18
Dim X1 As Word
19
Dim X2 As Word
20
Dim X3 As Word
21
Dim X4 As Word
22
Dim X5 As Word
23
Dim X6 As Word
24
Dim X7 As Word
25
Dim X8 As Word
26
Dim X9 As Word
27
Dim X10 As Word
28
Dim X11 As Word
29
Dim X12 As Word
30
Dim X13 As Word
31
Dim X14 As Word
32
Dim X15 As Word
33
34
35
Const Tz = ","    ' Trennzeichen Komma
36
37
' *** ADC ***
38
Config Adc = Single , Prescaler = Auto , Reference = Internal_1.1
39
Start Adc
40
41
'*** Hauptschleife ***
42
43
Do
44
 Led = 0
45
46
 X0 = Getadc(0)
47
 X1 = Getadc(1)
48
 X2 = Getadc(2)
49
 X3 = Getadc(3)
50
 X4 = Getadc(4)
51
 X5 = Getadc(5)
52
 X6 = Getadc(6)
53
 X7 = Getadc(7)
54
 X8 = Getadc(8)
55
 X9 = Getadc(9)
56
 X10 = Getadc(10)
57
 X11 = Getadc(11)
58
 X12 = Getadc(12)
59
 X13 = Getadc(13)
60
 X14 = Getadc(14)
61
 X15 = Getadc(15)
62
63
print #4 , X0 ; Tz;
64
print #4 , X1 ; Tz;
65
print #4 , X2 ; Tz;
66
print #4 , X3 ; Tz;
67
print #4 , X4 ; Tz;
68
print #4 , X5 ; Tz;
69
print #4 , X6 ; Tz;
70
print #4 , X7 ; Tz;
71
print #4 , X8 ; Tz;
72
print #4 , X9 ; Tz;
73
print #4 , X10 ; Tz;
74
print #4 , X11 ; Tz;
75
print #4 , X12 ; Tz;
76
print #4 , X13 ; Tz;
77
print #4 , X14 ; Tz;
78
print #4 , X15 ; Tz
79
80
Led = 1
81
82
Loop
83
End

von John S. (linux_80)


Lesenswert?

Hallo,

hab was gefunden, will aber nicht nochmal alles hier reinkopieren, 
deswegen Link:
http://www.roboternetz.de/phpBB2/viewtopic.php?p=368892#368892

von Mr. K. (kaktus-)


Lesenswert?

Danke ! War ein heiser Tipp.

Habe mir das Datenblatt nochmal angeschaut, erscheint mir jetzt auch als 
logisch was du da schreibst

100000 ADC8 entspricht DEZ 32
100001 ADC9
100010 ADC10
100011 ADC11
100100 ADC12
100101 ADC13
100110 ADC14
100111 ADC15 entspricht DEZ 39


Mit folgendem Bascom 1.11.9.1Code funktioniert es jetzt bei mir
1
$regfile = "m2560def.dat"
2
$hwstack = 82                                               '80
3
$framesize = 68                                             ' 64
4
$swstack = 68                                               '44
5
6
$crystal = 16000000                                         'Quarzfrequenz
7
8
Config Pind.5 = Output
9
Led Alias Portd.5
10
11
12
$baud = 57600
13
'Config Com4 = 115200 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
14
'Open "com4:" For Binary As #4                               'USB Buchse
15
16
17
Dim Kanal As Byte
18
19
Const Tz = ","                                              ' Trennzeichen ist ein Komma
20
21
' *** ADC ***
22
Config Adc = Single , Prescaler = Auto , Reference = Internal_1.1
23
Start Adc
24
25
'*** Hauptschleife ***
26
27
Do
28
 
29
 Print "*" ; Tz;
30
 Led = 0
31
32
     For Kanal = 0 To 15
33
     If Kanal > 7 Then Kanal = Kanal + 24                   ' Wegen Bascom 1.11.9.1 Bug notwendig
34
     Print Getadc(kanal) ; Tz;
35
     If Kanal > 7 Then Kanal = Kanal - 24                   ' Wegen Bascom 1.11.9.1 Bug notwendig
36
     Next Kanal
37
38
 Led = 1
39
 Print "#" ; Tz
40
41
Loop
42
End

man kann natürlich auch zwei getrennte Schleifen programmieren
For Kanal = 0 To 7
und
For Kanal = 32 To 39 ' = 8-15

Nochmal Danke und viel Spaß weiterhin

von abbas (Gast)


Lesenswert?

hello
i want config adc for adc8-15( bascom)
please help me

von huch (Gast)


Lesenswert?

abbas schrieb:
> hello
> i want config adc for adc8-15( bascom)
> please help me

After reading this thread during the last four years and not able to 
formulate your question more specific, I doubt that anyone can help you.

By the way: BASCOM 1.11.9.1 is out of date!

von Mr Kaktus (Gast)


Lesenswert?

Das war ja auch 2008 ihr Schlaumeier

Das Thema ist längst erledigt. Siehe letzter Beitrag von mir.

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.