ADC 0,5-5v statt 0-5v für Dimmer

OP #3545730
Lesenswert?

Hallo zusammen,
Mein Aquaristik-computer hat einen 1-10V Ausgang will damit meine Lampe 
dimmen. Habe einen Spannungsteiler eingesetzt und somit 0,5-5v die ich 
an PA0 bzw PA1 eingebe und dann der MC ein PWM Signal für meine 
Konstantstromquelle ausgeben lasse!
Das Programm funktioniert soweit bis auf das der ADC von 0-5V aufteilt.
Das heist im Klartext:
Bei 0% in meinem Aquarium Computer = 0v LED glimmt ganz leicht.
Bei 1% schießt er dann sofort 0,5v rein und die LED leuchtet dann ja 
schon mit ca. 10%(5v/100x10=0,5v)

Wie bekomme ich es jetzt hin das der ADC von 0,5 - 5V ausgeht und nicht 
wie bis jetzt von 0-5v???????

Verwende einen Atmega 8535 TAkt 8 MHz
Referenzspannung 5v

Hoffe es kann jemand helfen.

#include <avr/io.h>
#include <stdio.h>

unsigned char adc_read8(char channel);

int main(void)
{

  //PD4,5 output
  DDRD = (1<<DDD4) | (1<<DDD5);

  //TIMER 1
  ICR1 = 255;
  TCCR1A = (1<<COM1A1) | (1<<COM1B1) | (1<< WGM11);   //Fast PWM, TOP = 
ICR1, Clear on Compare Match
  TCCR1B = (1<<WGM13) | (1<<WGM12) | (1 << CS12);     //Fast PWM, 
Prescaler 256


  //ADC
  ADMUX = (1<<REFS0) | (1<<ADLAR);       //VRef = AVCC
  ADCSRA = (1<<ADPS2) | (1<<ADPS1) | (1<<ADEN);       // 125 kHz @ 8 
Mhz, ADC enabled
  ADCSRA |= (1<<ADSC);
  while (ADCSRA & (1<<ADSC));

  unsigned int i = 0;
  while(1)
  {
    if (~i)
    {
      OCR1A = adc_read8(PA0);
      OCR1B = adc_read8(PA1);

    }
    i++;
  }
}

unsigned char adc_read8(char channel)
{
  ADMUX = (ADMUX & ~(0x1F)) | (channel & 0x1F);
  ADCSRA |= (1<<ADSC);
  while (ADCSRA & (1<<ADSC));
  return ADCH;
}
Gast #3545780
Lesenswert?

Markus Mois schrieb:
> Wie bekomme ich es jetzt hin das der ADC von 0,5 - 5V ausgeht und nicht
> wie bis jetzt von 0-5v???????

Indem du das ADC Wandlungsergebnis noch einmal umrechnest, bevor du den 
Wert zum Steuern der PWM verwendest.
Das einfachste wäre die schon vorgeschlagene Nullpunktverschiebung 
(Offset). Damit die Steuerung bei geringer Helligkeit nicht zu stufig 
wird und zu schnell hell wird, kann man auch z.B. eine Tabelle mit 
Interpolation verwenden, mit der man eine beliebige Kennlinie (ADC Wert 
-> Helligkeit) realisieren kann.
OP #3545940
Lesenswert?

Mike schrieb:
> Markus Mois schrieb:
> Muss leider sagen das ich Leihe bin
>
> Markus Mois schrieb:
> Habs mit rein und es funzt wunderbar. Dank Euch!
>
> Prima, dass es so einfach mit geliehenem Code geht ;-)

Hab natürlich Laie gemeint! Ja es gibt freundliche Forum Mitglieder die 
gerne helfen! Alleine bin ich zu unerfahren bring zwar in bascom ein 
bißchen was zustande aber mehr auch nicht. Und nein falls du meinst ich 
hab ihn irgendwo einfach rauskopiert. Er wurde von einem Forum Mitglied 
für mich ausgearbeit!
#3545960
Lesenswert?

Du solltest dennoch versuchen zu verstehen, was da so im einzelnen 
passiert, wenn du irgendwas in der Richtung weitermachen willst.
Bist du mehr der Aquarianer, für den das nur eine funktionierende 
blackbox ist (also Lösung eines Problems ist die primäre Aufgabe, ohne 
wissen zu wollen, was dahinter steckt) ist das auch in Ordnung.
OP #3545988
Lesenswert?

danke für die ehrlichen Worte!Will natürlich was in die Richtung weiter 
machen da mich das ganze Thema sehr interessiert und fasziniert! Aber es 
ist nicht so einfach wenn man von 0 anfängt.
LED blinken lassen lauflicht usw. bring ich schon hin. Aber für die 
Dimmersteuerung hab ich einfach nicht gewusst wie ich ansetzen soll!

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