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
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy