Forum: Mikrocontroller und Digitale Elektronik rechteck


von Stephan H. (herold)


Lesenswert?

ich habe ich habe den timer0 programmiert  und kann  damit verschiedene 
rechteck darstellen über 2 tastern von der EURO_535 platine.ich will 
jetzt mit den selben tastern einflüssen nehmen auf die Puls/Pause zeiten 
ohne die periode zu verändern.weiss jemand wie ich es realiesieren kann?
danke im voraus

von Elektrikser (Gast)


Lesenswert?

Da fehlt einiges, damit der geneigte Forumsuser mitkommt:
EURO_535 lässt auf einen '51er-Controller schließen.
Also:

-Welche Programmiersprache?
-Welchen Timermodus?
-Wie sieht dein Programm aus?

Gruß Elektrikser

von Stephan H. (herold)


Lesenswert?

signed int data Zeit;
signed int data Zeit_2=7600;//normaleweise sollte 10000 aber ich will 
direkt auf 1hz deswegen 7600 lässt die LED blinken jede 10000*50µs = 
0,5sec
signed int data 
Zeit_1[10]={7600,3800,2500,1900,1500,1250,1080,950,830,750};
signed int data Zeit_low;
signed int data Zeit_high;
sbit Taster_1 =0x91;
sbit Taster_2 =0x92;
sbit Taster_3 =0x93;
int a=200; //definition der warte zeit für taster entprellung
int b=20;
int i=0;//zählindex für die Zeit
int c=0;

/*leuchtdioden*/
sbit P3_2 = 0xB2;
sbit P3_4 = 0xB4;
void main (void)
{

     SP= 0x7F;  //stackpointersetzen
     Zeit = Zeit_2; // (zeit)=W_Zeit
     Zeit_low=0;//Led ausgeschaltet
     Zeit_high=Zeit_2;//Led an
     TR0=0;// Timer0 anhalten
     TF0=0; // overflowflag Timer0 löschen
     TMOD=1;//Timer0 einstellen
     TL0=0xCD;
     TH0=0xFF;
     TR0=1;// Timer0 starten
     ET0=1;// Interruptfreigabe
     EX4=1;// taster interrupt am port 1.1 freigeben
     EX5=1;// taster interrupt am port 1.2 freigeben
     EX6=1;
     EAL=1;// Interruptfreigabe

     while(1);
}


  void Timerinto(void) interrupt 1
  {
   TR0=0; // Timer0 anhalten
   TL0=0xCD; //Timer0 neu laden
   TH0=0xFF;
   TR0=1;//Timer0 starten
   Zeit--; //Zeit dekrementieren
   if(Zeit== 0)//wenn (Zeit) ==0
    {
      Zeit= Zeit_high;//(Zeit)=W_Zeit
      P3_2= ~P3_2; //LED_Zustand invertieren
      }//end if
   }


  void Taster1(void) interrupt 11
   {
        EX4=0;//interrupt sperren
        i++;
        Zeit_2=Zeit_1[i];
         if(P3_2)


        a=200;

  while (a!=0)
        {
        b=20;
  while(b!=0)
           {b--;}
           a--;   //insgesamt 1800 zyklen

        }
         c=5;
        while (c!=0)
        {
          if(Taster_1==0)
          {c=5;}
          else
          {c--;}
        }
        EX4=1;

   }

   void Taster2(void) interrupt 12
   {
        EX5=0;//interrupt sperren
        i--;
  Zeit_2=Zeit_1[i];

        a=200;

        while (a!=0)
        {
        b=20;
  while (b!=0)
           {b--;}
           a--;
        }
         c=5;
        while (c!=0)
        {
          if(Taster_2==0)
          {c=5;}
          else
          {c--;}
        }
        EX5=1;//interrupt Freigabe
    }
danke die programmier sprache ist c
ich will in prinzip jetzt 2 modus haben
eine wo ich normale puls pause habe und eine wo ich puls pause 
beienflusse
danke

von Elektrikser (Gast)


Lesenswert?

Normale Puls-Pause? Meinst du damit 50% an, 50% aus?
Im Endeffekt lädst du im Timer-Interrupt Lh0 und Tl0 jeweils mit dem 
nächsten Wert, den du brauchst. Bei 50/50 bleibt der Wert immer gleich.
Willst du Puls und Pause zeitlich verändern, musst du einen anderen Wert 
laden und dir merken, ob du gerade die Pulszeit machst, oder die 
Pausenzeit. Wie du die Werte ausrechnen musst, weißt du?

Erkläre mal genauer, wo dein Problem ist..

von Stephan H. (herold)


Lesenswert?

#include<reg515.h>
#include<stdio.h>


signed int data Zeit;
signed int data Zeit_2=7600;//normaleweise sollte 10000 aber ich will 
direkt auf 1hz deswegen 7600 lässt die LED blinken jede 10000*50µs = 
0,5sec
signed int data 
Zeit_1[10]={7600,3800,2500,1900,1500,1250,1080,950,830,750};
signed int data Zeit_low;
signed int data Zeit_high;
sbit Taster_1 =0x91;
sbit Taster_2 =0x92;
sbit Taster_3 =0x93;
int a=200; //definition der warte zeit für taster entprellung
int b=20;
int i=0;//zählindex für die Zeit
int c=0;

/*leuchtdioden*/
sbit P3_2 = 0xB2;
sbit P3_4 = 0xB4;
void main (void)
{

     SP= 0x7F;  //stackpointersetzen
     Zeit = Zeit_2; // (zeit)=W_Zeit
     Zeit_low=0;//Led ausgeschaltet
     Zeit_high=Zeit_2;//Led an
     TR0=0;// Timer0 anhalten
     TF0=0; // overflowflag Timer0 löschen
     TMOD=1;//Timer0 einstellen
     TL0=0xCD;
     TH0=0xFF;
     TR0=1;// Timer0 starten
     ET0=1;// Interruptfreigabe
     EX4=1;// taster interrupt am port 1.1 freigeben
     EX5=1;// taster interrupt am port 1.2 freigeben
     EX6=1;
     EAL=1;// Interruptfreigabe

     while(1);
}


  void Timerinto(void) interrupt 1
  {
   TR0=0; // Timer0 anhalten
   TL0=0xCD; //Timer0 neu laden
   TH0=0xFF;
   TR0=1;//Timer0 starten
   Zeit--; //Zeit dekrementieren
   if(Zeit== 0)//wenn (Zeit) ==0
    {
      Zeit= Zeit_high;//(Zeit)=W_Zeit
      P3_2= ~P3_2; //LED_Zustand invertieren
      }//end if
   }


  void Taster1(void) interrupt 11
   {
        EX4=0;//interrupt sperren
        i++;
        Zeit_2=Zeit_1[i];
         if(P3_2)


        a=200;

  while (a!=0)
        {
        b=20;
  while(b!=0)
           {b--;}
           a--;   //insgesamt 1800 zyklen

        }
         c=5;
        while (c!=0)
        {
          if(Taster_1==0)
          {c=5;}
          else
          {c--;}
        }
        EX4=1;

   }

   void Taster2(void) interrupt 12
   {
        EX5=0;//interrupt sperren
        i--;
  Zeit_2=Zeit_1[i];

        a=200;

        while (a!=0)
        {
        b=20;
  while (b!=0)
           {b--;}
           a--;
        }
         c=5;
        while (c!=0)
        {
          if(Taster_2==0)
          {c=5;}
          else
          {c--;}
        }
        EX5=1;//interrupt Freigabe
    }

/* void Taster3(void) interrupt 13
    {
    P3_4=1;
    }*/


    void Taster1_1(void) interrupt 11
   {
        EX4=0;//interrupt sperren
        i++;
        Zeit_2=Zeit_high+Zeit_low;
        if(Zeit_2!=0)
        {
           Zeit_low=Zeit_low+100;
           Zeit_high=Zeit_high-100;
           Zeit_2=Zeit_1[i];
        }
        a=200;
        while (a!=0)
        {
        b=20;
  while(b!=0)
           {b--;}
           a--;

        }
         c=5;
        while (c!=0)
        {
          if(Taster_1==0)
          {c=5;}
          else
          {c--;}
        }
        EX4=1;

   }

   void Taster2_2(void) interrupt 12
   {        EX5=0;//interrupt sperren
        i--;
  Zeit_2=Zeit_1[i];

        a=200;

        while (a!=0)
        {
        b=20;
  while (b!=0)
           {b--;}
           a--;
        }
         c=5;
        while (c!=0)
        {
          if(Taster_2==0)
          {c=5;}
          else
          {c--;}
        }
        EX5=1;//interrupt Freigabe
    }


   mit den erste 2 taster oben habe ich genau 50% puls/pause zeiten
und dann will ich jetzt mit denselben tastern 80/20% puls pause 
verhältnisse haben und durch ein 3 taster auswählen wo ich mich befinde 
und das mit 2 taster programm will ich dann einfluss auf die puls pause 
zeiten haben
kann ich sie kurz anrufen bitte?
danke

von Elektrikser (Gast)


Lesenswert?

Als erstes sollte das Puls/Pausenverhältnis programmiert werden. Dazu 
braucht man ein Bit, mit dem man sich merkt, ob man jetzt den Puls oder 
die Pause macht. Dieses Bit wird in der Interrupt-Routine gesetzt bzw. 
zurückgesetzt.

Dann sollte man sich die Werte aufschreiben, die man für die einzelnen 
Verhältnisse benötigt (10%/90%, 20%/80%, usw.) und diese einzeln testen 
und mit dem Oszilloskop messen, ob sie stimmen.

Sollte das funktionieren, geht es an die Programmierung der 
Menü-Tasten...

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.