PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [ERLEDIGT] Wie Potentiometer richtig benutzen?



derSpinner
28.04.2014, 14:13
Hey Leute.
Nach den ersten Spielereien mit blinkenden LEDs und einem eigenständig erstellten Ampelprogramm wollte ich jetzt mal die Potis nutzen. Allerdings komme ich gerade nicht weiter und bin ratlos... In meiner Schaltung ändert sich rein gar nichts durch Betätigung des Poti1.
(Diese Frage habe ich bereits "Noob will in Microcontrollerprogrammierung + Roboterbau einsteigen - Anfängerfragen" gepostet, allerdings scheint da niemand reinzugucken und ich habe bisher keine Hilfe bekommen - hoffe mit einem neuem Thread hierfür sehen es mehr Member. Sry für den Doppelpost, aber ich habe viel gelesen und gesucht und komme einfach nich weiter).

Hier mein Board (myAVR light):
28099

Ich habe Pot.1 an PortD.2 angeschlossen. Nach meinen Recherchen muss man nun dem µC sagen, dass er an PortD.2 die Spannung abgreifen soll. Dies geschieht mit dem Befehl "Getadc([Zahl])". [Zahl] ist dabei der entsprechende Port. Laut Datenblatt unterstützt das verwendete Board ADC-Abgriffe an den Ports 1-7. Ich vermute, dass damit die Zahl der Durchnummerierung der Ports gemeint ist - PortD.2 ist dann Laut Datenblatt Port 1, also heißt der Befehl bei mir: "Getadc(1)" - soweit richtig?

Hier ist mein Beispielprogramm, das die drei LEDs durchlaufen lassen soll, wobei man mit dem Poti1 die Leuchtdauer (also die Geschwindigkeit des LED-Durchlaufs) einstellen können sollte:


' BASCOM-Programm
' Stefan Hoffmann 2009
' Poti-Spannungsteiler an ADC1 5V -- Poti -- Masse
'Poti z.B. 47k
' oder
' LDR-Spanungsteiler an ADC1 5V -- LDR --+-- 10k -- Masse
'
'
' In: B.2: Poti-Mittelabgriff
' oder LDR-Spannungsteiler an ADC1

' Out: LED C.4 (rot) hoch
' Led C.2 (grün) Mittel
' LED C.3 (gelb)niedrig
'
$regfile = "m8adef.dat"
$crystal = 1200000

Config Portd.2 = Input 'Poti/LDR

Config Portc.4 = Output 'LED rot
Config Portc.2 = Output 'LED gruen
Config Portc.3 = Output 'LED gelb

Ledrot Alias Portc.4
Ledgruen Alias Portc.2
Ledgelb Alias Portc.3

Dim Analogwandler As Integer 'Variable zur Aufnahme des Wertes vom Analogwandler

Config Adc = Single , Prescaler = Auto , Reference = Avcc 'Analogwandler definieren
'Start Adc 'AD-Wandler starten (nach Config automatisch)

Do
Analogwandler = Getadc(1) 'AD-Wandler einlesen. Werte zwischen 0 und 1023
Analogwandler = Analogwandler
Ledrot = 0
Ledgruen = 0
Ledgelb = 1
Waitms Analogwandler
Ledrot = 0
Ledgruen = 1
Ledgelb = 0
Waitms Analogwandler
Ledrot = 1
Ledgruen = 0
Ledgelb = 0
Waitms Analogwandler
Loop
End

Bei mir bleibt die Durchlaufgeschwindigkeit aber immer gleich. Es ändert sich nichts durch drehen an dem Poti1.
Noch eine Frage dazu: Wozu ist auf dem Board der Anschluss AREF? Der muss doch auch etwas mit dem Poti zu tun haben???

Searcher
28.04.2014, 14:38
Ich habe Pot.1 an PortD.2 angeschlossen. Nach meinen Recherchen muss man nun dem µC sagen, dass er an PortD.2 die Spannung abgreifen soll. Dies geschieht mit dem Befehl "Getadc([Zahl])". [Zahl] ist dabei der entsprechende Port.
Falsch. "Zahl" ist der ADC-Kanal. In BASCOM Hilfe zu GETADC. Den Portpin findet man im Datenblatt bei Pin Configurations als ADC0, ADC1,...
Beim ATMega8a befinden sich die ADC Kanäle auf PORTC.

Das Poti hat noch zwei weitere Anschlüsse. Wo sind die angeschlossen. Zum Abgriff in Richtung ADC-Pin kann man noch einen zB. 510 Ohm widerstand in Reihe legen, um unabsichtliche Kurzschlüsse durch fehlerhafte INPUT/OUTPUT Konfiguration zu vermeiden. Welchen Widerstandswert hat das Poti?


Laut Datenblatt unterstützt das verwendete Board ADC-Abgriffe an den Ports 1-7. Ich vermute, dass damit die Zahl der Durchnummerierung der Ports gemeint ist - PortD.2 ist dann Laut Datenblatt Port 1, also heißt der Befehl bei mir: "Getadc(1)" - soweit richtig?
Ins Datenblatt und Stromlauf zum Board schauen.

Gruß
Searcher

jcrypter
28.04.2014, 14:39
Hi,

laut http://www.atmel.com/images/atmel-2486-8-bit-avr-microcontroller-atmega8_l_datasheet.pdf
auf Seite 2 liegt der ADC 1 auf Port C 1 also Pin 24.
evtl hast Du nur den falschen Pin erwischt.
Ich verwende START ADC, und würde es auch drin lassen. Stört ja nicht.

vielleicht wird es deutlicher ob deine Schaltung funktioniert, wenn Du anstatt die waitms durch den Wert des ADC zu erhöhen/zu verringern eher eine if-Abfrage verwendest.
pseudo-code


if analogwandler <500 then
ledgruen = 1
ledgelb = 0
ledrot = 0
else if analogwandler >500 then
ledgruen = 0
ledgeld = 1
ledrot=0
endif
.....



hier ein gutes beispiel für ADC
http://halvar.at/elektronik/kleiner_bascom_avr_kurs/adc_mit_getadc/

Grüße
Crypi

derSpinner
28.04.2014, 18:45
Alles klaro! Vielen Dank euch beiden. ;-) Jetzt bin ich endlich dahintergestiegen! :-)
Wenn man es weiß ist das völlig logisch und klar :-D
Steht ja auch in der Bedienungsanweisung, dass die Ports C0 bis C5 die ADC0 bis ADC5 abgreifen! *vor die Stirn hau*
Habe jetzt den richtigen Port angeschlossen und im Programmcode die Portzuweisung geändert und nun läuft alles! :-) Perfekt^^