Arduino Pulsgenerator
hallo,
ich bin im moment dran einen pulsgenerator mit dem ardunio due zu programmieren.
ziel ist es pulse mit 1 mhz via serial monitor zu steuern.
nun habe ich folgendes problem. ich kann eine abfolge von zeichen in den serial monitor eingeben und entsprechende impulse erzeugen, allerdings entstehen pausen zwischen den pulsen welche viel länger sind als die eigentlichen impulse.

nun weiß ich nicht wie ich diese pausen eliminieren kann
ich bin im moment dran einen pulsgenerator mit dem ardunio due zu programmieren.
ziel ist es pulse mit 1 mhz via serial monitor zu steuern.
nun habe ich folgendes problem. ich kann eine abfolge von zeichen in den serial monitor eingeben und entsprechende impulse erzeugen, allerdings entstehen pausen zwischen den pulsen welche viel länger sind als die eigentlichen impulse.

nun weiß ich nicht wie ich diese pausen eliminieren kann
code: [select]
#define nop __asm__ __volatile__ ("nop\n\t");
int pulse = 0 ;
long = 0;
int z =0;
int l =0;
void setup() {
pinmode(12, output);
pinmode(14, output);
pinmode(15, output);
serial.begin(115200);
reg_piod_ower = 0xffff;
}
void loop() {
while (serial.available() > 0) {
int pulse = serial.read();
switch (pulse) {
case '0':
//for(long i; <100; i++){
reg_piod_odsr = 100110000;
reg_piod_odsr = 100110000;
reg_piod_odsr = 100110000;
reg_piod_odsr = 100110000;
reg_piod_odsr = 100110000;
reg_piod_odsr = 100110000;
reg_piod_odsr = 100110000;
reg_piod_odsr = 100110000;
reg_piod_odsr = 100110000;
reg_piod_odsr = 100110000;
reg_piod_odsr = 100110000;
reg_piod_odsr = 100110000;
reg_piod_odsr = 100110000;
nop
nop
nop
reg_piod_odsr = 000000000;
reg_piod_odsr = 000000000;
reg_piod_odsr = 000000000;
reg_piod_odsr = 000000000;
reg_piod_odsr = 000000000;
reg_piod_odsr = 000000000;
reg_piod_odsr = 000000000;
reg_piod_odsr = 000000000;
reg_piod_odsr = 000000000;
reg_piod_odsr = 000000000;
reg_piod_odsr = 000000000;
reg_piod_odsr = 000000000;
reg_piod_odsr = 000000000;
reg_piod_odsr = 000000000;
// };
i=0;
serial.print("0");
break;
case '1':
// for(int z; z <100 ; z++){
reg_piod_odsr = 100100000;
reg_piod_odsr = 100100000;
reg_piod_odsr = 100100000;
reg_piod_odsr = 100100000;
reg_piod_odsr = 100100000;
reg_piod_odsr = 100100000;
reg_piod_odsr = 100100000;
reg_piod_odsr = 100100000;
reg_piod_odsr = 100100000;
reg_piod_odsr = 100100000;
reg_piod_odsr = 100100000;
reg_piod_odsr = 100100000;
reg_piod_odsr = 100100000;
reg_piod_odsr = 100100000;
reg_piod_odsr = 100100000;
reg_piod_odsr = 100100000;
reg_piod_odsr = 100100000;
reg_piod_odsr = 100100000;
reg_piod_odsr = 100100000;
reg_piod_odsr = 100100000;
reg_piod_odsr = 100100000;
reg_piod_odsr = 100100000;
reg_piod_odsr = 100100000;
reg_piod_odsr = 100100000;
reg_piod_odsr = 100100000;
reg_piod_odsr = 100100000;
reg_piod_odsr = 100100000;
reg_piod_odsr = 100100000;
nop
nop
nop
reg_piod_odsr = 000000000;
reg_piod_odsr = 000000000;
reg_piod_odsr = 000000000;
reg_piod_odsr = 000000000;
reg_piod_odsr = 000000000;
reg_piod_odsr = 000000000;
reg_piod_odsr = 000000000;
reg_piod_odsr = 000000000;
reg_piod_odsr = 000000000;
reg_piod_odsr = 000000000;
reg_piod_odsr = 000000000;
reg_piod_odsr = 000000000;
reg_piod_odsr = 000000000;
reg_piod_odsr = 000000000;
// };
z =0;
serial.print("1");
break;
case '2':
// for(int l; l <100; l++){
reg_piod_odsr = 100010000;
reg_piod_odsr = 100010000;
reg_piod_odsr = 100010000;
reg_piod_odsr = 100010000;
reg_piod_odsr = 100010000;
reg_piod_odsr = 100010000;
reg_piod_odsr = 100010000;
reg_piod_odsr = 100010000;
reg_piod_odsr = 100010000;
reg_piod_odsr = 100010000;
reg_piod_odsr = 100010000;
reg_piod_odsr = 100010000;
reg_piod_odsr = 100010000;
reg_piod_odsr = 100010000;
reg_piod_odsr = 100010000;
reg_piod_odsr = 100010000;
reg_piod_odsr = 100010000;
reg_piod_odsr = 100010000;
nop
nop
nop
reg_piod_odsr = 000000000;
reg_piod_odsr = 000000000;
reg_piod_odsr = 000000000;
reg_piod_odsr = 000000000;
reg_piod_odsr = 000000000;
reg_piod_odsr = 000000000;
reg_piod_odsr = 000000000;
reg_piod_odsr = 000000000;
reg_piod_odsr = 000000000;
reg_piod_odsr = 000000000;
reg_piod_odsr = 000000000;
reg_piod_odsr = 000000000;
reg_piod_odsr = 000000000;
reg_piod_odsr = 000000000;
// };
l=0;
serial.print("2");
break;
default:
serial.println("bitte geben sie ein pulssignal ein, welches aus 2, 0, 1 besteht!") ;
}
}
}
ziel ist es pulse mit 1 mhz via serial monitor zu steuern.
nun habe ich folgendes problem. ich kann eine abfolge von zeichen in den serial monitor eingeben und entsprechende impulse erzeugen, allerdings entstehen pausen zwischen den pulsen welche viel länger sind als die eigentlichen impulse.
bei 115200 baud kannst du maximal 11520 zeichen pro sekunde über die serielle schnittstelle senden. der zeitliche mindestabstand zwischen zwei gesendeten (und auch empfangenen) zeichen beträgt also:
1/11520 s = ca. 0,0000868 s = ca. 86,8 µs,
so wie du es mit den über serial gesendeten zeichen @115200 baud machst, kann ein nachfolgender impuls erst ca. knappe 90µs nach dem vorhergehenden erzeugt werden, weil der zeitliche abstand zwischen zwei zeichen @115200 baud dieser zeit entspricht.
du mußt auf zeitlich kürzere zeitabstände kommen, die du verarbeiten möchtest?
wenn es nur um die zeit zwischen zwei zeichen auf serial geht, könntest du mit baudraten von 250000 oder 500000 noch etwas herausholen. arduino-boards (auch die mit 8-bit controller) unterstützen baudraden bis 500000 baud ebenso wie gängige pcs. allerdings unterstützt der "serielle monitor" der arduino-software nur max. 115200, aber das ist nicht die maximal mögliche baudrate.
Arduino Forum > International > Deutsch (Moderator: uwefed) > Arduino Pulsgenerator
arduino
Comments
Post a Comment