Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - FAQ - Zum CC1-Forum - Zum CC-Pro-Forum

Wichtig: Bevor Du wegen einem Problem mit der CC2 postest, stelle sicher, daß Du
die neueste OS-Version, die neuseste Compiler-DLL und die neuesten Modulversionen benutzt!
Beachte, daß sich auf der CD zur CC2-Unit/Station auch jetzt noch die ältesten Dateien befinden!
Es gelten folgende Anleitung und Regeln: Regeln CC2Net.de-Forum
Zurück zum Artikel  (Blaue Felder sind Pflichtfelder)


Name:   UserID: 
 E-Mail:
Kategorie
Betreff
Homepage:
Link-Titel:
Link-URL:
Cookie für Name, UserID, E-Mail, Homepage-URL setzen
(Erspart die Neueingabe bei Beiträgen und Antworten)
(Zum Löschen des Cookies hier klicken)
Ich nutze:
C-Control II Unit
C164CI-Controllerboard
C-Control II Station
CCRP5 mit CC2-Unit (Conrad Roboter)
CC2-Application-Board
CC2-StarterBoard
CC2-ReglerBoard
eigenes Board
original OS     OSOPT_V2     OSOPT V3.0 OSOPT V3.1

Kommentar:
Einfügen von HTML im Kommentar:

Link einfügen: <a href="LINKURL" target="_blank">LINKTITEL</a>
Bild einfügen: <img src="BILDURL">
Text formatieren: <b>fetter Text</b>  <i>kursiver Text</i> <u>unterstrichener Text</u>
Kombinationen sind auch möglich z.B.: <b><i>fetter & kursiver Text</i></b>
C2 Quellcode formatieren: <code>Quellcode</code>
ASM Quellcode formatieren: <asm>Quellcode</asm>
(Innerhalb eines Quellcodeabschnitts ist kein html möglich.)
Wichtig: Bitte mache Zeilenumbrüche, bevor Du am rechten Rand des Eingabefeldes ankommst !  

> Hallo! > > Ich möchte das Signal von einem Modellbau Empfänger (3 Kanäle) in Assembler auswerten. > Das Impulslänge liegt zwischen 0.7 n und 2.5 ms. > Momentan löse ich das Problem über polling was aber zu ungenau ist. > > Hier ein Auszug: > > <asm> > ;*************************************************** > ; register mapping > ; r11 =scan counter for channel 1 > ; r12 =scan counter for channel 2 > ; r13 =scan counter for channel 3 > public getPulseLength > > getPulseLength proc far > > push r1 > push r4 > push r5 > push r6 > push r7 > push r11 > push r12 > push r13 > > CALLS OSsegment,POP_R4 > bclr IEN > > mov r5,#0 > mov r6,#0 > mov r7,#0 > ;initialize the pulse length counter for each channel > mov r11,#0 > mov r12,#0 > mov r13,#0 > ;stepchain: > ;0=wait for low > ;1=wait for high > ;2=scan high > ;3=finished > scanLoop: > ;jumptable for ch1 > cmp r5,#0 > jmpr cc_EQ,ch1WaitForLow > cmp r5,#1 > jmpr cc_EQ,ch1WaitForHigh > cmp r5,#2 > jmpr cc_EQ,ch1Scan > cmp r5,#3 > jmpr cc_EQ,ch1End > > jmpr cc_UC,scanFinished ;must NOT happen!! > ch1WaitForLow: > jb P1H.0,ch1End > mov r5,#1 > jmpr cc_UC,ch1End > ch1WaitForHigh: > jnb P1H.0,ch1End > mov r5,#2 > jmpr cc_UC,ch1End > ch1Scan: > add r11,#1 > jb P1H.0,ch1End > mov r5,#3 > ch1End: > ;jumptable for ch2 > cmp r6,#0 > jmpr cc_EQ,ch2WaitForLow > cmp r6,#1 > jmpr cc_EQ,ch2WaitForHigh > cmp r6,#2 > jmpr cc_EQ,ch2Scan > cmp r6,#3 > jmpr cc_EQ,ch2End > > jmpr cc_UC,scanFinished ;must NOT happen!! > ch2WaitForLow: > jb P1H.1,ch2End > mov r6,#1 > jmpr cc_UC,ch2End > ch2WaitForHigh: > jnb P1H.1,ch2End > mov r6,#2 > jmpr cc_UC,ch2End > ch2Scan: > add r12,#1 > jb P1H.1,ch2End > mov r6,#3 > ch2End: > ;jumptable for ch3 > cmp r7,#0 > jmpr cc_EQ,ch3WaitForLow > cmp r7,#1 > jmpr cc_EQ,ch3WaitForHigh > cmp r7,#2 > jmpr cc_EQ,ch3Scan > cmp r7,#3 > jmpr cc_EQ,ch3End > > jmpr cc_UC,scanFinished ;must NOT happen!! > ch3WaitForLow: > jb P1H.3,ch3End > mov r7,#1 > jmpr cc_UC,ch3End > ch3WaitForHigh: > jnb P1H.3,ch3End > mov r7,#2 > jmpr cc_UC,ch3End > ch3Scan: > add r13,#1 > jb P1H.3,ch3End > mov r7,#3 > ch3End: > ;check if all channels are finished > cmp r5,#3 > jmpr cc_NE,scanLoop > cmp r6,#3 > jmpr cc_NE,scanLoop > cmp r7,#3 > jmpr cc_NE,scanLoop > scanFinished: > > </asm> > > Diese Lösung ist ungenau und verbrät wertvolle CPU, daher muss ich das über Interrupts lösen. > Meine Frage ist nun wie ich auf steigende und fallende Flanke von P1H.0-3 per Interrupt reagieren kann. > Dabei soll auch die Zeit von einem hochauflösenden Timer erfasst werden. > Gleichzeitig muss auch die Ausgabe vom PWM Signale an allen 3 PWM ports zur verfügung stehen. > Ich hoffe die Hardware kann das... > > Ich würde also um folgenden Beispiel Code bitten: > Konfiguration der Interrupts auf steigende und fallende Flanke. > Starten eines Hochauflösenden Timers. > Reaktion auf den Interrupt in Assembler und auslesen vom Timer. > > > > Danach würde ich in C2 die Daten aus 0FD02 - 0FD07 auslesen ,mit dem Analogwert > von einem SMM Element mischen und an die Servos per PWM ausgeben. > Es soll in einem Modellhubschrauber die Paddelstange ersetzt werden. > Ein erster Startversuch heute hat gezeigt dass das System zu langsam und ungenau ist, > was vom pollen kommt. > > Danke, lg pauli!
Dateianhang: (.gif, .png., .jpg, .zip, .rar)
max. 256kB
max. 256kB