- 12V Akku mit 280 Ah bauen         
Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 19 von 19

Thema: ADC und Poti

  1. #11
    Benutzer Stammmitglied
    Registriert seit
    20.11.2005
    Beiträge
    88

    ADC und POTI

    Anzeige

    Praxistest und DIY Projekte
    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:

    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

  2. #12
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    22.04.2005
    Beiträge
    178
    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

  3. #13
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    02.11.2005
    Alter
    49
    Beiträge
    1.146
    Zitat Zitat von Cybrix
    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

  4. #14
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    22.04.2005
    Beiträge
    178
    Dann müsste es so aussehen

    X= Getadc(0)
    SHIFT X,right ,2
    Helligkeit =X

    dann sollte es noch etwas schneller gehen

    felack

  5. #15
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    52
    Beiträge
    2.236
    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

  6. #16
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    02.11.2005
    Alter
    49
    Beiträge
    1.146
    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

  7. #17
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    52
    Beiträge
    2.236
    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:
    Code:
    return b/4;
    das ist das Assemblerergebnis:
    Code:
     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

  8. #18
    Benutzer Stammmitglied
    Registriert seit
    20.11.2005
    Beiträge
    88
    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..
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken avr_adc_187.jpg  

  9. #19
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    22.04.2005
    Beiträge
    178
    was macht das Programm denn falsch ??

    felack

Seite 2 von 2 ErsteErste 12

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Solar Speicher und Akkus Tests