ADC Ansteuerung durch einen Taster an den Atmega32l

OP #3066277
Lesenswert?

Hallo,
erstmal im Vorraus danke das Sie versuchen mir zu helfen.
Nun zu meinem Problem: Ich habe einen Taster über den Port PA7/ADC7 an 
den Atmega32L angeschlossen. Nun möchte ich, auf meiner Platine eine Led 
zu testzwecken laufenlassen. Das Problem ist allerdings die Umsetzung in 
Bascom.
Ich möchte z.b. wenn ich den Taster drücke, das danach die Led an Pin 
PC6 angeht. Es ist nur ein Taster an den ADC angeschlossen.
Hier einmal das Programm:

$regfile = "m32def.dat"


Config Adc = Single , Prescaler = Auto

Start Adc

Dim Sensor As Word

Sensor = Getadc(1)

Config Portc.6 = Output


    Do
      If Sensor > 500 Then
         Portc.6 = 1
      Else
         Portc.6 = 0
      End If

    Loop

    End
--------------------------------------------------------------
Vielen Dank für Ihre Hilfe.
Ps: Wenn sie noch weitere Informationen brauchen fragen sie ruhig.

Mit freundlichen Grüßen
Jannis
OP #3067158
Lesenswert?

Hallo, vielen Dank ersteinmal für Ihre hilfe.
Leider funktioniert es noch nicht. Da die gewünschte Led immer noch 
nicht eingeschaltet wird. Nur wenn der Atmega32l einmal an den Strom 
angeschlossen wird leuchtet sie kurz auf. Ist eventuell der Wert 500 
falsch? Der Stromverlauf ist ja so: Eine Leitung vom ADC zum Taster und 
eine 5Volt Spannung die mit einem 10 Kilo-Ohm Widerstand nahezu 
neutralisiert wird. Wenn der Taster gedrückt wird, dann ist er mit dem 
Ground verbunden.
Gast #3067163
Lesenswert?

Jannis P. schrieb:
> falsch? Der Stromverlauf ist ja so: Eine Leitung vom ADC zum Taster und
> eine 5Volt Spannung die mit einem 10 Kilo-Ohm Widerstand nahezu
> neutralisiert wird. Wenn der Taster gedrückt wird, dann ist er mit dem
> Ground verbunden.

neutralisiert?????

Schaltplan!!! als Bild!
OP #3067419
Lesenswert?

Hab das obige Problem jetzt gelöst.
Habe aber noch ein anderes.
Ich würde jetzt gerne mit dem Atmega32l und 7 an ADC0 angeschlossenen 
Tastern die Led-Matrix steuren.
Ersteinmal der Code:

x ist der Wert den ich noch ausrechnen muss.

$regfile = "m32def.dat"
Config Portc = Output
Config Portd = Output
Config Portb = Output

Disable Jtag

Config Adc = Single , Prescaler = Auto

Start Adc

Dim Sensor As Word




    Do

      Sensor = Getadc(0)

      If Sensor < X Then                                    'Taster 7
         Portc.5 = 1
         Portd.0 = 1

         Elseif Sensor < X Then                             'Taster 6
         Portc.5 = 1
         Portd.1 = 1

         Elseif Sensor < X Then                             'Taster 5
         Portc.5 = 1
         Portd.2 = 1

         Elseif Sensor < X Then                             'Taster 4
         Portc.5 = 1
         Portd.3 = 1

         Elseif Sensor < X Then                             'Taster 3
         Portc.5 = 1
         Portd.4 = 1

         Elseif Sensor < X Then                             'Taster 2
         Portc.5 = 1
         Portd.5 = 1

         Elseif Sensor < X Then                             'Taster 1
         Portc.5 = 1
         Portd.6 = 1


      Else
         Portc = 0
         Portd = 0

      End If
    Loop

    End
------------------------------------------------
Das Problem ist jetzt X auszurechnen.
Mein Netzteil hat 9V und  400mA
Spannungsregler: µA 7805 :: Spannungsregler 1,5A positiv, TO-220 bei
Ausgangsspannung: 4,8…5,2 VDC
Reichelt.de
Muss ich jetzt um X auszurechnen die am ADC Pin anliegende Spannung mal 
die Versorgungsspannung (4,8 - 5,2) rechnen und das dann durch 1024 
teilen?

Vielen Dank für eine Antwort.
Angehängte Dateien:
OP #3068389
Lesenswert?

Hab die Werte jetzt, aber es leuchtet immer nur die Led für Taster 7, 
wenn ich die anderen Taster drücke. Was ist im Code falsch?
1
 
2
$regfile = "m32def.dat"
3
Config Portc = Output
4
Config Portd = Output
5
Config Portb = Output
6

7
Disable Jtag
8

9
Config Adc = Single , Prescaler = Auto
10

11
Start Adc
12

13
Dim Sensor As Word
14

15

16

17

18
    Do
19

20
      Sensor = Getadc(0)
21

22
      If Sensor < 900 Then                                  'Taster 7
23
         Portc.5 = 1
24
         Portd.0 = 1
25

26
         Elseif Sensor < 750 Then                           'Taster 6
27
         Portc.5 = 1
28
         Portd.1 = 1
29

30
         Elseif Sensor < 600 Then                           'Taster 5
31
         Portc.5 = 1
32
         Portd.2 = 1
33

34
         Elseif Sensor < 450 Then                           'Taster 4
35
         Portc.5 = 1
36
         Portd.3 = 1
37

38
         Elseif Sensor < 325 Then                           'Taster 3
39
         Portc.5 = 1
40
         Portd.4 = 1
41

42
         Elseif Sensor < 175 Then                           'Taster 2
43
         Portc.5 = 1
44
         Portd.5 = 1
45

46
         Elseif Sensor < 25 Then                            'Taster 1
47
         Portc.5 = 1
48
         Portd.6 = 1
49

50

51
      Else
52
         Portc = 0
53
         Portd = 0
54

55
      End If
56
    Loop
57

58
    End
OP #3069048
Lesenswert?

Taster Testlauf:
1
' ADC 7 Taster Testlauf
2

3
$regfile = "m32def.dat"
4
Config Portc = Output
5
Config Portd = Output
6
Config Portb = Output
7
Disable Jtag
8
Config Adc = Single , Prescaler = Auto
9
Start Adc
10
Dim Sensor As Integer
11

12
    Do
13
     Portc.7 = 1
14
      Sensor = Getadc(0)
15

16
      If Sensor > 0 Then
17

18
       Select Case Sensor
19

20
         Case Is < 25                                       'Taster 1
21
         Portc.5 = 1
22
         Portd.6 = 1
23

24
         Case Is < 175                                      'Taster 2
25
         Portc.5 = 1
26
         Portd.5 = 1
27

28
         Case Is < 325                                      'Taster 3
29
         Portc.5 = 1
30
         Portd.4 = 1
31

32
         Case Is < 450                                      'Taster 4
33
         Portc.5 = 1
34
         Portd.3 = 1
35

36
         Case Is < 600                                      'Taster 5
37
         Portc.5 = 1
38
         Portd.2 = 1
39

40
         Case Is < 750                                      'Taster 6
41
         Portc.5 = 1
42
         Portd.1 = 1
43

44
         Case Is < 900                                      'Taster 7
45
         Portc.5 = 1
46
         Portd.0 = 1
47

48
         End Select
49
         End If
50

51
    Loop
52
    End
------------------------------------------------------------------------
Starttaster Testlauf:
1
' Spieleanzeige Testlauf
2

3
$regfile = "m32def.dat"
4

5

6
Config Adc = Single , Prescaler = Auto
7

8
Start Adc
9

10
Dim Sensor As Integer
11

12

13
Config Portc.6 = Output
14

15

16
    Do
17
     Sensor = Getadc(7)
18
      If Sensor < 500 Then
19
         Portc.6 = 1
20
      Else
21
         Portc.6 = 0
22
      End If
23

24
    Loop
25

26
    End
------------------------------------------------------------------

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