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

Duty Cycle Messung, Zykulslänge 10ms, 10Bit Genauigkeit erforderlich Kategorie: Progr. Assembler, TaskingTools, OS (von Draxinger Wolfgang - 3.05.2004 1:14)
Ich nutze:
C-Control II Unit, CC2-Application-Board, eigenes Board, original OS, OSOPT_V2, OSOPT V3.0
Ich stecke im Moment ein wenig in der Klemme:
Ich muss in nächsten Tagen die Software für
ein Sensorsystem vorführen. Leider kommen die
speziellen Platinen erst später. Also wollte ich
in der Zwischenzeit meine CC2 verwenden um die
Sensoren an meine Software zu koppeln. Mit den
Analogen Sensoren klappt das auch hervorragend,
nur habe ich auch Duty Cycles Signale (ADXL202)
mit einem Zyklus von 10ms.

Leider ist das CC2 OS viel zu langsam um solche
Signale erfassen zu können. Also muss ein Assembler-
programm her. Nun kenne ich mich allerdings mit dem
C164 nicht so gut aus. Ich könnte mich sicherlich
innerhalb weniger Tage einarbeiten (Umfangreiche
Kenntnisse der x86-, PowerPC-, Alpha-, ARM- und AVR-
Assembler vorhanden), aber eigentlich brauche ich
die Zeit um meine Usersoftware die auf dem PC laufen
soll fertig zustellen.

Ich wollte daher Nachfragen, ob hier schon jemand
ein fertiges Assemblerprogramm hat, dass DutyCycle
Messungen durchführen kann, bzw, der mir folgenden
C-Code freundlicherweise in ein kleines
Assemblerkonstrukt übersetzen könnte.

// Return the state of all ports in form of a 16 Bit word
extern uint16 read_port_word();

typedef unsigned __int16 uint16;
typedef unsigned int uint;

uint16 measure_duty_cycle(uint port_bit, uint16 base)
{
uint16 a, b;
a=b=0;

if( read_port_word() & ( 1< {
// In this condition we started the
// measurement while the duty cycle
// was somewhere in high state

// Wait until the port state changes to 0
while(read_port_word() & ( 1<
while(! read_port_word() & ( 1< ++a;
while( read_port_word() & ( 1< ++b;
}
else
{
// ... was somewhere in low state

// Wait until the port state changes to 1
while(! read_port_word() & ( 1<
while( read_port_word() & ( 1< ++b;
while(! read_port_word() & ( 1< ++a;

}
return (base*a)/b
}

Wäre echt nett, wenn mir da jemand helfen könnte.

Vielen Dank im Vorraus

Wolfgang Draxinger


    Antwort schreiben


Antworten: