Arduino Forum

International => Deutsch => Topic started by: murdok1980 on Feb 09, 2016, 03:26 pm

Title: Timer 2 15 khz frequenz mit variabler duty cycle
Post by: murdok1980 on Feb 09, 2016, 03:26 pm
Ich bräuchte am Pin 11 eine Frequenz vom 15,6 khz mit variabler duty cycle. Das alles mit dem Timer 2 die 8bit reichen mir. Mit dem Timer 1 hab ich das schon für 2 Kanäle erreicht. Hab dafür ICR als Top Wert genommen und OCR1A und OCR1B als variable duty cycle.
Den Modus gibt es aber bei Timer 2 nicht und mit dem Togglen eines Pins kenn ich mich nicht so aus.
Ich brauch das für einen 3. PWM Kanal.
Kann mir jemand beim Bitsetzen in die Register helfen.
Nutze nen Arduino Nano.
Grüße
Andre
Title: Re: Timer 2 15 khz frequenz mit variabler duty cycle
Post by: Doc_Arduino on Feb 09, 2016, 04:18 pm
Hallo,

wenn du dein Wissen von Timer 1 auf Timer 2 überträgst, sollte das Ding laufen.
Blick ins Datenblatt ist nicht ausreichend? Ab Kapitel 20 im Datenblatt.

Wobei die Wunsch 15kHz wohl nicht möglich sind. Der Takt wird nur von den 16MHz µC und dem eingestellten Prescaler beeinflusst.

Ansonsten könnte man bestimmt noch "tricksen" indem man im Timer ISR  x beliebige Pins je nach Timer Counter schalten läßt. Sowas in der Art wurde hier mal besprochen. Bitte mal lesen. Aus der Kalten heraus mach ich das auch nicht.   http://forum.arduino.cc/index.php?topic=359685 (http://forum.arduino.cc/index.php?topic=359685)

Edit:
zeig mal bitte deinen bisherigen Code ( in </> Code Tags bitte oder .ino Datei ranhängen)
Title: Re: Timer 2 15 khz frequenz mit variabler duty cycle
Post by: gregorss on Feb 09, 2016, 05:54 pm
Ich bräuchte am Pin 11 ...
Als ich einmal versucht habe, einen Code, der auf Pin 3 Timer-gesteuert arbeitete, auf einen anderen Pin „umzuziehen", hat sich herausgestellt, dass es nicht funktionieren kann, weil sich dann die Bedeutung eines Registers ändert. Was vorher als „Output Compare"-Wert interpretiert wurde, wurde zu irgendeinem „Top-" oder „Down-Wert".

Seither weiß ich, dass Timerprogrammierung nicht ganz einfach ist und längst nicht alles auf allen Pins machbar ist. Und obwohl ich den betreffenden Teil des (ATmega328-) Datenblattes mehrmals konzentiert durchgelesen hatte, habe ich das Problem nicht selbst gefunden.

Der Code, von dem ich damals ausgegangen bin, basierte auf der Application Note auf dieser Seite (http://www.vishay.com/product?docid=82474).

Grundsätzlich wäre gut, wenn Du Deinen (aufgeräumten ;-) Code mal zeigen könntest.

Gruß

Gregor
Title: Re: Timer 2 15 khz frequenz mit variabler duty cycle
Post by: Doc_Arduino on Feb 09, 2016, 06:17 pm
Hallo,

das mit dem Pin 11 und Timer 2 haut auf dem Uno schon hin. Ist der hardware kodierte Timer 2 Pin OC2A.
Sollte auch für den Nano gültig sein, denke ich.

Ich hätte jetzt ein Bsp. fertig mit Mode 3 für den Timer 2. Aber wenn der TO keinen Code zeigt, gibts nichts.

Mode 7 bekomme ich noch nicht hin. Macht aber denke ich, mit weniger als 8Bit Auflösung auch keinen Sinn.
Wobei ich zugeben muß, dass die Registerbezeichnung beim Timer 2 im Datenblatt schon etwas anders ist. Die Namen wie im Datenblatt kennt der Compiler einfach nicht. Zum Bsp. OCRA. OCR2A und OCR2B gibt es, steht aber so nicht im Datenblatt. Weis noch nicht so recht was den Datenblatt Schreiberling dabei geritten hat.


Title: Re: Timer 2 15 khz frequenz mit variabler duty cycle
Post by: Serenifly on Feb 09, 2016, 06:33 pm
Die einzige Stelle wo "OCRA" auftaucht ist in der Waveform Generation Tabelle. Überall anders steht die genaue Bezeichnung.
Title: Re: Timer 2 15 khz frequenz mit variabler duty cycle
Post by: gregorss on Feb 09, 2016, 06:36 pm
...
Wobei ich zugeben muß, dass die Registerbezeichnung beim Timer 2 im Datenblatt schon etwas anders ist. Die Namen wie im Datenblatt kennt der Compiler einfach nicht. Zum Bsp. OCRA. OCR2A und OCR2B gibt es, steht aber so nicht im Datenblatt. Weis noch nicht so recht was den Datenblatt Schreiberling dabei geritten hat.
Was meinst Du? In meiner Version des Datenblattes stehen einwandfreie Namen drin (http://test.szaktilla.de/shot.png (http://test.szaktilla.de/shot.png)). Ich habe da nur mal willkürlich ein paar Markierungen reingemalt.

Gruß

Gregor
Title: Re: Timer 2 15 khz frequenz mit variabler duty cycle
Post by: Doc_Arduino on Feb 09, 2016, 06:56 pm
Hallo,

ich rede vom Datenblatt von meinem Mega2560 im Kapitel 20 - Timer 2. Dabei interessiert mich die außere Pinbelegung noch nicht wirklich. Aus dem Kapitel möchte ich nur herauslesen welches Register was macht und wie ich es setzen muß.

Also kann man sagen das in der Tabelle mit OCRA eigentlich OCR2A gemeint ist?
Irgendeine Timer Nummer muß ja enthalten sein im Namen.

Was ich auch probiert hatte war mit dem digitalWrite(Pin, LOW);
Klappte aber nicht. Einmal 0 immer 0.
Dann habe ich nachgeschaut wie das in der wiring_analog gemacht wird.
Klappte aber mit auch nicht. Einmal 0 immer 0.
Code: [Select]

int value = analogRead(_Poti)/4;  
  
  if (value == 0)  {
    digitalWrite(_PWMpin, LOW);   // PWM 0% an Pin 10
  }
  else  {
    TCCR2A = (1<<COM2A1);
    OCR2A = value;                // PWM x% an Pin 10
  }


Mich wundert auch das "Arduino" zum jedesmal neu setzen der Register die Interrupts nicht ausschaltet.

Edit:
ähm ja, ich muß ja entweder das Register komplett neu setzen wie beim Timer setzen oder nur das eine Bit zwischendurch. Mein Fehler. Scheinbar wird mit digitalWrite der gesamte Timer zurückgesetzt. Oder so ähnlich.
Title: Re: Timer 2 15 khz frequenz mit variabler duty cycle
Post by: Serenifly on Feb 09, 2016, 06:59 pm
Musst du do
Also kann man sagen das in der Tabelle mit OCRA eigentlich OCR2A gemeint ist?
Irgendeine Timer Nummer muß ja enthalten sein im Namen.
Ja. Ich das nie anders verstanden
Title: Re: Timer 2 15 khz frequenz mit variabler duty cycle
Post by: Doc_Arduino on Feb 09, 2016, 07:03 pm
Hallo,

bestimmt sollte da stehen OCRnA oder eben gleich OCR2A.
Ähnlich wie beim Timer 1. Da ist alles glas klar.  :)

Warum in der wiring_analog jedoch keine ISR's ausgeschalten werden müssen würde mich schon interessieren.  ;)
Title: Re: Timer 2 15 khz frequenz mit variabler duty cycle
Post by: Serenifly on Feb 09, 2016, 07:13 pm
ähm ja, ich muß ja entweder das Register komplett neu setzen wie beim Timer setzen oder nur das eine Bit zwischendurch. Mein Fehler. Scheinbar wird mit digitalWrite der gesamte Timer zurückgesetzt. Oder so ähnlich.
Eigentlich sollte nur das entsprechende COMnA/B1 Bit gelöscht werden. Siehe turnOffPWM() in wiring_digital.c

z.B.:
Code: [Select]

#if defined(TCCR2A) && defined(COM2A1)
case  TIMER2A:  cbi(TCCR2A, COM2A1);    break;
#endif
#if defined(TCCR2A) && defined(COM2B1)
case  TIMER2B:  cbi(TCCR2A, COM2B1);    break;
#endif
Title: Re: Timer 2 15 khz frequenz mit variabler duty cycle
Post by: Doc_Arduino on Feb 09, 2016, 07:24 pm
Hallo,

ja, macht es auch. Ich hatte aber dummerweise nur immer das eine Bit in das komplette Register geschrieben. Die anderen gesetzten Bits damit gelöscht.  :)

Wenn ich nun sbi definiere, dann klappt auch nur das Bit setzen.   :)

Code: [Select]

sbi(TCCR2A, COM2A1);


Nur warum müssen dafür die Interrupts nicht ausgeschaltet werden? Soll man doch machen denke ich.
Title: Re: Timer 2 15 khz frequenz mit variabler duty cycle
Post by: murdok1980 on Feb 09, 2016, 07:45 pm
Den Teil für die PWM des Timers 1 setz ich dann gleich rein.
Title: Re: Timer 2 15 khz frequenz mit variabler duty cycle
Post by: murdok1980 on Feb 09, 2016, 08:07 pm
@ doc_arduino
Wie versprochen der Codeteil für die PWM an PIN 9 und 10.
Code: [Select]

TCCR1A = _BV(COM1A1) | _BV(COM1B1) ;      // Phase und Frequenz correct Modus. Nicht invertiert Modus
TCCR1B = _BV(WGM13) | _BV(CS10);           // Auswahl Modus 8 mit Teiler 1 zum CPU Takt
ICR1 = 512;// ICR1 = 512, Frequenz = 15,625kHz (16000000 Hz / ( 2 x Prescaler x 512 ))


und in die Register OCR1A und OCR1B schreib ich dann die entsprechende Werte die ich für die duty cycle brauch und steuer 2 H-Brücken Treiber an. Der Wert für die OCR1A und OCR1B Register kommt aus einem RC Empfänger, welchen ich am PIN 2 und 3 auslese.

Es soll ja nicht so aussehen als wöllte ich hier nur schnorren wollen.
So wie das Beispiel oben geht das beim Timer 2 ja nicht weil entsprechende Register fehlen aber eine etwa gleiche Funktion müsste gehen. Wie gesagt die 8Bit reichen mir aus.

Grüße Andre
Title: Re: Timer 2 15 khz frequenz mit variabler duty cycle
Post by: Serenifly on Feb 09, 2016, 08:17 pm
Bei Timer2 geht das mit einem Pin. Aber nicht mit zwei. Der Vorteil von Timer1 ist eben das Input Capture Register. Das wird dann in dem Modus als TOP genommen, so dass man beide Output Compare Register frei hat.
Title: Re: Timer 2 15 khz frequenz mit variabler duty cycle
Post by: Doc_Arduino on Feb 09, 2016, 08:23 pm
Hallo,

deinen Versuchscode vom Timer 2 zeigste uns nicht?   Bin heute aber streng.  :)
Title: Re: Timer 2 15 khz frequenz mit variabler duty cycle
Post by: murdok1980 on Feb 09, 2016, 08:32 pm
Will nich das ihr mich auslacht :)
Code: [Select]

const byte OUTPUT_PIN2 = 6;
const byte OUTPUT_PIN3 = 7;

void setup()
{

  pinMode (OUTPUT_PIN2, OUTPUT);
  pinMode (OUTPUT_PIN3, OUTPUT);

  digitalWrite(OUTPUT_PIN2, LOW);
  digitalWrite(OUTPUT_PIN3, HIGH);
 
  pinMode(11, OUTPUT);//OCR2A


TCCR2A = (1<<WGM21) | (1<<WGM20)| (1<<COM1A1) ;
TCCR2B = (1<<CS20);


}  // end of setup

void loop() {

  OCR2A = 255;
 

}

Hier passt die Frequenz aber nicht
Title: Re: Timer 2 15 khz frequenz mit variabler duty cycle
Post by: murdok1980 on Feb 09, 2016, 08:37 pm
@Serenifly
Ich brauch ja auch nur noch einen zusätzlichen Ausgang. Das würde reichen. 2x PWM mit Timer1 und einer mit Timer2. So dass ich insgesamt drei H-Brücken ansteuern kann.
Title: Re: Timer 2 15 khz frequenz mit variabler duty cycle
Post by: Doc_Arduino on Feb 09, 2016, 09:02 pm
Hallo,

na gut, lass ich gelten. Sind aber "Schusselfehler" drin. Die Bits passen aber nicht zum Timer 2.
Bsp.
COM1A1   ist für Timer 1
WGM13   ist auch für Timer 1 und gibts beim Timer 2 nicht
ICR1  ist auch für Timer 1, kann man beim Timer 2 nicht ändern
Und andere Bits werden überhaupt nicht gesetzt.
Hast du überhaupt jemals versucht ins Datenblatt zu schauen?
Eigentlich ist der Versuch ungültig.  ;)
Aber jeder fängt mal an.
Will dich aber nicht länger auf die Folter spannen. Den Pin auf 11 anpassen darfste selbst ...

15kHz sind aber wie schon erwähnt so nicht möglich.

Code: [Select]
/*
 Doc_Arduino - german Arduino Forum
 IDE 1.6.7
 Arduino Mega2560
 
 Timer 2: Fast-PWM, Mode 3
 TOP:  0xFF     (Takt-Frequenz)
 Pulsweite: OCR2A  (<= TOP)
 Schaltpin: 10   (OC2A bzw. PB4) nicht invertiert
*/

#ifndef sbi
#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))   // setzt das angegebene Bit auf 1
#endif

const byte _PWMpin = 10;   // OC2A bzw. PB4 nicht invertiert, IRFxxxx Mosfet o.ä.
const byte _Poti = A0;     // Potentiometer

void setup()  {
  Serial.begin(9600);
  
  digitalWrite(_PWMpin, LOW);    // OC2A bzw. PB4 nicht invertiert
  pinMode(_PWMpin, OUTPUT);      
  
  set_Timer2();
  
}

  
void loop() {          
  
  int value = analogRead(_Poti)/4;  
  
  if (value == 0)  {
    digitalWrite(_PWMpin, LOW);   // PWM 0%
  }
  else  {
    sbi(TCCR2A, COM2A1);
    OCR2A = value;                // PWM x%
  }
  
  //Serial.print(F("PWM Wert: ")); Serial.println(value);
  //delay(1000);
  
                              
}   // loop Ende


// ****** Funktionen ******* //
    
void set_Timer2()       // Fast-PWM, Mode 3
{
  cli();         // Interrupts ausschalten
  TCCR2A = 0;    // Reset TCCR1A Register
  TCCR2B = 0;    // Reset TCCR1B Register
  TIMSK2 = 0;    // Reset TIMSK1 Register (disable Timer Compare Interrupts)
  TCNT2  = 0;    // Reset Start-Counter
  TCCR2A = (1<<COM2A1) | (1<<WGM21) | (1<<WGM20);  // non invert, set Mode 3
  TCCR2B = (1<<CS21);                              // Prescaler 8 >> 7,8kHz
  OCR2A = 0;     // Pulsweite, < 255 (2^8)
  sei();         // Interrupts einschalten
}  // end Funktion



Title: Re: Timer 2 15 khz frequenz mit variabler duty cycle
Post by: Doc_Arduino on Feb 09, 2016, 09:15 pm
Hallo,

übrigens, Timer 2 mit seinen zwei Pins funktioniert auch.

Code: [Select]
/*
 Doc_Arduino - german Arduino Forum
 IDE 1.6.7
 Arduino Mega2560
 
 Timer 2: Fast-PWM, Mode 3
 TOP:  0xFF     (Takt-Frequenz)
 Pulsweite: OCR2A, OCR2B  (<= TOP)
 Schaltpin: 10   (OC2A bzw. PB4) nicht invertiert
 Schaltpin:  9   (OC2B bzw. PH6) nicht invertiert
*/

#ifndef sbi
#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))   // setzt das angegebene Bit auf 1
#endif

const byte _PWMpinA = 10;  // OC2A bzw. PB4 nicht invertiert, IRFxxxx Mosfet o.ä.
const byte _PWMpinB =  9;  // OC2B bzw. PH6 nicht invertiert, IRFxxxx Mosfet o.ä.
const byte _Poti = A0;     // Potentiometer

void setup()  {
  Serial.begin(9600);
 
  digitalWrite(_PWMpinA, LOW);    // OC2A
  pinMode(_PWMpinA, OUTPUT);   
  digitalWrite(_PWMpinB, LOW);    // OC2B
  pinMode(_PWMpinB, OUTPUT);     
 
  set_Timer2();
 
}

 
void loop() {           
 
  int value = analogRead(_Poti)/4; 
 
  OCR2A = value;                // PWM x%
  OCR2B = value/2;              // 1/2 PWM von OCR2A
 
  //Serial.print(F("PWM Wert: ")); Serial.println(value);
  //delay(1000);
 
                             
}   // loop Ende


// ****** Funktionen ******* //
   
void set_Timer2()       // Fast-PWM, Mode 3
{
  cli();         // Interrupts ausschalten
  TCCR2A = 0;    // Reset TCCR1A Register
  TCCR2B = 0;    // Reset TCCR1B Register
  TIMSK2 = 0;    // Reset TIMSK1 Register (disable Timer Compare Interrupts)
  TCNT2  = 0;    // Reset Start-Counter
  TCCR2A = (1<<COM2A1) | (1<<COM2B1) | (1<<WGM21) | (1<<WGM20);  // non invert, set Mode 3
  TCCR2B = (1<<CS21);                              // Prescaler 8 >> 7,8kHz
  OCR2A = 0;     // Pulsweite, < 255 (2^8)
  OCR2B = 0;     // Pulsweite, < 255 (2^8)
  sei();         // Interrupts einschalten
}  // end Funktion



Title: Re: Timer 2 15 khz frequenz mit variabler duty cycle
Post by: Serenifly on Feb 09, 2016, 09:43 pm
Quote
ICR1  ist auch für Timer 1, kann man beim Timer 2 nicht ändern
ICR gibt es bei Timer2 nicht, weil Timer2 keine Input Capture Einheit hat

Das Register ist eigentlich dazu da externe Ereignisse zu erfassen. Hier wird es "missbraucht"
Title: Re: Timer 2 15 khz frequenz mit variabler duty cycle
Post by: Doc_Arduino on Feb 09, 2016, 09:52 pm
Hallo,

jetzt hab ich nochmal trial & error gemacht, wegen Timer 2 Mode 7.
Steht nämlich laut meinem Verständnis so nicht komplett im Datenblatt.
Schon alleine die Taktberechnungsformel fehlt.
Auf Grund meiner Erkenntnisse von Timer 1 konnte es aber nicht viel anders sein.
Wenn OCR2A demnach TOP ist, muß OCR2B für die Pulsweite übrig bleiben. :)
Und siehe da, mit OCR2A = 128 erhält man einen Takt von 15,5kHz
Takt = µC Takt / Prescaler / (OCR2A+1)
Natürlich zwangsweise einhergehend mit reduzierter PWM Auflösung. In dem Fall nur noch 2^7.

Code: [Select]
/*
 Doc_Arduino - german Arduino Forum
 IDE 1.6.7
 Arduino Mega2560
 
 Timer 2: Fast-PWM, Mode 7
 TOP:  OCR2A     (Takt-Frequenz)
 Pulsweite: OCR2B  (<= TOP)
 Schaltpin:  9   (OC2B bzw. PH6) nicht invertiert
*/

#ifndef sbi
#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))   // setzt das angegebene Bit auf 1
#endif

const byte _PWMpinB =  9;  // OC2B bzw. PH6 nicht invertiert, IRFxxxx Mosfet o.ä.
const byte _Poti = A0;     // Potentiometer

void setup()  {
  Serial.begin(9600);
  
  digitalWrite(_PWMpinB, LOW);    // OC2B
  pinMode(_PWMpinB, OUTPUT);      
  
  set_Timer2();
}

  
void loop() {          
  
  int value = analogRead(_Poti)/8;  // <= TOP beachten !!!

  OCR2B = value;         // PWM x%  // <= TOP beachten !!!
  
  //Serial.print(F("PWM Wert: ")); Serial.println(value);
  //delay(1000);
                    
}   // loop Ende


// ****** Funktionen ******* //
    
void set_Timer2()       // Fast-PWM, Mode 7
{
  cli();         // Interrupts ausschalten
  TCCR2A = 0;    // Reset TCCR1A Register
  TCCR2B = 0;    // Reset TCCR1B Register
  TIMSK2 = 0;    // Reset TIMSK1 Register (disable Timer Compare Interrupts)
  TCNT2  = 0;    // Reset Start-Counter
  TCCR2A = (1<<COM2B1) | (1<<WGM21) | (1<<WGM20);  // non invert, set Mode 7
  TCCR2B = (1<<CS21) | (1<<WGM22);                 // Prescaler 8
  OCR2A = 128;   // TOP, zusammen mit Prescaler 8 >> 15,5kHz
  OCR2B = 0;     // Pulsweite, <= TOP
  sei();         // Interrupts einschalten
}  // end Funktion





Title: Re: Timer 2 15 khz frequenz mit variabler duty cycle
Post by: Doc_Arduino on Feb 09, 2016, 09:54 pm
ICR gibt es bei Timer2 nicht, weil Timer2 keine Input Capture Einheit hat

Das Register ist eigentlich dazu da externe Ereignisse zu erfassen. Hier wird es "missbraucht"
Hallo,

meinte ich eigentlich, gibts nicht bei Timer 2. Nur blöd ausgedrückt.
Was meinst du mit missbraucht? Wenns das nicht gibt.
Title: Re: Timer 2 15 khz frequenz mit variabler duty cycle
Post by: murdok1980 on Feb 09, 2016, 10:25 pm
Danke doc. Ich gelobe Besserung werd jetzt erstmal den code und das Datenblatt studieren um zu begreifen wie das funktioniert. Es nützt mir ja der code allein nichts wenn ich nicht kapiere was abläuft.
Grüße
Andre
Ich meld mich aber bestimmt noch mal. Das mit den 15khz teste ich natürlich auch.
Title: Re: Timer 2 15 khz frequenz mit variabler duty cycle
Post by: murdok1980 on Feb 09, 2016, 10:47 pm
@doc arduino
Mit anpassen des Pins meinst du diese constante hier const byte _PWMpinB = beliebiger PIN oder?
Title: Re: Timer 2 15 khz frequenz mit variabler duty cycle
Post by: Serenifly on Feb 09, 2016, 10:55 pm
Beliebig nicht. Die PWM Pins sind fest. Zu jedem Timer gehören je nach Prozessor 2 oder 3 Pins. Und jeder Kanal A, B oder C (auf dem Mega) hat einen spezifischen Pin.
Title: Re: Timer 2 15 khz frequenz mit variabler duty cycle
Post by: Doc_Arduino on Feb 10, 2016, 10:54 am
Hallo,

wie schon Serenifly sagt, es handelt sich hier um die hardware kodierten Timer zugehörigen Pins. Die sind nicht änderbar. Deswegen habe ich im Code Kommentar auch den Atmel original Namen dahinter geschrieben. Zum Bsp. OC2A. Das ist eindeutig glasklar. Man muß dann nur die Pin-Nr. dafür suchen für seinen µC bzw. Arduinoboard. Ein User, auch hier im Forum, erstellt dazu schöne Pinouts.

http://www.pighixxx.com/test/pinoutspg/ (http://www.pighixxx.com/test/pinoutspg/)

http://www.pighixxx.com/test/portfolio-items/nano/?portfolioID=314 (http://www.pighixxx.com/test/portfolio-items/nano/?portfolioID=314)

Beim Nano wäre OC2A an Arduino Pin 11. Es wurde hier nur das A vergessen. Am ICSP Header steht es richtig dran. Und OC2B wäre beim Nano Arduino Pin 3.

Zum Timer einstellen etwas generelles. Bsp. Timer 2. Ich habe das Datenblatt von meinem Mega2560 vor mir, die Kapitel Nummern sollten aber gleich sein. Du hast den Atmel 328P.

Man wählt den gewünschten Timer Mode.
Kapitel 20.10, Tabelle 20-8.
Setzt die dafür benötigten WGM Bits im entsprechenden Register.
Aus der Tabelle und der Mode Textbeschreibung geht dann noch hervor, welches Register für den Top-Wert zuständig ist und beeinflußt damit den Takt. Und es geht daraus noch hervor welches Register man für die Pulsweite nutzen kann/muß. Sollte aus den Bsp. deutlicher hervorgehen.

In der Tabelle fällt mir auch schon wieder ein Schreibfehler auf im Vergleich zur Timer 1 Beschreibung.
Statt WGM2, WGM1, WGM0 müßte entweder stehen
WGMn2, WGMn1, WGMn0 oder gleich WGM22, WGM21, WGM20
n ... steht immer für die Timer Nummer.
x ... steht immer für den Timer Kanal.
"Timer 2" muß wohl ein Lehrling bei Atmel geschrieben haben.  :-)
In der Timer 0 Beschreibung übrigens das gleiche.
Das darf dich nicht aus der Ruhe bringen.

Dann wählt man wie der zugehörige Timer Pin geschaltet werden soll. Ist natürlich vom gewählten Modus abhängig. Das wären die COM Bits. Tabellen 20-2 bis 20-7. Am Ende wählt man noch den gewünschten Prescaler mittels CS Bits. Tabelle 20-9.

Das war es dann im Grunde schon. Will man statt Timer Pins die Timer Interrupts nutzen, wird es nochmal spannender. Kapitel 14. allgemein, was es so gibt. Und Timer 2 speziell zur Freischaltung dieser 20.10.7

Das muß erstmal ausreichen. Lesen, verstehen, experimentieren. Dann wird das von ganz alleine.  :)



Title: Re: Timer 2 15 khz frequenz mit variabler duty cycle
Post by: gregorss on Feb 10, 2016, 11:53 am
Zum Timer einstellen etwas generelles ...
Super Zusatzinfo! Karmamäßig!

Gruß

Gregor
Title: Re: Timer 2 15 khz frequenz mit variabler duty cycle
Post by: Doc_Arduino on Feb 10, 2016, 12:28 pm
Hallo,

Danke. Warum sollte man es neuen Arduino'lern schwerer machen als man es selbst hatte.
Den Rest muß man sich sowieso erarbeiten wenn man etwas ändern möchte.
Title: Re: Timer 2 15 khz frequenz mit variabler duty cycle
Post by: murdok1980 on Feb 10, 2016, 02:33 pm
Was mich bis dato immer irretiert hat, dass man die Bits mit verschiedenen Schreibweisen setzen kann.
Muss man beim setzen der Bits eigentlich nur die 1er setzen, weil 0 automatisch drin steht?
Title: Re: Timer 2 15 khz frequenz mit variabler duty cycle
Post by: Doc_Arduino on Feb 10, 2016, 03:05 pm
Hallo,

ich lösche vorher die Register, obwohl die nach µC Reset eigentlich automatisch auf 0 stehen sollten.
Damit muß man nur noch gezielt seine Wunsch Bits setzen und ist besser lesbar.





Title: Re: Timer 2 15 khz frequenz mit variabler duty cycle
Post by: Doc_Arduino on Feb 10, 2016, 03:31 pm
Hallo,

ja, es gibt verschiedene Schreibweisen, haben alle ihre Vorteile, ist jedoch alles keine Hexerei, guck mal hier zum lesen:  http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Ver.C3.A4ndern_von_Registerinhalten (http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Ver.C3.A4ndern_von_Registerinhalten)

ein Bsp.

Code: [Select]
/*
 Doc_Arduino - german Arduino Forum
 IDE 1.6.7
 Arduino Mega2560
 
*/

#ifndef sbi   // Bit setzen
#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))
#endif
#ifndef cbi  // Bit löschen
#define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit))
#endif

byte Register_X;  


void setup()  {
  Serial.begin(9600);

  zeigeFormatiertesByte(Register_X);
  Register_X = (1<<7);                //setzt nur Bit 7
  zeigeFormatiertesByte(Register_X);
  Register_X = 128;                   //nochmal, nur dezimal
  zeigeFormatiertesByte(Register_X);
  Register_X = (1<<1);                //setzt nur Bit 1
  zeigeFormatiertesByte(Register_X);
  Register_X = (1<<3) | (1<<5);       //setzt Bit 3 und 5
  zeigeFormatiertesByte(Register_X);
  Serial.println();

  sbi(Register_X, 7);                 // setzt Bit 7 zusätzlich
  zeigeFormatiertesByte(Register_X);
  sbi(Register_X, 1);                 // setzt Bit 1 zusätzlich
  zeigeFormatiertesByte(Register_X);
  Serial.println();

  cbi(Register_X, 3);                 // löscht Bit 7 einzeln
  zeigeFormatiertesByte(Register_X);
  cbi(Register_X, 5);                 // löscht Bit 7 einzeln
  zeigeFormatiertesByte(Register_X);
}

  
void loop() {          
      
}   // loop Ende


// ****** Funktionen ******* //

void zeigeFormatiertesByte (byte &value)
{
  for (int i=7;i>=4;i--) Serial.print(bitRead(value,i));  // von jurs, formatiert Byte in Binärform
  Serial.print(".");
  for (int i=3;i>=0;i--) Serial.print(bitRead(value,i));  
  Serial.println();
}      



Title: Re: Timer 2 15 khz frequenz mit variabler duty cycle
Post by: Doc_Arduino on Feb 10, 2016, 04:11 pm
Hallo,

nochwas. Die Namen der Bits in den Registern sind im Grunde genommen "auch nur" Bitnummern. Jedoch mit Klarnamen versehen. Es existiert irgendwo in der IDE bzw. im Compiler für jeden µC einen Art Übersetzungstabelle mit all seinen Registern usw. Vieles davon nimmt uns die Arduino IDE unsichtbar ab. Deswegen können wir unbekümmert die Namen der Register und der Bits mit ihren Namen verwenden, wie von Atmel im Datenblatt vorgesehen.

Code: [Select]
Register_X = (1<<FOC2A);                //setzt nur Bit 7
zeigeFormatiertesByte(Register_X);
Register_X = (1<<CS21);                 //setzt nur Bit 1
zeigeFormatiertesByte(Register_X);

Serial.println(FOC2A);
Serial.println(CS21);
Title: Re: Timer 2 15 khz frequenz mit variabler duty cycle
Post by: murdok1980 on Feb 10, 2016, 07:17 pm
Hab jetzt die Codes ausprobiert. Der mit dem einen Kanal und den 15,5 khz funktioniert nicht.
Die serielle Ausgabe sagt PWM per Poti ins value alles OK. Zwischen dem PIN11 und Masse messe ich 0Volt.
Zwischen PIN11 und Plus messe ich 5 Volt.
Hab den Code so hier angepasst. PIN6 und PIN7 sind für die Richtungsvorgabe der H-Brücke
Code: [Select]

/*
 Doc_Arduino - german Arduino Forum
 IDE 1.6.7
 Arduino Mega2560
 
 Timer 2: Fast-PWM, Mode 7
 TOP:  OCR2A     (Takt-Frequenz)
 Pulsweite: OCR2B  (<= TOP)
 Schaltpin:  9   (OC2B bzw. PH6) nicht invertiert
*/

#ifndef sbi
#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))   // setzt das angegebene Bit auf 1
#endif

const byte _PWMpinB =  11;  // OC2B bzw. PH6 nicht invertiert, IRFxxxx Mosfet o.ä.
const byte _Poti = A0;     // Potentiometer
const byte OUTPUT_PIN2 = 6;
const byte OUTPUT_PIN3 = 7;

void setup()  {
  Serial.begin(9600);
  pinMode (OUTPUT_PIN2, OUTPUT);
  pinMode (OUTPUT_PIN3, OUTPUT);
  digitalWrite(OUTPUT_PIN2, LOW);
  digitalWrite(OUTPUT_PIN3, HIGH);
  pinMode(_PWMpinB, OUTPUT); 
  digitalWrite(_PWMpinB, LOW);    // OC2B
       
 
  set_Timer2();
}

 
void loop() {           
 
  int value = analogRead(_Poti)/8;  // <= TOP beachten !!!

  OCR2B = value;         // PWM x%  // <= TOP beachten !!!
 
  Serial.print(F("PWM Wert: ")); Serial.println(value);
  //delay(1000);
                     
}   // loop Ende


// ****** Funktionen ******* //
   
void set_Timer2()       // Fast-PWM, Mode 7
{
  cli();         // Interrupts ausschalten
  TCCR2A = 0;    // Reset TCCR1A Register
  TCCR2B = 0;    // Reset TCCR1B Register
  TIMSK2 = 0;    // Reset TIMSK1 Register (disable Timer Compare Interrupts)
  TCNT2  = 0;    // Reset Start-Counter
  TCCR2A = (1<<COM2B1) | (1<<WGM21) | (1<<WGM20);  // non invert, set Mode 7
  TCCR2B = (1<<CS21) | (1<<WGM22);                 // Prescaler 8
  OCR2A = 128;   // TOP, zusammen mit Prescaler 8 >> 15,5kHz
  OCR2B = 0;     // Pulsweite, <= TOP
  sei();         // Interrupts einschalten
}  // end Funktion



Der erste Code mit 7,8 khz funktioniert, hab ihn so angepasst.
Code: [Select]

/*
 Doc_Arduino - german Arduino Forum
 IDE 1.6.7
 Arduino Mega2560
 
 Timer 2: Fast-PWM, Mode 3
 TOP:  0xFF     (Takt-Frequenz)
 Pulsweite: OCR2A  (<= TOP)
 Schaltpin: 10   (OC2A bzw. PB4) nicht invertiert
*/

#ifndef sbi
#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))   // setzt das angegebene Bit auf 1
#endif

const byte _PWMpin = 11;   // OC2A bzw. PB4 nicht invertiert, IRFxxxx Mosfet o.ä.
const byte _Poti = A0;     // Potentiometer
const byte OUTPUT_PIN2 = 6;
const byte OUTPUT_PIN3 = 7;

void setup()  {
  Serial.begin(9600);
  pinMode (OUTPUT_PIN2, OUTPUT);
  pinMode (OUTPUT_PIN3, OUTPUT);
  digitalWrite(OUTPUT_PIN2, LOW);
  digitalWrite(OUTPUT_PIN3, HIGH);
  digitalWrite(_PWMpin, LOW);    // OC2A bzw. PB4 nicht invertiert
  pinMode(_PWMpin, OUTPUT);     
 
  set_Timer2();
 
}

 
void loop() {           
 
  int value = analogRead(_Poti)/4; 
 
  if (value == 0)  {
    digitalWrite(_PWMpin, LOW);   // PWM 0%
  }
  else  {
    sbi(TCCR2A, COM2A1);
    OCR2A = value;                // PWM x%
  }
 
  //Serial.print(F("PWM Wert: ")); Serial.println(value);
  //delay(1000);
 
                             
}   // loop Ende


// ****** Funktionen ******* //
   
void set_Timer2()       // Fast-PWM, Mode 3
{
  cli();         // Interrupts ausschalten
  TCCR2A = 0;    // Reset TCCR1A Register
  TCCR2B = 0;    // Reset TCCR1B Register
  TIMSK2 = 0;    // Reset TIMSK1 Register (disable Timer Compare Interrupts)
  TCNT2  = 0;    // Reset Start-Counter
  TCCR2A = (1<<COM2A1) | (1<<WGM21) | (1<<WGM20);  // non invert, set Mode 3
  TCCR2B = (1<<CS21);                              // Prescaler 8 >> 7,8kHz
  OCR2A = 0;     // Pulsweite, < 255 (2^8)
  sei();         // Interrupts einschalten
}  // end Funktion



Grüße
Andre
Title: Re: Timer 2 15 khz frequenz mit variabler duty cycle
Post by: Doc_Arduino on Feb 10, 2016, 07:53 pm
Hallo,

statt erstmal Danke zu sagen wird gemosert. Und statt den Code und die Kommentare zu lesen wird wild probiert und gesagt, geht nicht. Das macht mich traurig.

Warum funktioniert wohl der 15kHz Code bei dir nicht?
Weil der nur auf Timer 2 Pin OC2B läuft. Nicht auf OC2A, wie die anderen.
Weil OC2A wegen dem TOP Wert OCR2A uns nicht zur Verfügung steht.
Schon mehrfach erwähnt das die Dinger hardware kodiert sind.
Habe nicht umsonst erwähnt das es beim Nano Pin 11 und 3 ist.

das hier hätte eigentlich auffallen müssen ... das was nicht paßt,

Quote
...
const byte _PWMpinB = 11;  // OC2B bzw. PH6 nicht invertiert
const byte _PWMpin   = 11;  // OC2A bzw. PB4 nicht invertiert
Lesen, sonst war alles umsonst.

Aber ich weis selbst, ist alles nicht so einfach ...  :)   Sorry wenn ich schimpfen mußte.

Du solltest auch die Namen usw. für deinen Nano anpassen. Nicht das du noch mehr durcheinander kommst.
Title: Re: Timer 2 15 khz frequenz mit variabler duty cycle
Post by: murdok1980 on Feb 10, 2016, 08:31 pm
Hallo Doc
Das war so nicht gemeint, bin ja schon fleißig am lesen. Das PIN 3 und 11 zum Timer 2 gehören hab ich rausgelesen. Hab grade mal den PIN 11 auf 3 geändert und siehe da funzt. Schade das es auf PIN 11 nicht geht. Den PIN 3 brauch ich zwingend für das auslesen des Empfängers (Hardware Interrupt1).
Da wird mir wohl nix anderes übrig bleiben als mich in das Togglen eines PINs einzulesen, da gibts glaube ich etwas mit toggle bei compare oder so ähnlich , wobei das hier schon schwer genug ist. Hast du nen Tipp wo ich da was finde.
Danke für deine bisherige Hilfe.

Grüße
André
Title: Re: Timer 2 15 khz frequenz mit variabler duty cycle
Post by: Serenifly on Feb 10, 2016, 08:36 pm
Oder nimm Timer1 und ICR. Wieso das Timer2 sein muss habe ich bisher noch nicht verstanden.

Das automatisch zu machen hat halt den Vorteil dass keine ISR ausgelöst wird. 15kHz sind 66µs. So schnell ständig den Code zu unterbrechen ist nicht so toll.
Title: Re: Timer 2 15 khz frequenz mit variabler duty cycle
Post by: murdok1980 on Feb 10, 2016, 08:46 pm
Hallo,
die Frage kann ich beantworten. Weil ich mit dem Timer 1 schon 2 mal PWM mit 15,5 khz erzeuge und aber noch einen 3. Kanal brauche.
Ich glaub langsam das wird bissl eng mit nem Nano.
Grüße
André
Title: Re: Timer 2 15 khz frequenz mit variabler duty cycle
Post by: Serenifly on Feb 10, 2016, 08:52 pm
Ah. Das hatte ich übersehen.

Wegen des Interrupts. Du kannst statt einem Hardware Interrupt einen Pinchange Interrupt nehmen. Die sind komplizierter zu handhaben (da sich mehrere Pins einen Vektor teilen und man die Flanke per Hand abfragen muss), aber die gehen auf allen Pins (bis auf A6/A7 natürlich).

Oder man nimmt einfach eine fertige Library:
https://github.com/GreyGnome/EnableInterrupt (https://github.com/GreyGnome/EnableInterrupt)
Title: Re: Timer 2 15 khz frequenz mit variabler duty cycle
Post by: murdok1980 on Feb 10, 2016, 09:24 pm
Die Enable InterruptLibrary sieht vielversprechend aus. Wenn sich da nix mit den Timern 0-2 ins Gehege kommt, könnte das funktionieren. Werd ich mal ausprobieren aber nicht mehr heute.
Vielleicht hat ja doc_arduino noch Idee mit dem Togglen von PINs.
Grüße
André
Title: Re: Timer 2 15 khz frequenz mit variabler duty cycle
Post by: Serenifly on Feb 10, 2016, 09:30 pm
Die Beispiele da sind vielleicht etwas verwirrend. Du willst die Simple Version:
https://github.com/GreyGnome/EnableInterrupt/blob/master/examples/SimpleWithLibrary/SimpleWithLibrary.ino (https://github.com/GreyGnome/EnableInterrupt/blob/master/examples/SimpleWithLibrary/SimpleWithLibrary.ino)

Ist damit auch nicht anders als mit attachInterrupts()


Hier gibt es auch noch eine ältere Version die mit dem Atmega 328 und 2560 geht:
https://github.com/GreyGnome/PinChangeInt (https://github.com/GreyGnome/PinChangeInt)
Title: Re: Timer 2 15 khz frequenz mit variabler duty cycle
Post by: Doc_Arduino on Feb 10, 2016, 09:45 pm
Hallo,

a) den Empfänger kannste nicht auf einen anderen Pin legen?
b) müssen es wirklich 15kHz sein, was hängt da eigentlich dran?
c) welche Pins sind denn von was belegt und welche sind noch frei?
Title: Re: Timer 2 15 khz frequenz mit variabler duty cycle
Post by: murdok1980 on Feb 12, 2016, 12:33 pm
Hallo,
2 und 3 lesen 2 Empfängerkanäle aus (Interrupt 0 und 1)
5,6,7,8 sind die Richtungsvorgaben für die 2 H-Brücken
9 und 10 sind die PWMs der 2 H-Brücken mit Timer 1.

Die 15 khz damit in dem Schiffsmodell die Motoren nicht pfeifen. Stört einfach in einem Scalmodell.
Das Schiff hat 3 Motoren deswegen die 3 H-Brücken. (Eine fehlt ja noch.
Zwei Analoge Eingänge brauche ich evtl. noch für die Strommessung der H-Brücken.
Der Rest ist frei.
Ich könnte ja auch nen Mega2560 nehmen aber ich hab den Platz im Modell nicht.
Grüße

André
Title: Re: Timer 2 15 khz frequenz mit variabler duty cycle
Post by: Doc_Arduino on Feb 12, 2016, 01:58 pm
Hallo,

ich denke mal laut vor mich hin ...

Pin 2,3 sind gesetzt, bekommt man nicht frei

Nutzt du in deinem Code delay, millis oder micros? Wenn nicht, wäre Timer 0 frei und damit seine Pins, welche auf 5 und 6 rausgehen. Einen davon benötigten legste auf anderen freien um. Dann sollte man das von Timer 2 auf Timer 0 übertragen können.

Oder du mußt mittels I2C Bus einen Portexpander anschließen, womit du je nach Typ mindestens 8 digitale I/Os bekommst. 2 Pins sind von I2C belegt, bekommst dafür min. 6 zusätzlich. I2C wäre Hardwaremäßig Pin "A4", "A5". Oder softwaremäßig frei wählbar. Damit Pin 5 OC0B frei wird.

Mußte mal in Ruhe drüber nachdenken was so möglich ist.
Title: Re: Timer 2 15 khz frequenz mit variabler duty cycle
Post by: Serenifly on Feb 12, 2016, 02:02 pm
Oder wie gesagt Pin Change Interrupts. Die sind komplizierter zu handhaben, aber auf dem Atmega328 kann man da auf allen Pins (bis auf A6/A7 wenn vorhanden) Interrupts auslösen.
Title: Re: Timer 2 15 khz frequenz mit variabler duty cycle
Post by: Doc_Arduino on Feb 12, 2016, 02:47 pm
Hallo,

ja, auch eine gute Idee. Wurde wohl "übersehen". Beim Pinout lesen hatte ich mich kurz mal gefragt, warum man nicht alle Pins als Interrupt nutzen kann, wenn an fast allen ein PCINTxx dran steht.

Title: Re: Timer 2 15 khz frequenz mit variabler duty cycle
Post by: Serenifly on Feb 12, 2016, 02:49 pm
Bei den Pin Chnage Interrupts teilen sich immer 8 Pins einen Interrupt Vektor. Und sie triggern bei jedem Flankenwechsel. Daher ist da noch etwas Code nötig um herauszufinden welcher Pin was gemacht hat.

Die "richtigen" externen Interrupts haben für jeden Pin einen eigenen Vektor und es man kann gezielt auf die Flanken triggern.
Title: Re: Timer 2 15 khz frequenz mit variabler duty cycle
Post by: Doc_Arduino on Feb 12, 2016, 03:05 pm
okay verstehe, noch nicht im Detail wie die Lib intern arbeitet, aber das Prinzip ist klar.   :)
Ein Pin einer Gruppe löst einen Gruppen-ISR aus und man muß näher hinschauen welcher das war.

Title: Re: Timer 2 15 khz frequenz mit variabler duty cycle
Post by: murdok1980 on Feb 12, 2016, 03:12 pm
Ich nutze micros. Timer0 ist allso belegt.
Das mit dem PinChange Interrupt wäre ne Alternative da steig ich Moment aber noch nicht durch.
Ich hab irgendwo schon mal gesehen da wurde mit einem Timer ein x beliebiger Pin getoggelt und damit eine H-Brücke angesteuert.
Grüße
Andre
Title: Re: Timer 2 15 khz frequenz mit variabler duty cycle
Post by: Doc_Arduino on Feb 12, 2016, 03:24 pm
Hallo,

sowas ähnliches hatten wir auch schon gemacht. In einem Timer ISR x beliebige Pins toggeln lassen. Da gings glaube ich um eine Flüssigkeitspumpe. Der Code ist da auch umfangreicher.
Edit: das war hier drin    http://forum.arduino.cc/index.php?topic=359685 (http://forum.arduino.cc/index.php?topic=359685)
Neuland wäre mal die vorgeschlagene Lib auszuprobieren.  :)
Title: Re: Timer 2 15 khz frequenz mit variabler duty cycle
Post by: Doc_Arduino on Feb 12, 2016, 08:50 pm
Hallo,

die EnableInterrupt Lib funktioniert bei mir nicht so richtig.
Das Bsp. HiSpeedAllPin reagiert hin und wieder, aber nicht auf alle.
Alle anderen Bsp. davon reagieren überhaupt nicht.
Title: Re: Timer 2 15 khz frequenz mit variabler duty cycle
Post by: Serenifly on Feb 12, 2016, 08:56 pm
Mhh, du kannst mal die alte PinChangeInt Lib probieren:
https://github.com/GreyGnome/PinChangeInt (https://github.com/GreyGnome/PinChangeInt)

Hier gibt es noch eine:
https://github.com/NicoHood/PinChangeInterrupt (https://github.com/NicoHood/PinChangeInterrupt)
Ist neuer und unterstützt mehr Prozessoren
Title: Re: Timer 2 15 khz frequenz mit variabler duty cycle
Post by: Doc_Arduino on Feb 12, 2016, 09:06 pm
Hallo,

die PinChangeInt habe in der Zwischenzeit probiert.
Einige Bsp. sind nicht verwendbar, weil da  eine ByteBuffer.h includiert wird muß. Nur woher nehmen?
Halbwegs aber nicht nachvollziehbar funktiniert das Bsp. PinChangeIntSpeed. So richtig klar auf Tastendruck gehts auch hier nicht.  Bin ich zu blöd dafür?

Die andere teste ich auch gleich.



Title: Re: Timer 2 15 khz frequenz mit variabler duty cycle
Post by: Doc_Arduino on Feb 12, 2016, 09:20 pm
Hallo,

die PinChangeInterrupt Lib scheint zu funktionieren.
Bis auf das Low Level Bsp. Erhalte mehrere Compilerfehler.
Alle Pins kann man lt. Beschreibung nicht nutzen. Vielleicht ist das das Problem bei den anderen Libs ?
Aber diese funktioniert jedenfalls erstmal auf Anhieb.

Title: Re: Timer 2 15 khz frequenz mit variabler duty cycle
Post by: Doc_Arduino on Feb 12, 2016, 10:06 pm
Hallo,

wie vermutet, die PinChangeInt Lib funktiniert nicht mit Pin 4 oder 5 zum Bsp.
10,11,12 funktioniert. Bsp. "PinChangeIntExample2560".
#define MYPIN...  abändern

mit dem SpeedTest Bsp. komme ich dennoch nicht zurecht.
Title: Re: Timer 2 15 khz frequenz mit variabler duty cycle
Post by: Serenifly on Feb 12, 2016, 10:10 pm
Hast du einen Mega? Da gehen klar nicht alle Pins!

http://pighixxx.com/megapdf.pdf (http://pighixxx.com/megapdf.pdf)
Nur wo PCINTxx dabei steht
Title: Re: Timer 2 15 khz frequenz mit variabler duty cycle
Post by: Doc_Arduino on Feb 12, 2016, 10:23 pm
Hallo,

siehe links, ja habe einen Mega2560.  :)
Nur PCINT Pins. Jetzt macht das alles wieder Sinn.
Title: Re: Timer 2 15 khz frequenz mit variabler duty cycle
Post by: murdok1980 on Feb 13, 2016, 10:39 am
Hab mal kurz das Pinout des Mega überflogen. Pin 11 bis 13 sind da dem Timer 1 zugeordnet OC1A bis C.
Das wär für mich eigentlich ideal. Die Hardware ist halt bissl groß. Ich werd mal schauen ob es noch andere Hardware gibt.
Mit der Library werd ich auch noch einmal testen .
Grüße
Andre
Title: Re: Timer 2 15 khz frequenz mit variabler duty cycle
Post by: Doc_Arduino on Feb 13, 2016, 11:48 am
Hallo,

such mal nach "mega2560 mini". Allerdings muß man dann erst den Bootloader flashen, damit er wie jetzt gewohnt programmierbar wird.
Title: Re: Timer 2 15 khz frequenz mit variabler duty cycle
Post by: murdok1980 on Feb 13, 2016, 03:10 pm
Meinst du so was .? Das ist der einzige den ich gefunden hab.http://www.ebay.de/itm/AVR-Modul-mit-ATMEGA-2560-16MHz-/172090071292?hash=item28115e18fc:g:NNIAAOSwu-BWP6LZ (http://www.ebay.de/itm/AVR-Modul-mit-ATMEGA-2560-16MHz-/172090071292?hash=item28115e18fc:g:NNIAAOSwu-BWP6LZ)
Title: Re: Timer 2 15 khz frequenz mit variabler duty cycle
Post by: Doc_Arduino on Feb 13, 2016, 03:33 pm
Hallo,

haste aber nicht lange gesucht.  :)
Mußt mehr über Google suchen, nicht direkt bei ebay. Warum auch immer.

Bei dem haste kein gewohntes USB dran. Ein ISP Programmer wird dann Pflicht.

bei dem hier muß man alles selbst löten.
http://www.mikrocontroller-elektronik.de/mini-controllerboard-mit-atmel-atmega2560-und-usb/ (http://www.mikrocontroller-elektronik.de/mini-controllerboard-mit-atmel-atmega2560-und-usb/)

der wird eher was sein
http://www.ebay.com/itm/New-Small-Meduino-Mega2560-R3-Pro-Mini-ATMEGA16U2-Arduino-Mega2560-Compatible-/161757302117 (http://www.ebay.com/itm/New-Small-Meduino-Mega2560-R3-Pro-Mini-ATMEGA16U2-Arduino-Mega2560-Compatible-/161757302117)
Title: Re: Timer 2 15 khz frequenz mit variabler duty cycle
Post by: murdok1980 on Feb 13, 2016, 06:06 pm
Hallo
Programm er hab ich. Wäre nicht das Problem.
Ne Alternative wäre evtl noch nen Ardupilot der hat auch neun 2560 drauf, vorausgesetzt der bootloader lässt sich flashen.
Besorgte mir demnächst noch einen Arduino Micro mit 32u4 der sollte das auch können.
Der Meduino sieht ja auch nicht schlecht aus und der Preis ist unschlagbar.
Grüße
Andre
Title: Re: Timer 2 15 khz frequenz mit variabler duty cycle
Post by: Doc_Arduino on Feb 13, 2016, 06:49 pm
Hallo,

wenn du einen Programmer hast, ist die Auswahl für dich größer.  :)

Das sieht auch viel versprechend aus  :)
http://mikrocontroller-praxis.de/de/Development-Tools/AVR-Mikrocontroller-Module.html (http://mikrocontroller-praxis.de/de/Development-Tools/AVR-Mikrocontroller-Module.html)

Kommt nun darauf an wieviel Platz du hast und was es kosten darf. Qualitätsmäßig sieht das hier besser aus.

Mit dem Micro (32U4) habe ich meine eigene Erfahrung gemacht. Das Ding funktioniert, ja. Aber das Problem ist die serielle Schnittstelle (USB). Weil das ding im µC steckt. Was zwar eigentlich top ist, aber ...

Benutzt man die serielle im Sketch, dann startet der nur richtig, wenn man sich auf die serielle verbindet. Also einen Connect gemacht. Wenn man die sowieso permanent dran hat, ist es egal. Wenn man die nur mal so zwischendurch zum debuggen benötigt, dann nervt das gewaltig. Man macht einen Reset/Upload und nichts läuft los, eben bis man sich verbindet. Das sollte man wissen. Als mein Sketch fertig war, mußte ich die serielle im Code entfernen. Standalone. Kann aber nun nicht nebenbei mal anstöpseln und gucken was der so macht.
Title: Re: Timer 2 15 khz frequenz mit variabler duty cycle
Post by: Doc_Arduino on Mar 06, 2016, 01:17 am
Hallo,

heute kam mein Small Meduino Mega2560 R3 Pro Mini an. Optisch astrein verarbeitet. Kein Bauteil sitzt schief und alle sauber verlötet. Blink-Sketch drauf, funktioniert. Kein CH340 Übersetzer, sondern gewohnter 16U2. Wurde sofort erkannt.

Das ist übrigens mein erster Nachbau. Besitze zwei originale Mega 2560 und einen originalen Micro. Nicht das jemand denkt ...   Den Meduino habe ich nur wegen der kleineren Bauform gekauft.