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
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
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
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.
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?
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
Wenn du vl etwas genauer beschreiben könntest, was du eigentlich vor hast, könnte man dir vl helfen... aber nur wenn du willst.
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
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
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).
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
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.
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 ;-)
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
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.
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.
@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
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 ;-)
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.
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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.