Forum: PC-Programmierung 50 us Highpegel alle 12 ms erzuegen


von mike (Gast)


Lesenswert?

Hallo Freunde,

wie könnte ich einen Highpegel was 50us dauert alle 12ms erzeugen?

ungefähr so:

...__----______________________---______________________---__...
   ->50us<-
       ->      12ms            <-

Gruß
Mike

von Christoph db1uq K. (christoph_kessler)


Lesenswert?

einen Quarztakt von 20 kHz mit einem 74HC40103 durch 240 teilen lassen, 
der Ausgang "TC" ist allerdings noch invers zum gesuchten, 50usec lang 
low, den Rest high, also noch einen Inverter nachschalten.

von mike (Gast)


Lesenswert?

mit einem Timer wird alle 12 ms ein Interrupt ausgelöst.
in der Funktion legen ich den Pin auf High und kann dann viele NOPs 
einfügen bis 50us erreicht wird, danach Pin wirder auf Low.

aber das ist nicht Sinn der Sache

Wie kann ich so machen, dass der Pin 50us auf High geht und dann auf 
Low?

von Christoph db1uq K. (christoph_kessler)


Angehängte Dateien:

Lesenswert?

Oder durch 241 , ich sehe grade, die 12 msec sind ohne die 50 usec 
gemeint.

von Christian R. (supachris)


Lesenswert?

Geht es jetzt um einen Microcontroller oder um einen PC? Mit dem PC 
bekommt man das ja kaum so genau hin. Mit einem µC und Timer + PWM Block 
kein Thema. Sogar ohne CPU-Beteiligung dann.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Das ließe sich mit etwas Hardware erledigen.

Erzeuge ein Rechtecksignal mit 12 msec Periodendauer (also etwa 83 Hz) 
und steuere mit dessen steigender (oder fallender) Flanke ein Monoflop 
wie 74xx221 an, das so konfiguriert ist, daß es 50µs-Impulse erzeugt.

von mike (Gast)


Lesenswert?

@ Christoph Kessler

danke für die schnelle Antwort.

Ich will das ganze über ein Mikrocontroller programmieren.

von mike (Gast)


Lesenswert?

@ Christian R.

kannst Du "Timer + PWM Block" genauer erklären?

Was macht PWM Block?

Thx

von Christian R. (supachris)


Lesenswert?

mike wrote:
> @ Christian R.
>
> kannst Du "Timer + PWM Block" genauer erklären?
>

Da ich nicht mal weiß, welchen µC du verwendest: Nein.
Schau ins Manual deines Microcontrollers. Prinzipiell musst du einen 
Timer laufen lassen, und bei bestimmten Zählerständen einen Port-Pin 
setzen/rücksetzen lassen. Zumindest beim MSP430 ist das mit 3 Register 
schreiben erledigt, den Rest macht die Timer-Hardware selbstständig.

von mike (Gast)


Lesenswert?

ok meine Lösung:

2 Timer benutzt
- 1. Timer 12ms
- 2. Timer 50 us

extern bool i;

void main(void)
{

init(); //Ein-  Ausgänge  Ports initialisieren

for(;;)
{
  i=0;

  Timer1_Aktivieren(); //12ms

  Pin_auf_HIGH_Setzen();

  Timer2_Aktivieren(); //50 us

  while(i==0)
  {
   //12 ms nichts tun, danach i=1
  }
}

//alle 12 ms
void Timer1(void)
{
  Timer1_Aktivieren();
  i=1;
}

//alle 50 us
void Timer2(void)
{
  Timer2_Deaktivieren();
  Pin_auf_LOW_Setzen();
}

von ... (Gast)


Lesenswert?

Also so wird das nichts! Btw. wozu gibts hier im Forum eigentlich 
entsprechende Tags zum Formatieren von Quellcode?!

Um aber auch was Konstuktives beizusteuern, so wird eher ein Schuh 
draus:
1
void timer1_interrupt(void)
2
{
3
  static uint8_t c = 0;
4
  
5
  c++;
6
  if(c == 240) {
7
    c = 0;
8
    set_pin_high();
9
  } else if(c == 1) {
10
    set_pin_low();
11
  }
12
}
13
14
void main(void)
15
{
16
  init();          // Ports initialisieren
17
  timer1_init();   // 50 us Interrupt
18
  sei();           // Interrupts freigeben
19
  do {
20
    sleep();       // bis zum nächsten Interrupt schlafen
21
  } while(1);
22
}
...

von ... (Gast)


Lesenswert?

... oder komplett in Hardware:
1
void main(void)
2
{
3
  init();          // Ports initialisieren
4
  timer1_init();   // PWM mit knapp 83Hz und 1/241 duty cycle
5
  sleep();         // für immer schlafen
6
}

CU

PS: Über welche µC reden wir hier eigentlich?

PPS: Bitte im ersten Bsp. die 240 dur 241 ersetzen!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.