- 3D-Druck Einstieg und Tipps         
Seite 3 von 4 ErsteErste 1234 LetzteLetzte
Ergebnis 21 bis 30 von 31

Thema: fehlerproblem

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

    Powerstation Test
    Wenn er i von Null bis 500 zählt, kommt er bei bei drei und zwei auch nur einmal vorbei.
    Code:
       if (P2<=0x0080)   
    // das klappt nur, wenn niemand sonst in P2 was setzt. das tut aber zwei()
    // daher ist P2 immer größer
    
           P2=P2<<1;   // hier verschiebst du auch das Muster von zwei() mit
       else 
          P2=0x0001;  // und hier würdest du es sogar löschen
    
    // deswegen hab' ich das so gemacht, daß die Sub's jeder ihr eigenes Muster haben, und erst wenn sie fertig geschoben haben, wird es in P2 reingemischt
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  2. #22
    Benutzer Stammmitglied
    Registriert seit
    16.04.2004
    Beiträge
    60
    in dem programm was ich vorher geschrieben habe sind die funktionen 2 und drei kommentare markiert.
    d.h es besteht nur die funktion "erste" und "softdelay"

    was mich aber stört ist dass überhaupt keine reaktion in der simulation zu sehen ist somit wußte ich auch nicht was falsch sein könnte.

    ist es möglich dass P2 in der ersten funktion imnmer den wert vergißt weil es die funktion immer verläßt und somit der wert gelöscht wird

  3. #23
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Vergessen sollt er nix, P2 ist ja ein Ausgaberegister, das verschwind' nicht.

    Eigentlich müßt' er schon bist 500 zählen und dann erste() aufrufen.

    Überprüf mal, ob er i auch wirklich raufzählt und setz dann bei (i == eins)
    einen Breakpoint und laß ihn laufen
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  4. #24
    Benutzer Stammmitglied
    Registriert seit
    16.04.2004
    Beiträge
    60
    die erste funktion habe ich mal hinbekommen

    nur mich interessiert jetzt wirklich wieso es beim ersten programm läuft und beim zweiten nicht.

    mit breakpoints kenne ich mich nicht aus.

    Code:
    #define eins 500
    
    
    void softdelay();
    void erste();
    
    
    static unsigned int patt1=0x0001;
    
    void main(void)
    {
    	DP2= 0xFFFF;
    
    	
    	
    	while(1)	
    	{
    		int i=0;
    
    		for(i=0; i<=1000; i++)
    		{
    		
    			 if(eins%i)
    				erste();
    
    			softdelay();
    		}
    
    	}
    }
    
    void erste(void)
    {
    	 if (patt1<=0x0070)
    	 	patt1= patt1<<1;
    	else 
    		patt1=0x0001;
    
    	P2=patt1;
    }
    
    
    void softdelay()
    {
    	unsigned long j=0;
    
    	for (j=0; j<500000; j++)
    	{};
    }
    2.tes
    Code:
    #define eins 500
    
    
    void softdelay();
    void erste();
    
    
    
    void main(void)
    {
    	DP2= 0xFFFF;
    
    	
    	
    	while(1)	
    	{
    		int i=0;
    
    		for(i=0; i<=1000; i++)
    		{
    		
    			 if(eins%i)
    				erste();
    
    			softdelay();
    		}
    
    	}
    }
    
    void erste(void)
    {
    	 if (P2<=0x0070)
    	 	P2= P2<<1;
    	else 
    		P2=0x0001;
    }
    
    
    void softdelay()
    {
    	unsigned long j=0;
    
    	for (j=0; j<500000; j++)
    	{};
    }

  5. #25
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    das solltest du umdrehen "der rest von i / eins" willst du ja haben
    if ( i % eins)
    Vielleicht kann er P2 garnicht shiften, weil's ein IO-Register ist. Sollte aber auch nicht sein.
    tja ?
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  6. #26
    Benutzer Stammmitglied
    Registriert seit
    16.04.2004
    Beiträge
    60
    hallo

    wie kann ich diese bitfolge am port ausgeben

    0x8000
    0x0000
    0x8000
    0x0000

  7. #27
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    sieht aus wie toggeln mit dem 2^^15 Bit

    Port ^= 0x8000; // toggeln (Bit umdrehen)
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  8. #28
    Benutzer Stammmitglied
    Registriert seit
    16.04.2004
    Beiträge
    60
    jetzt funktioniert das programm

    picnick ich danke dir für deine hilfe

    was macht aber genau diese ^ Funktion

  9. #29
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Genau heißt das Statement
    Port = Port XOR 0x8000
    Exklusiv Oder, ergibt 1, wenn die Operanden verschieden sind
    0 xor 0 ---> 0
    1 xor 0 ---> 1
    0 xor 1 ---> 1
    1 xor 1 ---> 0
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  10. #30
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.802
    '^' steht in C für exclusive-or.

    Eigentlich sollte gar nix gehen, weil "eins % i" beim ersten Durchlauf zu "eins % 0" auswertet, und das ist nicht definiert. Jedenfalls hast du kein definiertes Ergebnis oder läufts auf ne trap.
    Disclaimer: none. Sue me.

Seite 3 von 4 ErsteErste 1234 LetzteLetzte

Berechtigungen

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

LiFePO4 Speicher Test