AT89C2051 und PWM

OP #317671
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
#317672
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
Gast #317674
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.
Gast #317675
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?
OP #317676
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
OP #317679
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
Gast #317680
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
#317682
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).
#317684
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.
Gast #317685
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 ;-)
OP #317686
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
#317687
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.
Gast #317688
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.
Gast #317690
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 ;-)
OP #317691
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.
Gast #317694
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?

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 20 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.