- Labornetzteil AliExpress         
Seite 2 von 4 ErsteErste 1234 LetzteLetzte
Ergebnis 11 bis 20 von 31

Thema: fehlerproblem

  1. #11
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Anzeige

    Praxistest und DIY Projekte
    Was ist das P2 eigentlich ? Du verwendest es, als hätte es 16 Bit ?
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  2. #12
    Benutzer Stammmitglied
    Registriert seit
    16.04.2004
    Beiträge
    60
    P2 => Port2

    und es hat auch 16bit

  3. #13
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Schau, schau, sieh an.
    Und was meinst du mit "gleichzeitig" ? die einen 8 Bit sollen ihre Lauflichter gleichzeitig (und unabhängig) mit den anderen 8 Bit machen ?
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  4. #14
    Benutzer Stammmitglied
    Registriert seit
    16.04.2004
    Beiträge
    60
    hallo

    was meinst du mit schau schau sieh an.

    der code hat drei funktionen

    1. lauflicht vorwärts
    2. lauflicht vorwärts und rückwärts mit
    3. led blinken

    im programm läuft es so ab dass zuerst die erste dann die zweite und dann die dritte funktion ausgeführt wird.

    jedoch sollen die funktionen unäbhängig von den anderen ausgeführt werden d.h. alle drei funktionen gleichzeitig jede für sich

  5. #15
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    19.04.2005
    Ort
    Minden
    Alter
    39
    Beiträge
    227
    Soweit ich informiert bin ist das nicht möglich.
    Du hast nur einen Prozessor und der kann immer nur eine Sache gleichzeitig machen.

    Du kannst also die Funktionen nur nacheinander ablaufen lassen.

    Aber das geht ja so rasend schnell das du es gar nicht mitbekommst. Wo liegt denn das Problem wenn sie nacheinander ablaufen?

    Also wenn ich mir die Auflistung so anschaue, dann frag ich mich warum die gleichzeitig ablaufen sollen? gleichzeiting lauflicht vorwärts, lauflicht rückwärts und das ganze noch blinkend. willst du nen zufallsgenrator bauen?

    gruß ceekay

  6. #16
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Gut, versuch dich mal damit.
    Alle drei Funktionen sind ineinander gemischt, der Effekt ist pseudo-gleichzeitig. Daher gibt es 3 "i" und 3 zeit-Counter und getrennte "P2", damit sie sich nicht in die Quere kommen.
    Ich kann's nicht testen, daher kann schon sein, daß irgendwas nicht gleich funzt. In diesem Fall hast du aber am meisten davon, wenn du versucht, das Ganze zu verstehen und dann selbst daran rumzubasteln.
    Code:
    #include <reg167.h> 
    
    #define eins 2000 
    #define zwei 100 
    #define drei 50 
    
    void softdelay (); 
    void erstes(); 
    void zweites(); 
    void drittes(); 
    
    	sbit port15= P2^15; 
    
    
    static unsigned int i_1;
    static unsigned int Cnt_1;
    static unsigned int Patt_1;
    
    static unsigned int i_2; 
    static unsigned int Cnt_2;
    static unsigned int Patt_2;
    
    static unsigned int i_3; 
    static unsigned int Cnt_3;
    
    void main(void) 
    {    
    	i_1 	= 0;
    	i_2 	= 0; 
    	i_3 	= 0;
       	DP2	= 0xFFFF; 
    	Patt_1 	=  0x0001; 
    	Patt_2 	=  0x0100; 
       	port15 	= 1; 
    	Cnt_1	= eins;
    	Cnt_2	= zwei;	
    	Cnt_3	= drei;	
    
       	while(1) 
       	{ 
    		if (Cnt_1 > 0)
    			Cnt_1--;
    		else
    		{
    	   		erstes(); 
    			Cnt_1	= eins;
    		}
    		if (Cnt_2 > 0)
    			Cnt_2--;
    		else
    		{
    	   		zweiter(); 
    			Cnt_2	= zwei;
    		}
    		if (Cnt_3 > 0)
    			Cnt_3--;
    		else
    		{
    	   		drittes(); 
    			Cnt_3	= drei;
    		}
    		softdelay();
       	} 
    } 
    ;----------------------------------------------
    void erstes (void) 
    { 
    	i_1++;
    	Patt_1 	<<=  1; 
    	if (i_1 >= 8)
    	{	
    		i_1 	= 0;
    		Patt_1 	=  0x0001; 
    	}  
          	P2 &= 0xFF00; 
          	P2 |= Patt_1;
    } 
    ;----------------------------------------------
    void zweites(void) 
    { 
    	i_2++;
    	if (i_2 >= 12)
    	{
    		i_2 	= 0;
    		Patt_2 	=  0x0100; 
    	}
    	else
    	{
    		if (i_2 < 6)
     			Patt_2 	<<=  1; 
    		else
     			Patt_2 	>>=  1; 
    	}
          	P2 &= 0x00FF; 
          	P2 |= Patt_2;
    } 
    ;----------------------------------------------
    void drittes(void) 
    { 
       port15 ^=  1; 
    } 
    ;----------------------------------------------
    void softdelay() 
    { 
          for (j=0; j <2000; j++)    {}; 
    }
    Edit: "schau, schau", weil wir es hier meistens mit 8-Bit Geräten zu tun haben.
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  7. #17
    Benutzer Stammmitglied
    Registriert seit
    16.04.2004
    Beiträge
    60
    hallo picnic

    ich habe versucht dein programm zu simulieren. es waren einige fehler dabei aber die habe ich gefunden und ausgebessert.

    und ich gratuliere dir es funktioniert mit einem kleinen fehler.

    jedoch so ganz verstehe ich deinen code nicht.

  8. #18
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    In der while(1)-hauptschleife werden nacheinander die drei Delayzähler runtergezählt, die sind ja am Anfang 2000, 100 u. 50
    Solange in denen was drin steht, wird nur EINMAL Softdelay angesprungen.
    Der mit 50 wird als erstes Null kriegen. In diesem Fall rufen wir erstes() auf und setzen den Zähler wieder auf 50 fürs nächste mal.
    Das passiert so bei allen drei Zählern.

    erstes()
    der erhöht i_1 und schiebt Patt_1 nach links.
    ist (i_1 > 7), setzt er i_1 wieder auf Null und erneuert Patt_1
    Jedesmal aber mischt er Patt_1 in P2:
    P2 &= 0xFF00; löschen des gesamten Bytes in P2
    P2 |= Patt_1; neusetzen aktueller Wert

    zweites()
    ist ganz ähnlich, nur schiebt er Patt_2 bei i_2: 0 -> 6 nach links, bei i_2: 7 -> 11 nach rechst. Bei zwölf alles wieder neu.

    drittes()
    der schaltet das bit in Port 15 einfach immer um (toggle) , einmal 1 und einmal 0

    Tut mit leid, wenn ein Fehler drin ist
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  9. #19
    Benutzer Stammmitglied
    Registriert seit
    16.04.2004
    Beiträge
    60
    hallo

    ich habe mir das programm angeschaut und versucht es auf eine andere art zu schreiben

    es funktioniert aber überhaupt nicht, kannst du mir vielleicht sagen was an der idee falsch ist

    was bedeuten in deinem programm die patt variablen

    und in der softdelay funktion ist eine warnung und ich weiß nicht was das ist
    es zeigt auf die for schleife

    "LAUFLICHT.C(23: warning C137: constant in condition expression "

    danke auch für deine hilfe

    Code:
    #define eins 500
    #define zwei 250	
    #define drei 125
    
    void softdelay();
    void erste();
    void zweite();
    void dritte();
    
    sbit port15= P2^15;
    
    
    void main(void)
    {
    	DP2= 0xFFFF;
    	P2=0x0001;
    	
    	
    	while(1)	
    	{
    		int i=0;
    
    		for(i=0; i<=eins; i++)
    		{
    			if(i==drei)
    				dritte();
    			else if(i==zwei)
    				zweite();
    			else if(i==eins)
    				erste();
    
    			softdelay();
    		}
    
    	}
    }
    
    void erste(void)
    {
    	 if (P2<=0x0080)
    	 	P2=P2<<1;
    	else 
    		P2=0x0001;
    }
    
    
    void softdelay()
    {
    	unsigned int j=0;
    
    	for (j=0; j=2000; j++)
    	{};
    }

  10. #20
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    for (j=0; j=2000; j++)
    Das soll heissen
    for (j=0; j < 2000; j++)

    das andere schau ich mir jetzt an
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

Seite 2 von 4 ErsteErste 1234 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

fchao-Sinus-Wechselrichter AliExpress