ATtiny44: PWM ports

OP #3435495
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
Gast #3435506
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 ...
Gast #3435507
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
Gast #3435516
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
Gast #3435540
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
#3810612
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
#3810646
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....
#3810692
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);
}
Gast #3810712
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
#3810755
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.
#3810768
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.
#3810779
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...

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren