mikrocontroller.net

Forum: Compiler & IDEs Analog einlesen und als PWM ausgeben


Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo an die Profis,

Ich habe folgendes problem, Ich habe AVR Mikrocontroller ATMEGA8L mit 
8Mhz und lese einen Analogwert an Port C Pin 0 ein. Soweit habe ich die 
sache auch schon. Nun wie kann ich diesen eingelesenen Analogwert als 
eingangswert für meine PWM benutzen und auf einen Ausgang darstellen?
Und wie kofiguriere ich den Timer 1? Da ich einmal H und L habe?

Habe mein momentanes Programm Angehängt


oder kann mir jemand die beispiel Programme von myAVR Wordpad schicken? 
Im speziellen fall:

5.Timer und 6.Analog (Beispiel PWM LED Dimmer)

Vielen Dank im vorraus

Michael

Autor: Michael (Gast)
Datum:
Angehängte Dateien:
  • pwm.cc (1,74 KB, 621 Downloads)

Bewertung
0 lesenswert
nicht lesenswert
Hier der Anhang

Autor: AVR-Jünger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>  wert = ADCH;        //6Bit Auflösung
>  }
>  ADCSRA &= ~(1<<ADEN);             // ADC deaktivieren (2)

>  wert /= 4;                     // Summe durch vier teilen = arithm. >Mittelwert

Es wird aber leider keine Summe gebildet. Und wie kommst du auf eine 
6Bit-Auflösung?

Mit "int" und Ports wirst du nicht viel.
Benutz einfach "unsigned char" für beides.

Wenn du den ADC-Wert einfach nur ausgeben willst, musst du einen Timer 
mit entsprechender Einstellung starten.
Wenn es 8Bit breite ADC-Werte sind, kannst du die direkt in ein 
OC-Register schreiben.

Autor: Michael (Gast)
Datum:
Angehängte Dateien:
  • pwm.cc (2,1 KB, 341 Downloads)

Bewertung
0 lesenswert
nicht lesenswert
viele dank erst mal, habe nun auch den Timer implementiert.

Ich kam auf eine 6 bit auflösunf da ich den eingelesenen Analogwert auf 
den PortD gelegt habe und mit den LED überprüft aber an den Ausgängen 
6und 7 kam nichts an, somit folgerte eine Auflösung von bit0 bis bit5. 
kam mir selber auch komisch von da ich ja mit 8 bit einlese!

Habe nun auch unsigned char benut, DANKE

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
OH wenn ich die werte addiere bekomme ich einen größeren wert als 8 bit 
das muß ich noch ändern!

Autor: Michael (Gast)
Datum:
Angehängte Dateien:
  • pwm.cc (2,13 KB, 256 Downloads)

Bewertung
0 lesenswert
nicht lesenswert
nun funktioniert es!
Vielen dank nochmal an AVR-Jünger.

Autor: Michael (Gast)
Datum:
Angehängte Dateien:
  • pwm.cc (2,13 KB, 205 Downloads)

Bewertung
0 lesenswert
nicht lesenswert
OOOHHHH doch zu früh gefreut habe der PWM ausgang invertiert! das signal 
wird nicht von null bis 100% generiert!! sondern nur von X% bis 100%.

Wies aber nicht wieso! Liegt es evlt. an dem Analogwert?

Autor: AVR-Jünger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
lass das (1<<COM20) weg...

Autor: Michael (Gast)
Datum:
Angehängte Dateien:
  • pwm.cc (2,12 KB, 877 Downloads)

Bewertung
0 lesenswert
nicht lesenswert
Habe (1<<COM20) rausgenommen aber habe immer noch das selbe problem!

Er regelt nicht von 0 bis 100% sondern nur schätzungsweiße von ca.2-5% 
bis 100%!

Kann man ein PWM Signal nicht ganz auf null regeln?

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Habe das Problem gelöst!

Autor: Rahul, der Trollige (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Habe das Problem gelöst!

Und wie?

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
In der PWM Einstellung muß
 |(1<<WGM21)
raus!
Danch ist das PWM Signal von 0 bis 100% schön regelbar!

Würde mich interesieren ob ihr das Programm weiterverwendet?

Und Was ihr damit anstellt?

Gruß Michael

Autor: Rahul, der Trollige (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>In der PWM Einstellung muß |(1<<WGM21) raus!
>Danch ist das PWM Signal von 0 bis 100% schön regelbar!

Das ist doch schön.

Autor: Rahul, der Trollige (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So,jetzt habe ich mir den Spaß noch im Datenblatt angeguckt.
Durch das Setzen von TCCR2 in dieser Form:

(1<<WGM21)| (1<<WGM20)

schaltest du den Timer in de CTC-Mode (Seite 109 im Datenblatt).
Durch
>(1<<COM21)
wird der OC-Pin bei jedem "positiven Vergleich" (TCNT == OCR2) 
umgschaltet.
Durch ändern des OCR2 veränderst du also nicht nur den Puls, sondern 
auch die Pause. Dadurch hast du eine variable Frequenz mit einem 
Tastgrad von 0,5.
Das ist keine PWM mehr im herkömmlichen Sinne.

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für die INFO
Mein Problem ist ich habe das Datenblatt nicht!
Ich währe dir sehr dankbar wenn du mir es evtl. schicken könntes! oder 
mir sagen Kannst woher ich es bekomme! Habe schon im Netz danch gesucht!
Und nun progranniere ich das ich mir andere Programme anschaue und mir 
daraus die informationen hole, was aber sehr mühsam ist!

Househasi1@web.de

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> oder mir sagen Kannst woher ich es bekomme!
Wie jetzt, Du programmierst einen Controller, ohne das Datenblatt zu 
haben??? Schon mal auf die Idee gekommen, bei www.atmel.com nachzusehen? 
Da gibts Datenblätter für alle ATMEL-Controller und noch vieles mehr. 
Und das schönste ist: Es ist alles KOSTENLOS!

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke, auf diese triviale Lösung bin ich nicht gekommen, wie peinlich!

Habe alles aus Programmen und dem Tutorial abgeschaut und ausprobiert!

Autor: Rahul, der Trollige (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Und nun progranniere ich das ich mir andere Programme anschaue und mir
>daraus die informationen hole, was aber sehr mühsam ist!

Respekt!

>Danke, auf diese triviale Lösung bin ich nicht gekommen, wie peinlich!

Naja, sowas kann passieren...

Autor: Andy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
TCCR2 |= (1<<COM21) | (1<<COM20) | (1<<WGM21)| (1<<WGM20) | (0<<CS22) | 
(0<<CS21) | (1<<CS20);

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.