Forum: Mikrocontroller und Digitale Elektronik ATtiny44: PWM ports


von Kai L. (rostiger_e)


Lesenswert?

Wer kann mir verraten, wie ich im Datenblatt des ATtiny44 herausfinde,
welche Pins ich als PWM Pins verwenden kann und welche Pin-Nummer ich in 
meinem Arduino script verwenden muss.

Laut dem Bild auf der Seite
http://fluuux.de/2012/09/programmieren-eines-attiny-mit-arduino-1-0-1/
sind die Positionen 5,6,7,8 (Wenn man die Anschlüsse durchzählt) als PWM 
Ausgänge zu gebrauchen.

In meiner Arduino IDE habe ich mit Position 8 = Pin5 = PA5 erfolg 
gehabt.

Hier sind die Pins zu sehen, wie sie auch im Datenblatt stehen:
http://www.wvshare.com/img/pinout/ATtiny44_l.jpg

Danke, Kai

von squirrel (Gast)


Lesenswert?

Warum nicht ins Datasheet schauen?

Aber:
PIN A5 (Pos.8) A6 (Pos. 7) PWM Timer1
PIN A7 (Pos. 6) B2 (Pos. 5) PWM Timer0

also ja, das sind die PWM fähigen Ausgänge. Ob die alle zu gebrauchen 
sind hängt von deinen Anforderungen ab ...

von spess53 (Gast)


Lesenswert?

Hi

>Wer kann mir verraten, wie ich im Datenblatt des ATtiny44 herausfinde,
>welche Pins ich als PWM Pins verwenden kann ....

Datenblatt->Pin Configurations

Die PINs, bei denen OCnx dran steht.

n Nummer des zugehörigen Timers
x PWM Kanal

>und welche Pin-Nummer ich in meinem Arduino script verwenden muss.

Schaltplan deines Arduinos.

MfG Spess

von squirrel (Gast)


Lesenswert?

Dazu weitere Details:

Timer0 "nur" 8-Bit PWM
Timer1 16 Bit

Es gilt immer beide Ausgänge nur verwendbar wenn es dir reicht das Sie 
gleiche Freq. haben, welche nur durch den Prescaler bestimmt wird 
(setzen eines variablen TOP Werts nicht möglich.
-> Beide == Einschränkungen Frequenzwahl und Frequenz gleich, Pulsweite 
einstellbar
Also maximal 2 völlig frei konfigurierbare PWM-Ausgänge

von Markus W. (Firma: guloshop.de) (m-w)


Lesenswert?

squirrel schrieb:
> Also maximal 2 völlig frei konfigurierbare PWM-Ausgänge

Oder 11 (maximal 12), wenn man Soft-PWM verwendet. Das hängt aber von 
den genaueren Anforderungen an die PWM-Frequenz und Auflösung ab.

Ach so, wenn es eine neuere Entwicklung wird, vielleicht besser die 
aktuelle Version verwenden: ATtiny44A.

von spess53 (Gast)


Lesenswert?

Hi

>Dazu weitere Details:

>Timer0 "nur" 8-Bit PWM
>Timer1 16 Bit

Mit der Aussage wäre ich vorsichtig. Das mag vielleicht für die paar 
AVRs gelten, die in Arduino und Co verpackt aufschlagen aber nicht 
generell für AVRs.

MfG Spess

von Kai L. (rostiger_e)


Lesenswert?

Hallo  und vielen Dank für die Beiträge.
Das hat mir weitergeholfen.
Grüße,
Kai

von Jörg S. (trainer1081)


Lesenswert?

Hallo zusammen,

ich bin gerade dabei etwas in die Welt der µC abzutauchen und stehe 
bereits jetzt vor meinem ersten Problem....
Benutze auch einen Attiny44a und die Arduino IDE um eine RGB Led damit 
zu betreiben. Leider funktionier das nicht ganz so wie ich mir das 
vorstelle...

R -> OC1A
G -> OC0B
B -> OC1B

Wenn ich Rot und Blau mische, ist alles wie gewollt. Wenn ich allerdings 
versuche Grün mit einer anderen Farbe zu mischen, dann bekomme ich einen 
Farbwechsel der immer zB zwischen Rot und Orange wechselt.
Die CKDIV8-Fuse habe ich bereits mit einem Atmel- ISP Programmer 
deaktiviert.

Kann mir vieleicht jemand einen Rat geben wie ich mit der Arduino IDE 
die PWM Settings gleich setzen kann?

Gruß und danke im Voraus

von Max D. (max_d)


Lesenswert?

Ich würde mal sagen dein Timer0 ist zu langsam konfiguriert.
Wie man das in der Frickel-Arduino-IDE ändert weiß ich nicht in reinem C 
müsste man in TCCR0B mit den CS Bits die rechte Quelle wählen und (je 
nach Modus) die (evtl.) von OCR0A gegebene Obergrenze absenken.
Ich hab aber mal iwas gehört, der ardu würde timer0 für eine art systick 
verbraten. Sollte das so sein stehst du natürlich da....

von Steffen (Gast)


Lesenswert?

häng mal bitte deinen Code an. Ich denk es liegt am Timer0 ist nur 8bit 
und der Rest 16bit.

von Jörg S. (trainer1081)


Lesenswert?

Danke für die promte Antwort...
Hier der Code...

#define redPin 6
#define greenPin 7
#define bluePin 5
#define GruppeA 3
#define GruppeB 0
#define GruppeC 1
#define GruppeD 2


void setup()
{
// Pin Konfiguration
    DDRA = B11101111;
    PORTA = B00000000;

Ich habe mit
    TCCR1A = (1<<CS11);
    TCCR1B = (1<<CS11);
versuch den Timer 1 zu achteln. Das Ergebnis war etwas besser, aber 
immer noch ein ständiger Farbwechsel???

}

void loop()
{
  setColor(190, 100, 0);
  digitalWrite(GruppeA, 1);
  digitalWrite(GruppeB, 1);
  digitalWrite(GruppeC, 1);
  digitalWrite(GruppeD, 1);
}


void setColor(int red, int green, int blue)
{
    analogWrite(redPin, red);
    analogWrite(greenPin, green);
    analogWrite(bluePin, blue);
}

von Max D. (max_d)


Lesenswert?

Und wo konfigurierst du timer0 ?

von Jörg S. (trainer1081)


Lesenswert?

Bin halt noch ein Anfänger.
Bin jetzt davon ausgegangen das ich den Timer 1 und Timer 0 gleichsetze, 
da der Timer 0 ja eh ein 8Bit Timer ist???

von spess53 (Gast)


Lesenswert?

Hi

>Ich habe mit
>    TCCR1A = (1<<CS11);
>    TCCR1B = (1<<CS11);
>versuch den Timer 1 zu achteln. Das Ergebnis war etwas besser, aber
>immer noch ein ständiger Farbwechsel???

CS11 befindet sich nur in TCCR1B. In TCCR1A befindet sich an gleicher 
Bitstelle WGM11. Mit der Anweisung stellst du PWM, Phase Correct, 9-bit 
ein.

MfG Spess

von Steffen (Gast)


Lesenswert?

Max D. schrieb:
> Und wo konfigurierst du timer0 ?

Deshalb sollte er ja das Programm dran hängen. Nun raten wir, ich kaufe 
ein T.

von Jörg S. (trainer1081)


Lesenswert?

Hallo Spess,

leider verstehe ich Deine Aussage nicht so ganz???
Kannst Du es für mich vieleicht etwas umformulieren?

@Steffen
Den Code habe ich doch hinzugefügt???

von Max D. (max_d)


Lesenswert?

Nimm doch bitte einfach reines C.
Mit avrdude kannst du trotzdem einfach weiter die arduino hw 
beschreiben.

Bei Konstrukten wie:

> analogWrite(bluePin, blue);

Rollen sich jedem C-Vertrauten die Zehennägel auf.

Dadurch, dass Arduino so viele Funktionen und events hinter 
vereinfachenden Funktionen versteckt geht die Logik total drauf.
Die Auswirkungen spürst du grade selber. Wenn man mehr will als ein paar 
Lichter blinken zu lassen muss man gezwungenermaßen direkt mit der HW 
reden und dann kommt soetwas raus wie bei dir.

von Jörg S. (trainer1081)


Lesenswert?

Habe jetzt nochmal folgende Einstellung getroffen
-> TCCR1B = (1<<CS02);
jetzt scheint es zu funktionieren....
Oder habe ich mir jetzt ein anderes Ei gelegt???

von Max D. (max_d)


Lesenswert?

Irgendwie fehlt immernoch jedwede Einstellung für TIMER0 .
Nachdem deine LED ja trotzdem nicht dunkel ist, scheint es so als ob die 
Arduino IDE diesen Timer irgendwie initialisiert.
Es wird hier aber keiner wissen welche Einstellungen die dabei vornimmt.
Hättest du richtiges C wärst du gezwungen Timer0 auch richtig zu 
initialisieren, dann könnte man dir auch sagen was genau der macht.

von Jörg S. (trainer1081)


Lesenswert?

Troztem danke schon mal für Deine Antworten.
Arduino wollte ich als Einstieg in die µC Welt nutzen.
Natürlich möchte ich das auch bald ändern. Unter den Arduino Dokus für 
den Attiny44A werden auch nur 2 PWM angegeben. Welche meiner Meinung 
nach auch eine standart Einstellung erhalten...

von Mw E. (Firma: fritzler-avr.de) (fritzler)


Lesenswert?

Kann man überhaupt beide Timer nutzen?
Die Failduinos brauchen doch immer einen Timer für irgendwelches 
internes geraffel.

von Jörg S. (trainer1081)


Lesenswert?

Jetzt habe ich auf jedenfall kein Problem mehr...
Also würde ich sagen "Ja"...

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.