Forum: Mikrocontroller und Digitale Elektronik ADC Ansteuerung durch einen Taster an den Atmega32l


von Jannis P. (jannis94)



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

von holger (Gast)


Lesenswert?

Do
      Sensor = Getadc(1)

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

    Loop

    End

von Jannis P. (jannis94)


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.

von Mirko (Gast)


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!

von Jannis P. (jannis94)


Angehängte Dateien:

Lesenswert?

Ja, beim Reset Taster hat es so funktioniert. Leider bin ich nicht so 
bewandert in diesem Bereich. Warscheinlich hätte man sich die 5 Volt 
Leitung sparen können. Einfach ADC -> Taster -> Ground oder?

von Jannis P. (jannis94)


Angehängte Dateien:

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.

von Jannis P. (jannis94)


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

von Jannis P. (jannis94)


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
------------------------------------------------------------------

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.