Forum: Mikrocontroller und Digitale Elektronik Attiny84 ArduinoIDE Timer/Anfängerprobleme


von Andre K. (andre1980)


Lesenswert?

Ich versuche für ein Modellhaus (Burg, Modellbahn) Kerzen bzw. 
Fackelflackern über LEDs zu simulieren.

Dies ist auch recht simpel:
1
void setup() {
2
  pinMode(5,OUTPUT);
3
  pinMode(6,OUTPUT);
4
  pinMode(7,OUTPUT);
5
  pinMode(8,OUTPUT);
6
}
7
8
void loop() {
9
  analogWrite(5,random(150,255));
10
  analogWrite(6,random(150,255));
11
  analogWrite(7,random(150,255));;
12
  analogWrite(8,random(150,255));
13
  delay(random(100));
14
}

Auf einem Arduino funktioniert das einwandfrei (mit entsprechenden 
geänderten ArduinoPWM Pins).

Um das ganze zu verkleinern, wollte ich das auf den ATTiny84 umsetzen. 
Auf den Pins 7 und 8  werden die LEDs entsprechend "gedimmt" durch die 
PWM.  Aber auf den Pins 5 und 6 gibt es Probleme. Diese Blinken nur in 
einer sehr schnellen, aber mit dem Auge wahrnehmbaren Frequenz.

Als Test:

Ein analogWrite(5,0); lässt die LED durchgängig leuchten.

Ein analogWrite(5,255); lässt die LED durchgängig aus.

Ein analogWrite(5,1); bis analogWrite(5,254); lässt die LED durchgängig 
in unveränderter Frequenz und unveränderten AN und AUS Zeiten blinken. 
(geschätzt 20mal die Sekunde).

Also habe ich mich gefragt, warum ist das so? Pins 5 und 6 nutzen einen 
anderen Timer. Aber wenn der Timer nur zu langsam ist, sollte sich doch 
diese Blinkfrequenz bei den Werten 1-254 doch ändern. Also nicht die 
Frequenz, besser gesagt die An und Aus Zeiten. Aber dies ist optisch 
nicht zu erkennen.

Unabhängig davon habe ich mir gedacht, den Timer1 (der ist doch für Pin 
5 und 6 zuständig?) zu ändern. Aber irgendwie verstehe ich das nicht 
wirklich nach dem lesen mehrerer Tutorials.

Eigentlich sollte ich doch nur den Prescaler auf 0 setzen müssen? Aber 
ist der nicht standardmäßig auf 0?

Vielleicht kann mir mal jemand helfen. Warum ist der Timer so langsam, 
bzw. warum kommt mir das so vor?

Und wie im Topic zu entnehmen, ich bin da totaler Anfänger, also bitte 
etwas Nachsicht. Vielleicht bin ich mit meinen Schlußfolgerungen auch 
total auf dem Holzweg.

Danke

von Veit D. (devil-elec)


Lesenswert?

Hallo,

nutzt du zufällig das Board Package von Spencekonde?
https://github.com/SpenceKonde/ATTinyCore

Dann wäre die erste Frage, zählst du die Arduino Pinnummern richtig 
herum?

von Andre K. (andre1980)


Lesenswert?

Ich habe gestern noch versucht über micros() sozusagen die PWM 
Softwareseitig zu simulieren. Am Uno funktionierte das sogar gut. Am 
ATTiny leider nur, sollange man nur ein Pin nutzt. Mit jeden weiteren 
Pin sieht man ungewolltes "pulsieren". Ich vermute er ist einfach zu 
langsam.

Also gestern noch viel gesucht und gelesen. Wenn ich das richtig 
verstanden habe, tut dieser "Core" den man in der ArduinoIDE verlinkt, 
auch an dem Timer rumstellen, um diverse Arduino "Funktionen" ATTiny 
kompatibel zu machen.

Ich nutze den Core: http://drazzy.com/package_drazzy.com_index.json

Dieser funktionierte gut, bei einem anderen ATTiny, wo ich ein 
Blaulicht, Blinker, Licht, Piezo über einen IR Empfänger angesteuert 
habe. Wahrscheinlich spielt dieser "Core" an dem Timer1 rum.

Ja, die Pinnummerierung habe ich richtig. Sie lassen sich ja richtig 
digital ansteuern (An, Aus). Warum nutzen die Cores eigentlich 
unterschiedliche Nummerierungen? Kann man da sich nicht auf einen 
Standard einigen? Kann man eigentlich auch in der Arduino IDE zB. 
digitalWrite(PA6,HIGH); schreiben? Das würde ein vertauschen der Nummern 
minimieren.

Wenn ich das richtig verstanden habe, muss ich den Timer1 nur wieder 
schneller machen. Da ich in diesem simplen Sketch nur analogWrite() und 
random() nutze.

Nur was ist denn eigentlich der Standard Wert für einen Timer? Was soll 
ich bei WGM10-13 einstellen? Schneller PWM, 8-Bit(1010)? Was soll ich 
bei CS10-12 einstellen? Keine Vorskalierung (001)? COM1A1, COM1A0, 
COM1B1 und COM1B0 sollten ja auf 0000 gestetzt werden, oder?

Also sollte ich folgenden Code im Setup einfügen?
1
  noInterrupts();
2
  TCCR1A = 0b00000001;
3
  TCCR1B = 0b00001001;
4
  interrupts();

Danke

Eigentlich wollte ich nur paar LEDs in PWM ansteueren ^^.

: Bearbeitet durch User
von Veit D. (devil-elec)


Lesenswert?

Hallo,

wir reden vom gleichen Paket. Ich hatte den Link zu seinem Github, du 
hast den Link für die Arduino IDE gepostet.

Einen ATtiny84 gibts bei Arduino nicht, also kann jeder der ein Paket 
zur Verfügung stellt nummerieren wie er möchte. Darüber solltest du dich 
wirklich nicht aufregen. Du musst nur wissen wie nummeriert wurde. Sein 
Pinout liegt ja vor.
Hast du Clockwise oder Counterclockwise eingestellt?
Also du bist sicher das du die richtigen Pins verwendest?
Dann muss das funktionieren, weil das Paket gibts nicht erst seit 
gestern.
Mich macht das aus der Ferne stutzig.

> Kann man eigentlich auch in der Arduino IDE zB. digitalWrite(PA6,HIGH)
Nein.
Hast du dir einmal seine Beschreibung auf Github durchgelesen?
Es gibt eine alternative Pin Bezeichnung die darauf abzielt.

Also wenn du alles nochmal geprüft hast, können wir den Timer 1 direkt 
programmieren. Deine Einstellungen im Boardmenü stimmen alle?

Mich machen jedoch weiterhin deine Aussagen stutzig. Wegen blinken und 
pulsieren. analogWrite blinkt nicht, es dimmt, macht also je nach Wert 
die Led heller oder dunkler. Ist das soweit verstanden? Ansonsten würden 
wir komplett aneinander vorbeireden. Deine Leds haben auch 
Vorwiderstände?

: Bearbeitet durch User
von Veit D. (devil-elec)


Lesenswert?

Hallo,

ich habe einen Test vorbereitet. Getestet auf einem Mega2560 und geprüft 
ob es mit dem ATtiny84 kompiliert. Tut es. Ich habe keinen ATtiny84 zur 
Hand. Standardeinstellung "clockwise".
1
const byte pwmPin [] = {5, 6, 7, 8};
2
const byte helligkeit[] = {0, 1, 1, 3, 5, 7, 10, 13, 17, 21, 26, 32, 38, 44, 52, 60, 68, 77, 87, 97, 108, 120, 132, 145, 159, 173, 188, 204, 220, 237, 255};
3
const byte anzahlDimmstufen {sizeof(helligkeit)};
4
const unsigned int warte {50};
5
6
void setup (void)
7
{
8
  Serial.begin(250000);
9
  Serial.println("\nStart");
10
11
  for (const byte &p : pwmPin)
12
  {
13
    pinMode(p, OUTPUT);
14
  }
15
}
16
17
void loop (void)
18
{
19
20
  for (const byte &h : helligkeit)
21
  {
22
    for (const byte &p : pwmPin)
23
    {
24
      analogWrite(p, h);
25
      //Serial.println(h); 
26
    }
27
    delay(warte);
28
  }
29
30
  for (int h = anzahlDimmstufen-1; h >= 0; h--)
31
  {
32
    for (const byte &p : pwmPin)
33
    {
34
      analogWrite(p, helligkeit[h]);
35
      //Serial.print(h); Serial.print(" "); Serial.println(helligkeit[h]);
36
    }
37
    delay(warte);
38
  }
39
40
}

Was machen deine 4 Leds?

: Bearbeitet durch User
von Andre K. (andre1980)


Angehängte Dateien:

Lesenswert?

Danke, das du dir Zeit dafür nimmst.

Veit D. schrieb:
> Hast du Clockwise oder Counterclockwise eingestellt?
k.A. Wo stellt man das ein? (inzwischen gefunden) Ich nehme an 
Uhrzeigersinn bzw. gegen Uhrzeigersinn auf Deutsch. Aber

> Also du bist sicher das du die richtigen Pins verwendest?
Ich habe die im Anhang Rot markierten Pins jeweils verschaltet. Sie 
lassen sich einzeln mit digitalWrite(); schalten. digitalWrite(5,LOW); 
lässt die an den unteren rechten Pin angeschlossene LED leuchten. 
digitalWrite(5,HIGH); lässt die an den unteren rechten Pin 
angeschlossene LED aus gehen. Das gleiche mit den markierten Pins 6, 7 
und 8. Also lässt das sehr darauf schliessen, das die Pinzuordnung 
richtig ist. Also Clockwise (Uhrzeigersinn).

> Also wenn du alles nochmal geprüft hast, können wir den Timer 1 direkt
> programmieren. Deine Einstellungen im Boardmenü stimmen alle?
Ich habe mal ein Screenshot von den Einstellungen gemacht. Kannst du 
bitte checken ob alles stimmt? Bzw. wo muss ich aufpassen?

> Mich machen jedoch weiterhin deine Aussagen stutzig. Wegen blinken und
> pulsieren. analogWrite blinkt nicht, es dimmt, macht also je nach Wert
> die Led heller oder dunkler. Ist das soweit verstanden?
Naja, streng genommen gehen sie schon An und Aus, nur so schnell das das 
Auge nicht hinterherkommt. Und das Verhältnis der An und Aus Zeiten 
bestimmt die Helligkeit.
Und deswegen bin ich darauf gekommen, das mit dem Timer1 etwas nicht 
stimmt. Es betrifft ja nur die Pins 5 und 6. (unten Links und Rechts). 
analogWrite(5,0) lässt die LED unten Rechts dauerhaft leuchten. 
analogWrite(5,255) Lässt die LED unten Rechts ausgehen.
analogWrite(5,1) bis analogWrite(5,254) lässt sie sehr schnell blinken, 
ohne dass das An/Aus Verhältnis sich verschiebt. Ich hänge mal ein Video 
vom Blinken an. Es zeigt analogWrite(5,100) und analogWrite(6,100).

> Ansonsten würden wir komplett aneinander vorbeireden. Deine Leds haben
> auch Vorwiderstände?
Ja, die haben Vorwiderstände.

von Andre K. (andre1980)


Lesenswert?

Huch, da haben wir uns überschnitten.

Veit D. schrieb:
> Was machen deine 4 Leds?
7 und 8 Faden von Hell nach Dunkel und wieder zurück.
5 und 6 sind erst an, dann blinken sie, das Aus Intervall wird länger, 
bis sie aus sind, gefolgt von Blinken wo das Aus Intervall kürzer wird 
bis sie an ist.

von Andre K. (andre1980)


Lesenswert?

Und ich habe jetzt einfach mal damit im Setup probiert:
1
  noInterrupts();
2
  TCCR1A = 0b00000001;
3
  TCCR1B = 0b00001001;
4
  interrupts();
Und es funktioniert :D

Also ist der Timer1 irgendwie sehr langsam eingestellt. Liegt es 
vielleicht an der tone() Funktion die der core unterstützt? Auf Github 
steht bei Timer viel. Ich mit meinem schlechten Englisch lese da etwas 
herraus, wenn man Timer1 verstellt das tone() nicht mehr funktioniert. 
Aber da ich tone() hier nicht brauche. Ich bin auf jeden Fall total 
glücklich das es funktioniert und ich das mit dem Timer einstellen 
wenigstens ansatzweise verstanden habe.

Und Danke Veit D. das du mir geholfen hast :)

: Bearbeitet durch User
von Veit D. (devil-elec)


Angehängte Dateien:

Lesenswert?

Hallo,

normalerweise sollte tone() analogWrite nicht beeinflussen, also 
irgendwo schon, weil gleicher Timer1, aber man nimmt wohl kaum 
analogWrite mit tone() zusammen. Von daher sollten sich unterschiedliche 
Timer1 Konfigurationen je nach Pin Verwendung nicht auswirken.

Übrigens, deine Boardkonfig ist okay. Clockwise = Uhrzeigersinn ist 
richtig. Das ist von Spencekonde als Standard eingestellt. Nur macht 
mich die andere Reihenfolge der Einträge stutzig. Ich weiß nicht wie 
lange du das schon verwendest, vielleicht gabs ein Update zwischendurch 
von seinem Paket. Schau mal ob du im Boardverwalter das Packet 
aktualisieren kannst. Bei mir ist v1.5.0 aktuell. Wenn das alles okay 
ist müssen wir das ignorieren.

Danach lässt du einmal das pinMode(x, OUTPUT) für die analogen Pins weg 
und schaust was passiert. Das wird in allen analogWrite Bsp. auch 
weggelassen. Frag mich nicht warum.

Wenn die Pins 5 und 6 immer noch nicht wollen wie sie sollen, dann ist 
dein Problem irgendwie kurios und interessant zu gleich. Mach mal bitte 
folgenden Test. Damit schauen wir uns die Timerkonfiguration an. Ohne 
uns durch hunderte Dateien wühlen zu müssen.

Die Lib 'utilities', entpackste in den richtigen libraries Ordner. Der 
wo die Sketche liegen. Nicht der im Installationspfad der IDE. Dann 
schauen wir mal weiter.
1
// https://www.mikrocontroller.net/topic/514453#6613269
2
#include<utilities.h>
3
4
const byte pwmPin [] = {5, 6, 7, 8};
5
6
void setup (void)
7
{
8
  Serial.begin(250000);
9
  Serial.println(F("\nStart #### #### #### ####"));
10
11
  readTimer1Config();
12
  Serial.println(F("set analogWrite"));
13
  
14
  for (const byte &p : pwmPin)
15
  {
16
    analogWrite(p, 128);
17
  }
18
  
19
  readTimer1Config();
20
}
21
22
void loop (void)
23
{
24
25
}
26
27
void readTimer1Config (void)
28
{
29
  Serial.print(F("TCCR1A ")); formatBINln(Serial, TCCR1A, true);
30
  Serial.print(F("TCCR1B ")); formatBINln(Serial, TCCR1B, true);
31
  Serial.print(F("TCCR1C ")); formatBINln(Serial, TCCR1C, true);
32
  Serial.print(F("TCNT1  ")); Serial.println(TCNT1);
33
  Serial.print(F("OCR1A  ")); Serial.println(OCR1A);
34
  Serial.print(F("OCR1B  ")); Serial.println(OCR1B);
35
  Serial.print(F("ICR1   ")); Serial.println(ICR1);
36
  Serial.print(F("TIMSK1 ")); formatBINln(Serial, TIMSK1, true);
37
  Serial.print(F("TIFR1  ")); formatBINln(Serial, TIFR1, true);
38
}

von Andre K. (andre1980)


Lesenswert?

Ich hatte 1.4.1 installiert. Ein Update auf 1.5.0 bringt aber keine 
Änderung. Die Pins an 5 und 6 blinkern dennoch.

pinMode() kann man tatsächlich weglassen. Aber das gewöhne ich mir 
vielleicht gar nicht erst an. Aber auch das verhindert nicht das 
blinkern.

Bibliothek ist im Biblitheksordner 
"arduino-1.8.13/portable/sketchbook/libraries"

Nach dem hochladen deines Sketches, blinkern die LEDs an Pin 5 und 6. 
Leds an Pin 7 und 8 leuchten.

von Veit D. (devil-elec)


Lesenswert?

Hallo,

pinMode, okay, ändert also nichts.

> Bibliothek ist im Biblitheksordner
> "arduino-1.8.13/portable/sketchbook/libraries"
Ja dort ist es richtig.
Was gibt der serielle Monitor aus?

von Andre K. (andre1980)


Lesenswert?

Veit D. schrieb:
> Hallo,
>
> pinMode, okay, ändert also nichts.
>
>> Bibliothek ist im Biblitheksordner
>> "arduino-1.8.13/portable/sketchbook/libraries"
> Ja dort ist es richtig.
> Was gibt der serielle Monitor aus?

Hmm. Dumme Frage, wie verbinde ich den ATTiny mit dem Seriellen Monitor?

von Veit D. (devil-elec)


Lesenswert?

Hallo,

nochwas vorweg. Starte mal nach dem Update die IDE neu.

Serial. Wenn du den nackten IC hast, benötigst du einen Serial(TTL)-USB 
Adapter.

von Andre K. (andre1980)


Lesenswert?

Veit D. schrieb:
> Hallo,
>
> nochwas vorweg. Starte mal nach dem Update die IDE neu.
>
> Serial. Wenn du den nackten IC hast, benötigst du einen Serial(TTL)-USB
> Adapter.

Die Idee hatte ich neu gestartet. Auch nach dem einbinden der 
Bibliothek.

Ich beschreibe den nackten ATTiny84 mit einem Arduino Nano. Einen 
TTL-USB Adapter habe ich leider nicht :(

von Andre K. (andre1980)


Lesenswert?

Ich habe noch so ein UART-USB Adapter für ESP8266 rumliegen. Bringt der 
etwas? Muss mich mal schlau machen. Wie und wo da etwas am ATTiny 
angeschlossen werden muss. Hach

von Veit D. (devil-elec)


Lesenswert?

Hallo,

wenn dein UART-USB Adapter auch mit 5V umgehen kann, dann schaue in das 
Pinout von Spencekonde und lies den Abschnitt Serial Support. Stichwort 
Software Serial. Musste dann die Baudrate auf 9600 runter nehmen. Wenn 
es dumm läuft gehts Dimming nicht mehr, weil wahrscheinlich die Software 
Serielle auch einen Timer benötigt. Wahrscheinlich Timer 1. Kommt auf 
einen Versuch drauf an. Das ist der Nachteil mit Winzig µC, beim 
debuggen kommt man schnell an die Grenze.

Davon abgesehen, kannste Timer 1 direkt ausprobieren. Wenn das klappt 
müßte man doch einmal Spencekonde informieren bzw. fragen was da los 
ist.

Wenn ich nichts übersehen habe sollte das 1:1 auf dem ATtiny84 
funktionieren. Beide Leds sollten unterschiedlich gedimmt ohne blinken 
leuchten.
1
/*
2
  IDE 1.8.13
3
  ATtiny84
4
  Spencekonde Package
5
  Timer 1 - Phase Correct Mode 10
6
*/
7
8
#include <util/atomic.h>
9
10
const byte pinPhaseA {PIN_PA6};    // Pin OC1A / 6
11
const byte pinPhaseB {PIN_PA5};    // Pin OC1B / 5
12
13
/*
14
 * um analogWrite kompatibel zu bleiben darf TOP und OCR1A/OCR1B den Wert 255 nicht überschreiten,
15
 * Wertebereich von Byte,
16
 * 8MHz / 2 / Prescaler  8 / TOP (255) = 1960,78Hz PWM Taktfrequenz,
17
 * 8MHz / 2 / Prescaler 64 / TOP (255) =  245,10Hz PWM Taktfrequenz,
18
 * um dabei die maximale Auflösung zu erhalten muss TOP = 255 sein,
19
 * OCR1A/OCR1B darf nie größer TOP sein
20
 */
21
 
22
const unsigned int PRESCALER {64};  
23
const byte TOP  {255};      
24
byte dutyCycleA {200};   // <= TOP
25
byte dutyCycleB  {20};   // <= TOP
26
27
void setup (void)
28
{
29
  pinMode(pinPhaseA, OUTPUT);
30
  pinMode(pinPhaseB, OUTPUT);
31
  setTimer1(TOP, dutyCycleA, dutyCycleB);
32
  runTimer1(PRESCALER);
33
}
34
35
void loop (void)
36
{
37
  /*
38
   * statt analogWrite( ) nimmste dann,  
39
   * OCR1A = dutyCycleA;  // Pin OC1A / PA6
40
   * OCR1B = dutyCycleB;  // Pin OC1B / PA5
41
   * oder weist direkt einen Wert zu der sich ändert
42
   */
43
}
44
45
46
// ****** Funktionen ******* //
47
void setTimer1 (const byte top, const byte dutyA, const byte dutyB)
48
{
49
  ATOMIC_BLOCK (ATOMIC_RESTORESTATE)  // Mode 10, Phase Correct
50
  {
51
    TCCR1B = 0;             // Resets
52
    TCCR1A = 0;             //
53
    TIMSK1 = 0;             //
54
    TCNT1  = 0;             //
55
    ICR1   = top;
56
    OCR1A  = dutyA;
57
    OCR1B  = dutyB;
58
    TCCR1A = _BV(COM1B1) | _BV(COM1A1) | _BV(WGM11); 
59
    TCCR1B = _BV(WGM13);                         
60
  }                 
61
}
62
63
64
void runTimer1 (const unsigned int prescaler)
65
{
66
  ATOMIC_BLOCK (ATOMIC_RESTORESTATE)
67
  { // delete Clock Select Bits, Timer is stopped
68
    TCCR1B &= ~( _BV(CS12) | _BV(CS11) | _BV(CS10) );
69
    // set new Prescaler Clock Select Bits
70
    switch (prescaler) {  
71
      case    1 : TCCR1B |= _BV(CS10);              break;
72
      case    8 : TCCR1B |= _BV(CS11);              break;
73
      case   64 : TCCR1B |= _BV(CS11) | _BV(CS10);  break;
74
      case  256 : TCCR1B |= _BV(CS12);              break;
75
      case 1024 : TCCR1B |= _BV(CS12) | _BV(CS10);  break;
76
      default :   break;  // wrong prescaler
77
    }  
78
  }
79
}
80
81
82
void stopTimer1 (void)
83
{
84
  ATOMIC_BLOCK (ATOMIC_RESTORESTATE)
85
  {
86
    TCCR1B &= ~( _BV(CS12) | _BV(CS11) | _BV(CS10) );
87
  }
88
}

von Andre K. (andre1980)


Lesenswert?

Oh mein Gott. Ich glaube ich habe heraus gefunden woran es gelegen hat. 
Es ist alles Richtig mit dem Core. Auch an dem Timer1 liegt es nicht, 
bzw. nicht direkt das es unbrauchbar wird.

Beim lesen, wie man ATTiny über den Arduino as ISP per SoftwareSerial 
den Monitor nutzen kann, wurde nebenbei erwähnt, das jemand 
Übertragungsprobleme hatte, da der ATTiny auf 1mHz lief. Er sagt nach 
dem neuen Bootloader brennen mit 8mHz funktioniert alles korrekt.

Und da viel es mir wie Schuppen von den Augen. Bootloader Brennen hatte 
ich nie ausgeführt. Der ATTiny lief also gar nicht auf 8mHz, sondern 
wahrscheinlich viel viel langsamer. Und daher wurde die PWM Frequenz des 
Timer1 wahrscheinlich sichtbar für das Menschliche Auge.

Hach. So viel Verwirrung wegen so einem vergessenen Klick.

Also entschuldigt dies bitte, und Danke für die Hilfe.

von Veit D. (devil-elec)


Lesenswert?

Hallo,

alles klar, kein Problem, wenn Ursache selbst gefunden umso besser.
Da war dein µC noch jungfräulich in den Fuse Einstellungen und der Main 
Prescaler noch aktiv. Der jeden CPU Takt auf 1/8 runterteilt.

Mit Bootloader drauf könntest du den µC theoretisch per USB flashen, 
wenn der Adapter noch ein DTR Signal rausgibt. Wenn du weiterhin mit 
Arduino over ISP flasht, kannste die Bootloader Einstellung eigentlich 
wieder zurücknehmen. Haste mehr Flashspeicher und die 1/8 Fuse 
Einstellung sollte erhalten bleiben. Hoffe ich.

Ansonsten war hoffentlich nicht alles umsonst mit der direkten Timer 
Programmierung. Kannste später vielleicht noch gebrauchen.

Als Letztes eine Hilfsfunktion für analogWrite Ersatz bei direkter 
Programmierung. Leicht erweiterbar um Timer 0.
1
void analogPWM (const byte pin, const byte duty)
2
{
3
  switch(pin)
4
  {
5
    case PIN_PA6: OCR1A = duty; break;
6
    case PIN_PA5: OCR1B = duty; break;
7
    default: break;
8
  }
9
}

Anwendung:
1
analogPWM(PIN_PA6,  30);
2
analogPWM(PIN_PA5, 200);

Ansonsten Tschau und immer genügend Takt unterm Hintern.

von Andre K. (andre1980)


Lesenswert?

Ja, der ganze Ausflug war interessant und wahrscheinlich auch leerreich. 
Das mit dem Bootloader brennen hat sich jetzt wahrscheinlich auch 
eingeprägt. An Speicher Grenzen, vor allem bei den kleinen Basteleien 
werde ich wohl nicht stoßen.

Da das programmieren bei mir nicht all zu häufig genutzt wird, kann es 
schnell sein das ich das nächstmal wieder da hänge, wie war das gleich 
nochmal. Wenn man etwas selten macht, wird man nicht firm.

Um so schöner ist es, das es Foren wie diese hier gibt, wo immer mal ein 
Profi vorbei schaut und hilft.

Danke für deine Hilfe

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.