Go Down

Topic: PWM In, Pulse Out (Read 1 time) previous topic - next topic

J3RE

Ein Rechtecksignal kannst du mithilfe von Interrupts machen.
Bei jedem Interrupt musst du dann den Zustand vom Pin ändern.

Code: [Select]
ISR (TIMER2_COMPA_vect)
{
  PORTB ^= (0x01 << 3); // Pin 3 am PORTB toggelt seinen Zustand bei jedem Interrupt
}


Den Timer musst du abhängig von deinem PPM-Signal konfigurieren. Zu beachten ist dass, das Rechteck-Signal die halbe Frequenz von der Interrupt-Frequenz hat.

Falls du einen UNO hast, kannst du hier lernen wie man die Timer konfiguriert.
https://sites.google.com/site/qeewiki/books/avr-guide/timers-on-the-atmega328

Grüße,
J3RE

erni-berni

Hallo,
hier mal ein Beispiel, wie man einen 16Bit Timer beim Arduino Mega dazu nutzen kann einen 56kHz Rechteck zu erzeugen.
Code: [Select]
// Testprog zur Ansteuerung der Counter Register des Arduino Mega
// ich nutze OC5B an Mega2560 Chip Pin39 (PL4) - dieser Pin geht auf Arduino Mega Pin45

#define PIN_IR 45

void setup() {
  pinMode(PIN_IR, OUTPUT);

  // WGM53:0 = 0100  WGM53 WGM52 WGM51 WFGM50
  // COM5A1:0 = 01   COM5A1 COM5A0
  // CS50 = 1 - no prescaling 16MHz
  // TCCR5A -  COM5A1 COM5A0 COM5B1 COM5B0 COM5C1 COM5C0 WGM51 WGM50
  // TCCR5B -  ICNC5  ICES5  xxxx   WGM53  WGM52  CS52   CS51  CS50

  TCCR5A = 0;
  TCCR5B = 0; 
  TCCR5A = B00010000;
  TCCR5B = B00001001; //no prescalering   WGM53  WWGM52  CS50
  OCR5A = 142; //count to 287 (16MHz/2*(1+142)=56 kHz)
}

void loop() {
}

Go Up