Variable Ausgangsspannung über PWM mit ATMega88

Gast #2003345
Lesenswert?

Hy,

ich habe einen ATMega88 und versuche dort über einen Eingang die 
anliegende Spannung auszulesen und über einen Ausgang die Spannung als 
PWM Signal auszugeben. Als Referenz benutze ich die Stromquelle für den 
AVR (5V).
Als einmal Anwendung kann ich eine Spannung ausgeben, doch nich 
verändern.
Ich habe am ADC7 Eingang ein Potentiometer, damit verändere ich die 
Spannung und möchte das die Ausgangsspannung sich dementsprechend auch 
verändert.
Leider ist es mir bis jetzt nicht gelungen.

Denn Code habe ich als Anhang beigefügt.

Ich hoffe jemand von euch kann mir einen Tipp geben wie ich das Problem 
lösen kann.

thx
Angehängte Dateien:
Gast #2003671
Lesenswert?

Thx erstmal das anheben des Wertes ICR1 hat schonmal geholfen nun seh 
ich einen direkten Einfluss des Potentiometers auf die ausgegebene 
Spannung.
Trotzdem habe ich noch ein paar Probleme.
Am Poti. liegen 3V an und ausgeben tut es aber 2,8V, bei allen Werten 
fehlen 200mV kann mir jemand erklären wo die hin sind ;-).
Benötige ich diese Variable überhaupt "DIDR0 &= ~(1<<ADC5D)", es handelt 
sich hier um eine Leiche weil ich den Code aus einem Tut angepast habe.
Außerdem benutze ich ja den ADC7 Eingang, ich weiß nicht inwiefern diese 
Einstellung Auswirkung auf das Programm hat.
thx
#2008882
Lesenswert?

Ist im Grunde ziemlich egal, denn deine tatsächliche Spannung am Ausgang 
wird in nicht unerheblichem Masse von der Aussenbeschaltung am PWM-Pin 
abhängen.

Aber wenn schon, dann Fast. Damit erreichst du die schnellste 
PWM-Frequenz.


Die bessere Lösung wäre es, wenn du die Ausgangsspannung (nach Filterung 
natürlich) wieder mit einem ADC misst und die PWM entsprechend 
nachstellst. Dann landest du allerdings schon bei einem Regelkreis.
#2009184
Lesenswert?

Was willst du erreichen?
Wie sind deine Umgebungsbedingungen?

Das Wandeln selbst geht auch nicht schneller.

Kein Mensch sagt, dass die Reihenfolge sein muss

 while( 1 )
   Wandlung starten
   Ergebnis abwarten
   Ergebnis holen
   Ergebnis bearbeiten

die Reihenfolge kann ja auch so sein

  while( 1 )
    Ergebnis holen
    Wandlung starten
    Ergebnis bearbeiten

Dann wandelt dein ADC, während du das letzte Ergebnis bearbeitest und 
wenn du wieder zum Punkt kommst, an dem du den ADC befragst, ist der ADC 
mit der nächsten Messung schon wieder fertig, du holst es und startest 
den ADC gleich wieder neu damit er im nächsten Schleifendurchlauf das 
nächste Ergebnis fertig hat.

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