Forum: Mikrocontroller und Digitale Elektronik ATMega128L und PWM/Timer/Counter/Interrupt fragen


von Tobias N. (silberkristall)


Lesenswert?

Hallo,

wäre jemand hier mal so nett und würde mir die "Pin configuration" 
übersetzen?

Also ich verstehe das DB nicht so ganz, das problem hatte ich bisher bei 
allen Megas. Der ATMega128 hat 7 PWM Channels, nur welche PINs sind es 
nun? Dann noch welche PINs sind für die Timer / Counter?

Also bei den ADC Pins ist es ja klar, da steht hinter den PINs ADC, 
genau so wie bei I2C (SDA,SCL) oder RS232 (TXD,RXD). So in der Art würde 
mir das schon für die Timer/Counter/Interrupts reichen. Also die 
Interrupts sind ja die mit INT (oder?) nur da stellt sich mir ein 
Problem.

Zu PWM:

ich brauche 4 besser 6 PWM Channels. Der Mega128L hat ja 7. So weit so 
gut, nur kann man (habe bisher immer nur mit SoftPWM gearbeitet) auch 
bei den Hardware PWMs einen Soll und Ist Wert machen? Kann man wärend 
die eine PWM aufdimmt die andere PWM abdimmen lassen?

Läuft die Hardware PWM unabhängig vom Code oder würde ein delay genau so 
wie bei der SoftPWM zu fehlern führen?

Optimal wären 6 PWMs (Hardware) dann noch einen externen Interrupt und 
ein Timer im Sekundentakt. Meiner Rechnung nach brauche ich aber dann 8 
channels, oder?

Also 6 für die PWM, einen für den Interrupt und einen für den Timer. 
Sehe ich das richtig?

Hätte jemand von euch noch ein paar lesenswerte Seiten bezüglich 
Hardware PWMs? Also optimal wäre den Soll und ist wert einstellen zu 
können und das das ganze unabhängig vom Code läuft.

Dann habe ich im Datenblatt noch was von einem internen kondensator 
(36pF) für einen Quarz gelesen. Brauche ich dann noch extern 
Kondensatoren?

Ebenfalls (wenn ich es richtig verstanden habe) steht da das der "vom 
Werk" aus intern mit 1,2,4 und 8 Mhz laufen kann. Wenn dem so ist 
welchen Takt hat er denn nun bei auslieferung und wie ändere ich die 
Fuses dann am besten (bisher 0 erfahrung mit Fuses)

Danke euch schonmal.

Gruß

Tobias

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Tobias N. schrieb:
> Also ich verstehe das DB nicht so ganz, das problem hatte ich bisher bei
> allen Megas. Der ATMega128 hat 7 PWM Channels, nur welche PINs sind es
> nun? Dann noch welche PINs sind für die Timer / Counter?

Steht eigentlich alles im Datenblatt. Die PWM Ausgänge sind die mit 'OC' 
bezeichneten. OC0 ist gesteuert von Timer 0, OC1A-OC1C sind drei PWM 
Kanäle für Timer 1 und OC3A-OC3C sind die drei PWM Kanäle des Timers 3.

Tobias N. schrieb:
> ich brauche 4 besser 6 PWM Channels. Der Mega128L hat ja 7. So weit so
> gut, nur kann man (habe bisher immer nur mit SoftPWM gearbeitet) auch
> bei den Hardware PWMs einen Soll und Ist Wert machen?

'Soll' Werte für PWM? Wie meinst du das? Es gibt für den MC nur 'Ist' 
Werte und die werden in die OC Register des jeweiligen Kanals 
geschrieben. Wenn du also z.B. Timer 3 benutzt mit seinen 16 bit und in 
das Output Compare Register OCR3A den Wert 32767 reinschreibst, wird am 
OC3A Pin ein Signal mit ca. 50/50 Pulsbreite erscheinen, vorausgesetzt, 
du hast die Richtung des Pins auch als Ausgang programmiert und hast die 
COM3 Bits richtig gesetzt (clear on Match, set on TOP)

Tobias N. schrieb:
> Läuft die Hardware PWM unabhängig vom Code oder würde ein delay genau so
> wie bei der SoftPWM zu fehlern führen?

Ja und nein. Einmal programmiert, läuft die Hardware PWM ohne 
zusätzliche Klimmzüge. Delays in deinem Programm stören diesen Vorgang 
nicht.

Tobias N. schrieb:
> Optimal wären 6 PWMs (Hardware) dann noch einen externen Interrupt und
> ein Timer im Sekundentakt. Meiner Rechnung nach brauche ich aber dann 8
> channels, oder?
>
> Also 6 für die PWM, einen für den Interrupt und einen für den Timer.
> Sehe ich das richtig?

Nö. Du brauchst doch keinen PWM Kanal für einen Interupt oder Timer.

Wenn du 6 PWMs brauchst, nimmst du praktischerweise Timer 1 und Timer 3 
mit jeweils 3 PWM Kanälen. Die Timer lässt du so schnell laufen, das die 
PWM Ausgänge die Wiederholfrequenz haben, die du brauchst. Da es für 
gesparte Timer kein Geld zurück gibt, könntest du Timer 0 oder Timer 2 
als Sekundentakt benutzen.

Tobias N. schrieb:
> Dann habe ich im Datenblatt noch was von einem internen kondensator
> (36pF) für einen Quarz gelesen. Brauche ich dann noch extern
> Kondensatoren?

Der interne Kondensator ist normalerweise nur für den Betrieb mit einem 
niederfrequenten (Uhren-)quarz. Im Normalfall (8 oder 16MHz Quarz) 
beschaltest du ihn mit 2*22p, wie im Datenblatt beschrieben.

Tobias N. schrieb:
> Ebenfalls (wenn ich es richtig verstanden habe) steht da das der "vom
> Werk" aus intern mit 1,2,4 und 8 Mhz laufen kann. Wenn dem so ist
> welchen Takt hat er denn nun bei auslieferung und wie ändere ich die
> Fuses dann am besten (bisher 0 erfahrung mit Fuses)

Atmel liefert normalerweise gefused auf internen RC-Oszillator mit 8MHz 
aus und setzt die 'CKDIV8' Fuse. Ergebnis ist ein voreingestellter Takt 
von 1 MHz. Das variiert ein wenig von Typ zu Typ, steht aber im 
Datenblatt. Du musst übrigens beide haben: ATMega128 und ATMega128L mit 
den Ergänzungen für diesen MC.

von Tobias N. (silberkristall)


Lesenswert?

danke erstmal.

also ich habe ein Datenblatt (was bei dem shop bei dem mega zum download 
war (pollin)) das hat 368 seiten.

also bei der "softpwm" hatte ich immer soll und ist werte. so konnte ich 
dann von halb runter oder hoch dimmen. also einen "start" wert usw.

wenn ich das nun richtig verstanden habe schalte ich lediglich den pin 
als ausgang, stelle die register ein (fastpwm z.b.) sowie die auflösung 
und setze dann nur noch den OCR... wert der jeweiligen pwm. von 0 - 256 
oder 0 - 65... und schon läuft die pwm auf dem jeweiligen pin.

Ähm schön zu wissen wäre es noch wo/wie man bestimmt ob L oder H, also 
ob nun z.b. bei einer LED die Anode oder Kathode am MC hängt.

und wenn ich die beiden T/C mit den jeweils 3 pwms nehme dann habe ich 
noch den "einzelnen" T/C für den Timer um diesen im 10ms bereich zählen 
zu lassen, korrekt?

ich habe den quarz noch nicht angeschlossen. zwar schon bohrungen für 
quarz und kondensatoren vorhanden (habe mir ein testboard mit allen pins 
auf buchenleisten gelegt geätzt) aber habe ich nur noch einen 20mhz 
quarz da. im chat wurde nur was von "overclocking" erwähnt und danach 
ein Kick. Im Netz finde ich auch nichts um "mehr" als 16 Mhz laufen zu 
lassen demnach bleibt mir nur morgen der weg einen zu kaufen.

Also "mehr" als 1Mhz ohne Quarz haben sie so oder so nicht?

Da fiel mir noch was ein. Wo kann ich nachlesen "wie" ich die Pullups 
für I2C berechne?

Und die "interrupt" Pins sind denn die mit dem "INT" ? Dann hat der ja 
ganz schön viele. (Habe bisher nur mit Mega8 und Mega32 gearbeitet. Das 
SDRAM an Mega128 anschließen will ich mir als nächsten vornehmen)

Danke auf jeden Fall.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Tobias N. schrieb:
> Ähm schön zu wissen wäre es noch wo/wie man bestimmt ob L oder H, also
> ob nun z.b. bei einer LED die Anode oder Kathode am MC hängt.

Das hängt von den oben erwähnten COM bits für das jeweilige Output 
Compare Register ab. Bei 'Clear On Match/Set on TOP' hast du positive 
Logik (je höher der Compare Wert, desto länger bleibt der Ausgang auf 
High) und bei 'Set on Match, Clear on TOP' negative Logik.

Tobias N. schrieb:
> und wenn ich die beiden T/C mit den jeweils 3 pwms nehme dann habe ich
> noch den "einzelnen" T/C für den Timer um diesen im 10ms bereich zählen
> zu lassen, korrekt?

Zwei sogar. Sowohl Timer 0 als auch Timer 2 werden für 6 PWM Kanäle 
nicht benötigt und sind frei.

Tobias N. schrieb:
> also ich habe ein Datenblatt (was bei dem shop bei dem mega zum download
> war (pollin)) das hat 368 seiten.

Geh bitte nochmal direkt zu Atmel und hole dir da das für den Mega128 
und das für den Mega128L. Bei unseren bayrischen Freunden ist das nicht 
unbedingt das aktuellste.

Tobias N. schrieb:
> Also "mehr" als 1Mhz ohne Quarz haben sie so oder so nicht?

8 Mhz hast du, wenn du lediglich die CKDIV8 Fuse löschst und den 
internen RC Oszillator auf 8 Mhz lässt.

Tobias N. schrieb:
> aber habe ich nur noch einen 20mhz
> quarz da.

Ich kanns natürlich nicht garantieren, aber ich habe einen Arduino 
Mega328 auch schon mit 19,6MHz getaktet (für AVR Mario) und das lief 
sicher.

von Eumel (Gast)


Lesenswert?

Tobias N. schrieb:
> overclocking

Wenn das Teil für dein Auto ist, in dem es natürlich mal ziemlich Kalt 
oder Warm wird, würde ich mich an die angegeben Spezifikationen des 
Herstellers halten.

von Tobias N. (silberkristall)


Lesenswert?

Matthias Sch. schrieb:
> Tobias N. schrieb:
>> Ähm schön zu wissen wäre es noch wo/wie man bestimmt ob L oder H, also
>> ob nun z.b. bei einer LED die Anode oder Kathode am MC hängt.
>
> Das hängt von den oben erwähnten COM bits für das jeweilige Output
> Compare Register ab. Bei 'Clear On Match/Set on TOP' hast du positive
> Logik (je höher der Compare Wert, desto länger bleibt der Ausgang auf
> High) und bei 'Set on Match, Clear on TOP' negative Logik.

das stellt man dann bei diesen WC..... werten ein, korrekt? Also diese 
werte wo man ihm auch sagt fastpwm oder was auch immer, richtig?

> Tobias N. schrieb:
>> und wenn ich die beiden T/C mit den jeweils 3 pwms nehme dann habe ich
>> noch den "einzelnen" T/C für den Timer um diesen im 10ms bereich zählen
>> zu lassen, korrekt?
>
> Zwei sogar. Sowohl Timer 0 als auch Timer 2 werden für 6 PWM Kanäle
> nicht benötigt und sind frei.

na die sollten zum "zählen" ja ausreichen.

> Tobias N. schrieb:
>> also ich habe ein Datenblatt (was bei dem shop bei dem mega zum download
>> war (pollin)) das hat 368 seiten.
>
> Geh bitte nochmal direkt zu Atmel und hole dir da das für den Mega128
> und das für den Mega128L. Bei unseren bayrischen Freunden ist das nicht
> unbedingt das aktuellste.

ok werde ich tuen.

> Tobias N. schrieb:
>> Also "mehr" als 1Mhz ohne Quarz haben sie so oder so nicht?
>
> 8 Mhz hast du, wenn du lediglich die CKDIV8 Fuse löschst und den
> internen RC Oszillator auf 8 Mhz lässt.

also kann ich den auf 8Mhz intern Takten. Also wird er zwar mit 1 Mhz 
ausgeliefert, kann aber auf 8Mhz umgestellt werden, richtig? Ich habe da 
noch was gelesen von "calibrated", aber "so" kalibriert kann er ja nicht 
sein weil RS232 ohne externen quarz ja nichts wird.

> Tobias N. schrieb:
>> aber habe ich nur noch einen 20mhz
>> quarz da.
>
> Ich kanns natürlich nicht garantieren, aber ich habe einen Arduino
> Mega328 auch schon mit 19,6MHz getaktet (für AVR Mario) und das lief
> sicher.

also muss man da nicht noch was eingeben sondern einfach den quarz dran, 
fuses auf externen quarz einstellen und hoffen das es läuft? wie gesagt 
bisher 0 erfahrungen mit fuses. weiss nicht ob man da die mhz vom quarz 
angeben muss oder etwas in der art.

Ich glaube ich fange an ein Datenblatt zu verstehen.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Tobias N. schrieb:
> das stellt man dann bei diesen WC..... werten ein, korrekt? Also diese
> werte wo man ihm auch sagt fastpwm oder was auch immer, richtig?

Ja. Im Aktuellen Datenblatt des ATMega128 schau auf Seite 132. Da werden 
die COM Bits beschrieben, sie befinden sich im TCCR1A bzw. TCCR3A 
Register.

> also muss man da nicht noch was eingeben sondern einfach den quarz dran,
> fuses auf externen quarz einstellen und hoffen das es läuft? wie gesagt
> bisher 0 erfahrungen mit fuses. weiss nicht ob man da die mhz vom quarz
> angeben muss oder etwas in der art.

Wenn dein Quarz angechlossen ist und die beiden 22p Kondensatoren 
montiert sind, stellst du 'High Frequency Crystal Oscillator' und 
'Slowly Rising Power' (65ms Startup Time) in den Fuses ein. In AVR 
Studio geht das recht komfortabel, wenn du einen kompatiblen 
Programmierer hast. Ansonsten greifst du auf einen der im Netz 
vorhandenen 'Fuse Calculators for AVR' zurück.
Du darfst nicht etwa 'External Clock' oder so einstellen. In Tabelle 9 
auf Seite 39 des Mega128 Datenblattes wähle also die letzte Option.

> Also wird er zwar mit 1 Mhz
> ausgeliefert, kann aber auf 8Mhz umgestellt werden, richtig? Ich habe da
> noch was gelesen von "calibrated", aber "so" kalibriert kann er ja nicht
> sein weil RS232 ohne externen quarz ja nichts wird.

Ja - und das ist ein Gerücht. Mit niedrigen Baudraten bis 19200 hatte 
ich damit auch noch keine Probleme. Wenns drauf ankommt, sollte man aber 
schon einen Quarz nehmen.

von Tobias N. (silberkristall)


Lesenswert?

da ich mal auf win mal auf linux progge nutze ich avrstudio nicht. also 
geflasht wird dann mit make und avrdude.

ja cool. danke danke für deine Antworten. Solch eine erfahrung hätte ich 
gerne auch schon viel früher hier im Forum gehabt.

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.