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; }
>Wie bekomme ich es jetzt hin das der ADC von 0,5 - 5V ausgeht und nicht >wie bis jetzt von 0-5v??????? Zieh die 0,5V einfach von deinem ADC Ergebnis ab.
Danke für die Antwort aber wie soll ich das im Programm umsetzen??
:
Bearbeitet durch User
if ADC >= 25 ADC=ADC-25 PWM=ADC*11/10 else PWM=0 Pseudocode :-)
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.
Muss leider sagen das ich Leihe bin wo genau soll ich den Pseudocode einsetzen?? Muß ich sonst noch was am Proramm ändern? Danke schon mal!
:
Bearbeitet durch User
ne, oder? unsigned int temp; temp=adc_read8(PA0); if (temp>25) temp=(temp-25)*11/10; else temp=0; OCR1A=temp; Und (fast) dasselbe noch mal für OCR1B. Zum Berechnen brauchst du eine 16bit-B´Variable (temp), weil du sonst bei der Multiplikation einen Überlauf hättest.
H.Joachim Seifert schrieb: > ne, oder? Kann auch nichts dafür bin schon über ne Woche am rumsuchen und versteh immer noch Bahnhof.
:
Bearbeitet durch User
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 ;-)
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!
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.
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!
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.