mikrocontroller.net

Forum: Compiler & IDEs PPM Signal einlesen


Autor: Christoph (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
ich will von meinem Modellbauentpfänger mit meinem Mega32 auswerten. 
Dazu hab ich jetzt schon das Summensignal nach außen geführt und per OP 
auf 5V Pegel verstärkt. Dieses Signal habe ich an den ICP-Pin des AVRs 
gehängt.
Jetzt häng ich grad dran, wie ich das jetzt am besten auslese. Habt ihr 
da vielleicht ein paar Tips für mich? Ich brauch keinen Code, nur ein 
paar Denkanstöße, wie ich da jetzt am besten vorgehe!
Danke,
Christoph

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn du dir das asmdemo von avr-libc anguckst, dort habe ich genau
sowas mal gemacht.

Autor: Christoph (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bei dem Besipiel liest du aber nur einen servo kanal ein und nicht alle 
zusammengefasst als Summensignal, oder?
Mein Problem ist, wie ich die acht aufeinander folgenden Pulse mit Hilfe 
des Reset-signals den einzelnen Servor zuordne und zum Beispiel über 
einen Port am µC ausgebe.

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du wolltest doch aber auch noch was selbst tun dabei, oder? ;-)

Du musst dazu lediglich die ,,große'' Lücke entdecken, mit der die
Kanalblöcke voneinander getrennt werden.  Wenn du die zum ersten Mal
hast kannst du beginnen, die eingelesenen Werte auf N Kanäle
(typischerweise in einem Array, dessen Index hochgezählt wird)
abzuspeichern.

Für den ATmega32 kannst du natürlich auf den ganzen Assemblerkram
dabei verzichten und dir die reine C-Lösung, die als Beispiel für
den ATtiny45 drin ist, als Ausgangspunkt nehmen.

Meine Variante ist übrigens P*W*M, nicht P*P*M.  Das musst du also
ggf. anpassen.

Autor: Mule (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also ich hab da jetzt nen bissl rumprobiert und wollt jetzt mal fragen, 
ob das so in der Richtung richtig ist (eigentlich das erste mal, dass 
ich was mit timern und interrupts mache)...

#include <avr/io.h>
#include <avr/inttypes.h>
#include <avr/delay2.h>
#include <avr/i2cmaster.h>
#include <avr/interrupt.h>

int puls=0, i=0, z=0;
int PPM[8]={0,0,0,0,0,0,0};

ISR(TIMER0_OVF_vect){
z++;
}


ISR(TIMER1_CAPT_vect) {
  puls = ICR1;
  if (puls>=8000) {          //Resetsignal
    i=0;
    TCNT1=0;
    }

  else {
    PPM[i]=puls;
    TCNT1=0;
    i++;
    }
}

int main(void)
{
  DDRA = 0xff;             //Motoren ausgang
  PORTA |= (1<<DDA4);          //enablen
  PORTA |= (1<<DDA5);          //enablen
  sei();               //interrupt ein
  uart_init(UART_BAUD_SELECT(UART_BAUD_RATE,F_CPU));
  TCCR1B = (1<<ICES1)|(1<<CS11);     //steigende Flanke; Prescaler 8 -> 
2000000Hz -> 8 Zähler entspricht 1 Prozent Servoweg (4µs)
  TIMSK = (1<<TICIE1)|(1<<TOIE0);   //capture event interrupt; Timer 
Overflow Interrupt
  TCCR0 = (1<<CS00)|(1<<CS02);     //Timer0; Prescaler 1024

...

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.