Forum: Mikrocontroller und Digitale Elektronik AT89C2051 und PWM


von Michael B. (michael123)


Lesenswert?

Hallo,

ich habe mal das Internet unsicher gemacht aber nicht zu diesem Thema
gefunden deswegen wende ich mich an euch.
Hat jemand schon mal mit dem AT89C2051 eine PWM programmiert?
Kann derjenige oder diejenige mir dieses Programm zur verfüngung
stellen?

danke
mfg
Michael

von Jack B. (jackbraun)


Lesenswert?

Hallo Michael,

Ich gehe mal davon aus, daß Du in Assembler programmierst.
Du brauchst beide Timer im Mode 2 (Register TL0 ist dann ein
8-Bit-Zähler, der bei Überlauf mit dem Wert vom TH0 Register
nachgeladen wird). Bei Timer0 bleibt TH0, d.h. der Timer0 verursacht
alle 256µs einen Interrupt (bei 12 Mhz). Im Timer0 Interrupt wird dann
ein Ausgangspin  0 gesetzt und Timer1 gestartet. TH1 kann mit einem
bestimmten Wert geladen werden (z.b. 128) und zählt dann von 128 bis
256 und verursacht einen Timer1 Interrupt. In diesem Interrupt wird
dann der Ausgangspin wieder hochgesetzt und Timer1 gestoppt. Das würde
eine Pulsweite von 50% ergeben.
Durch verschiedene Werte für TH1 kann die Pulsweite verändert werden.

Gruß Jack

von Michael B. (michael123)


Lesenswert?

Hall,

danke für die Antwort. Aber ich hätte vielleicht vohrher sagen sollen
das es sich inzwischen erübrigt hat weil ich nicht weiß wie ich das
ding programmieren soll und wie ich den Oszillator anschließen soll.
:-(

mfg
Michael

von Schoaschi (Gast)


Lesenswert?

Was meinst du mit nicht programmieren können? HAst do kein
Programmiergerät ? Warum baust du dir denn keines? Gibts ganz einfache
im Netz.

Zum Oszillator. Häng einfach den Ausgang des Oszillators an XTAL1. Wenn
du einen Quarz verwendest muss halt dieser an XTAL1 und an XTAL2
angehängt werden und jeweils ein Kondensator (ca 33pF) gegen Masse
schalten.

von Thomas (Gast)


Lesenswert?

Na das kannst Du doch auch mal dieses Forum Fragen:

PWM und Programmiergerät, sowie Oszillator anschliessen für 89C2051

Oh weia.
Bist Du Deutschland?

von Michael B. (michael123)


Lesenswert?

Hallo,

das war mehr oder weinger eine "Schnapidee" das mit PWM zu machen und
da habe ich mir halt den Billigsten µC von Atmel den Reichelt führt
rausgesucht. Aber das ganz wird dann zu teuer ich brauch dann ca 40
stück :-o .
Aber trotzdem danke

mfg
Michael

von Thomas (Gast)


Lesenswert?

Billiger gehts mit dem NE555, der macht prima PWM

von Schoaschi (Gast)


Lesenswert?

Wenn du vl etwas genauer beschreiben könntest, was du eigentlich vor
hast, könnte man dir vl helfen... aber nur wenn du willst.

von Michael B. (michael123)


Lesenswert?

Hallo,

helfen lasse ich mir gerne.

Also ich möchte damit mehere LED's ansteuern aber es MUSS so lautet
die Aufgaben stellung PWM sein. Also es steht ein 8 bit siganl zur
verfügung welches ein oder aus ist und das 8 mal. Also sozusagen 8
Schalter. Diese leifern ein +5V signal wenn sie an sind. Wenn sie aus
sind liefern sie natürlich nichts.
An den PWM ausgang des µC kommen dann zwei 1000µF elkos zur Glättung.
Danach kommt dann die LED. Ich weiß das das ganze teuer wird. Es sollen
dadurch 35 LED's angesteuert werden.
Ach ja falls ihr eine anderen µC als den AT89C2051 nehmen würdet der
eventuell mehr als einen PWM Ausgang hat bin ich seher froh wenn ich er
mir sagen tätet.

So ich dachte mir das dann so:
Die 8 schalter kommen an 8 Eingänge des µC.
Der µC liest dies 8 Eingänge und macht daraus das PWM signal.
Die Kondensatoren gläten dieses dann noch ein Bisschen und dann geht es
weiter zur LED.
Das wäre es dann auch.
Ich vermute das das ganze später noch erweitert wird. Das dann stat der
LED ein erstärker hinkommt und dann eine Motor oder Ähnlich antreibt.

mfg
Michael

von peter dannegger (Gast)


Lesenswert?

Das mit den 1000µF vergiß mal ganz schnell, sowas mag kein MC, ist quasi
ein Kurzschluß für die PWM.
Die Glättung durch das Auge reicht vollkommen.


Peter

von peter dannegger (Gast)


Angehängte Dateien:

Lesenswert?

Und hier mal ne 8-Kanal PWM


Peter

von Jack B. (jackbraun)


Lesenswert?

ATmega 16 (DIL40) und der kleinere ATmega 8 haben 2 PWM Ausgänge, die
super einfach zu programmieren sind (das Byte, das Du an einem Port
eingelesen hast, wird einfach in ein Register geschrieben und steuert
damit die Impulsbreite).

von Michael B. (michael123)


Lesenswert?

Jack Braun

kannst du mir da auch mal ein beispiel program/tutorial geben wo
erklärt wird wie mal auf die PWM zugreift?
Nach möglichkeit auf deutsch.

mfg
Michael

von Jack B. (jackbraun)


Lesenswert?

Ich kann Dir nur ein Beispiel in Bascom-AVR (Basic-Compiler für AVRs)
geben, und das wird Dir wenig nützen,weil Du die Entwicklungsumgebung
nicht kennst/hast. Es hilft nichts, wenn Du den Micro (z.B.ATmega 16)
programmieren willst, mußt Du Dich vorher im Datenblatt schlau machen,
und Dich dann entscheiden ob  Du in Assembler oder in Basic
programmieren willst. Wenn Du schnell was machen willst, würde ich
Dir Bascom-AVR empfehlen, das gibts umsonst.

von Schoaschi (Gast)


Lesenswert?

Steht bei deinen Anforderungen nicht mit welchem Controllertypen du das
machen sollst?

Mit einem AT89C2051 ist das sicherlich zu schaffen... dürfte auch nicht
wirklich schwer sein. Hardware PWM brauchst du dafür halt nicht...
vorausgesetzt du musst nichts anderes mehr machen.

Am Ausgang vom µC solltest du sowieso dann einen Transistor
verwenden... denn 35Leds mag ein µC nicht gerne ;-)

Wieviele LEds sind denn immer miteinander zusammengeschlossen? Also
deine Rechnung mit den 8 Eingängen geht, meiner Meinung nach nicht
auf.. oder meinst du zb, wenn der 1. Eingang auf 0 ist, dann leuchtet
die Led nur zu 50% und wenn der Eingang auf 1 ist, dann ganz?

Erklär das bitte nochmal genau wie du das machen würdest.

PS.: Ich würd wohl nenn PIC nehmen ... oder ganz einfach beim
AT89C2051(oder halt den AT89C4051) bleiben ;-)

von Michael B. (michael123)


Lesenswert?

Hallo

@jack

ich progge nur in basic

@schiaschi

es sind nicht 35 leds an eine sondern es sind dann insgesammt 35 µC
wenn einer nur ein PWM hat.
Das mit den 8 eingängen ist so:
es sind 8 bit also 255 verschiedene stellungen. Also kann die led auch
in 255 helligkeitsstufen leuchten.
so ist da gemeint

ach ja die aufgabenstellung heißt es soll mit PWM sein und so billig
wie möglich.

fmg
micheal

von Jack B. (jackbraun)


Lesenswert?

Wenn Du nur Basic kannst, ist der Bascom-Compiler genau das richtige.
Als Mikro nimmst Du dann den ATmega 8. Der 2051 ist zwar nur halb so
teuer, aber damit kannst Du nur einen PWM Ausgang realisieren, beim
ATmega 2, vielleicht sogar 3. Außerdem bräuchtest Du für den 2051
ein Programmiergerät, während der ATmega über die SPI-Schnittstelle
direkt aus Bascom heraus zu programmieren ist. Dazu braucht man nur
4 Verbindungen vom Parallelport des PC zum Mikro und 3 Widerstände.

von Schoaschi (Gast)


Lesenswert?

Also ich muss zugeben.. so ganz verstehe ich deine Aufgabe nicht ;-)..
1Led an einem µC, welches über PWM gesteuert wird. Und das ganze 35
mal?
Das ist eigentlich pure verschwendung des µC. Das ging mit einem
kleineren dann auch.

@Jack: wenn nur 1 Led gesteuert werden soll, dann bringen dir die 3PWM
Ausgänge auch nichts ;-)

Aber drotzdem... ich meine ich finde es ja nett von euch, dass ihr ihm
einen AVR aufbinden wollt, aber solch eine einfache Schaltung sollte
mit Software-PWM doch auch leicht zu realisieren sein. Dabei würde er
sicher mehr lernen als einfach nur so mal das PWM-Register zu laden
;-).

Und wenn er mit nem AT89C2051er das machen muss/soll, dann lasst ihn
doch.
Entschuldigt, dass musst mal gesagt werden. Denn soooo schlecht ist das
ding auch nicht. Also ich kann mir vorstellen, dass man durch
ordenltiches Programmieren sogar 8PWM-Ausgänge (oder vl auch mehr)
realisieren kann. Man muss halt nur etwas kreativer beim programmieren
sein.

Für den AT89C2051er gibts ausserdem auch sehr einfache Programmer über
LPT ;-) Die Bestehen halt dann aus 6 Widerständen und 2 Tranistoren
oder so ;-).. Ausserdem gibts ja die neue Generation dieses µC jetzt
auch mit ISP, wenn ich mich so recht entsinne.

PS.: 8051er sind nicht schlecht, vorallem für den Einstieg sind sie
sehr empfehlenswert.

In diesem Sinne.

von Peter D. (peda)


Lesenswert?

@Schoaschi

"Also ich kann mir vorstellen, dass man durch
ordenltiches Programmieren sogar 8PWM-Ausgänge (oder vl auch mehr)
realisieren kann."


Jo, das kann man:

http://www.mikrocontroller.net/attachment.php/326489/PWM8CH.C51


Peter

von Schoaschi (Gast)


Lesenswert?

Entschuldige Peter... ich hab mir dein Programm leider nicht angesehen.
Aber so ähnlich hätte ich es mir gedacht.. wobei ich etwas
komplitzierter gearbeitet hätte ;-)

von Michael B. (michael123)


Lesenswert?

Hallo,

es ist egal welcher µC es ist.

So es sollen halt so vile wie möglich PWM augänge sein. Also sind das
z.B für eine LED 9 I/O pins 8 für die Eingänge und 1 für PWM.
Mach also für sagen wir 3 LED's am µC 9 I/O x 3 macht dann 27 I/O
pins.

Ich habe gestern nochmal im Reicheltkatalog geschmökert und einen
ATmega 48-20 gefunden. Wie viele PWM ports hat der?

mfg
Michael

PS: schonmal jetzt vielen Dank für eure gedult und mühe.

von peter dannegger (Gast)


Lesenswert?

In mein PWM-Beispiel hatten sich noch einige Fehler geschlichen.

Hier nun der lauffähige Code:

http://www.mikrocontroller.net/forum/read-4-327653.html#new


Peter

von Michael B. (michael123)


Lesenswert?

Hallo,

habe mich mal bei Freunden und Bekannten schlau gemacht und die meinten
das der ATmega48-20 6 PWM ports hat.

So nun wie kann ich auf diese zugreifen?
Und wie programmiere ich diese in Bascom?
Gibt es dazu ein Tutorial?

mfg
Michael

von Schoaschi (Gast)


Lesenswert?

Schau dir einmal das Datenblatt dazu an... dort gibts sicher ein Kapitel
mit PWM. Und dieses musst du dir einfach durchlesen und danach mit
Bascom einfach die benötigten Register mit den richtigen Werten
setzen.

Warum benutzt du Bascom? und nicht C oder ASM?

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
Noch kein Account? Hier anmelden.