Archiv verlassen und diese Seite im Standarddesign anzeigen : ADC und Poti
Hallo Leute,
mir ist das noch mit dem Analog-Digitalwandler unklar.. Habe mal ein kleines Schaltbild erstellt. Würde es so gehen, wie groß muss das Poti sein. Im Datenblatt steht was mit 100k ??
du musst auf jedenfall noch Agnd ,avcc und aref beschalten
Agnd kommt an die masse
AVCC kommt an die versorguungsspannung
und an Aref legst du deine referenz spannung an wahrscheinlich ja 5V
ja davon bin ich ausgegangen, hatte das nur schnell gemacht... Aber sonst müsste es doch funktionieren so oder ??
Ich möchte im endeffekt eine LED am andern ausgang dimmen ( ABER im AUTO). Gibt es ein IC od. ähnl. das man die Einstellung galvanisch trennen kann oder reicht es wenn ich ein spannungsteiler mit poti mache ?? und GND verbinde ??
also ich verstehe wieso du ein atmega fürs dimmen verwenden möchtest!
dann könntest du doch gleich ein poti für die led nehmen!
und falls du das mit dem atmega realiesieren willst brauchst du hinter irgendinem Port ja noch ein D/A wandler
Ich will ja dann mehr mit dem mega im auto machen. Nur eine aufgabe ist es LED per Pulsweitenmodulation zu dimmen..
Mit dem Poti möchte ich ja nur den Timer verändern.. Das müsste doch gehen oder. Kann ja Das Poti auch über 5V laufen lassen.
Ich möchte dieses Board nun bauen, halt nur noch mit der Funktion, das man ein Poti zur Verfügung hat, wo man Analog was regeln kann..
http://www.mds-5.de/webinfo/data/images/Schaltplan.gif
Wäre super über eine Idee wo und wie ich das Poti nun anbringe und welche Größe!??.. Ein Ausgang der zum ULN2803 geht kann ja benutzt werden als Eingang, dann beiben halt nur noch 7, das reicht mir aber..
Schönen Gruß
du musst das so machen das max 5 Volt anliegen und minimal 0V am poti wenn du die referenzspannung an 5 Volt legst!
ja vielen Dank...
Ich habe nun mal ein Schaltbild beigefügt. Guckt mal bitte auf den ADC0. Wäre der Jumper für das Poti gesteckt, müsste es doch gehen mit dem analogen Eingang oder ?
Welche Größe an Poti und Widerstand nimmt man denn ( 100k ) und brauch ich eigentlich den widerstand davor, weil ich will ja die Spannung garnicht verringern(teilen) sondern 5V als max-Wert haben.
** ups so nun hochgeladen
ich würde denn vorwiderstand als strombegrenzer nehmen und dann ein verhältniss von 100: 1 vom poti und widerstand dann wirkt sich der wiederstand nicht so groß aus
ja dafür hatte ich ihn auch bedacht, lag also nicht falsch *löl*
Also 100k Poti und 1k Widerstand.
z.B. so könntest du das machen
Hallo leute, ich habe über den ADC 0 eine 100k Poti mit 1k Widerstand dran. Nun möchte ich auf einem anderen Port eine LED dimmen. Es funzt fast wunderbar, aber wenn ich das Poti drehe, kann ich 3-4 mal hell und dunkel dimmen.. Warum so oft ??
Hier ist mein aktueller Code:
$regfile = "m8def.dat"
'Quarzfrequenz
$crystal = 8000000
'Hier wird der Timer und der Teiler festgelegt
Enable Timer0
Config Timer0 = Timer , Prescale = 64
On Timer0 Timer_irq
Config Pinb.2 = Output
Config Adc = Single , Prescaler = Auto , Reference = Avcc
Config Portc = &B00000000
Start Adc
Led1 Alias Portb.2
Dim X As Byte
Dim Helligkeit As Byte
Helligkeit = 255
Enable Interrupts
Do
X = Getadc(0)
Helligkeit = X
Loop
Timer_irq:
Toggle Led1
If Led1 = 1 Then
Timer0 = 255 - Helligkeit
Else
Timer0 = Helligkeit
End If
Return
Das liegt daran, dass du vom AD-Wandler Werte zwischen 0 und 1023 (10 Bit) geliefert bekommst, das Byte für Helligkeit kann aber nur Werte bis 255 (8 Bit) annehmen kann. Deshalb ergibt sich bei 256, 512 und 768 für die Helligkeit der Wert 0 und steigt dann wieder an.
Änderung am Programm:
X= Getadc(0)
X = X/4
Helligkeit =X
dann sollte es gehen
felack
ich würde denn vorwiderstand als strombegrenzer nehmen
Wieso sollte man bei einem Poti einen Strombegrenzer brauchen?
Da der Eingang des ADC sehr hochohmig ist (min. 55MOhm), ist der Strom, der durch das Poti fließt, quasi unabhängig von der Schleiferposition. In Deinem Falle 5V/100k = 50µA. Du brauchst dort definitiv keinen Vorwiderstand.
Zum Programm:
Eleganter als die Division ist es eigentlich, die unteren 2 Bit einfach fallen zu lassen, also das ADC-Ergebnis um 2 Bit nach rechts zu schieben.
askazo
Dann müsste es so aussehen
X= Getadc(0)
SHIFT X,right ,2
Helligkeit =X
dann sollte es noch etwas schneller gehen
felack
Eleganter als die Division ist es eigentlich, die unteren 2 Bit einfach fallen zu lassen, also das ADC-Ergebnis um 2 Bit nach rechts zu schieben.
Erennt der Compiler das nicht von alleine?
Gruß Sebastian
Gute Frage, da müsste man sich mal den generierten Assemblercode von beiden Varianten anschauen und vergleichen...
Aber abgesehen davon ist der Quelltext mit shift auch leichter verständlich - finde ich zumindest.
askazo
Genau, das habe ich auch gemacht, leider bei avr-gcc aber ich denke Bascom erzeugt genauso ein Code, ich habe in einer Funktion eine 16 Bit Zahl durch 4 geteilt:
return b/4;
das ist das Assemblerergebnis:
10c: 96 95 lsr r25
10e: 87 95 ror r24
110: 96 95 lsr r25
112: 87 95 ror r24
114: 08 95 ret
soviel zum Thema
dann sollte es noch etwas schneller gehen
Also nicht schneller,sondern schöner, so weißt jeder direkt, daß man durch Rechtsschieben durch Zweierpotenzen teilen kann.
Was wirklich schneller wäre, das ADC Ergebnis links auszurichten(ADLAR)
und das untere Byte ganz wegzulassen.
Gruß Sebastian
Danke für die gute Beteiligung...
Nur Leider gehen beiden Varianten bei mir nicht.. Er dimmt nie vom Anfangs- bis zum Endwert :-(
X= Getadc(0)
SHIFT X,right ,2
Helligkeit =X
od.
X= Getadc(0)
X = X/4
Helligkeit =X
Ich hänge nochmal den Schaltplan ran, AVCC und so weiter sind ja bei mir mit angeschlossen..
was macht das Programm denn falsch ??
felack
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.